Composed-tree shadow DOM capture, sized invisible spacers, track re-anchoring, block fill-width slides, javascript: href sanitization
- Walker serializes the composed (flattened) tree: open shadow roots walk as host children with <slot> replaced by its assigned light nodes (or fallback), so custom-element content (product cards, web components) is captured instead of arriving childless - In-flow visibility:hidden nodes with a nonzero border box survive the prune as sized invisible placeholders - ghost spacers carry load-bearing geometry - When pruning drops leading in-flow children of a horizontally-translated track, the baked translateX is re-anchored by their aggregate margin-box width (settled carousel tracks return to origin instead of pushing real content off-screen); animation-owned transforms unaffected - Circular-shrink slide guard counts block-level fill children as width-deriving regardless of wAuto (block auto-width IS fill), pinning library-sized slide widths uniformly - javascript: hrefs emit as "#" and the link gate normalizes both sides 382 tests pass (18 new), typecheck clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
6e4921884c
commit
762855664c
@@ -1,6 +1,24 @@
|
||||
import { describe, it } from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
import { letterSpacingEquivalent } from "../src/validate/gates.js";
|
||||
import { letterSpacingEquivalent, normHref } from "../src/validate/gates.js";
|
||||
|
||||
// FIX 5 — the link gate must not fail a javascript: source href against the clone's sanitized value.
|
||||
// Generation emits an inert `#` for a `javascript:*` href (React blocks the literal), so normHref
|
||||
// collapses every javascript: href — on either side — to `#`, letting the two sides match.
|
||||
describe("normHref collapses javascript: hrefs to # (FIX 5)", () => {
|
||||
const origin = "https://example.test";
|
||||
it("normalizes a javascript: source href to #", () => {
|
||||
assert.equal(normHref("Javascript:{}", origin), "#");
|
||||
assert.equal(normHref("javascript:void(0)", origin), "#");
|
||||
});
|
||||
it("makes a javascript: source match the emitted # value", () => {
|
||||
assert.equal(normHref("javascript:{}", origin), normHref("#", origin), "source and clone agree");
|
||||
});
|
||||
it("still distinguishes a real fragment from a full URL", () => {
|
||||
assert.equal(normHref("#top", origin), "#top");
|
||||
assert.equal(normHref("https://example.test/x/", origin), "https://example.test/x");
|
||||
});
|
||||
});
|
||||
|
||||
// Chromium serializes a computed `letter-spacing: 0` back as the keyword `normal`. The emitter, after
|
||||
// snapping a sub-0.1px authored tracking to 0, ships `letter-spacing: 0px` — which the CLONE then
|
||||
|
||||
Reference in New Issue
Block a user