Skip to content

refactor(create-rspeedy): move vitest scaffold to extraTools overlay#2408

Merged
colinaaa merged 1 commit intolynx-family:mainfrom
colinaaa:opencode/neon-panda
Mar 31, 2026
Merged

refactor(create-rspeedy): move vitest scaffold to extraTools overlay#2408
colinaaa merged 1 commit intolynx-family:mainfrom
colinaaa:opencode/neon-panda

Conversation

@colinaaa
Copy link
Copy Markdown
Collaborator

@colinaaa colinaaa commented Mar 31, 2026

Summary

  • move create-rspeedy Vitest setup from template-name branching into extraTools (vitest-rltl) so scaffolding matches create-rstack usage
  • merge template-react-vitest-rltl-js and template-react-vitest-rltl-ts into a single incremental template-react-vitest-rltl overlay containing only Vitest-specific additions
  • update publish regression workflow to generate Vitest projects via --template react --tools eslint,vitest-rltl and add a changeset for create-rspeedy

Test Plan

  • not run locally in this environment (dependencies/toolchain not installed)

Summary by CodeRabbit

Release Notes

  • Refactor
    • Consolidated Vitest template options into a unified structure for simplified project configuration
    • Reorganized Vitest integration to be available as an optional development tool addition
    • Streamlined template selection by reducing the number of distinct template variants

@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Mar 31, 2026

🦋 Changeset detected

Latest commit: ed50d94

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

This PR includes changesets to release 3 packages
Name Type
create-rspeedy Patch
@lynx-js/rspeedy Patch
upgrade-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

@chatgpt-codex-connector
Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 31, 2026

📝 Walkthrough

Walkthrough

The PR consolidates Vitest integration for React templates by removing dedicated template-react-vitest-rltl variants (JS and TS) and restructuring Vitest as an extraTools overlay mechanism in create-rspeedy. The main entry point is refactored to simplify template naming and add conditional extraTools configuration, while the test workflow is updated to reflect the new tool-based approach.

Changes

Cohort / File(s) Summary
Release and Workflow Configuration
.changeset/swift-spoons-smile.md, .github/workflows/test.yml
Added changeset marking patch release; updated regression test to use --template react --tools eslint,vitest-rltl instead of dedicated template variant.
Core CLI Refactoring
packages/rspeedy/create-rspeedy/src/index.ts
Simplified template naming (removed tools dimension), added copyFolder import, removed interactive tool selection, implemented extraTools configuration for vitest-rltl with conditional activation for react-js/ts templates, reworked template parsing and ESLint mapping logic.
Deleted Template Variant (JS)
packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/...
Removed entire JS template variant including lynx.config.js, package.json, App.jsx component, test suite, entry point, flappy physics engine, and useFlappy hook.
Deleted Template Variant (TS)
packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/...
Removed entire TS template variant including configuration files (lynx.config.ts, tsconfig.json, tsconfig.node.json, vitest.config.ts), source files (App.tsx, index.tsx, useFlappy.ts), test suite, flappy physics engine, and type definitions.
New Overlay Template
packages/rspeedy/create-rspeedy/template-react-vitest-rltl/package.json, packages/rspeedy/create-rspeedy/template-react-vitest-rltl/src/__tests__/index.test.jsx
Added incremental overlay template with test script and dev dependencies (vitest, jsdom, @testing-library/jest-dom), plus basic test for App component.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested reviewers

  • upupming
  • luhc228

Poem

🐰 Whiskers twitch at templates once so grand,
Now vitest joins the overlay band,
No more duplication's clever dance—
One template template takes a chance!
Flappy's gone, the code's more light,
Configuration burning oh-so bright!

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main refactoring: moving Vitest scaffolding from separate templates into an extraTools overlay mechanism.

✏️ 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 31, 2026

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
4714 1 4713 94
View the top 1 failed test(s) by shortest run time
packages/rspeedy/plugin-react/test/config.test.ts > Config > transform configs > defineDCE should correctly eliminate dead code for compilation macros
Stack Traces | 0.167s run time
AssertionError: expected '"use strict";NativeModules.call("back…' to contain 'Config is: profile-off-mode'

