Skip to content

feat: make @lynx-js/web-core-wasm implementation to be a only implementation#2322

Merged
PupilTong merged 33 commits intolynx-family:mainfrom
PupilTong:p/hw/replace-web-core
Mar 24, 2026
Merged

feat: make @lynx-js/web-core-wasm implementation to be a only implementation#2322
PupilTong merged 33 commits intolynx-family:mainfrom
PupilTong:p/hw/replace-web-core

Conversation

@PupilTong
Copy link
Copy Markdown
Collaborator

@PupilTong PupilTong commented Mar 9, 2026

Plan:

Summary by CodeRabbit

  • New Features

    • Unified WASM-based core engine as primary implementation
    • New __QuerySelector and __InvokeUIMethod APIs
    • <lynx-view> gains browser-config attribute for pixelRatio/viewport control
    • Better CSS handling: keyframes, scoped/root/type selector alignment
  • Bug Fixes

    • Backward-compatibility fixes for legacy JSON templates and lazy-loading execution mode
  • Breaking Changes

    • Removed thread-strategy, overrideLynxTagToHTMLTagMap, customTemplateLoader, inject-head-links
  • Security

    • CSP hardening: nonce support for iframe/srcdoc-executed scripts

Checklist

  • Tests updated (or not required).
  • Documentation updated (or not required).
  • Changeset added, and when a BREAKING CHANGE occurs, it needs to be clearly marked (or not required).

@PupilTong PupilTong self-assigned this Mar 9, 2026
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Mar 9, 2026

🦋 Changeset detected

Latest commit: 2767588

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

This PR includes changesets to release 9 packages
Name Type
@lynx-js/web-core Minor
upgrade-rspeedy Patch
@lynx-js/web-rsbuild-server-middleware Minor
@lynx-js/template-webpack-plugin Patch
@lynx-js/react-rsbuild-plugin Patch
create-rspeedy Patch
@lynx-js/web-worker-rpc Minor
@lynx-js/react-alias-rsbuild-plugin Patch
@lynx-js/rspeedy 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 9, 2026

📝 Walkthrough

Walkthrough

This PR consolidates the web-platform layout by replacing the web-core-wasm surface with web-core, removing @lynx-js/web-constants and @lynx-js/offscreen-document packages, migrating e2e/test surfaces, updating workspace/tsconfig/Cargo entries, and adjusting the REPL to use the new client and relaxed template typing.

Changes

