Skip to content

Filter out invalid same-axis object-position pairs in responsive image styles - #18043

Merged
matthewp merged 2 commits into
mainfrom
factory/fix-18042
Sep 17, 2026
Merged

matthewp merged 2 commits into
mainfrom
factory/fix-18042

Conversation

@astro-factory

@astro-factory astro-factory Bot commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

Changes

  • When image.responsiveStyles is enabled, getPositionEntries() no longer emits the four invalid two-keyword object-position combinations where both keywords share the same axis (top bottom, bottom top, left right, right left). These values are rejected by browsers and CSS validators per the CSS Images Level 3 <position> grammar.
  • The fix adds two axis sets (VERTICAL_ONLY = {top, bottom}, HORIZONTAL_ONLY = {left, right}) and skips any generated pair where both keywords belong to the same set. All valid cross-axis combinations and center-inclusive pairs are preserved.

Testing

  • Added a unit test in packages/astro/test/units/assets/utils.test.ts ('does not emit invalid same-axis position pairs') that asserts none of the four invalid pairs appear in the output of getPositionEntries().

Docs

  • No docs update needed; this is a bug fix for invalid CSS output with no API or behavior change visible to users.

Closes #18042

@astro-factory astro-factory Bot added the fix verified Reporter confirmed the triage bot fix works label Sep 17, 2026
@changeset-bot

changeset-bot Bot commented Sep 17, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 2ef367e

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

This PR includes changesets to release 1 package
Name Type
astro 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

@github-actions github-actions Bot added the pkg: astro Related to the core `astro` package (scope) label Sep 17, 2026
Assert all 16 valid cross-axis two-keyword pairs are emitted (both keyword
orders, selector and declaration) and that the 4 invalid same-axis pairs
are absent as both selectors and declarations.
@codspeed

codspeed Bot commented Sep 17, 2026 •

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 21 untouched benchmarks


Comparing factory/fix-18042 (2ef367e) with main (ec27992)1

Open in CodSpeed

Footnotes

  1. No successful run was found on main (1aa7ae5) during the generation of this report, so ec27992 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report. ↩

@matthewp
matthewp merged commit 8a53a8b into main Sep 17, 2026
29 checks passed
@matthewp
matthewp deleted the factory/fix-18042 branch September 17, 2026 15:31
@astrobot-houston astrobot-houston mentioned this pull request Sep 17, 2026
dadezzz pushed a commit to dadezzz/university_notes that referenced this pull request Sep 27, 2026
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [astro](https://astro.build) ([source](https://github.com/withastro/astro/tree/HEAD/packages/astro)) | [`7.3.3` → `7.3.4`](https://renovatebot.com/diffs/npm/astro/7.3.3/7.3.4) | ![age](https://developer.mend.io/api/mc/badges/age/npm/astro/7.3.4?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/astro/7.3.3/7.3.4?slim=true) |

---

### Release Notes

<details>
<summary>withastro/astro (astro)</summary>

### [`v7.3.4`](https://github.com/withastro/astro/blob/HEAD/packages/astro/CHANGELOG.md#734)

[Compare Source](https://github.com/withastro/astro/compare/astro@7.3.3...astro@7.3.4)

##### Patch Changes

- [#&#8203;18063](withastro/astro#18063) [`40896ac`](withastro/astro@40896ac) Thanks [@&#8203;adamchal](https://github.com/adamchal)! - Fixes incremental builds repeatedly rendering unchanged pages when modules or compiled CSS reference bundled assets.

- [#&#8203;18053](withastro/astro#18053) [`cf5d72f`](withastro/astro@cf5d72f) Thanks [@&#8203;Princesseuh](https://github.com/Princesseuh)! - Improves the `astro check` error shown for TypeScript 7. The command now explains that TypeScript 7 is not currently supported and provides instructions for experimentally type-checking Astro files with TypeScript 7.1 and `@astrojs/ts-content-mapper`.

- [#&#8203;18086](withastro/astro#18086) [`795a7e4`](withastro/astro@795a7e4) Thanks [@&#8203;ump45nose](https://github.com/ump45nose)! - Fix double-escaped ampersands in Markdown image `alt` and `title` attributes. The `__ASTRO_IMAGE_` round-trip now decodes the numeric (`&#x26;`) and named (`&amp;`) character references the Markdown processors emit, so an `&` in an alt or title is escaped exactly once in the final HTML instead of twice.

- [#&#8203;18074](withastro/astro#18074) [`0429805`](withastro/astro@0429805) Thanks [@&#8203;SurefireStudios](https://github.com/SurefireStudios)! - Fix three error names that did not match their documented reference. `MissingLocale`, `MissingIndexForInternationalization` and `NoManifestAvailable` reported names ending in `Error` in the dev overlay, while their error reference pages are published under the unsuffixed names, so the name shown to users could not be found in the docs.

- [#&#8203;18007](withastro/astro#18007) [`2245837`](withastro/astro@2245837) Thanks [@&#8203;L4XB](https://github.com/L4XB)! - Fixes the dev server re-evaluating the whole server module graph on every request. The `astro:head-metadata` plugin invalidated its component metadata virtual module from its own `transform` hook, so each evaluation of that module scheduled the next one. Adapters that run requests outside Vite's module runner, such as `@astrojs/cloudflare`, paid for a full re-evaluation of the server graph on every request for the lifetime of the process.

- [#&#8203;18096](withastro/astro#18096) [`43657c4`](withastro/astro@43657c4) Thanks [@&#8203;matthewp](https://github.com/matthewp)! - Fixes domain-based i18n routing to respect `security.allowedDomains` when selecting a locale from request host headers

- [#&#8203;18043](withastro/astro#18043) [`8a53a8b`](withastro/astro@8a53a8b) Thanks [@&#8203;astro-factory](https://github.com/apps/astro-factory)! - Fixes `image.responsiveStyles` emitting invalid `object-position` CSS values for same-axis keyword pairs (`top bottom`, `left right`, etc.)

- [#&#8203;18029](withastro/astro#18029) [`c08252d`](withastro/astro@c08252d) Thanks [@&#8203;matthewp](https://github.com/matthewp)! - Runs `astro dev` and `astro preview` in the foreground when an AI agent is detected on Windows, allowing the agent to manage the process lifetime. Pass `--background` explicitly to request an Astro-managed background process. Agent-inferred backgrounding remains enabled on other platforms.

- Updated dependencies \[[`3fd16ee`](withastro/astro@3fd16ee), [`8358d59`](withastro/astro@8358d59)]:
  - [@&#8203;astrojs/markdown-satteri](https://github.com/astrojs/markdown-satteri)@0.4.2

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMTUuMiIsInVwZGF0ZWRJblZlciI6IjQ0LjExNS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fix verified Reporter confirmed the triage bot fix works pkg: astro Related to the core `astro` package (scope)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Regression (6.3.5): image.responsiveStyles emits invalid object-position

1 participant