Expected: "Config is: profile-off-mode"
Received: ""use strict";NativeModules.call("background-only"),lynx.registerDataProcessors("main-thread-only"),console.warn("default console.warn");"

 ❯ test/config.test.ts:2073:25
View the full list of 2 ❄️ flaky test(s)
packages/rspeedy/plugin-react/test/config.test.ts > Config > transform configs > minify should remove thread-specific pure funcs from built outputs

Flake rate in main: 14.29% (Passed 18 times, Failed 3 times)

Stack Traces | 0.13s run time
AssertionError: expected main-thread and background outputs to exist
 ❯ test/config.test.ts:2141:16
packages/rspeedy/plugin-react/test/optimizeBundleSize.test.ts > optimizeBundleSize > basic usage

Flake rate in main: 9.52% (Passed 19 times, Failed 2 times)

Stack Traces | 1.92s run time
AssertionError: expected main-thread and background outputs to exist
 ❯ getCode test/optimizeBundleSize.test.ts:32:12
 ❯ test/optimizeBundleSize.test.ts:68:48

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

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.

🧹 Nitpick comments (1)
packages/rspeedy/create-rspeedy/src/index.ts (1)

100-113: Unreachable default case in switch statement.

The default case on line 110-111 is unreachable because line 103 already returns null when lang is neither 'js' nor 'ts'. Consider removing the dead code for clarity.

♻️ Proposed simplification
   mapESLintTemplate(templateName) {
     const lang = templateName.split('-').at(-1)
 
     if (lang !== 'js' && lang !== 'ts') return null
 
-    switch (lang) {
-      case 'js':
-        return 'react-js'
-      case 'ts':
-        return 'react-ts'
-      default:
-        return null
-    }
+    return lang === 'js' ? 'react-js' : 'react-ts'
   },
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/rspeedy/create-rspeedy/src/index.ts` around lines 100 - 113, The
switch in mapESLintTemplate redundantly includes an unreachable default because
lang is already guarded by the earlier if (lang !== 'js' && lang !== 'ts')
return null; — remove the default branch (or drop the initial guard and let the
switch handle all cases) so only the explicit cases remain; locate
mapESLintTemplate and adjust the control flow around the templateName -> lang
extraction to keep behavior unchanged while eliminating the dead default branch.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@packages/rspeedy/create-rspeedy/src/index.ts`:
- Around line 100-113: The switch in mapESLintTemplate redundantly includes an
unreachable default because lang is already guarded by the earlier if (lang !==
'js' && lang !== 'ts') return null; — remove the default branch (or drop the
initial guard and let the switch handle all cases) so only the explicit cases
remain; locate mapESLintTemplate and adjust the control flow around the
templateName -> lang extraction to keep behavior unchanged while eliminating the
dead default branch.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 1bbe9437-6848-4dc5-9939-fced93e2d52c

📥 Commits

Reviewing files that changed from the base of the PR and between 0f9d14b and ed50d94.

📒 Files selected for processing (25)
  • .changeset/swift-spoons-smile.md
  • .github/workflows/test.yml
  • packages/rspeedy/create-rspeedy/src/index.ts
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/lynx.config.js
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/package.json
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/App.jsx
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/__tests__/index.test.jsx
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/index.jsx
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/lib/flappy.js
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/useFlappy.js
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/lynx.config.ts
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/package.json
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/App.tsx
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/__tests__/index.test.tsx
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/index.tsx
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/lib/flappy.ts
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/rspeedy-env.d.ts
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/tsconfig.json
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/useFlappy.ts
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/tsconfig.json
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/tsconfig.node.json
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/vitest.config.ts
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl/package.json
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl/src/__tests__/index.test.jsx
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl/vitest.config.js
💤 Files with no reviewable changes (19)
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/rspeedy-env.d.ts
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/vitest.config.ts
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/tests/index.test.jsx
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/tsconfig.json
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/tests/index.test.tsx
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/index.jsx
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/lynx.config.ts
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/index.tsx
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/tsconfig.json
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/useFlappy.ts
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/App.jsx
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/useFlappy.js
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/tsconfig.node.json
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/lib/flappy.js
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/package.json
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/lib/flappy.ts
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/lynx.config.js
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/package.json
  • packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/App.tsx

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq bot commented Mar 31, 2026

