- Vimeo regex now rejects URLs like vimeo.com/123abc that were
silently truncated to ID 123 and produced broken iframes. Negative
lookahead (?![A-Za-z0-9]) ensures the captured digits are not
followed by alphanumerics. Two false-positive test cases added.
- Spec corrected: HtmlInline nodes ARE filtered regardless of
insertion path; the implementation uses a dedicated MediaEmbedNode
+ renderer to bypass the filter only for trusted programmatic embeds.
Components list updated to include the two extra files.
- Plan Task 6 regex updated for consistency.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Recognizes vimeo.com/{id} and player.vimeo.com/video/{id}. Preserves
timestamps from #t=30s and ?t=30s as #t=30s on the embed URL (Vimeo
convention).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Accepts ?t=30s, ?t=30, ?t=1m20s, ?t=1h2m3s, and ?start=N. Converts to
seconds and emits as ?start=N on the embed URL. ?t= takes priority over
?start= when both are present.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Recognizes youtu.be, watch?v=, shorts, embed, and mobile variants.
Emits an iframe pointing to youtube-nocookie.com with lazy loading,
strict-origin referrer policy, and allowfullscreen.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Initial skeleton returning null for any non-media URL. Subsequent commits
add detection for video, audio, YouTube, and Vimeo.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>