Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: tailwindlabs/tailwindcss
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v4.1.3
Choose a base ref
...
head repository: tailwindlabs/tailwindcss
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v4.1.4
Choose a head ref
  • 16 commits
  • 63 files changed
  • 6 contributors

Commits on Apr 7, 2025

  1. Fix polyfill in combination with unused CSS variable removal (#17555)

    This PR fixes an issue we noticed while investigating #17553, where the
    unused CSS variable removal didn't work properly when the theme variable
    it tried to remove was modified by a polyfill rule.
    
    The way the bookkeeping for the unused CSS variable worked was that it
    tired to find the declaration inside it's parent after the traversal.
    However, the `color-mix(…)` polyfill has since then made changes to the
    declaration so it can't find it's position correctly anymore and will
    thus instead delete the last declaration of the node (this caused
    unrelated CSS variables to be eliminated while the ones with
    `color-mix(…)` were unexpectedly kept).
    
    To fix this, we decided to apply the polyfills after any eventual
    deletions. This also ensures that no `@supports` query for the variables
    are created and simplifies the code a bit since all polyfills are now
    colocated.
    
    ## Test plan
    
    - Added a unit test for the example we discovered in #17553
    - Luckily the conditions of this seemed rare enough so that it doesn't
    cause any other of our tests to update.
    
    ---------
    
    Co-authored-by: Robin Malfait <malfait.robin@gmail.com>
    philipp-spiess and RobinMalfait authored Apr 7, 2025

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    811e97d View commit details
  2. Make polyfill work when the theme variable resolves to another var (#…

    …17562)
    
    Discovered while triaging #17556
    
    This PR improves the `color-mix(...)` polyfill to ensure it works when a
    theme key links to another theme key via a `var(...)` call.
    
    Imagine this setup:
    
    ```css
     @theme {
      --color-red: var(--color-red-500);
      --color-red-500: oklch(63.7% 0.237 25.331);
    }
    @source inline("text-red/50");
    ````
    
    Since `--color-red` will link to `--color-red-500` _which is also a
    known theme variable_, we can inline the value of `--color-red-500` into
    the fallback now:
    
    ```css
    .text-red\\/50 {
      color: var(--color-red);
    }
    @supports (color: color-mix(in lab, red, red)) {
      .text-red\\/50 {
        color: color-mix(in oklab, var(--color-red) 50%, transparent);
      }
    }
    ```
    
    This will allow for slightly less confusing behavior.
    
    The code added also handles recursive definitions where a color is
    linking to another color that is again linking to the first one (by
    adding a `Set` to keep track of already seen variable names).
    
    ## Test plan
    
    - Added unit test
    philipp-spiess authored Apr 7, 2025

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    3e9cf87 View commit details
  3. Update all of react 19.0.0 → 19.1.0 (minor) (#17564)

    Here is everything you need to know about this update. Please take a
    good look at what changed and the test results before merging this pull
    request.
    
    ### What changed?
    
    
    
    
    #### ✳️ react (19.0.0 → 19.1.0) ·
    [Repo](https://github.com/facebook/react) ·
    [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
    
    
    
    <details>
    <summary>Release Notes</summary>
    <h4><a
    href="https://github.com/facebook/react/releases/tag/v19.1.0">19.1.0</a></h4>
    
    <blockquote><h3 dir="auto">Owner Stack</h3>
    <p dir="auto">An Owner Stack is a string representing the components
    that are directly responsible for rendering a particular component. You
    can log Owner Stacks when debugging or use Owner Stacks to enhance error
    overlays or other development tools. Owner Stacks are only available in
    development builds. Component Stacks in production are unchanged.</p>
    <ul dir="auto">
    <li>An Owner Stack is a development-only stack trace that helps identify
    which components are responsible for rendering a particular component.
    An Owner Stack is distinct from a Component Stacks, which shows the
    hierarchy of components leading to an error.</li>
    <li>The <a
    href="https://react.dev/reference/react/captureOwnerStack">captureOwnerStack
    API</a> is only available in development mode and returns a Owner Stack,
    if available. The API can be used to enhance error overlays or log
    component relationships when debugging. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/29923">#29923</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32353">#32353</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/30306">#30306</a>,<br>
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32538">#32538</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32529">#32529</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32538">#32538</a>
    </li>
    </ul>
    <h3 dir="auto">React</h3>
    <ul dir="auto">
    <li>Enhanced support for Suspense boundaries to be used anywhere,
    including the client, server, and during hydration. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32069">#32069</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32163">#32163</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32224">#32224</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32252">#32252</a>
    </li>
    <li>Reduced unnecessary client rendering through improved hydration
    scheduling <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31751">#31751</a>
    </li>
    <li>Increased priority of client rendered Suspense boundaries <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31776">#31776</a>
    </li>
    <li>Fixed frozen fallback states by rendering unfinished Suspense
    boundaries on the client. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31620">#31620</a>
    </li>
    <li>Reduced garbage collection pressure by improving Suspense boundary
    retries. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31667">#31667</a>
    </li>
    <li>Fixed erroneous “Waiting for Paint” log when the passive effect
    phase was not delayed <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31526">#31526</a>
    </li>
    <li>Fixed a regression causing key warnings for flattened positional
    children in development mode. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32117">#32117</a>
    </li>
    <li>Updated <code class="notranslate">useId</code> to use valid CSS
    selectors, changing format from <code class="notranslate">:r123:</code>
    to <code class="notranslate">«r123»</code>. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32001">#32001</a>
    </li>
    <li>Added a dev-only warning for null/undefined created in useEffect,
    useInsertionEffect, and useLayoutEffect. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32355">#32355</a>
    </li>
    <li>Fixed a bug where dev-only methods were exported in production
    builds. React.act is no longer available in production builds. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32200">#32200</a>
    </li>
    <li>Improved consistency across prod and dev to improve compatibility
    with Google Closure Complier and bindings <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31808">#31808</a>
    </li>
    <li>Improve passive effect scheduling for consistent task yielding. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31785">#31785</a>
    </li>
    <li>Fixed asserts in React Native when
    passChildrenWhenCloningPersistedNodes is enabled for OffscreenComponent
    rendering. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32528">#32528</a>
    </li>
    <li>Fixed component name resolution for Portal <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32640">#32640</a>
    </li>
    <li>Added support for beforetoggle and toggle events on the dialog
    element. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32479">#32479</a>
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32479">#32479</a>
    </li>
    </ul>
    <h3 dir="auto">React DOM</h3>
    <ul dir="auto">
    <li>Fixed double warning when the <code class="notranslate">href</code>
    attribute is an empty string <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31783">#31783</a>
    </li>
    <li>Fixed an edge case where <code
    class="notranslate">getHoistableRoot()</code> didn’t work properly when
    the container was a Document <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32321">#32321</a>
    </li>
    <li>Removed support for using HTML comments (e.g. <code
    class="notranslate">&lt;!-- --&gt;</code>) as a DOM container. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32250">#32250</a>
    </li>
    <li>Added support for <code class="notranslate">&lt;script&gt;</code>
    and <code class="notranslate">&lt;template&gt;</code> tags to be nested
    within <code class="notranslate">&lt;select&gt;</code> tags. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31837">#31837</a>
    </li>
    <li>Fixed responsive images to be preloaded as HTML instead of headers
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32445">#32445</a>
    </li>
    </ul>
    <h3 dir="auto">use-sync-external-store</h3>
    <ul dir="auto">
    <li>Added <code class="notranslate">exports</code> field to <code
    class="notranslate">package.json</code> for <code
    class="notranslate">use-sync-external-store</code> to support various
    entrypoints. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/25231">#25231</a>
    </li>
    </ul>
    <h3 dir="auto">React Server Components</h3>
    <ul dir="auto">
    <li>Added <code class="notranslate">unstable_prerender</code>, a new
    experimental API for prerendering React Server Components on the server
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31724">#31724</a>
    </li>
    <li>Fixed an issue where streams would hang when receiving new chunks
    after a global error <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31840">#31840</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31851">#31851</a>
    </li>
    <li>Fixed an issue where pending chunks were counted twice. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31833">#31833</a>
    </li>
    <li>Added support for streaming in edge environments <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31852">#31852</a>
    </li>
    <li>Added support for sending custom error names from a server so that
    they are available in the client for console replaying. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32116">#32116</a>
    </li>
    <li>Updated the server component wire format to remove IDs for hints and
    console.log because they have no return value <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31671">#31671</a>
    </li>
    <li>Exposed <code class="notranslate">registerServerReference</code> in
    client builds to handle server references in different environments. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32534">#32534</a>
    </li>
    <li>Added react-server-dom-parcel package which integrates Server
    Components with the <a href="https://parceljs.org/">Parcel bundler</a>
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31725">#31725</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32132">#32132</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31799">#31799</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32294">#32294</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31741">#31741</a>
    </li>
    </ul></blockquote>
    <p><em>Does any of this look wrong? <a
    href="https://depfu.com/packages/npm/react/feedback">Please let us
    know.</a></em></p>
    </details>
    
    <details>
    <summary>Commits</summary>
    <p><a
    href="https://github.com/facebook/react/compare/7aa5dda3b3e4c2baa905a59b922ae7ec14734b24...4a9df08157f001c01b078d259748512211233dcf">See
    the full diff on Github</a>. The new version differs by more commits
    than we can show here.</p>
    </details>
    
    
    
    
    #### ✳️ react-dom (19.0.0 → 19.1.0) ·
    [Repo](https://github.com/facebook/react) ·
    [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
    
    
    
    <details>
    <summary>Release Notes</summary>
    <h4><a
    href="https://github.com/facebook/react/releases/tag/v19.1.0">19.1.0</a></h4>
    
    <blockquote><h3 dir="auto">Owner Stack</h3>
    <p dir="auto">An Owner Stack is a string representing the components
    that are directly responsible for rendering a particular component. You
    can log Owner Stacks when debugging or use Owner Stacks to enhance error
    overlays or other development tools. Owner Stacks are only available in
    development builds. Component Stacks in production are unchanged.</p>
    <ul dir="auto">
    <li>An Owner Stack is a development-only stack trace that helps identify
    which components are responsible for rendering a particular component.
    An Owner Stack is distinct from a Component Stacks, which shows the
    hierarchy of components leading to an error.</li>
    <li>The <a
    href="https://react.dev/reference/react/captureOwnerStack">captureOwnerStack
    API</a> is only available in development mode and returns a Owner Stack,
    if available. The API can be used to enhance error overlays or log
    component relationships when debugging. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/29923">#29923</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32353">#32353</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/30306">#30306</a>,<br>
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32538">#32538</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32529">#32529</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32538">#32538</a>
    </li>
    </ul>
    <h3 dir="auto">React</h3>
    <ul dir="auto">
    <li>Enhanced support for Suspense boundaries to be used anywhere,
    including the client, server, and during hydration. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32069">#32069</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32163">#32163</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32224">#32224</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32252">#32252</a>
    </li>
    <li>Reduced unnecessary client rendering through improved hydration
    scheduling <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31751">#31751</a>
    </li>
    <li>Increased priority of client rendered Suspense boundaries <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31776">#31776</a>
    </li>
    <li>Fixed frozen fallback states by rendering unfinished Suspense
    boundaries on the client. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31620">#31620</a>
    </li>
    <li>Reduced garbage collection pressure by improving Suspense boundary
    retries. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31667">#31667</a>
    </li>
    <li>Fixed erroneous “Waiting for Paint” log when the passive effect
    phase was not delayed <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31526">#31526</a>
    </li>
    <li>Fixed a regression causing key warnings for flattened positional
    children in development mode. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32117">#32117</a>
    </li>
    <li>Updated <code class="notranslate">useId</code> to use valid CSS
    selectors, changing format from <code class="notranslate">:r123:</code>
    to <code class="notranslate">«r123»</code>. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32001">#32001</a>
    </li>
    <li>Added a dev-only warning for null/undefined created in useEffect,
    useInsertionEffect, and useLayoutEffect. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32355">#32355</a>
    </li>
    <li>Fixed a bug where dev-only methods were exported in production
    builds. React.act is no longer available in production builds. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32200">#32200</a>
    </li>
    <li>Improved consistency across prod and dev to improve compatibility
    with Google Closure Complier and bindings <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31808">#31808</a>
    </li>
    <li>Improve passive effect scheduling for consistent task yielding. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31785">#31785</a>
    </li>
    <li>Fixed asserts in React Native when
    passChildrenWhenCloningPersistedNodes is enabled for OffscreenComponent
    rendering. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32528">#32528</a>
    </li>
    <li>Fixed component name resolution for Portal <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32640">#32640</a>
    </li>
    <li>Added support for beforetoggle and toggle events on the dialog
    element. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32479">#32479</a>
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32479">#32479</a>
    </li>
    </ul>
    <h3 dir="auto">React DOM</h3>
    <ul dir="auto">
    <li>Fixed double warning when the <code class="notranslate">href</code>
    attribute is an empty string <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31783">#31783</a>
    </li>
    <li>Fixed an edge case where <code
    class="notranslate">getHoistableRoot()</code> didn’t work properly when
    the container was a Document <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32321">#32321</a>
    </li>
    <li>Removed support for using HTML comments (e.g. <code
    class="notranslate">&lt;!-- --&gt;</code>) as a DOM container. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32250">#32250</a>
    </li>
    <li>Added support for <code class="notranslate">&lt;script&gt;</code>
    and <code class="notranslate">&lt;template&gt;</code> tags to be nested
    within <code class="notranslate">&lt;select&gt;</code> tags. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31837">#31837</a>
    </li>
    <li>Fixed responsive images to be preloaded as HTML instead of headers
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32445">#32445</a>
    </li>
    </ul>
    <h3 dir="auto">use-sync-external-store</h3>
    <ul dir="auto">
    <li>Added <code class="notranslate">exports</code> field to <code
    class="notranslate">package.json</code> for <code
    class="notranslate">use-sync-external-store</code> to support various
    entrypoints. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/25231">#25231</a>
    </li>
    </ul>
    <h3 dir="auto">React Server Components</h3>
    <ul dir="auto">
    <li>Added <code class="notranslate">unstable_prerender</code>, a new
    experimental API for prerendering React Server Components on the server
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31724">#31724</a>
    </li>
    <li>Fixed an issue where streams would hang when receiving new chunks
    after a global error <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31840">#31840</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31851">#31851</a>
    </li>
    <li>Fixed an issue where pending chunks were counted twice. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31833">#31833</a>
    </li>
    <li>Added support for streaming in edge environments <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31852">#31852</a>
    </li>
    <li>Added support for sending custom error names from a server so that
    they are available in the client for console replaying. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32116">#32116</a>
    </li>
    <li>Updated the server component wire format to remove IDs for hints and
    console.log because they have no return value <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31671">#31671</a>
    </li>
    <li>Exposed <code class="notranslate">registerServerReference</code> in
    client builds to handle server references in different environments. <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32534">#32534</a>
    </li>
    <li>Added react-server-dom-parcel package which integrates Server
    Components with the <a href="https://parceljs.org/">Parcel bundler</a>
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31725">#31725</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32132">#32132</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31799">#31799</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/32294">#32294</a>,
    <a
    href="https://bounce.depfu.com/github.com/facebook/react/pull/31741">#31741</a>
    </li>
    </ul></blockquote>
    <p><em>Does any of this look wrong? <a
    href="https://depfu.com/packages/npm/react-dom/feedback">Please let us
    know.</a></em></p>
    </details>
    
    <details>
    <summary>Commits</summary>
    <p><a
    href="https://github.com/facebook/react/compare/7aa5dda3b3e4c2baa905a59b922ae7ec14734b24...4a9df08157f001c01b078d259748512211233dcf">See
    the full diff on Github</a>. The new version differs by more commits
    than we can show here.</p>
    </details>
    
    
    
    
    
    
    
    
    
    
    
    
    ---
    ![Depfu
    Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg)
    
    [Depfu](https://depfu.com) will automatically keep this PR
    conflict-free, as long as you don't add any commits to this branch
    yourself. You can also trigger a rebase manually by commenting with
    `@depfu rebase`.
    
    <details><summary>All Depfu comment commands</summary>
    <blockquote><dl>
    <dt>@​depfu rebase</dt><dd>Rebases against your default branch and
    redoes this update</dd>
    <dt>@​depfu recreate</dt><dd>Recreates this PR, overwriting any edits
    that you've made to it</dd>
    <dt>@​depfu merge</dt><dd>Merges this PR once your tests are passing and
    conflicts are resolved</dd>
    <dt>@​depfu cancel merge</dt><dd>Cancels automatic merging of this
    PR</dd>
    <dt>@​depfu close</dt><dd>Closes this PR and deletes the branch</dd>
    <dt>@​depfu reopen</dt><dd>Restores the branch and reopens this PR (if
    it's closed)</dd>
    <dt>@​depfu pause</dt><dd>Ignores all future updates for this dependency
    and closes this PR</dd>
    <dt>@​depfu pause [minor|major]</dt><dd>Ignores all future minor/major
    updates for this dependency and closes this PR</dd>
    <dt>@​depfu resume</dt><dd>Future versions of this dependency will
    create PRs again (leaves this PR as is)</dd>
    </dl></blockquote>
    </details>
    
    Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com>
    depfu[bot] authored Apr 7, 2025

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    76e18e6 View commit details
  4. Fix brace expansion with range going down (#17591)

    RobinMalfait authored Apr 7, 2025

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    f66d287 View commit details

Commits on Apr 9, 2025

  1. Update @types/react-dom 19.0.4 → 19.1.1 (minor) (#17619)

    depfu[bot] authored Apr 9, 2025

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    cdecb55 View commit details

Commits on Apr 11, 2025

  1. Fix container names with hyphens (#17628)

    Fixes #17614.
    
    Candidate parsing for variants only account for the root `@` if there no
    hyphens. It seems like the current logic assumes if it *does* have a
    hyphen, then it would be one of `@min` or `@max`. However, with:
    
    ```css
    @theme {
      --container-foo-bar: 1440px;
    }
    ```
    Then `@foo-bar` should be valid. However, we only check for `@foo-bar`
    and `@foo` as roots, but never `@`. This PR adds a check for `@` at the
    very end after iterating through root permutations.
    
    ---------
    
    Co-authored-by: Philipp Spiess <hello@philippspiess.com>
    wongjn and philipp-spiess authored Apr 11, 2025

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    3ab7f12 View commit details
  2. Fix fontSize array upgrade (#17630)

    Fixes #17622.
    
    Adds a specific handling case in `themeableValues()` in
    `packages/tailwindcss/src/compat/apply-config-to-theme.ts`. It seems
    like this has unique handling in v3 for an array value, whereby the
    second value is treated as a `line-height`.
    
    ---------
    
    Co-authored-by: Philipp Spiess <hello@philippspiess.com>
    wongjn and philipp-spiess authored Apr 11, 2025

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    c0af1e2 View commit details
  3. Fix shadow-inherit, inset-shadow-inherit, drop-shadow-inherit, …

    …and `text-shadow-inherit` (#17647)
    
    Fixes #17643.
    
    This PR completely removes the `color-mix()` function for
    `shadow-inherit`. This does mean intensity and alpha channel support has
    been removed when using `shadow-inherit`[^1].
    
    With intensity modifiers in #17398, all colors are wrapped in
    `color-mix()`. However, it seems `inherit` does not work as a value in
    `color-mix()` in Firefox or Chrome (don't have a means to test Safari).
    
    [^1]: While writing this, I noticed other color utilities allow alpha
    channel modifier syntax for `inherit` - do we want to look at removing
    those too?
    
    ---------
    
    Co-authored-by: Philipp Spiess <hello@philippspiess.com>
    wongjn and philipp-spiess authored Apr 11, 2025

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    6d8dd82 View commit details
  4. Add test coverage for property-specific colors (#17436)

    There are several property-specific color variables available to
    maintain compatibility with v3. [My team and I would like to use
    them](#17400),
    but would feel more comfortable if they were formally supported by v4.
    This PR adds test coverage for those features.
    
    @RobinMalfait has confirmed that these features are not intended to be
    removed, [see conversation here
    &rarr;](https://discord.com/channels/486935104384532500/546706299010678784/1355213322995110171)
    
    @crswll Has opened a PR here for the related documentation
    - tailwindlabs/tailwindcss.com#2178
    scottbedard authored Apr 11, 2025

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    3bea760 View commit details
  5. Workaround Chrome rendering bug for skew-* utilities (#17627)

    Closes #17621
    
    Chrome as a pretty ugly rendering glitch when using a `skew-*` utility
    in Tailwind 4: https://play.tailwindcss.com/HuiZtbrHOc
    
    The was not an issue in v3 since transforms were set up in a different
    way. Without the `var(…)` syntax, the difference boils down to this:
    
    ```css
    .skew-v3 {
      transform: rotate(0) skewX(-20deg);
    }
    
    .skew-v4 {
      transform: rotateX(0) rotateY(0) rotateZ(0) skewX(-20deg);
    }
    ```
    
    It appears that using any of the single-dimension rotate functions will
    cause the Chrome rendering to glitch.
    
    After doing some digging, we found [that initially these `@property`s
    were defined as type `<transform-function>` and later changed to
    `*`](#15144). With a
    type of `*`, it makes sense that the initial value of these variables
    can default to `initial` without any compromises, allowing us to default
    to something like this now:
    
    ```css
    .skew-new {
      transform: skewX(-20deg);
    }
    ```
    
    Tested this change in the latest version of Chrome (135) and it does
    make the rendering glitch in the initial issue disappear. By using the
    `var(--tw-rotate-x,)` syntax we also ensure this works on older versions
    of Safari (tested on Safari 15.5 and 16.4).
    
    Note, however, that there are still glitches happening when you combine
    rotate and skew in the latest version of Chrome or when you transition
    the `skew(…)` variable. This also happens in plain CSS with no variables
    though, so there isn't something we can do about this:
    https://play.tailwindcss.com/g3FXPEJHpn
    
    ## Test plan
    
    - Tested on latest Chrome, Firefox, and Safari as well as Safari 15.5
    and 16.4.
    
    <img width="564" alt="Screenshot 2025-04-09 at 18 01 51"
    src="https://github.com/user-attachments/assets/2e0b1c96-7c4d-41a8-b3d0-0f6134a3e635"
    />
    philipp-spiess authored Apr 11, 2025

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    6e1f533 View commit details
  6. Add experimental @tailwindcss/oxide-wasm32-wasi (#17558)

    Closes #17448
    Closes #13133
    
    This PR adds an a new Oxide target for `wasm32-wasip1-threads`:
    `@tailwindcss/oxide-wasm32-wasi`. The goal of this is to enable more
    environments to run Oxide, including (but not limited to) StackBlitz.
    
    We're making use of `napi-rs`'s upcoming v3 features to simplify the
    setup here, meaning `napi-rs` will configure the WASM target and create
    an npm package that works across Node and browser environments.
    
    ## MacOS AArch64 issues
    
    While setting up an integration test for the new WASM target, I ran into
    an issue where FS reads where not terminating on macOS. After some
    research I found this to be a limitation of the Node.js container
    interface right now, see: nodejs/node#47193
    
    ### Windows issues
    
    We also found that the Node.js wasi container does not properly support
    Windows: nodejs/uvwasi#11
    
    For now we, it's probably best for MacOS AArch64 users and Windows users
    to use the native modules instead.
    
    ## Test plan
    
    The `@tailwindcss/oxide-wasm32-wasi` npm package can be built locally
    via `pnpm build` and then run with the Oxide API. A usage example can be
    taken from the newly added integration test.
    
    Furthermore this was tested to work as a polyfill on StackBlitz:
    https://stackblitz.com/edit/vitejs-vite-uks3gt5p
    
    [ci-all]
    
    ---------
    
    Co-authored-by: Robin Malfait <malfait.robin@gmail.com>
    philipp-spiess and RobinMalfait authored Apr 11, 2025

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    83ce4c0 View commit details
  7. Fix publish step on CI (#17654)

    To publish the newly adde WASM builds, we rely on the
    `node-linker=hoisted` `.npmrc` flag that isn't read when `pnpm
    --recursive` is used. To work around it, this PR excludes the wasm
    package from the `--recursive` part and manually published it
    afterwards.
    
    
    ## Test Plan
    
    Ensured this does not error now when trying a `--dry run`.
    
    <img width="1273" alt="Screenshot 2025-04-11 at 17 43 38"
    src="https://github.com/user-attachments/assets/68a28552-0125-4da1-92ff-74e58368abe4"
    />
    philipp-spiess authored Apr 11, 2025

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    d801d8d View commit details

Commits on Apr 12, 2025

  1. Ignore binary extensions, except in folder names (#17595)

    We generate a glob to ignore binary extensions that looks something like
    this:
    ```
    *.{mp4,pages,exe,…}
    ```
    
    However, if you have a folder that happens to end in `.pages` for
    example, then this folder will be ignored in its entirety.
    
    To solve this, we added a new flag to the `Gitignore` struct so we can
    register a bunch of ignore rules that _only_ apply to paths and not
    folders.
    
    Fixes: #17569
    
    ## Test plan
    
    - Added a unit test
    
    ---------
    
    Co-authored-by: Philipp Spiess <hello@philippspiess.com>
    RobinMalfait and philipp-spiess authored Apr 12, 2025

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    bbd916a View commit details

Commits on Apr 14, 2025

  1. Update eslint 9.22.0 → 9.24.0 (minor) (#17656)

    Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com>
    Co-authored-by: Philipp Spiess <hello@philippspiess.com>
    depfu[bot] and philipp-spiess authored Apr 14, 2025

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    cf2591c View commit details
  2. Prepare v4.1.4 release (#17669)

    Co-authored-by: Adam Wathan <adam.wathan@gmail.com>
    philipp-spiess and adamwathan authored Apr 14, 2025

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    aa836d3 View commit details
  3. Fix release script

    philipp-spiess committed Apr 14, 2025
    Copy the full SHA
    25539e3 View commit details
Showing with 2,665 additions and 785 deletions.
  1. +10 −2 .github/workflows/ci.yml
  2. +11 −3 .github/workflows/integration-tests.yml
  3. +33 −8 .github/workflows/prepare-release.yml
  4. +36 −8 .github/workflows/release-insiders.yml
  5. +30 −8 .github/workflows/release.yml
  6. +20 −1 CHANGELOG.md
  7. +4 −4 Cargo.lock
  8. +24 −0 crates/ignore/src/gitignore.rs
  9. +8 −3 crates/node/.gitignore
  10. +2 −2 crates/node/Cargo.toml
  11. +1 −1 crates/node/npm/android-arm-eabi/package.json
  12. +1 −1 crates/node/npm/android-arm64/package.json
  13. +1 −1 crates/node/npm/darwin-arm64/package.json
  14. +1 −1 crates/node/npm/darwin-x64/package.json
  15. +1 −1 crates/node/npm/freebsd-x64/package.json
  16. +1 −1 crates/node/npm/linux-arm-gnueabihf/package.json
  17. +1 −1 crates/node/npm/linux-arm64-gnu/package.json
  18. +1 −1 crates/node/npm/linux-arm64-musl/package.json
  19. +1 −1 crates/node/npm/linux-x64-gnu/package.json
  20. +1 −1 crates/node/npm/linux-x64-musl/package.json
  21. +1 −0 crates/node/npm/wasm32-wasi/.gitignore
  22. +1 −0 crates/node/npm/wasm32-wasi/.npmrc
  23. +3 −0 crates/node/npm/wasm32-wasi/README.md
  24. +45 −0 crates/node/npm/wasm32-wasi/package.json
  25. +1 −1 crates/node/npm/win32-arm64-msvc/package.json
  26. +1 −1 crates/node/npm/win32-x64-msvc/package.json
  27. +32 −19 crates/node/package.json
  28. +37 −0 crates/node/scripts/move-artifacts.mjs
  29. +9 −3 crates/oxide/src/scanner/auto_source_detection.rs
  30. +3 −1 crates/oxide/src/scanner/mod.rs
  31. +25 −0 crates/oxide/tests/scanner.rs
  32. +59 −0 integrations/oxide/wasm.test.ts
  33. 0 integrations/{workers/index.test.ts → oxide/workers.test.ts}
  34. +8 −0 integrations/upgrade/js-config.test.ts
  35. +1 −1 packages/@tailwindcss-browser/package.json
  36. +1 −1 packages/@tailwindcss-cli/package.json
  37. +1 −1 packages/@tailwindcss-node/package.json
  38. +1 −1 packages/@tailwindcss-postcss/package.json
  39. +1 −1 packages/@tailwindcss-standalone/package.json
  40. +1 −1 packages/@tailwindcss-upgrade/package.json
  41. +1 −1 packages/@tailwindcss-vite/package.json
  42. +1 −1 packages/tailwindcss/package.json
  43. +45 −0 packages/tailwindcss/src/__snapshots__/utilities.test.ts.snap
  44. +103 −70 packages/tailwindcss/src/ast.ts
  45. +30 −0 packages/tailwindcss/src/candidate.test.ts
  46. +8 −10 packages/tailwindcss/src/candidate.ts
  47. +18 −0 packages/tailwindcss/src/compat/apply-config-to-theme.test.ts
  48. +10 −1 packages/tailwindcss/src/compat/apply-config-to-theme.ts
  49. +13 −13 packages/tailwindcss/src/compat/config.test.ts
  50. +45 −45 packages/tailwindcss/src/compat/plugin-api.test.ts
  51. +8 −8 packages/tailwindcss/src/css-functions.test.ts
  52. +202 −0 packages/tailwindcss/src/index.test.ts
  53. +399 −353 packages/tailwindcss/src/utilities.test.ts
  54. +30 −10 packages/tailwindcss/src/utilities.ts
  55. +5 −6 packages/tailwindcss/src/utils/brace-expansion.test.ts
  56. +7 −10 packages/tailwindcss/src/utils/brace-expansion.ts
  57. +44 −1 packages/tailwindcss/src/variants.test.ts
  58. +4 −4 playgrounds/nextjs/package.json
  59. +4 −4 playgrounds/v3/package.json
  60. +3 −3 playgrounds/vite/package.json
  61. +1,264 −152 pnpm-lock.yaml
  62. +0 −12 scripts/pack-packages.mjs
  63. +2 −1 scripts/version-packages.mjs
12 changes: 10 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -67,12 +67,20 @@ jobs:
uses: actions/cache@v4
with:
path: |
./target/
./crates/node/*.node
./crates/node/index.js
./crates/node/*.wasm
./crates/node/index.d.ts
./crates/node/index.js
./crates/node/browser.js
./crates/node/tailwindcss-oxide.wasi-browser.js
./crates/node/tailwindcss-oxide.wasi.cjs
./crates/node/wasi-worker-browser.mjs
./crates/node/wasi-worker.mjs
key: ${{ runner.os }}-oxide-${{ hashFiles('./crates/**/*') }}

- name: Setup WASM target
run: rustup target add wasm32-wasip1-threads

- name: Install dependencies
run: pnpm install

14 changes: 11 additions & 3 deletions .github/workflows/integration-tests.yml
Original file line number Diff line number Diff line change
@@ -30,7 +30,7 @@ jobs:
- vite
- cli
- postcss
- workers
- oxide
- webpack

# Exclude windows and macos from being built on feature branches
@@ -76,12 +76,20 @@ jobs:
uses: actions/cache@v4
with:
path: |
./target/
./crates/node/*.node
./crates/node/index.js
./crates/node/*.wasm
./crates/node/index.d.ts
./crates/node/index.js
./crates/node/browser.js
./crates/node/tailwindcss-oxide.wasi-browser.js
./crates/node/tailwindcss-oxide.wasi.cjs
./crates/node/wasi-worker-browser.mjs
./crates/node/wasi-worker.mjs
key: ${{ runner.os }}-oxide-${{ hashFiles('./crates/**/*') }}

- name: Setup WASM target
run: rustup target add wasm32-wasip1-threads

- name: Install dependencies
run: pnpm install

41 changes: 33 additions & 8 deletions .github/workflows/prepare-release.yml
Original file line number Diff line number Diff line change
@@ -68,7 +68,7 @@ jobs:
container:
image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine

name: Build ${{ matrix.target }} (OXIDE)
name: Build ${{ matrix.target }} (oxide)
runs-on: ${{ matrix.os }}
container: ${{ matrix.container }}
timeout-minutes: 15
@@ -82,6 +82,12 @@ jobs:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'

- name: Install gcc-arm-linux-gnueabihf
if: ${{ matrix.target == 'armv7-unknown-linux-gnueabihf' }}
run: |
sudo apt-get update
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y
# Cargo already skips downloading dependencies if they already exist
- name: Cache cargo
uses: actions/cache@v4
@@ -99,10 +105,15 @@ jobs:
uses: actions/cache@v4
with:
path: |
./oxide/target/
./crates/node/*.node
./crates/node/index.js
./crates/node/*.wasm
./crates/node/index.d.ts
./crates/node/index.js
./crates/node/browser.js
./crates/node/tailwindcss-oxide.wasi-browser.js
./crates/node/tailwindcss-oxide.wasi.cjs
./crates/node/wasi-worker-browser.mjs
./crates/node/wasi-worker.mjs
key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./crates/**/*') }}

- name: Install Node.JS
@@ -122,7 +133,7 @@ jobs:
run: pnpm install --ignore-scripts --filter=!./playgrounds/*

- name: Build release
run: pnpm run --filter ${{ env.OXIDE_LOCATION }} build
run: pnpm run --filter ${{ env.OXIDE_LOCATION }} build:platform --target=${{ matrix.target }}
env:
RUST_TARGET: ${{ matrix.target }}
JEMALLOC_SYS_WITH_LG_PAGE: ${{ matrix.page-size }}
@@ -172,7 +183,7 @@ jobs:
node -v
echo "~~~~ pnpm --version ~~~~"
pnpm --version
pnpm run --filter ${{ env.OXIDE_LOCATION }} build
pnpm run --filter ${{ env.OXIDE_LOCATION }} build:platform
strip -x ${{ env.OXIDE_LOCATION }}/*.node
ls -la ${{ env.OXIDE_LOCATION }}
- name: Upload artifacts
@@ -233,12 +244,20 @@ jobs:
uses: actions/cache@v4
with:
path: |
./oxide/target/
./crates/node/*.node
./crates/node/index.js
./crates/node/*.wasm
./crates/node/index.d.ts
./crates/node/index.js
./crates/node/browser.js
./crates/node/tailwindcss-oxide.wasi-browser.js
./crates/node/tailwindcss-oxide.wasi.cjs
./crates/node/wasi-worker-browser.mjs
./crates/node/wasi-worker.mjs
key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./crates/**/*') }}

- name: Setup WASM target
run: rustup target add wasm32-wasip1-threads

- name: Install dependencies
run: pnpm --filter=!./playgrounds/* install

@@ -281,12 +300,18 @@ jobs:
echo "$RELEASE_NOTES" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: Upload Standalone Artifacts
- name: Upload standalone artifacts
uses: actions/upload-artifact@v4
with:
name: tailwindcss-standalone
path: packages/@tailwindcss-standalone/dist/

- name: Upload npm package tarballs
uses: actions/upload-artifact@v4
with:
name: npm-package-tarballs
path: dist/*.tgz

- name: Prepare GitHub Release
uses: softprops/action-gh-release@v2
with:
44 changes: 36 additions & 8 deletions .github/workflows/release-insiders.yml
Original file line number Diff line number Diff line change
@@ -67,7 +67,7 @@ jobs:
container:
image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine

name: Build ${{ matrix.target }} (OXIDE)
name: Build ${{ matrix.target }} (oxide)
runs-on: ${{ matrix.os }}
container: ${{ matrix.container }}
timeout-minutes: 15
@@ -81,6 +81,12 @@ jobs:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'

- name: Install gcc-arm-linux-gnueabihf
if: ${{ matrix.target == 'armv7-unknown-linux-gnueabihf' }}
run: |
sudo apt-get update
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y
# Cargo already skips downloading dependencies if they already exist
- name: Cache cargo
uses: actions/cache@v4
@@ -98,10 +104,15 @@ jobs:
uses: actions/cache@v4
with:
path: |
./oxide/target/
./crates/node/*.node
./crates/node/index.js
./crates/node/*.wasm
./crates/node/index.d.ts
./crates/node/index.js
./crates/node/browser.js
./crates/node/tailwindcss-oxide.wasi-browser.js
./crates/node/tailwindcss-oxide.wasi.cjs
./crates/node/wasi-worker-browser.mjs
./crates/node/wasi-worker.mjs
key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./crates/**/*') }}

- name: Install Node.JS
@@ -121,7 +132,7 @@ jobs:
run: pnpm install --ignore-scripts --filter=!./playgrounds/*

- name: Build release
run: pnpm run --filter ${{ env.OXIDE_LOCATION }} build
run: pnpm run --filter ${{ env.OXIDE_LOCATION }} build:platform --target=${{ matrix.target }}
env:
RUST_TARGET: ${{ matrix.target }}
JEMALLOC_SYS_WITH_LG_PAGE: ${{ matrix.page-size }}
@@ -171,7 +182,7 @@ jobs:
echo "~~~~ pnpm --version ~~~~"
pnpm --version
pnpm install --ignore-scripts --filter=!./playgrounds/* || true
pnpm run --filter ${{ env.OXIDE_LOCATION }} build
pnpm run --filter ${{ env.OXIDE_LOCATION }} build:platform
strip -x ${{ env.OXIDE_LOCATION }}/*.node
ls -la ${{ env.OXIDE_LOCATION }}
- name: Upload artifacts
@@ -230,12 +241,20 @@ jobs:
uses: actions/cache@v4
with:
path: |
./oxide/target/
./crates/node/*.node
./crates/node/index.js
./crates/node/*.wasm
./crates/node/index.d.ts
./crates/node/index.js
./crates/node/browser.js
./crates/node/tailwindcss-oxide.wasi-browser.js
./crates/node/tailwindcss-oxide.wasi.cjs
./crates/node/wasi-worker-browser.mjs
./crates/node/wasi-worker.mjs
key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./crates/**/*') }}

- name: Setup WASM target
run: rustup target add wasm32-wasip1-threads

- name: Install dependencies
run: pnpm --filter=!./playgrounds/* install

@@ -272,8 +291,17 @@ jobs:
- name: Lock pre-release versions
run: node ./scripts/lock-pre-release-versions.mjs

- name: Upload npm package tarballs
uses: actions/upload-artifact@v4
with:
name: npm-package-tarballs
path: dist/*.tgz

- name: Publish
run: pnpm --recursive publish --tag ${{ env.RELEASE_CHANNEL }} --no-git-checks
run: |
pnpm --recursive --filter="!@tailwindcss/oxide-wasm32-wasi" publish --tag ${{ env.RELEASE_CHANNEL }} --no-git-checks
# The wasm package needs a special npm config that isn't read when pnpm --recursive is used
pushd crates/node/npm/wasm32-wasi; pnpm publish --tag ${{ env.RELEASE_CHANNEL }} --no-git-checks; popd;
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

38 changes: 30 additions & 8 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -67,7 +67,7 @@ jobs:
container:
image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine

name: Build ${{ matrix.target }} (OXIDE)
name: Build ${{ matrix.target }} (oxide)
runs-on: ${{ matrix.os }}
container: ${{ matrix.container }}
timeout-minutes: 15
@@ -81,6 +81,12 @@ jobs:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'

- name: Install gcc-arm-linux-gnueabihf
if: ${{ matrix.target == 'armv7-unknown-linux-gnueabihf' }}
run: |
sudo apt-get update
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y
# Cargo already skips downloading dependencies if they already exist
- name: Cache cargo
uses: actions/cache@v4
@@ -98,10 +104,15 @@ jobs:
uses: actions/cache@v4
with:
path: |
./oxide/target/
./crates/node/*.node
./crates/node/index.js
./crates/node/*.wasm
./crates/node/index.d.ts
./crates/node/index.js
./crates/node/browser.js
./crates/node/tailwindcss-oxide.wasi-browser.js
./crates/node/tailwindcss-oxide.wasi.cjs
./crates/node/wasi-worker-browser.mjs
./crates/node/wasi-worker.mjs
key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./crates/**/*') }}

- name: Install Node.JS
@@ -121,7 +132,7 @@ jobs:
run: pnpm install --ignore-scripts --filter=!./playgrounds/*

- name: Build release
run: pnpm run --filter ${{ env.OXIDE_LOCATION }} build
run: pnpm run --filter ${{ env.OXIDE_LOCATION }} build:platform --target=${{ matrix.target }}
env:
RUST_TARGET: ${{ matrix.target }}
JEMALLOC_SYS_WITH_LG_PAGE: ${{ matrix.page-size }}
@@ -171,7 +182,7 @@ jobs:
echo "~~~~ pnpm --version ~~~~"
pnpm --version
pnpm install --ignore-scripts --filter=!./playgrounds/* || true
pnpm run --filter ${{ env.OXIDE_LOCATION }} build
pnpm run --filter ${{ env.OXIDE_LOCATION }} build:platform
strip -x ${{ env.OXIDE_LOCATION }}/*.node
ls -la ${{ env.OXIDE_LOCATION }}
- name: Upload artifacts
@@ -225,12 +236,20 @@ jobs:
uses: actions/cache@v4
with:
path: |
./oxide/target/
./crates/node/*.node
./crates/node/index.js
./crates/node/*.wasm
./crates/node/index.d.ts
./crates/node/index.js
./crates/node/browser.js
./crates/node/tailwindcss-oxide.wasi-browser.js
./crates/node/tailwindcss-oxide.wasi.cjs
./crates/node/wasi-worker-browser.mjs
./crates/node/wasi-worker.mjs
key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./crates/**/*') }}

- name: Setup WASM target
run: rustup target add wasm32-wasip1-threads

- name: Install dependencies
run: pnpm --filter=!./playgrounds/* install

@@ -272,7 +291,10 @@ jobs:
echo "TAILWINDCSS_VERSION=$(node -e 'console.log(require(`./packages/tailwindcss/package.json`).version);')" >> $GITHUB_ENV
- name: Publish
run: pnpm --recursive publish --tag ${{ env.RELEASE_CHANNEL }} --no-git-checks
run: |
pnpm --recursive --filter="!@tailwindcss/oxide-wasm32-wasi" publish --tag ${{ env.RELEASE_CHANNEL }} --no-git-checks
# The wasm package needs a special npm config that isn't read when pnpm --recursive is used
pushd crates/node/npm/wasm32-wasi; pnpm publish --tag ${{ env.RELEASE_CHANNEL }} --no-git-checks; popd;
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

21 changes: 20 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -9,6 +9,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

- Nothing yet!

## [4.1.4] - 2025-04-14

### Added

- Add experimental `@tailwindcss/oxide-wasm32-wasi` target for running Tailwind in browser environments like StackBlitz ([#17558](https://github.com/tailwindlabs/tailwindcss/pull/17558))

### Fixed

- Ensure `color-mix(…)` polyfills do not cause used CSS variables to be removed ([#17555](https://github.com/tailwindlabs/tailwindcss/pull/17555))
- Ensure `color-mix(…)` polyfills create fallbacks for theme variables that reference other theme variables ([#17562](https://github.com/tailwindlabs/tailwindcss/pull/17562))
- Fix brace expansion in declining ranges like `{10..0..5}` and `{0..10..-5}` ([#17591](https://github.com/tailwindlabs/tailwindcss/pull/17591))
- Work around a Chrome rendering bug when using the `skew-*` utilities ([#17627](https://github.com/tailwindlabs/tailwindcss/pull/17627))
- Ensure container query variant names can contain hyphens ([#17628](https://github.com/tailwindlabs/tailwindcss/pull/17628))
- Ensure `shadow-inherit`, `inset-shadow-inherit`, `drop-shadow-inherit`, and `text-shadow-inherit` inherit the shadow color ([#17647](https://github.com/tailwindlabs/tailwindcss/pull/17647))
- Ensure compatibility with array tuples used in `fontSize` JS theme keys ([#17630](https://github.com/tailwindlabs/tailwindcss/pull/17630))
- Ensure folders with binary file extensions in their names are scanned for utilities ([#17595](https://github.com/tailwindlabs/tailwindcss/pull/17595))
- Upgrade: Convert `fontSize` array tuple syntax to CSS theme variables ([#17630](https://github.com/tailwindlabs/tailwindcss/pull/17630))

## [4.1.3] - 2025-04-04

### Fixed
@@ -3640,7 +3658,8 @@ No release notes

- Everything!

[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.3...HEAD
[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.4...HEAD
[4.1.4]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.3...v4.1.4
[4.1.3]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.2...v4.1.3
[4.1.2]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.1...v4.1.2
[4.1.1]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.0...v4.1.1
Loading