Cohort / File(s) Summary
Changesets & Config
/.changeset/bitter-emus-camp.md, /.changeset/config.json
Adds a breaking changeset describing the WASM→web-core consolidation; updates changeset config to remove obsolete fixed/ignore entries.
CI / E2E Workflow
.github/workflows/test.yml, packages/web-platform/web-core-e2e/...
Renames e2e job web-core-wasm-e2eweb-core-e2e, updates job wiring/report paths, and updates e2e package name, imports, rsbuild paths, and tests to reference @lynx-js/web-core.
Workspace & Build Graph
Cargo.toml, packages/web-platform/tsconfig.json
Replaces workspace members and removes tsconfig project references for removed packages; adds web-core member and adjusts composite references.
Package Removals — web-constants
packages/web-platform/web-constants/*
Entire @lynx-js/web-constants package removed: package.json, tsconfig, CHANGELOG/README/LICENSE/Notice, all src/* type/constant/endpoint/util modules and re-exports.
Package Removals — offscreen-document
packages/web-platform/offscreen-document/*
Entire @lynx-js/offscreen-document package removed: package.json, tsconfig, docs, and all runtime/source modules (OffscreenDocument, OffscreenElement, OffscreenEvent, OffscreenCSSStyleDeclaration, types, etc.).
REPL adjustments
packages/repl/package.json, packages/repl/src/...
Removes several devDependencies; switches runtime imports to @lynx-js/web-core/client; relaxes TypeScript types for templates/style info to unknown/Record, and changes template delivery to JSON Blob → object URL (removes prior customTemplateLoader usage).
Docs & Small Configs
AGENTS.md, .typos.toml
Updates AGENTS.md to reflect new package layout and adjusts typos exclusion for an offscreen file.
Tests & Bench
packages/web-platform/web-core-e2e/tests/*, bench/*, server-tests/*, shell-project/*
Updates type imports and runtime imports from @lynx-js/web-core-wasm/*@lynx-js/web-core/*; adds/adjusts Playwright/Vitest tests and wait timings; adds new e2e tests.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Suggested reviewers

  • upupming
  • luhc228

Poem

🐰 In the burrow code hops, old packs take flight,
One core now dawns, tidy and bright,
Templates tucked in a JSON-sweet curl,
Tests hop along — a leaner world,
I nibble a carrot and cheer: "Unite!" 🥕

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 25.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 describes a significant architecture change but contains a grammatical error ('to be a only implementation' should be 'to be the only implementation'). The intent is clear enough regarding the main change (making web-core-wasm the unified implementation), though the phrasing is awkward.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 10, 2026

Codecov Report

❌ Patch coverage is 0% with 14 lines in your changes missing coverage. Please review.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
packages/repl/src/components/LynxPreview.tsx 0.00% 5 Missing ⚠️
packages/repl/src/App.tsx 0.00% 3 Missing ⚠️
packages/repl/src/bundler/css-processor.ts 0.00% 3 Missing ⚠️
packages/repl/src/bundler/template-builder.ts 0.00% 2 Missing ⚠️
packages/repl/src/index.tsx 0.00% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

@PupilTong PupilTong force-pushed the p/hw/replace-web-core branch 3 times, most recently from ef10c82 to 7d3b5f7 Compare March 12, 2026 10:05
@relativeci
Copy link
Copy Markdown

relativeci Bot commented Mar 12, 2026

Web Explorer

#8340 Bundle Size — 521.22KiB (+35.31%).

2767588(current) vs e3e63de main#8327(baseline)

Bundle metrics  Change 8 changes Improvement 4 improvements
                 Current
#8340
     Baseline
#8327
Improvement  Initial JS 41.85KiB(-73.1%) 155.59KiB
Improvement  Initial CSS 1.99KiB(-94.34%) 35.1KiB
Change  Cache Invalidation 100% 0%
Change  Chunks 7(-12.5%) 8
No change  Assets 8 8
Change  Modules 145(-38.82%) 237
Improvement  Duplicate Modules 10(-37.5%) 16
Change  Duplicate Code 30.79%(+936.7%) 2.97%
Improvement  Packages 3(-25%) 4
No change  Duplicate Packages 0 0
Bundle size by type  Change 3 changes Regression 2 regressions Improvement 1 improvement
                 Current
#8340
     Baseline
#8327
Regression  JS 317.23KiB (+24.77%) 254.26KiB
Regression  Other 202KiB (+110.74%) 95.85KiB
Improvement  CSS 1.99KiB (-94.34%) 35.1KiB

Bundle analysis reportBranch PupilTong:p/hw/replace-web-coreProject dashboard


Generated by RelativeCIDocumentationReport issue

@PupilTong PupilTong force-pushed the p/hw/replace-web-core branch 6 times, most recently from 31a9848 to a172e14 Compare March 19, 2026 08:22
@codspeed-hq
Copy link
Copy Markdown

codspeed-hq Bot commented Mar 19, 2026

Merging this PR will not alter performance

✅ 54 untouched benchmarks
🆕 9 new benchmarks
⏩ 21 skipped benchmarks1

Performance Changes

Benchmark BASE HEAD Efficiency
🆕 basic-performance-div-10000 N/A 261.7 ms N/A
🆕 basic-performance-text-200 N/A 11.7 ms N/A
🆕 basic-performance-image-100 N/A 8.2 ms N/A
🆕 basic-performance-small-css N/A 6 ms N/A
🆕 basic-performance-large-css N/A 16.1 ms N/A
🆕 basic-performance-div-1000 N/A 28.7 ms N/A
🆕 basic-performance-nest-level-100 N/A 5.2 ms N/A
🆕 basic-performance-scroll-view-100 N/A 9.3 ms N/A
🆕 basic-performance-div-100 N/A 5.6 ms N/A

Comparing PupilTong:p/hw/replace-web-core (2767588) with main (e3e63de)

Open in CodSpeed

Footnotes

  1. 21 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.

@PupilTong PupilTong changed the title WIP: make @lynx-js/web-core-wasm implementation to be a only implementation feat: make @lynx-js/web-core-wasm implementation to be a only implementation Mar 20, 2026
@PupilTong PupilTong marked this pull request as ready for review March 20, 2026 03:13
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: 4

🧹 Nitpick comments (2)
packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts (2)

463-477: Replace fixed sleep with a polling assertion for scroll progress.

wait(2000) at Line 472 is timing-sensitive; use expect.poll on scrollTop for deterministic behavior.

♻️ Suggested fix
       await page.locator('#target').click();
-      await wait(2000);
-      const scrollTopAfter = await scrollView.evaluate((node) =>
-        node.scrollTop
-      );
-      expect(scrollTopAfter).toBeGreaterThan(100);
+      await expect.poll(
+        async () => scrollView.evaluate((node) => node.scrollTop),
+      ).toBeGreaterThan(100);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts` around lines 463
- 477, In the test 'basic-ref-main-invoke-ui-method' replace the fixed
wait(2000) with a polling assertion that checks the scrollTop of the scrollView
locator until it exceeds 100; specifically, remove the wait(2000) and use
expect.poll to repeatedly evaluate scrollView.evaluate(node => node.scrollTop)
(with an appropriate timeout and interval) and assert .toBeGreaterThan(100) so
the assertion is deterministic and not timing-sensitive (refer to identifiers:
test name 'basic-ref-main-invoke-ui-method', variable scrollView, and locator
'#scroll-view').

4642-4670: Use locator-native count assertions and remove debug console noise.

expect(page.locator(...).count()).resolves plus long sleeps is brittle; toHaveCount retries automatically and is cleaner. Also, the console forwarding at Line 4642 looks like leftover debug code.

♻️ Suggested fix
-          page.on('console', msg => console.log('[PAGE]', msg.text()));
@@
-          await wait(500);
-          await expect(page.locator('list-item').count()).resolves.toBe(4);
+          await expect(page.locator('list-item')).toHaveCount(4);
@@
-          await wait(1000);
-          await expect(page.locator('list-item').count()).resolves.toBe(3);
+          await expect(page.locator('list-item')).toHaveCount(3);
@@
-          await wait(1000);
-          await expect(page.locator('list-item').count()).resolves.toBe(4);
+          await expect(page.locator('list-item')).toHaveCount(4);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts` around lines 4642
- 4670, Replace the manual console forwarding and brittle count+sleep assertions
with Playwright's locator-native assertions: remove the page.on('console', ...)
call and replace occurrences of await
expect(page.locator('list-item').count()).resolves.toBe(n) plus wait(...) with
await expect(page.locator('list-item')).toHaveCount(n) (these calls will
auto-retry). Keep the click interaction on page.locator('#target').click() and
the id collection via page.locator('list-item').evaluateAll(...) unchanged, but
remove the extra wait(...) calls surrounding the clicks once toHaveCount is
used.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.changeset/bitter-emus-camp.md:
- Line 9: Update the release note sentence to use a hyphenated compound
adjective: replace the phrase "pure JS/TS based `web-core` implementation" with
"pure JS/TS-based `web-core` implementation" in the
.changeset/bitter-emus-camp.md content so the modifier before `web-core` is
correctly hyphenated.

In `@packages/repl/src/App.tsx`:
- Around line 90-92: The template state in App.tsx is typed as Record<string,
unknown> | null but PreviewPane expects a LynxTemplate imported from the wrong
module; update imports/types so they match: change the PreviewPane/LynxTemplate
import to use `@lynx-js/web-core-wasm/client` (or alternatively change App.tsx to
type the state as LynxTemplate | null), and ensure the value produced by
buildLynxTemplate is assigned to the template state with the correct
LynxTemplate type; update the type signature where template and setTemplate are
declared and any PreviewPane prop typing to consistently reference LynxTemplate
to remove the mismatch.

In `@packages/repl/src/bundler/css-processor.ts`:
- Around line 259-261: The function genStyleInfo and processCSS are using
undefined or incorrect types: import or define the proper StyleInfo type (or
re-export it) and introduce a local interface (e.g., LocalCSSRule) that has the
expected properties sel and decl instead of relying on the DOM CSSRule; replace
all uses of CSSRule[] and unknown return types with the correct LocalCSSRule[]
and StyleInfo return type, update genStyleInfo, processCSS and any helpers to
use those concrete types, and, if acceptable, import StyleInfo from
packages/webpack/template-webpack-plugin/src/web/StyleInfo.ts to avoid the
TS2304/TS2353 and eliminate the unknowns.

In `@packages/web-platform/web-core-e2e/shell-project/devMiddleware.ts`:
- Line 10: Call executeTemplate synchronously (remove the awaiting) and guard
its return value before injecting into the HTML: replace the awaited call to
executeTemplate with a direct call, capture the returned string | undefined,
then check the result (e.g., if result === undefined) and either substitute a
safe fallback (empty string) or handle the error before injecting into the
response; update the code paths where executeTemplate is used (the call site in
devMiddleware.ts) to use the guarded value instead of directly inserting the
possibly undefined result.

---

Nitpick comments:
In `@packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts`:
- Around line 463-477: In the test 'basic-ref-main-invoke-ui-method' replace the
fixed wait(2000) with a polling assertion that checks the scrollTop of the
scrollView locator until it exceeds 100; specifically, remove the wait(2000) and
use expect.poll to repeatedly evaluate scrollView.evaluate(node =>
node.scrollTop) (with an appropriate timeout and interval) and assert
.toBeGreaterThan(100) so the assertion is deterministic and not timing-sensitive
(refer to identifiers: test name 'basic-ref-main-invoke-ui-method', variable
scrollView, and locator '#scroll-view').
- Around line 4642-4670: Replace the manual console forwarding and brittle
count+sleep assertions with Playwright's locator-native assertions: remove the
page.on('console', ...) call and replace occurrences of await
expect(page.locator('list-item').count()).resolves.toBe(n) plus wait(...) with
await expect(page.locator('list-item')).toHaveCount(n) (these calls will
auto-retry). Keep the click interaction on page.locator('#target').click() and
the id collection via page.locator('list-item').evaluateAll(...) unchanged, but
remove the extra wait(...) calls surrounding the clicks once toHaveCount is
used.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 348aa253-1d15-4dbc-8755-184935bba90a

📥 Commits

Reviewing files that changed from the base of the PR and between 726f600 and a4feeaf.

⛔ Files ignored due to path filters (221)
  • Cargo.lock is excluded by !**/*.lock
  • packages/web-platform/web-core-e2e/resources/NotoSansSC-Regular.woff2 is excluded by !**/*.woff2
  • packages/web-platform/web-core-e2e/resources/ddee519472dd7e73eeb153e78d484db3.mp3 is excluded by !**/*.mp3
  • packages/web-platform/web-core-e2e/resources/firefox-logo.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/resources/lynx-logo.jpeg is excluded by !**/*.jpeg
  • packages/web-platform/web-core-e2e/resources/star.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/server-tests/__snapshots__/server-e2e.test.ts.snap is excluded by !**/*.snap
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-SelectorQuery/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-SelectorQuery/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-SelectorQuery/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-animate/animate/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-animate/animate/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-animate/animate/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-animate/initial/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-animate/initial/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-animate/initial/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-updateGlobalProps/blue/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-updateGlobalProps/blue/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-updateGlobalProps/blue/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-updateGlobalProps/initial/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-updateGlobalProps/initial/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-updateGlobalProps/initial/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-css-asset-in-css/show-lynx-logo/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-css-asset-in-css/show-lynx-logo/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-css-asset-in-css/show-lynx-logo/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-css-compound-selector/compound-selector/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-css-compound-selector/compound-selector/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-css-compound-selector/compound-selector/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-element-scroll-view-scroll-to-index/green-blue/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-element-scroll-view-scroll-to-index/green-blue/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-element-scroll-view-scroll-to-index/green-blue/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-1/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-1/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-1/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-column-align-items/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-column-align-items/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-column-align-items/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-column-container-items-align-self/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-column-container-items-align-self/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-column-container-items-align-self/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-column-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-column-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-column-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-item-main-axis-content-based-min-size-not-from-content-size-suggestion/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-item-main-axis-content-based-min-size-not-from-content-size-suggestion/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-item-main-axis-content-based-min-size-not-from-content-size-suggestion/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-item-not-shrink-to-zero/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-item-not-shrink-to-zero/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-item-not-shrink-to-zero/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-item-shrink/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-item-shrink/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-item-shrink/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-row-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-row-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-row-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-with-overflow/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-with-overflow/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-with-overflow/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-absolute-not-in-flow/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-absolute-not-in-flow/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-absolute-not-in-flow/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-child-container-wrap/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-child-container-wrap/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-child-container-wrap/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-align-items/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-align-items/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-align-items/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-items-align-self/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-items-align-self/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-items-align-self/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-items-layout-gravity/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-items-layout-gravity/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-items-layout-gravity/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-center/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-center/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-center/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-right-left-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-right-left-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-right-left-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-start-end-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-start-end-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-start-end-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-top-bottom-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-top-bottom-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-top-bottom-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-justify-content-center/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-justify-content-center/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-justify-content-center/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-justify-content-right-left-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-justify-content-right-left-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-justify-content-right-left-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-cross-gravity/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-cross-gravity/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-cross-gravity/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-default-orientation/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-default-orientation/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-default-orientation/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-grand-kid-weight/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-grand-kid-weight/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-grand-kid-weight/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-graverty-space-between/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-graverty-space-between/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-graverty-space-between/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-do-not-respond-to-flex-basis/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-do-not-respond-to-flex-basis/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-do-not-respond-to-flex-basis/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-do-not-respond-to-flex/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-do-not-respond-to-flex/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-do-not-respond-to-flex/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-do-not-shrink/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-do-not-shrink/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-do-not-shrink/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-use-order/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-use-order/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-use-order/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-orientation-horizontal-with-direction/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-orientation-horizontal-with-direction/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-orientation-horizontal-with-direction/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-orientation-vertical-with-direction/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-orientation-vertical-with-direction/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-orientation-vertical-with-direction/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-items-layout-gravity/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-items-layout-gravity/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-items-layout-gravity/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-center/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-center/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-center/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-right-left-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-right-left-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-right-left-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-start-end-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-start-end-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-start-end-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-top-bottom-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-top-bottom-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-top-bottom-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-justify-content-right-left-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-justify-content-right-left-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-justify-content-right-left-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-cross-gravity/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-cross-gravity/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-cross-gravity/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-sum-of-item-weight-larger-than-container-weight-sum/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-sum-of-item-weight-larger-than-container-weight-sum/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-sum-of-item-weight-larger-than-container-weight-sum/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-weight-not-assign-full-free-space/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-weight-not-assign-full-free-space/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-weight-not-assign-full-free-space/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-weight-sum-equal-to-item-weight/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-weight-sum-equal-to-item-weight/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-weight-sum-equal-to-item-weight/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-weight-sum-is-zero/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-weight-sum-is-zero/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-weight-sum-is-zero/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/config-css-default-display-linear-false/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/config-css-default-display-linear-false/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/config-css-default-display-linear-false/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/config-css-default-overflow-visible-unset/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/config-css-default-overflow-visible-unset/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/config-css-default-overflow-visible-unset/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-area/initial-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-area/initial-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-area/initial-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-area/scroll-200-do-not-meet-exposure-area-requirement-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-area/scroll-200-do-not-meet-exposure-area-requirement-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-area/scroll-200-do-not-meet-exposure-area-requirement-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-area/scroll-200-green-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-area/scroll-200-green-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-area/scroll-200-green-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-basic/0-initial-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-basic/0-initial-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-basic/1-right-yellow-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-basic/1-right-yellow-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-basic/2-white-back-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-basic/2-white-back-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-basic/3-red-down-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-basic/3-red-down-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-basic/4-white-down-back-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-basic/4-white-down-back-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-custom-event-handler/all-green-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-custom-event-handler/all-green-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-custom-event-handler/all-green-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-screen-margin/0-initial-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-screen-margin/0-initial-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-screen-margin/0-initial-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-screen-margin/1-orange-half-do-trigger-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-screen-margin/1-orange-half-do-trigger-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-screen-margin/1-orange-half-do-trigger-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-screen-margin/2-green-half-not-trigger-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-screen-margin/2-green-half-not-trigger-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-screen-margin/2-green-half-not-trigger-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-screen-margin/3-green-half-do-trigger-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-screen-margin/3-green-half-do-trigger-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-screen-margin/3-green-half-do-trigger-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-ui-margin/0-initial-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-ui-margin/0-initial-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-ui-margin/0-initial-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-ui-margin/1-orange-half-do-trigger-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-ui-margin/1-orange-half-do-trigger-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-ui-margin/1-orange-half-do-trigger-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-ui-margin/2-green-half-not-trigger-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-ui-margin/2-green-half-not-trigger-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-ui-margin/2-green-half-not-trigger-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-ui-margin/3-green-half-do-trigger-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-ui-margin/3-green-half-do-trigger-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/exposure/api-exposure-dynamic-ui-margin/3-green-half-do-trigger-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/image/auto-size-with-padding/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/image/auto-size-with-padding/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/image/auto-size-with-padding/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/image/auto-size/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/image/auto-size/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/image/auto-size/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/image/basic-element-image-src/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/image/basic-element-image-src/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/image/basic-element-image-src/index-webkit-linux.png is excluded by !**/*.png
📒 Files selected for processing (79)
  • .changeset/bitter-emus-camp.md
  • .changeset/config.json
  • .changeset/element-animate-papi.md
  • .changeset/green-insects-rule.md
  • .github/workflows/test.yml
  • .typos.toml
  • AGENTS.md
  • Cargo.toml
  • packages/repl/package.json
  • packages/repl/src/App.tsx
  • packages/repl/src/bundler/css-processor.ts
  • packages/repl/src/bundler/template-builder.ts
  • packages/repl/src/components/LynxPreview.tsx
  • packages/repl/src/components/PreviewPane.tsx
  • packages/repl/src/index.tsx
  • packages/web-platform/offscreen-document/CHANGELOG.md
  • packages/web-platform/offscreen-document/Notice.txt
  • packages/web-platform/offscreen-document/README.md
  • packages/web-platform/offscreen-document/package.json
  • packages/web-platform/offscreen-document/src/index.ts
  • packages/web-platform/offscreen-document/src/main/index.ts
  • packages/web-platform/offscreen-document/src/main/initOffscreenDocument.ts
  • packages/web-platform/offscreen-document/src/types/ElementOperation.ts
  • packages/web-platform/offscreen-document/src/types/index.ts
  • packages/web-platform/offscreen-document/src/webworker/OffscreenCSSStyleDeclaration.ts
  • packages/web-platform/offscreen-document/src/webworker/OffscreenDocument.ts
  • packages/web-platform/offscreen-document/src/webworker/OffscreenElement.ts
  • packages/web-platform/offscreen-document/src/webworker/OffscreenEvent.ts
  • packages/web-platform/offscreen-document/src/webworker/index.ts
  • packages/web-platform/offscreen-document/tsconfig.json
  • packages/web-platform/tsconfig.json
  • packages/web-platform/web-constants/CHANGELOG.md
  • packages/web-platform/web-constants/LICENSE.txt
  • packages/web-platform/web-constants/Notice.txt
  • packages/web-platform/web-constants/README.md
  • packages/web-platform/web-constants/package.json
  • packages/web-platform/web-constants/src/constants.ts
  • packages/web-platform/web-constants/src/endpoints.ts
  • packages/web-platform/web-constants/src/eventName.ts
  • packages/web-platform/web-constants/src/index.ts
  • packages/web-platform/web-constants/src/types/BackThreadStartConfigs.ts
  • packages/web-platform/web-constants/src/types/Element.ts
  • packages/web-platform/web-constants/src/types/EventType.ts
  • packages/web-platform/web-constants/src/types/FlushElementTreeOptions.ts
  • packages/web-platform/web-constants/src/types/I18n.ts
  • packages/web-platform/web-constants/src/types/JSRealm.ts
  • packages/web-platform/web-constants/src/types/LynxContextEventTarget.ts
  • packages/web-platform/web-constants/src/types/LynxModule.ts
  • packages/web-platform/web-constants/src/types/MainThreadGlobalThis.ts
  • packages/web-platform/web-constants/src/types/MainThreadLynx.ts
  • packages/web-platform/web-constants/src/types/MainThreadStartConfigs.ts
  • packages/web-platform/web-constants/src/types/MarkTiming.ts
  • packages/web-platform/web-constants/src/types/NativeApp.ts
  • packages/web-platform/web-constants/src/types/PageConfig.ts
  • packages/web-platform/web-constants/src/types/Performance.ts
  • packages/web-platform/web-constants/src/types/SSR.ts
  • packages/web-platform/web-constants/src/types/StyleInfo.ts
  • packages/web-platform/web-constants/src/types/TemplateLoader.ts
  • packages/web-platform/web-constants/src/types/index.ts
  • packages/web-platform/web-constants/src/utils/LynxCrossThreadContext.ts
  • packages/web-platform/web-constants/src/utils/generateTemplate.ts
  • packages/web-platform/web-constants/src/utils/index.ts
  • packages/web-platform/web-constants/src/utils/markTiming.ts
  • packages/web-platform/web-constants/tsconfig.json
  • packages/web-platform/web-core-e2e/bench/server.bench.vitest.spec.ts
  • packages/web-platform/web-core-e2e/package.json
  • packages/web-platform/web-core-e2e/playwright.config.ts
  • packages/web-platform/web-core-e2e/resources/font.css
  • packages/web-platform/web-core-e2e/resources/text.txt
  • packages/web-platform/web-core-e2e/resources/web-core.main-thread.json
  • packages/web-platform/web-core-e2e/rsbuild.config.ts
  • packages/web-platform/web-core-e2e/scripts/generate-build-command.js
  • packages/web-platform/web-core-e2e/server-tests/server-e2e.test.ts
  • packages/web-platform/web-core-e2e/shell-project/devMiddleware.ts
  • packages/web-platform/web-core-e2e/shell-project/index.css
  • packages/web-platform/web-core-e2e/shell-project/index.ts
  • packages/web-platform/web-core-e2e/shell-project/ssr.html
  • packages/web-platform/web-core-e2e/tests/common.css
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts
💤 Files with no reviewable changes (51)
  • packages/web-platform/web-constants/src/types/MainThreadLynx.ts
  • packages/web-platform/offscreen-document/Notice.txt
  • packages/web-platform/web-constants/src/types/PageConfig.ts
  • packages/web-platform/web-constants/LICENSE.txt
  • packages/web-platform/web-constants/src/types/FlushElementTreeOptions.ts
  • packages/web-platform/web-constants/Notice.txt
  • packages/web-platform/web-constants/README.md
  • packages/web-platform/web-constants/tsconfig.json
  • .typos.toml
  • packages/web-platform/offscreen-document/CHANGELOG.md
  • packages/web-platform/offscreen-document/README.md
  • packages/web-platform/web-constants/src/types/MarkTiming.ts
  • packages/web-platform/web-constants/src/endpoints.ts
  • packages/web-platform/offscreen-document/src/types/ElementOperation.ts
  • packages/web-platform/offscreen-document/src/types/index.ts
  • packages/web-platform/offscreen-document/src/index.ts
  • packages/web-platform/web-constants/src/types/TemplateLoader.ts
  • packages/web-platform/web-constants/src/types/JSRealm.ts
  • packages/repl/package.json
  • packages/web-platform/offscreen-document/tsconfig.json
  • packages/web-platform/web-constants/CHANGELOG.md
  • packages/web-platform/web-constants/src/index.ts
  • packages/web-platform/web-constants/src/eventName.ts
  • packages/web-platform/tsconfig.json
  • packages/web-platform/offscreen-document/src/main/index.ts
  • packages/web-platform/web-constants/src/types/NativeApp.ts
  • packages/web-platform/web-constants/src/types/BackThreadStartConfigs.ts
  • packages/web-platform/web-constants/src/types/SSR.ts
  • packages/web-platform/web-constants/src/types/MainThreadStartConfigs.ts
  • packages/web-platform/web-constants/src/utils/index.ts
  • packages/web-platform/web-constants/src/types/EventType.ts
  • packages/web-platform/web-constants/src/types/StyleInfo.ts
  • packages/web-platform/web-constants/src/utils/markTiming.ts
  • packages/web-platform/offscreen-document/package.json
  • packages/web-platform/offscreen-document/src/webworker/OffscreenEvent.ts
  • packages/web-platform/offscreen-document/src/webworker/OffscreenCSSStyleDeclaration.ts
  • packages/web-platform/web-constants/src/types/Performance.ts
  • packages/web-platform/offscreen-document/src/webworker/index.ts
  • packages/web-platform/web-constants/src/utils/generateTemplate.ts
  • packages/web-platform/web-constants/src/utils/LynxCrossThreadContext.ts
  • packages/web-platform/web-constants/src/types/LynxContextEventTarget.ts
  • packages/web-platform/web-constants/src/types/Element.ts
  • packages/web-platform/offscreen-document/src/main/initOffscreenDocument.ts
  • packages/web-platform/offscreen-document/src/webworker/OffscreenElement.ts
  • packages/web-platform/web-constants/src/types/I18n.ts
  • packages/web-platform/offscreen-document/src/webworker/OffscreenDocument.ts
  • packages/web-platform/web-constants/src/constants.ts
  • packages/web-platform/web-constants/package.json
  • packages/web-platform/web-constants/src/types/LynxModule.ts
  • packages/web-platform/web-constants/src/types/index.ts
  • packages/web-platform/web-constants/src/types/MainThreadGlobalThis.ts

Comment thread .changeset/bitter-emus-camp.md
Comment thread packages/repl/src/App.tsx
Comment thread packages/repl/src/bundler/css-processor.ts
Comment thread packages/web-platform/web-core-e2e/shell-project/devMiddleware.ts
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: 1

🤖 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/repl/src/components/LynxPreview.tsx`:
- Line 6: The template prop/state type in LynxPreview (symbol: template) is
incompatible with the parent App.tsx which uses Record<string, unknown> | null;
update LynxPreview to align by either changing template's type to Record<string,
unknown> | null or, for consistency with PreviewPane, import and use the
LynxTemplate type from `@lynx-js/web-core/client` and replace the current
Record<string, string | boolean | number> | null declaration with LynxTemplate |
null so the types match across components.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 890d614c-90e8-4f78-99ea-ed98d41626b1

📥 Commits

Reviewing files that changed from the base of the PR and between a4feeaf and 734f4bc.

📒 Files selected for processing (1)
  • packages/repl/src/components/LynxPreview.tsx

Comment thread packages/repl/src/components/LynxPreview.tsx
colinaaa
colinaaa previously approved these changes Mar 20, 2026
Sherry-hue
Sherry-hue previously approved these changes Mar 20, 2026
Huxpro
Huxpro previously approved these changes Mar 24, 2026
Copy link
Copy Markdown
Collaborator

@Huxpro Huxpro left a comment

Choose a reason for hiding this comment

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

Looking forward for a blogpost

@PupilTong PupilTong dismissed stale reviews from Huxpro, Sherry-hue, and colinaaa via 24530c8 March 24, 2026 04:04
@PupilTong PupilTong force-pushed the p/hw/replace-web-core branch from 734f4bc to 24530c8 Compare March 24, 2026 04:04
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: 1

♻️ Duplicate comments (1)
packages/repl/src/bundler/css-processor.ts (1)

259-261: ⚠️ Potential issue | 🔴 Critical

Restore the concrete StyleInfo/rule types here.

Line 368 references StyleInfo without a local import/definition, and Line 265’s CSSRule[] now resolves to the DOM interface while Lines 351-354 build { sel, decl }. Widening genStyleInfo, groupedSelectors, and info to unknown only masks the mismatch and drops strict TS protection from this code path.

💡 Suggested fix
+interface GeneratedCSSRule {
+  sel: string[][][];
+  decl: [string, string][];
+}
+
+interface GeneratedStyleInfoEntry {
+  content: string[];
+  rules: GeneratedCSSRule[];
+  imports?: string[];
+}
+
+type StyleInfo = Record<string, GeneratedStyleInfoEntry>;
+
 function genStyleInfo(
   cssMap: Record<string, LynxStyleNode[]>,
-): unknown {
+): StyleInfo {
   return Object.fromEntries(
     Object.entries(cssMap).map(([cssId, nodes]) => {
       const contentsAtom: string[] = [];
-      const rules: CSSRule[] = [];
+      const rules: GeneratedCSSRule[] = [];
@@
-          const groupedSelectors: unknown[] = [];
+          const groupedSelectors: GeneratedCSSRule['sel'] = [];
@@
-      const info: unknown = {
+      const info: GeneratedStyleInfoEntry = {
         content: [contentsAtom.join('\n')],
         rules,
       };
#!/bin/bash
set -euo pipefail

FILE="packages/repl/src/bundler/css-processor.ts"

echo "=== Local imports / type declarations in css-processor.ts ==="
sed -n '1,40p' "$FILE"
rg -n "interface StyleInfo|type StyleInfo|interface CSSRule|type CSSRule" "$FILE" || true

echo
echo "=== Changed contract in css-processor.ts ==="
sed -n '259,370p' "$FILE"

echo
echo "=== Canonical StyleInfo shape used by web-core ==="
sed -n '1,20p' "packages/web-platform/web-core/ts/client/decodeWorker/cssLoader.ts"

As per coding guidelines, **/*.{ts,tsx}: Use TypeScript with the strictest mode configuration as defined in tsconfig.json.