Merging this PR will not alter performance

✅ 72 untouched benchmarks
⏩ 21 skipped benchmarks1


Comparing colinaaa:opencode/neon-panda (ed50d94) with main (0f9d14b)

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.

@relativeci
Copy link
Copy Markdown

relativeci bot commented Mar 31, 2026

React MTF Example

#124 Bundle Size — 207.36KiB (0%).

ed50d94(current) vs 0f9d14b main#118(baseline)

Bundle metrics  no changes
                 Current
#124
     Baseline
#118
No change  Initial JS 0B 0B
No change  Initial CSS 0B 0B
No change  Cache Invalidation 0% 0%
No change  Chunks 0 0
No change  Assets 3 3
No change  Modules 174 174
No change  Duplicate Modules 68 68
No change  Duplicate Code 46.09% 46.09%
No change  Packages 2 2
No change  Duplicate Packages 0 0
Bundle size by type  no changes
                 Current
#124
     Baseline
#118
No change  IMG 111.23KiB 111.23KiB
No change  Other 96.13KiB 96.13KiB

Bundle analysis reportBranch colinaaa:opencode/neon-pandaProject dashboard


Generated by RelativeCIDocumentationReport issue

@relativeci
Copy link
Copy Markdown

relativeci bot commented Mar 31, 2026

Web Explorer

#8567 Bundle Size — 728.84KiB (0%).

ed50d94(current) vs 0f9d14b main#8561(baseline)

Bundle metrics  Change 1 change
                 Current
#8567
     Baseline
#8561
No change  Initial JS 43.31KiB 43.31KiB
No change  Initial CSS 2.16KiB 2.16KiB
No change  Cache Invalidation 0% 0%
No change  Chunks 8 8
No change  Assets 10 10
No change  Modules 148 148
No change  Duplicate Modules 11 11
Change  Duplicate Code 34.7%(+0.03%) 34.69%
No change  Packages 3 3
No change  Duplicate Packages 0 0
Bundle size by type  no changes
                 Current
#8567
     Baseline
#8561
No change  Other 384.62KiB 384.62KiB
No change  JS 342.07KiB 342.07KiB
No change  CSS 2.16KiB 2.16KiB

Bundle analysis reportBranch colinaaa:opencode/neon-pandaProject dashboard


Generated by RelativeCIDocumentationReport issue

@relativeci
Copy link
Copy Markdown

relativeci bot commented Mar 31, 2026

React Example

#6991 Bundle Size — 237.78KiB (0%).

ed50d94(current) vs 0f9d14b main#6984(baseline)

Bundle metrics  no changes
                 Current
#6991
     Baseline
#6984
No change  Initial JS 0B 0B
No change  Initial CSS 0B 0B
No change  Cache Invalidation 0% 0%
No change  Chunks 0 0
No change  Assets 4 4
No change  Modules 180 180
No change  Duplicate Modules 71 71
No change  Duplicate Code 46.4% 46.4%
No change  Packages 2 2
No change  Duplicate Packages 0 0
Bundle size by type  no changes
                 Current
#6991
     Baseline
#6984
No change  IMG 145.76KiB 145.76KiB
No change  Other 92.02KiB 92.02KiB

Bundle analysis reportBranch colinaaa:opencode/neon-pandaProject dashboard


Generated by RelativeCIDocumentationReport issue

@colinaaa colinaaa merged commit 547a88b into lynx-family:main Mar 31, 2026
128 of 138 checks passed
@colinaaa colinaaa deleted the opencode/neon-panda branch March 31, 2026 08:43
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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants