Skip to content

feat(web-platform): Implement __ElementAnimate PAPI#2329

Merged
Huxpro merged 7 commits intomainfrom
Huxpro/fix-background-only-new
Mar 17, 2026
Merged

feat(web-platform): Implement __ElementAnimate PAPI#2329
Huxpro merged 7 commits intomainfrom
Huxpro/fix-background-only-new

Conversation

@Huxpro
Copy link
Copy Markdown
Collaborator

@Huxpro Huxpro commented Mar 11, 2026

Summary

Implements __ElementAnimate PAPI for the web platform layer, enabling Web Animations API support in the REPL and web environment. Previously, this function was undefined causing ReferenceError when worklet code called animations.

Changes

  • web-constants: Added ElementAnimatePAPI type to MainThreadGlobalThis
  • web-mainthread-apis: Implemented __ElementAnimate with animation map tracking and timing option mapping (Lynx → Web Animations API)
  • testing-environment: Added __ElementAnimate implementation with state tracking for unit tests
  • Tests: 5 new test cases covering all animation operations (START/PLAY/PAUSE/CANCEL/FINISH)
  • REPL example: Interactive demo showing element animation with pause/play/cancel/restart controls

Verification

✅ Rebased onto main with upstream REPL site
✅ Added comprehensive unit tests (testing-environment)
✅ Created manual UI test in REPL at http://localhost:3003/
✅ All pre-commit hooks passed (eslint, biome, dprint)

Summary by CodeRabbit

  • New Features

    • Element animation support: start, pause, play, cancel, finish for named element animations; public APIs exposed for driving these operations.
    • New interactive "Element Animate" sample: pulsing element, playback status label, control buttons, a render entry point and a simple worklet-style router for demo controls.
  • Tests

    • Unit and end-to-end tests covering the full animation lifecycle and state transitions.
  • Documentation

    • Changeset entry documenting the animation PAPI addition.

- Add ElementAnimatePAPI type to web-constants MainThreadGlobalThis
- Implement __ElementAnimate in createMainThreadGlobalThis with animation map tracking
- Add mapTimingOptions() to convert Lynx animation timing to Web Animations API
- Add __ElementAnimate to testing-environment ElementPAPI with state tracking
- Add comprehensive unit tests for all animation operations (START/PLAY/PAUSE/CANCEL/FINISH)
- Add REPL example demonstrating element animation with UI controls

Handles all animation operations: START (keyframes + options), PLAY, PAUSE, CANCEL, FINISH.
Copilot AI review requested due to automatic review settings March 11, 2026 06:21
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Mar 11, 2026

🦋 Changeset detected

Latest commit: 12264f4

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 15 packages
Name Type
@lynx-js/web-constants Patch
@lynx-js/testing-environment Patch
@lynx-js/web-core-server Patch
@lynx-js/web-core Patch
@lynx-js/web-mainthread-apis Patch
@lynx-js/web-worker-runtime Patch
upgrade-rspeedy Patch
@lynx-js/web-rsbuild-server-middleware Patch
@lynx-js/web-worker-rpc Patch
@lynx-js/rspeedy Patch
@lynx-js/web-core-wasm Patch
create-rspeedy Patch
@lynx-js/react-rsbuild-plugin Patch
@lynx-js/template-webpack-plugin Patch
@lynx-js/react-alias-rsbuild-plugin Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 11, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 7a7992ca-f13d-4d69-9130-a75b7047fccf

📥 Commits

Reviewing files that changed from the base of the PR and between e7a709a and c11128f.

📒 Files selected for processing (3)
  • packages/web-platform/web-core-wasm/ts/client/mainthread/elementAPIs/createElementAPI.ts
  • packages/web-platform/web-core-wasm/ts/server/elementAPIs/createElementAPI.ts
  • packages/web-platform/web-core-wasm/ts/types/IElementPAPI.ts

📝 Walkthrough

Walkthrough

Adds element-level animation support via a new __ElementAnimate PAPI: main-thread Web Animations implementation and wiring, testing-environment FSM and animationMap, unit and E2E tests, a REPL example UI, and a changeset entry.

Changes