Also applies to: 298-298, 357-368

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/repl/src/bundler/css-processor.ts` around lines 259 - 261, The
function genStyleInfo and its related variables (groupedSelectors, info) were
widened to unknown, losing type safety; restore a concrete StyleInfo type
(matching the canonical shape used in web-core: objects with sel and decl
fields) and a local CSSRule type/alias that reflects the intended rule shape
(not the DOM CSSRule interface) and use them instead of unknown; update
genStyleInfo(cssMap: Record<string, LynxStyleNode[]>) to return StyleInfo[] (or
the appropriate union), type groupedSelectors and info accordingly, and import
or declare the StyleInfo/CSSRule types so references like StyleInfo on line 368
resolve to the correct shape.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.changeset/bitter-emus-camp.md:
- Around line 1-3: Update the changeset entry so the version bump for the
package key "@lynx-js/web-core" is "minor" instead of "major"; locate the string
line containing "\"@lynx-js/web-core\": major" in .changeset/bitter-emus-camp.md
and change the value to "minor" to produce a 0.20.0 release rather than 1.0.0.

---

Duplicate comments:
In `@packages/repl/src/bundler/css-processor.ts`:
- Around line 259-261: The function genStyleInfo and its related variables
(groupedSelectors, info) were widened to unknown, losing type safety; restore a
concrete StyleInfo type (matching the canonical shape used in web-core: objects
with sel and decl fields) and a local CSSRule type/alias that reflects the
intended rule shape (not the DOM CSSRule interface) and use them instead of
unknown; update genStyleInfo(cssMap: Record<string, LynxStyleNode[]>) to return
StyleInfo[] (or the appropriate union), type groupedSelectors and info
accordingly, and import or declare the StyleInfo/CSSRule types so references
like StyleInfo on line 368 resolve to the correct shape.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 9e968b20-9155-4fb2-b47d-9ffe8049a74b

📥 Commits

Reviewing files that changed from the base of the PR and between 734f4bc and 24530c8.

⛔ Files ignored due to path filters (158)
  • Cargo.lock is excluded by !**/*.lock
  • packages/web-platform/web-core-e2e/resources/NotoSansSC-Regular.woff2 is excluded by !**/*.woff2
  • packages/web-platform/web-core-e2e/resources/ddee519472dd7e73eeb153e78d484db3.mp3 is excluded by !**/*.mp3
  • packages/web-platform/web-core-e2e/resources/firefox-logo.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/resources/lynx-logo.jpeg is excluded by !**/*.jpeg
  • packages/web-platform/web-core-e2e/resources/star.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/server-tests/__snapshots__/server-e2e.test.ts.snap is excluded by !**/*.snap
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-SelectorQuery/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-SelectorQuery/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-SelectorQuery/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-animate/animate/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-animate/animate/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-animate/animate/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-animate/initial/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-animate/initial/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-animate/initial/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-updateGlobalProps/blue/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-updateGlobalProps/blue/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-updateGlobalProps/blue/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-updateGlobalProps/initial/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-updateGlobalProps/initial/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/api-updateGlobalProps/initial/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-css-asset-in-css/show-lynx-logo/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-css-asset-in-css/show-lynx-logo/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-css-asset-in-css/show-lynx-logo/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-css-compound-selector/compound-selector/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-css-compound-selector/compound-selector/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-css-compound-selector/compound-selector/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-element-scroll-view-scroll-to-index/green-blue/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-element-scroll-view-scroll-to-index/green-blue/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-element-scroll-view-scroll-to-index/green-blue/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-1/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-1/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-1/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-column-align-items/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-column-align-items/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-column-align-items/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-column-container-items-align-self/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-column-container-items-align-self/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-column-container-items-align-self/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-column-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-column-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-column-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-item-main-axis-content-based-min-size-not-from-content-size-suggestion/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-item-main-axis-content-based-min-size-not-from-content-size-suggestion/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-item-main-axis-content-based-min-size-not-from-content-size-suggestion/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-item-not-shrink-to-zero/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-item-not-shrink-to-zero/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-item-not-shrink-to-zero/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-item-shrink/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-item-shrink/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-item-shrink/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-row-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-row-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-row-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-with-overflow/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-with-overflow/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-flex-with-overflow/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-absolute-not-in-flow/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-absolute-not-in-flow/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-absolute-not-in-flow/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-child-container-wrap/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-child-container-wrap/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-child-container-wrap/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-align-items/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-align-items/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-align-items/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-items-align-self/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-items-align-self/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-items-align-self/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-items-layout-gravity/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-items-layout-gravity/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-items-layout-gravity/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-center/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-center/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-center/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-right-left-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-right-left-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-right-left-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-start-end-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-start-end-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-start-end-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-top-bottom-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-top-bottom-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-graverty-top-bottom-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-justify-content-center/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-justify-content-center/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-justify-content-center/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-justify-content-right-left-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-justify-content-right-left-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-justify-content-right-left-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-cross-gravity/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-cross-gravity/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-column-cross-gravity/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-default-orientation/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-default-orientation/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-default-orientation/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-grand-kid-weight/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-grand-kid-weight/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-grand-kid-weight/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-graverty-space-between/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-graverty-space-between/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-graverty-space-between/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-do-not-respond-to-flex-basis/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-do-not-respond-to-flex-basis/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-do-not-respond-to-flex-basis/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-do-not-respond-to-flex/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-do-not-respond-to-flex/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-do-not-respond-to-flex/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-do-not-shrink/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-do-not-shrink/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-do-not-shrink/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-use-order/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-use-order/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-item-use-order/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-orientation-horizontal-with-direction/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-orientation-horizontal-with-direction/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-orientation-horizontal-with-direction/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-orientation-vertical-with-direction/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-orientation-vertical-with-direction/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-orientation-vertical-with-direction/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-items-layout-gravity/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-items-layout-gravity/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-items-layout-gravity/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-center/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-center/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-center/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-right-left-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-right-left-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-right-left-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-start-end-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-start-end-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-start-end-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-top-bottom-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-top-bottom-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-graverty-top-bottom-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-justify-content-right-left-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-justify-content-right-left-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-justify-content-right-left-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-container-main-axis-justify-content-start-end-with-direction-rtl/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-cross-gravity/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-cross-gravity/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-row-cross-gravity/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-sum-of-item-weight-larger-than-container-weight-sum/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-sum-of-item-weight-larger-than-container-weight-sum/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-sum-of-item-weight-larger-than-container-weight-sum/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-weight-not-assign-full-free-space/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-weight-not-assign-full-free-space/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-weight-not-assign-full-free-space/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-weight-sum-equal-to-item-weight/index/index-chromium-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-weight-sum-equal-to-item-weight/index/index-firefox-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-weight-sum-equal-to-item-weight/index/index-webkit-linux.png is excluded by !**/*.png
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts-snapshots/basic-linear-weight-sum-is-zero/index/index-chromium-linux.png is excluded by !**/*.png
📒 Files selected for processing (77)
  • .changeset/bitter-emus-camp.md
  • .changeset/config.json
  • .github/workflows/test.yml
  • .typos.toml
  • AGENTS.md
  • Cargo.toml
  • packages/repl/package.json
  • packages/repl/src/App.tsx
  • packages/repl/src/bundler/css-processor.ts
  • packages/repl/src/bundler/template-builder.ts
  • packages/repl/src/components/LynxPreview.tsx
  • packages/repl/src/components/PreviewPane.tsx
  • packages/repl/src/index.tsx
  • packages/web-platform/offscreen-document/CHANGELOG.md
  • packages/web-platform/offscreen-document/Notice.txt
  • packages/web-platform/offscreen-document/README.md
  • packages/web-platform/offscreen-document/package.json
  • packages/web-platform/offscreen-document/src/index.ts
  • packages/web-platform/offscreen-document/src/main/index.ts
  • packages/web-platform/offscreen-document/src/main/initOffscreenDocument.ts
  • packages/web-platform/offscreen-document/src/types/ElementOperation.ts
  • packages/web-platform/offscreen-document/src/types/index.ts
  • packages/web-platform/offscreen-document/src/webworker/OffscreenCSSStyleDeclaration.ts
  • packages/web-platform/offscreen-document/src/webworker/OffscreenDocument.ts
  • packages/web-platform/offscreen-document/src/webworker/OffscreenElement.ts
  • packages/web-platform/offscreen-document/src/webworker/OffscreenEvent.ts
  • packages/web-platform/offscreen-document/src/webworker/index.ts
  • packages/web-platform/offscreen-document/tsconfig.json
  • packages/web-platform/tsconfig.json
  • packages/web-platform/web-constants/CHANGELOG.md
  • packages/web-platform/web-constants/LICENSE.txt
  • packages/web-platform/web-constants/Notice.txt
  • packages/web-platform/web-constants/README.md
  • packages/web-platform/web-constants/package.json
  • packages/web-platform/web-constants/src/constants.ts
  • packages/web-platform/web-constants/src/endpoints.ts
  • packages/web-platform/web-constants/src/eventName.ts
  • packages/web-platform/web-constants/src/index.ts
  • packages/web-platform/web-constants/src/types/BackThreadStartConfigs.ts
  • packages/web-platform/web-constants/src/types/Element.ts
  • packages/web-platform/web-constants/src/types/EventType.ts
  • packages/web-platform/web-constants/src/types/FlushElementTreeOptions.ts
  • packages/web-platform/web-constants/src/types/I18n.ts
  • packages/web-platform/web-constants/src/types/JSRealm.ts
  • packages/web-platform/web-constants/src/types/LynxContextEventTarget.ts
  • packages/web-platform/web-constants/src/types/LynxModule.ts
  • packages/web-platform/web-constants/src/types/MainThreadGlobalThis.ts
  • packages/web-platform/web-constants/src/types/MainThreadLynx.ts
  • packages/web-platform/web-constants/src/types/MainThreadStartConfigs.ts
  • packages/web-platform/web-constants/src/types/MarkTiming.ts
  • packages/web-platform/web-constants/src/types/NativeApp.ts
  • packages/web-platform/web-constants/src/types/PageConfig.ts
  • packages/web-platform/web-constants/src/types/Performance.ts
  • packages/web-platform/web-constants/src/types/SSR.ts
  • packages/web-platform/web-constants/src/types/StyleInfo.ts
  • packages/web-platform/web-constants/src/types/TemplateLoader.ts
  • packages/web-platform/web-constants/src/types/index.ts
  • packages/web-platform/web-constants/src/utils/LynxCrossThreadContext.ts
  • packages/web-platform/web-constants/src/utils/generateTemplate.ts
  • packages/web-platform/web-constants/src/utils/index.ts
  • packages/web-platform/web-constants/src/utils/markTiming.ts
  • packages/web-platform/web-constants/tsconfig.json
  • packages/web-platform/web-core-e2e/bench/server.bench.vitest.spec.ts
  • packages/web-platform/web-core-e2e/package.json
  • packages/web-platform/web-core-e2e/playwright.config.ts
  • packages/web-platform/web-core-e2e/resources/font.css
  • packages/web-platform/web-core-e2e/resources/text.txt
  • packages/web-platform/web-core-e2e/resources/web-core.main-thread.json
  • packages/web-platform/web-core-e2e/rsbuild.config.ts
  • packages/web-platform/web-core-e2e/scripts/generate-build-command.js
  • packages/web-platform/web-core-e2e/server-tests/server-e2e.test.ts
  • packages/web-platform/web-core-e2e/shell-project/devMiddleware.ts
  • packages/web-platform/web-core-e2e/shell-project/index.css
  • packages/web-platform/web-core-e2e/shell-project/index.ts
  • packages/web-platform/web-core-e2e/shell-project/ssr.html
  • packages/web-platform/web-core-e2e/tests/common.css
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts
💤 Files with no reviewable changes (51)
  • packages/web-platform/offscreen-document/Notice.txt
  • packages/web-platform/offscreen-document/README.md
  • packages/web-platform/web-constants/CHANGELOG.md
  • packages/web-platform/web-constants/LICENSE.txt
  • packages/web-platform/web-constants/README.md
  • .typos.toml
  • packages/web-platform/offscreen-document/src/types/index.ts
  • packages/web-platform/offscreen-document/src/main/index.ts
  • packages/web-platform/offscreen-document/CHANGELOG.md
  • packages/web-platform/offscreen-document/tsconfig.json
  • packages/web-platform/web-constants/src/types/FlushElementTreeOptions.ts
  • packages/web-platform/web-constants/package.json
  • packages/web-platform/web-constants/src/types/TemplateLoader.ts
  • packages/web-platform/web-constants/tsconfig.json
  • packages/web-platform/offscreen-document/src/index.ts
  • packages/web-platform/web-constants/src/types/MainThreadLynx.ts
  • packages/web-platform/web-constants/src/types/BackThreadStartConfigs.ts
  • packages/repl/package.json
  • packages/web-platform/web-constants/src/types/MarkTiming.ts
  • packages/web-platform/web-constants/src/types/JSRealm.ts
  • packages/web-platform/web-constants/src/endpoints.ts
  • packages/web-platform/web-constants/src/types/PageConfig.ts
  • packages/web-platform/offscreen-document/src/types/ElementOperation.ts
  • packages/web-platform/web-constants/src/utils/LynxCrossThreadContext.ts
  • packages/web-platform/web-constants/src/types/MainThreadStartConfigs.ts
  • packages/web-platform/tsconfig.json
  • packages/web-platform/web-constants/src/utils/index.ts
  • packages/web-platform/offscreen-document/package.json
  • packages/web-platform/web-constants/src/types/NativeApp.ts
  • packages/web-platform/web-constants/src/index.ts
  • packages/web-platform/web-constants/src/types/SSR.ts
  • packages/web-platform/web-constants/src/utils/markTiming.ts
  • packages/web-platform/offscreen-document/src/webworker/index.ts
  • packages/web-platform/offscreen-document/src/webworker/OffscreenEvent.ts
  • packages/web-platform/web-constants/Notice.txt
  • packages/web-platform/web-constants/src/eventName.ts
  • packages/web-platform/offscreen-document/src/webworker/OffscreenCSSStyleDeclaration.ts
  • packages/web-platform/web-constants/src/types/StyleInfo.ts
  • packages/web-platform/web-constants/src/types/LynxModule.ts
  • packages/web-platform/web-constants/src/utils/generateTemplate.ts
  • packages/web-platform/web-constants/src/types/Element.ts
  • packages/web-platform/web-constants/src/types/LynxContextEventTarget.ts
  • packages/web-platform/web-constants/src/constants.ts
  • packages/web-platform/offscreen-document/src/main/initOffscreenDocument.ts
  • packages/web-platform/offscreen-document/src/webworker/OffscreenDocument.ts
  • packages/web-platform/web-constants/src/types/I18n.ts
  • packages/web-platform/web-constants/src/types/EventType.ts
  • packages/web-platform/offscreen-document/src/webworker/OffscreenElement.ts
  • packages/web-platform/web-constants/src/types/index.ts
  • packages/web-platform/web-constants/src/types/Performance.ts
  • packages/web-platform/web-constants/src/types/MainThreadGlobalThis.ts
✅ Files skipped from review due to trivial changes (8)
  • packages/web-platform/web-core-e2e/shell-project/ssr.html
  • packages/web-platform/web-core-e2e/server-tests/server-e2e.test.ts
  • packages/web-platform/web-core-e2e/rsbuild.config.ts
  • packages/web-platform/web-core-e2e/shell-project/index.ts
  • packages/repl/src/components/PreviewPane.tsx
  • packages/web-platform/web-core-e2e/shell-project/devMiddleware.ts
  • Cargo.toml
  • packages/web-platform/web-core-e2e/bench/server.bench.vitest.spec.ts
🚧 Files skipped from review as they are similar to previous changes (7)
  • packages/repl/src/App.tsx
  • packages/repl/src/index.tsx
  • .changeset/config.json
  • packages/web-platform/web-core-e2e/tests/reactlynx.spec.ts
  • packages/repl/src/bundler/template-builder.ts
  • packages/repl/src/components/LynxPreview.tsx
  • packages/web-platform/web-core-e2e/package.json

Comment thread .changeset/bitter-emus-camp.md
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.

♻️ Duplicate comments (1)
.changeset/bitter-emus-camp.md (1)

9-9: ⚠️ Potential issue | 🟡 Minor

Address the hyphenation issue in the release notes.

The compound adjective "pure JS/TS based" should be hyphenated as "pure JS/TS-based" when it precedes the noun it modifies.

📝 Proposed fix
-This release marks a major architectural upgrade for the web platform. The experimental, WASM-powered engine formerly known as `web-core-wasm` has been fully stabilized and merged into the main branch, completely replacing the previous pure JS/TS based `web-core` implementation. This consolidation massively improves execution performance and aligns the API boundaries of the Web platform directly with other native Lynx implementations.
+This release marks a major architectural upgrade for the web platform. The experimental, WASM-powered engine formerly known as `web-core-wasm` has been fully stabilized and merged into the main branch, completely replacing the previous pure JS/TS-based `web-core` implementation. This consolidation massively improves execution performance and aligns the API boundaries of the Web platform directly with other native Lynx implementations.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.changeset/bitter-emus-camp.md at line 9, Update the release note text to
hyphenate the compound adjective: replace the phrase "pure JS/TS based
`web-core` implementation" with "pure JS/TS-based `web-core` implementation" in
the .changeset release description so the modifier is correctly hyphenated
before the noun.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In @.changeset/bitter-emus-camp.md:
- Line 9: Update the release note text to hyphenate the compound adjective:
replace the phrase "pure JS/TS based `web-core` implementation" with "pure
JS/TS-based `web-core` implementation" in the .changeset release description so
the modifier is correctly hyphenated before the noun.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 7513fd8b-47d9-4147-a452-8b42237d48bc

📥 Commits

Reviewing files that changed from the base of the PR and between 24530c8 and a3f8f37.

📒 Files selected for processing (1)
  • .changeset/bitter-emus-camp.md

Copy link
Copy Markdown
Collaborator

@Huxpro Huxpro left a comment

Choose a reason for hiding this comment

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

SHIIIIP

@PupilTong PupilTong merged commit 518c310 into lynx-family:main Mar 24, 2026
129 of 140 checks passed
colinaaa pushed a commit that referenced this pull request Apr 6, 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/rspeedy@0.14.0

### Minor Changes

- feat: add `Minify.mainThreadOptions` and `Minify.backgroundOptions`
for thread-specific minifier.
([#2336](#2336))

### Patch Changes

- Bump Rsbuild v1.7.4 with Rspack v1.7.10.
([#2384](#2384))

-   Updated dependencies \[]:
    -   @lynx-js/web-rsbuild-server-middleware@0.20.0

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

### Minor Changes

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

Simplify the API for external bundle builds by `externalsPresets` and
`externalsPresetDefinitions`.

### Patch Changes

- Preserve the default external-bundle `output.minify.jsOptions` when
users set `output.minify: true` in `defineExternalBundleRslibConfig`, so
required minifier options are not lost.
([#2390](#2390))

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

### Minor Changes

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

Simplify the API for external bundle builds by `externalsPresets` and
`externalsPresetDefinitions`.

### Patch Changes

- Updated dependencies
\[[`7b7a0c6`](7b7a0c6)]:
    -   @lynx-js/externals-loading-webpack-plugin@0.1.0

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

### Minor Changes

- feat: support `optimizeBundleSize` option to remove unused code for
main-thread and background.
([#2336](#2336))

- If `optimizeBundleSize` is `true` or `optimizeBundleSize.background`
is `true`, `lynx.registerDataProcessors` calls will be marked as pure
for the background thread output.
- If `optimizeBundleSize` is `true` or `optimizeBundleSize.mainThread`
is `true`, `NativeModules.call` and `lynx.getJSModule` calls will be
marked as pure for the main-thread output.

### Patch Changes

- refactor: remove `modifyWebpackChain` since Rsbuild 2.0 dropped
webpack support
([#2397](#2397))

- Updated dependencies
\[[`9193711`](9193711)]:
    -   @lynx-js/template-webpack-plugin@0.10.7
    -   @lynx-js/css-extract-webpack-plugin@0.7.0
    -   @lynx-js/react-webpack-plugin@0.8.0
    -   @lynx-js/react-alias-rsbuild-plugin@0.14.0
    -   @lynx-js/use-sync-external-store@1.5.0
    -   @lynx-js/react-refresh-webpack-plugin@0.3.5

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

### Minor Changes

- **This is a breaking change**
([#2322](#2322))

    ## Architectural Upgrade: `web-core-wasm` replaces `web-core`

This release marks a major architectural upgrade for the web platform.
The experimental, WASM-powered engine formerly known as `web-core-wasm`
has been fully stabilized and merged into the main branch, completely
replacing the previous pure JS/TS based `web-core` implementation. This
consolidation massively improves execution performance and aligns the
API boundaries of the Web platform directly with other native Lynx
implementations.

    ### 🎉 Added Features

- **Core API Enhancements**: Successfully exposed and supported
`__QuerySelector` and `__InvokeUIMethod` methods.
- **Security & CSP Compliance**: Added a `nonce` attribute to the
iframe's `srcdoc` script execution, strengthening Content Security
Policy (CSP) compliance.
    -   **`<lynx-view>` Parameter Enhancements**:
- Added the `browser-config` attribute and property to `<lynx-view>`.
Development environments can now supply a `BrowserConfig` object (e.g.,
configuring `pixelRatio`, `pixelWidth`, `pixelHeight`) allowing the
`systemInfo` payload to be dynamically configured at the instance level.

    ### 🔄 Changed Features

- **Legacy JSON Backwards Compatibility**: Delivered comprehensive fixes
and optimizations to deeply support legacy JSON output templates:
- Added support for lazy loading execution mode (`lazy usage`).
- Implemented the correct decoding and handling of `@keyframe` animation
rules.
- Rectified rule scoping matching including scoped CSS, root selectors,
and type selectors.

- **Ecosystem Migration**: Updated testing and ecosystem applications
(such as `web-explorer` and `shell-project`) to migrate away from
obsolete fragmented dependencies. The new WASM architecture seamlessly
integrates Element APIs and CSS directly inside the core client module,
requiring a much simpler initialization footprint.

        **Before (Legacy `web-core` + `web-elements`):**

        ```typescript
        // Required multiple imports to assemble the environment
        import "@lynx-js/web-core/client";
import type { LynxViewElement as LynxView } from "@lynx-js/web-core";

        // Had to manually import separate elements and their CSS
        import "@lynx-js/web-elements/index.css";
        import "@lynx-js/web-elements/all";

const lynxView = document.createElement("lynx-view") as LynxView;
        // ...
        ```

        **After (New `web-core` unified architecture):**

        ```typescript
// The new engine natively registers Web Components and injects
fundamental CSS
        import "@lynx-js/web-core/client";
import type { LynxViewElement as LynxView } from
"@lynx-js/web-core/client";

const lynxView = document.createElement("lynx-view") as LynxView;
        // ...
        ```

_(Applications can now drop `@lynx-js/web-elements` entirely from their
`package.json` dependencies)._

- **Dependency & Boot Sequence Improvements**: Re-architected module
loading pathways. Promoted `wasm-feature-detect` directly to a core
dependency, and hardened the web worker count initialization assertions.

- **Initialization Optimizations**: Converted `SERVER_IN_SHADOW_CSS`
initialization bounds to use compilation-time constant expressions for
better optimization.

    ### 🗑️ Deleted Features & Structural Deprecations

    -   **`<lynx-view>` Parameter Removals**:
- Removed the `thread-strategy` property and attribute. Historically,
this permitted consumers to toggle between `'multi-thread'` and
`'all-on-ui'` modes depending on how they wanted the background logic to
be executed. The WASM-driven architecture enforces a consolidated
concurrency model, deprecating this `<lynx-view>` attribute entirely.
- Removed the `overrideLynxTagToHTMLTagMap` property/attribute. HTML tag
overriding mechanism has been deprecated in the new engine.
- Removed the `customTemplateLoader` property handler from
`<lynx-view>`.
- Removed the `inject-head-links` property and attribute
(`injectHeadLinks`), which previously was used to automatically inject
`<link rel="stylesheet">` tags from the document head into the
`lynx-view` shadow root.
- **Fragmented Packages Removal**: The new cohesive WASM architecture
native to `@lynx-js/web-core` handles cross-thread communication, worker
boundaries, and rendering loops uniformly. Consequently, multiple
obsolete packages have been completely removed from the workspace:
        -   `@lynx-js/web-mainthread-apis`
        -   `@lynx-js/web-worker-runtime`
        -   `@lynx-js/web-core-server`
- `@lynx-js/web-core-wasm-e2e` (transitioned into standard test suites)

- Added support for `rpx` unit
([#2377](#2377))

    **This is a breaking change**

    The following Styles has been added to `web-core`

    ```css
    lynx-view {
      width: 100%;
      container-name: lynx-view;
      container-type: inline-size;
      --rpx-unit: 1cqw;
    }
    ```

    Check MDN for the details about these styles:

-
<https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/container-name>
-
<https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/container-type>
-
<https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Containment/Container_queries>

    ### how it works?

    For the following code

    ```html
    <view style="height:1rpx"></view>
    ```

    it will be transformed to

    ```html
    <view style="height:calc(1 * var(--rpx-unit))"></view>
    ```

Therefore you could use any `<length>` value to replace the unit, for
example:

    ```html
    <lynx-view style="--rpx-unit:1px"></lynx-view>
    ```

    By default, the --rpx-unit value is `1cqw`

- Added support for transform `vw` and `vh` unit
([#2377](#2377))

Add `transform-vw` and `transform-vh` attributes and properties on
`<lynx-view>`.

    For the following code

    ```html
    <view style="height:1vw"></view>
    ```

If the `transform-vw` is enabled `<lynx-view transform-vw="true">`, it
will be transformed to

    ```html
    <view style="height:calc(1 * var(--vw-unit))"></view>
    ```

Therefore you could use any `<length>` value to replace the unit, for
example:

    ```html
    <lynx-view style="--vw-unit:1px"></lynx-view>
    ```

### Patch Changes

- feat(web-core): add `is_bubble` parameter to `common_event_handler` to
properly handle non-bubbling events like `window.Event('click', {
bubbles: false })`.
([#2399](#2399))

- chore: update readme
([#2380](#2380))

- fix: the output format should be module
([#2388](#2388))

- opt: use opt-level 3 to compile wasm
([#2371](#2371))

- fix(web-core): avoid partial bundle loading and double fetching when
fetchBundle is called concurrently for the same url.
([#2386](#2386))

- fix(web-core): fallback to the original export chunk when
`processEvalResult` is absent during `queryComponent` execution
([#2399](#2399))

- fix: tokenizing inline style values correctly to support rpx and ppx
unit conversion
([#2381](#2381))

This fixes an issue where the `transform_inline_style_key_value_vec` API
bypassed the CSS tokenizer, preventing dimension units like `rpx` or
`ppx` from being successfully transformed into `calc` strings when
specified via inline styles.

- feat: add mts lynx.querySelectorAll API
([#2382](#2382))

- fix: mts in lazy component
([#2375](#2375))

- fix: enableJSDataProcessor not work
([#2372](#2372))

- feat: add `ppx` unit support for CSS, transforming to `calc(... *
var(--ppx-unit))` directly.
([#2381](#2381))

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

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

### Minor Changes

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

Simplify the API for external bundle builds by `externalsPresets` and
`externalsPresetDefinitions`.

## @lynx-js/devtool-connector@0.1.1

### Patch Changes

- fix: align GlobalKeys with Android DevToolSettings keys and filter
global switch responses
([#2392](#2392))

## @lynx-js/devtool-mcp-server@0.5.1

### Patch Changes

- Updated dependencies
\[[`95fff27`](95fff27)]:
    -   @lynx-js/devtool-connector@0.1.1

## @lynx-js/react@0.117.1

### Patch Changes

- Update preact version to simplify `setProperty` implementation
([#2367](#2367))

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

### Patch Changes

- Add a new `entry` export to `@lynx-js/react-umd` for reuse by wrapper
libraries of `@lynx-js/react`.
([#2370](#2370))

## create-rspeedy@0.14.0

### Patch Changes

- Add optional Lynx DevTool skill.
([#2421](#2421))

- move Vitest integration to create-rstack extraTools and merge the
Vitest templates into a single incremental overlay
([#2408](#2408))

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

### Patch Changes

- Updated dependencies
\[[`95fff27`](95fff27)]:
    -   @lynx-js/devtool-connector@0.1.1

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

### Patch Changes

- use path.posix.format instead of path.format to ensure consistent path
separators across platforms
([#2359](#2359))

- Updated dependencies
\[[`75960cd`](75960cd),
[`518c310`](518c310),
[`863469e`](863469e),
[`dc18c5c`](dc18c5c),
[`7d242f3`](7d242f3),
[`62bebcf`](62bebcf),
[`75960cd`](75960cd),
[`182f568`](182f568),
[`1aa051d`](1aa051d),
[`6b46f7e`](6b46f7e),
[`fcda36a`](fcda36a),
[`182f568`](182f568),
[`138f727`](138f727),
[`138f727`](138f727)]:
    -   @lynx-js/web-core@0.20.0

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



## upgrade-rspeedy@0.14.0



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



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

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.

4 participants