diff --git a/Cargo.lock b/Cargo.lock
index c21543ab45..8a11fa9d2d 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -5550,7 +5550,7 @@ dependencies = [
[[package]]
name = "taffy"
version = "0.13.0"
-source = "git+https://github.com/ldm0/taffy?rev=5453d6cdda8d2dd12b87e5237686e0adaf7cc0bc#5453d6cdda8d2dd12b87e5237686e0adaf7cc0bc"
+source = "git+https://github.com/ldm0/taffy?rev=4a618c7b6b7f9c3fbd8b8b0eaf9918ebd2cf9969#4a618c7b6b7f9c3fbd8b8b0eaf9918ebd2cf9969"
dependencies = [
"arrayvec",
"serde",
diff --git a/Cargo.toml b/Cargo.toml
index 51143ee7e7..98836bdfaa 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -117,7 +117,7 @@ stylo_dom = { git = "https://github.com/lexmount/stylo", rev = "0c7e8baf63b6714e
stylo_static_prefs = { git = "https://github.com/lexmount/stylo", rev = "0c7e8baf63b6714e7614834fadbc09710f3c3d27" }
stylo_traits = { git = "https://github.com/lexmount/stylo", rev = "0c7e8baf63b6714e7614834fadbc09710f3c3d27" }
svgtypes = { git = "https://github.com/lexmount/svgtypes", branch = "moli" }
-taffy = { git = "https://github.com/ldm0/taffy", rev = "5453d6cdda8d2dd12b87e5237686e0adaf7cc0bc" }
+taffy = { git = "https://github.com/ldm0/taffy", rev = "4a618c7b6b7f9c3fbd8b8b0eaf9918ebd2cf9969" }
[workspace.lints.clippy]
disallowed_methods = "deny"
diff --git a/moli/tests/fetch_cli/layout_regressions.rs b/moli/tests/fetch_cli/layout_regressions.rs
index c61a942b93..16088d49e6 100644
--- a/moli/tests/fetch_cli/layout_regressions.rs
+++ b/moli/tests/fetch_cli/layout_regressions.rs
@@ -66,3 +66,73 @@ fn fractional_grid_track_limits_terminate_with_a_finite_item_width() -> Result<(
assert!((width - 202.44017).abs() < 0.05, "{width}");
Ok(())
}
+
+fn probe_font_document(body: &str) -> String {
+ let font = STANDARD.encode(include_bytes!(concat!(
+ env!("CARGO_MANIFEST_DIR"),
+ "/../moli-layout/tests/fixtures/moli-ahem.woff2"
+ )));
+ format!(
+ "{body}"
+ )
+}
+
+const GEOMETRY: &str = r#"(async () => {
+ await document.fonts.ready;
+ return Object.fromEntries([...document.querySelectorAll('[id]')].map(element => {
+ const rect = element.getBoundingClientRect();
+ return [element.id, {x: rect.x, width: rect.width, height: rect.height}];
+ }));
+})()"#;
+
+fn assert_dimension(value: &Value, id: &str, dimension: &str, expected: f64) {
+ let actual = value[id][dimension]
+ .as_f64()
+ .expect("dimension must be numeric");
+ assert!(
+ (actual - expected).abs() < 0.05,
+ "{id}.{dimension}: {actual} != {expected}"
+ );
+}
+
+#[test]
+fn auto_grid_tracks_honor_intrinsic_item_minima_before_measuring_row_height() -> Result<()> {
+ let mut body = String::new();
+ for keyword in ["min-content", "max-content"] {
+ for width in ["auto", "0px", "50px"] {
+ let key = format!("{keyword}-{width}");
+ let grid_width = if keyword == "min-content" { 140 } else { 200 };
+ body.push_str(&format!(
+ ""
+ ));
+ }
+ }
+ let value = run_layout(&probe_font_document(&body), GEOMETRY, true)?;
+ for keyword in ["min-content", "max-content"] {
+ for width in ["auto", "0px", "50px"] {
+ let key = format!("{keyword}-{width}");
+ let maximum = keyword == "max-content";
+ let item_width = if maximum { 168.0 } else { 60.0 };
+ assert_dimension(&value, &format!("item-{key}"), "width", item_width);
+ assert_dimension(
+ &value,
+ &format!("item-{key}"),
+ "height",
+ if maximum { 20.0 } else { 60.0 },
+ );
+ assert_dimension(
+ &value,
+ &format!("grid-{key}"),
+ "height",
+ if maximum { 20.0 } else { 60.0 },
+ );
+ assert_dimension(
+ &value,
+ &format!("next-{key}"),
+ "x",
+ if maximum { 168.0 } else { 60.0 },
+ );
+ }
+ }
+ Ok(())
+}