Cohort / File(s) Summary
REPL Example & Registration
packages/repl/src/examples/interactivity-element-animate/main-thread.js, packages/repl/src/samples.ts
New interactive example (renderPage) that demonstrates element animations and registers an "Element Animate" sample.
Main-thread Global APIs
packages/web-platform/web-mainthread-apis/ts/createMainThreadGlobalThis.ts, packages/web-platform/web-constants/src/types/MainThreadGlobalThis.ts
Added __ElementAnimate to the main-thread surface with START/PLAY/PAUSE/CANCEL/FINISH handling, animationMap, timing-options mapping, and exported ElementAnimatePAPI type.
Web-core WASM Client APIs
packages/web-platform/web-core-wasm/ts/client/mainthread/elementAPIs/createElementAPI.ts
Added __ElementAnimate implementation on element APIs, mapping options to Web Animations and managing per-element named animations.
Web-core WASM Server Stub
packages/web-platform/web-core-wasm/ts/server/elementAPIs/createElementAPI.ts
Added a no-op __ElementAnimate entry to the server/globalThis API surface.
Testing Environment: Implementation, Tests & API
packages/testing-library/testing-environment/src/lynx/ElementPAPI.ts, packages/testing-library/testing-environment/src/__tests__/element-papi.test.js, packages/testing-library/testing-environment/etc/testing-environment.api.md
Added animationMap to ElementTree, implemented __ElementAnimate FSM (START/PLAY/PAUSE/CANCEL/FINISH), added unit tests exercising lifecycle transitions, and updated API doc.
E2E Tests
packages/web-platform/web-core-wasm-e2e/tests/web-core.test.ts
Added end-to-end tests covering animation lifecycle and replace-on-START behavior (skips on Firefox).
Changeset
.changeset/element-animate-papi.md
Added changeset documenting the new animation PAPI and dependency bumps.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • PupilTong
  • Sherry-hue
  • colinaaa

Poem

🐰 I stitched a pulse with tiny hops,
Buttons to pause, to play, to stop.
Named animations bound and kept,
I nudge them, watch them dance and pep.
A carrot cheer for every stop. 🥕✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: implementing the __ElementAnimate PAPI for the web platform, which is the core objective across multiple files and packages.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch Huxpro/fix-background-only-new
📝 Coding Plan
  • Generate coding plan for human review comments

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov
Copy link
Copy Markdown

codecov Bot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Implements the __ElementAnimate PAPI for the web platform layer to bridge Lynx worklet animation calls to the browser’s Web Animations API, and adds a testing-environment implementation plus REPL demo coverage.

Changes:

  • Added ElementAnimatePAPI to the main-thread globals type surface (MainThreadGlobalThis).
  • Implemented __ElementAnimate in the web main-thread global with timing-option mapping and animation instance tracking.
  • Added testing-environment behavior + unit tests and a new REPL sample demonstrating pause/play/cancel/restart.

Reviewed changes

Copilot reviewed 6 out of 7 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
pnpm-lock.yaml Lockfile updates (notably Rsbuild peer resolutions).
packages/web-platform/web-mainthread-apis/ts/createMainThreadGlobalThis.ts Adds __ElementAnimate implementation and timing option mapping.
packages/web-platform/web-constants/src/types/MainThreadGlobalThis.ts Exposes __ElementAnimate on MainThreadGlobalThis typings.
packages/testing-library/testing-environment/src/lynx/ElementPAPI.ts Adds testing-environment __ElementAnimate state tracking.
packages/testing-library/testing-environment/src/tests/element-papi.test.js Adds unit tests for START/PLAY/PAUSE/CANCEL/FINISH operations.
packages/repl/src/samples.ts Registers a new “Element Animate” REPL sample.
packages/repl/src/examples/interactivity-element-animate/main-thread.js New interactive demo for the __ElementAnimate bridge.
Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +831 to +836
case AnimationOperation.CANCEL:
animationMap.get(name)?.cancel();
break;
case AnimationOperation.FINISH:
animationMap.get(name)?.finish();
break;
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CANCEL calls animation.cancel() but does not remove the entry from animationMap, leaving a stale reference and causing the map to grow unbounded over time. Delete the map entry after cancelling (and consider also removing entries on finish/onfinish to avoid leaks when animations end naturally).

Copilot uses AI. Check for mistakes.
Comment on lines +331 to +340
export type ElementAnimatePAPI = (
element: HTMLElement,
args:
| [
operation: number,
name: string,
keyframes: Record<string, string | number>[],
options?: Record<string, string | number>,
]
| [operation: number, name: string],
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ElementAnimatePAPI currently uses operation: number for both tuple variants, which prevents TypeScript from narrowing args based on the operation and makes invalid operation values type-check. Consider using the shared AnimationOperation enum (and a discriminated union keyed on specific enum members) so callers and implementations get proper type safety.

Suggested change
export type ElementAnimatePAPI = (
element: HTMLElement,
args:
| [
operation: number,
name: string,
keyframes: Record<string, string | number>[],
options?: Record<string, string | number>,
]
| [operation: number, name: string],
export enum AnimationOperation {
Start = 0,
Cancel = 1,
}
export type ElementAnimatePAPI = (
element: HTMLElement,
args:
| [
operation: AnimationOperation.Start,
name: string,
keyframes: Record<string, string | number>[],
options?: Record<string, string | number>,
]
| [operation: AnimationOperation.Cancel, name: string],

Copilot uses AI. Check for mistakes.
Comment on lines +431 to +463
switch (operation) {
case 0 /* START */: {
const keyframes = args[2];
const options = args[3];
this.animationMap.set(name, {
element,
state: 'running',
keyframes,
options,
});
break;
}
case 1 /* PLAY */: {
const anim = this.animationMap.get(name);
if (anim) anim.state = 'running';
break;
}
case 2 /* PAUSE */: {
const anim = this.animationMap.get(name);
if (anim) anim.state = 'paused';
break;
}
case 3 /* CANCEL */: {
this.animationMap.delete(name);
break;
}
case 4 /* FINISH */: {
const anim = this.animationMap.get(name);
if (anim) anim.state = 'finished';
break;
}
}
}
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The testing environment hard-codes operation numbers (0..4) inside __ElementAnimate. Since the web platform uses the AnimationOperation enum, importing and using the same enum here will prevent drift when operations are added/renumbered and make the tests more self-documenting.

Copilot uses AI. Check for mistakes.
Comment thread pnpm-lock.yaml
Comment on lines 275 to 279
version: 3.7.0
'@rsbuild/plugin-babel':
specifier: 1.1.0
version: 1.1.0(@rsbuild/core@1.7.3)
version: 1.1.0(@rsbuild/core@2.0.0-beta.3(core-js@3.48.0))
'@types/react':
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR’s lockfile changes include resolving several Rsbuild plugins against @rsbuild/core@2.0.0-beta.3(...) (a major beta) whereas the workspace catalogs pin @rsbuild/core to 1.7.3. If this beta upgrade isn't intentional for this feature PR, consider regenerating the lockfile with the intended catalog resolution or splitting dependency upgrades into a separate PR to reduce risk.

Copilot uses AI. Check for mistakes.
return el;
};

const animationMap = new Map<string, globalThis.Animation | undefined>();
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

animationMap is typed as Map<string, globalThis.Animation | undefined>, but globalThis.Animation refers to the global constructor type (typeof Animation) rather than the Animation instance returned by element.animate(). This will either fail type-checking or make the map type incorrect. Use the DOM Animation instance type (e.g. Map<string, Animation>), or ReturnType<HTMLElement['animate']> if you want to derive it from the API.

Suggested change
const animationMap = new Map<string, globalThis.Animation | undefined>();
const animationMap = new Map<string, Animation | undefined>();

Copilot uses AI. Check for mistakes.
Comment on lines +816 to +822
animationMap.set(
name,
element.animate(
keyframes as Keyframe[],
mapTimingOptions(options),
),
);
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On START, an existing animation with the same name is overwritten in animationMap without being cancelled first. This means repeated START calls (e.g. the REPL sample's Restart button) will leave the previous animation running and create multiple concurrent animations for the same logical id. Cancel any existing animation for name before starting the new one (and consider replacing the entry only after that).

Suggested change
animationMap.set(
name,
element.animate(
keyframes as Keyframe[],
mapTimingOptions(options),
),
);
const existingAnimation = animationMap.get(name);
if (existingAnimation) {
existingAnimation.cancel();
}
const newAnimation = element.animate(
keyframes as Keyframe[],
mapTimingOptions(options),
);
animationMap.set(name, newAnimation);

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@packages/web-platform/web-constants/src/types/MainThreadGlobalThis.ts`:
- Around line 331-341: The ElementAnimatePAPI type allows any numeric operation
and both tuple shapes, so callers can pass invalid combinations; tighten it into
a discriminated union where the START operation is the literal 0 and requires
the 4-arg tuple ([0, name, keyframes, options?]) while control operations are
literal unions 1|2|3|4 and use the 2-arg tuple ([1|2|3|4, name]); update the
ElementAnimatePAPI type to reflect these two specific tuple shapes (START with
mandatory keyframes and optional options, other ops only name) so consumers and
implementors get compile-time checks.

In `@packages/web-platform/web-mainthread-apis/ts/createMainThreadGlobalThis.ts`:
- Around line 67-68: The animation lifecycle handlers leave stale Animation
objects in animationMap: before handling the START case (in the
AnimationOperation switch that sets animationMap[name]) ensure any existing
animation for the same name is retired/terminated (call the same retire/cleanup
logic used elsewhere or invoke cancel/finish and remove it from animationMap) so
the new START overwrites a retired instance; in the CANCEL handler delete
animationMap[name] after cancelling so the entry is removed (mirror
testing-environment/ElementPAPI.ts behavior); and in the FINISH handler perform
cleanup by removing the map entry once the finish sequence completes so no stale
handles remain (ensure you reference animationMap, START, CANCEL, FINISH and the
retire/cleanup function used for animations).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: c1aae284-2618-4753-82f0-6faa959d3981

📥 Commits

Reviewing files that changed from the base of the PR and between 7fe71ea and 581bc4c.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (6)
  • packages/repl/src/examples/interactivity-element-animate/main-thread.js
  • packages/repl/src/samples.ts
  • packages/testing-library/testing-environment/src/__tests__/element-papi.test.js
  • packages/testing-library/testing-environment/src/lynx/ElementPAPI.ts
  • packages/web-platform/web-constants/src/types/MainThreadGlobalThis.ts
  • packages/web-platform/web-mainthread-apis/ts/createMainThreadGlobalThis.ts

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq Bot commented Mar 11, 2026

Merging this PR will degrade performance by 5.87%

⚡ 1 improved benchmark
❌ 1 regressed benchmark
✅ 70 untouched benchmarks
⏩ 3 skipped benchmarks1

⚠️ Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Benchmark BASE HEAD Efficiency
basic-performance-scroll-view-100 8.7 ms 9.2 ms -5.87%
basic-performance-nest-level-100 7.7 ms 6.9 ms +10.68%

Comparing Huxpro/fix-background-only-new (12264f4) with main (0991136)

Open in CodSpeed

Footnotes

  1. 3 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@relativeci
Copy link
Copy Markdown

relativeci Bot commented Mar 11, 2026

Web Explorer

#8178 Bundle Size — 385.21KiB (+0.19%).

12264f4(current) vs 0991136 main#8171(baseline)

Bundle metrics  Change 3 changes
                 Current
#8178
     Baseline
#8171
No change  Initial JS 155.59KiB 155.59KiB
No change  Initial CSS 35.1KiB 35.1KiB
Change  Cache Invalidation 23.27% 0%
No change  Chunks 8 8
No change  Assets 8 8
Change  Modules 237(-0.42%) 238
No change  Duplicate Modules 16 16
Change  Duplicate Code 2.97%(-0.34%) 2.98%
No change  Packages 4 4
No change  Duplicate Packages 0 0
Bundle size by type  Change 1 change Regression 1 regression
                 Current
#8178
     Baseline
#8171
Regression  JS 254.26KiB (+0.28%) 253.55KiB
No change  Other 95.85KiB 95.85KiB
No change  CSS 35.1KiB 35.1KiB

Bundle analysis reportBranch Huxpro/fix-background-only-newProject dashboard


Generated by RelativeCIDocumentationReport issue

Huxpro added 5 commits March 11, 2026 03:00
- Fix animation lifecycle: cancel existing animation before START,
  delete map entry on CANCEL, auto-cleanup on finish/cancel via handlers
- Fix type: globalThis.Animation → Animation (correct instance type)
- Tighten ElementAnimatePAPI discriminated union with literal operation types
- Run pnpm dedupe to fix stale @rsbuild/core@2.0.0-beta.3 lockfile resolutions
- Update testing-environment API report
Cover all animation operations (START, PAUSE, PLAY, CANCEL, FINISH)
and the replace-on-duplicate-name behavior via the Web Animations API.
The e2e tests call globalThis.runtime.__ElementAnimate but the
web-core-wasm variant was missing this PAPI. Add the implementation
to the client createElementAPI and a no-op to the server variant.
@Huxpro Huxpro merged commit 2efecc2 into main Mar 17, 2026
42 of 47 checks passed
@Huxpro Huxpro deleted the Huxpro/fix-background-only-new branch March 17, 2026 08:36
colinaaa pushed a commit that referenced this pull request Mar 24, 2026
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @lynx-js/react@0.117.0

### Minor Changes

- feat: export `GlobalPropsProvider`, `GlobalPropsConsumer`,
`useGlobalProps` and `useGlobalPropsChanged` for `__globalProps`
([#2346](#2346))

- `GlobalPropsProvider`: A Provider component that accepts `children`.
It is used to provide the `lynx.__globalProps` context.
- `GlobalPropsConsumer`: A Consumer component that accepts a function as
a child. It is used to consume the `lynx.__globalProps` context.
- `useGlobalProps`: A hook that returns the `lynx.__globalProps` object.
It triggers a re-render when `lynx.__globalProps` changes.
- `useGlobalPropsChanged`: A hook that accepts a callback function. The
callback is invoked when `lynx.__globalProps` changes.

Note: When `globalPropsMode` is not set to `'event'` (default is
`'reactive'`), these APIs will be ineffective (pass-through) and will
log a warning in development mode, as updates are triggered
automatically by full re-render.

- **BREAKING CHANGE**:
([#2319](#2319))

Change preact package from `@hongzhiyuan/preact` to
`@lynx-js/internal-preact`.

Upgrade preact from
[f7693b72](preactjs/preact@f7693b7)
to
[55254ef7](preactjs/preact@55254ef),
see diffs at
[f7693b72...55254ef7](https://github.com/preactjs/preact/compare/f7693b72ecb4a40c66e6e47f54e2d4edc374c9f0...preactjs:preact:55254ef7021e563cc1a86fb816058964a1b6a29a?expand=1).

- feat: add `globalPropsMode` option to `PluginReactLynxOptions`
([#2346](#2346))

- When configured to `"event"`, `updateGlobalProps` will only trigger a
global event and skip the `runWithForce` flow.
- Defaults to `"reactive"`, which means `updateGlobalProps` will trigger
re-render automatically.

### Patch Changes

- Add `__BACKGROUND__` guard on `onBackgroundSnapshotInstanceUpdateId`
event to prevent bundling to main-thread on dev environment.
([#2332](#2332))

- refactor: extract static string in template literal
([#2334](#2334))

- fix: avoid crash when spread undefined ref
([#2333](#2333))

- Avoid registering lifecycle refs for main-thread functions (MTF) that
have not received an `execId` during `renderPage()` first-screen
binding. ([#2320](#2320))

## @lynx-js/react-umd@0.117.0

### Minor Changes

- Add standalone UMD build of the ReactLynx runtime.
([#2331](#2331))

## @lynx-js/react-rsbuild-plugin@0.13.0

### Minor Changes

- **BREAKING CHANGE**:
([#2319](#2319))

Change preact package from `@hongzhiyuan/preact` to
`@lynx-js/internal-preact`.

Upgrade preact from
[f7693b72](preactjs/preact@f7693b7)
to
[55254ef7](preactjs/preact@55254ef),
see diffs at
[f7693b72...55254ef7](https://github.com/preactjs/preact/compare/f7693b72ecb4a40c66e6e47f54e2d4edc374c9f0...preactjs:preact:55254ef7021e563cc1a86fb816058964a1b6a29a?expand=1).

- feat: add `globalPropsMode` option to `PluginReactLynxOptions`
([#2346](#2346))

- When configured to `"event"`, `updateGlobalProps` will only trigger a
global event and skip the `runWithForce` flow.
- Defaults to `"reactive"`, which means `updateGlobalProps` will trigger
re-render automatically.

### Patch Changes

- Updated dependencies
\[[`f1129ea`](f1129ea),
[`27f1cff`](27f1cff),
[`ed566f0`](ed566f0),
[`402ec2b`](402ec2b)]:
    -   @lynx-js/react-webpack-plugin@0.8.0
    -   @lynx-js/react-refresh-webpack-plugin@0.3.5
    -   @lynx-js/react-alias-rsbuild-plugin@0.13.0
    -   @lynx-js/use-sync-external-store@1.5.0
    -   @lynx-js/template-webpack-plugin@0.10.6
    -   @lynx-js/css-extract-webpack-plugin@0.7.0

## @lynx-js/react-webpack-plugin@0.8.0

### Minor Changes

- feat: add `globalPropsMode` option to `PluginReactLynxOptions`
([#2346](#2346))

- When configured to `"event"`, `updateGlobalProps` will only trigger a
global event and skip the `runWithForce` flow.
- Defaults to `"reactive"`, which means `updateGlobalProps` will trigger
re-render automatically.

### Patch Changes

- Fix sourcemap misalignment when wrapping lazy bundle main-thread
chunks. ([#2361](#2361))

The lazy bundle IIFE wrapper is now injected in `processAssets` at
`PROCESS_ASSETS_STAGE_OPTIMIZE_SIZE + 1` by walking chunk groups instead
of patching assets in `beforeEncode`.

- With `experimental_isLazyBundle: true`, the wrapper is applied to
lazy-bundle chunk groups.
- Without lazy bundle mode, the wrapper is applied to async main-thread
chunk groups generated by dynamic import.

Injecting the wrapper in this stage keeps the emitted JS stable after
optimization while still running before `DEV_TOOLING` sourcemap
finalization, so the generated `.js` and `.js.map` stay aligned.

- Set `__DEV__` and `__PROFILE__` to `true` on `NODE_ENV ===
'development'`.
([#2324](#2324))

## @lynx-js/rspeedy@0.13.6

### Patch Changes

- Rename Web Preview label to fix URL alignment
([#2355](#2355))

- Updated dependencies
\[[`799fda8`](799fda8)]:
    -   @lynx-js/cache-events-webpack-plugin@0.0.3
    -   @lynx-js/web-rsbuild-server-middleware@0.19.9

## @lynx-js/lynx-bundle-rslib-config@0.2.3

### Patch Changes

- Fix snapshot not found error when dev with external bundle
([#2316](#2316))

## @lynx-js/external-bundle-rsbuild-plugin@0.0.4

### Patch Changes

- Updated dependencies
\[[`ed566f0`](ed566f0)]:
    -   @lynx-js/externals-loading-webpack-plugin@0.0.5

## @lynx-js/kitten-lynx-test-infra@0.1.1

### Patch Changes

- feat: support page.screenshot()
([#2364](#2364))

- feat: initial commit
([#2272](#2272))

## @lynx-js/testing-environment@0.1.12

### Patch Changes

- Implement `__ElementAnimate` PAPI for web platform animation lifecycle
([#2329](#2329))

## @lynx-js/web-constants@0.19.9

### Patch Changes

- Implement `__ElementAnimate` PAPI for web platform animation lifecycle
([#2329](#2329))

-   Updated dependencies \[]:
    -   @lynx-js/web-worker-rpc@0.19.9

## @lynx-js/web-core@0.19.9

### Patch Changes

- Updated dependencies
\[[`2efecc2`](2efecc2)]:
    -   @lynx-js/web-constants@0.19.9
    -   @lynx-js/web-mainthread-apis@0.19.9
    -   @lynx-js/web-worker-runtime@0.19.9
    -   @lynx-js/web-worker-rpc@0.19.9

## @lynx-js/web-core-wasm@0.0.6

### Patch Changes

- reexports essential utils & types in @lynx-js/web-elements from
@lynx-js/web-core-wasm/client
([#2321](#2321))

-   Updated dependencies \[]:
    -   @lynx-js/web-worker-rpc@0.19.9

## @lynx-js/web-mainthread-apis@0.19.9

### Patch Changes

- Updated dependencies
\[[`2efecc2`](2efecc2)]:
    -   @lynx-js/web-constants@0.19.9

## @lynx-js/web-worker-runtime@0.19.9

### Patch Changes

- Updated dependencies
\[[`2efecc2`](2efecc2)]:
    -   @lynx-js/web-constants@0.19.9
    -   @lynx-js/web-mainthread-apis@0.19.9
    -   @lynx-js/web-worker-rpc@0.19.9

## @lynx-js/cache-events-webpack-plugin@0.0.3

### Patch Changes

- Cache `globalThis.loadDynamicComponent` in the cache events runtime
and add tests covering tt methods, performance events, and globalThis
replay behavior.
([#2343](#2343))

## @lynx-js/externals-loading-webpack-plugin@0.0.5

### Patch Changes

- Fix snapshot not found error when dev with external bundle
([#2316](#2316))

## @lynx-js/react-refresh-webpack-plugin@0.3.5

### Patch Changes

- Fix snapshot not found error when dev with external bundle
([#2316](#2316))

## @lynx-js/template-webpack-plugin@0.10.6

### Patch Changes

- Updated dependencies
\[[`d034dae`](d034dae)]:
    -   @lynx-js/web-core-wasm@0.0.6

## create-rspeedy@0.13.6



## @lynx-js/react-alias-rsbuild-plugin@0.13.0



## upgrade-rspeedy@0.13.6



## @lynx-js/web-core-server@0.19.9



## @lynx-js/web-rsbuild-server-middleware@0.19.9



## @lynx-js/web-worker-rpc@0.19.9

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants