/** * @fileoverview Link Preview Component for Rantii * @author retoor * @description Displays link previews with domain info * @keywords link, preview, url, external, domain */ import { BaseComponent } from './base-component.js'; import { getDomain, sanitizeUrl } from '../utils/url.js'; class LinkPreview extends BaseComponent { static get observedAttributes() { return ['url', 'title']; } init() { this.render(); } render() { const url = this.getAttr('url'); const title = this.getAttr('title'); if (!url) { this.setHtml(''); return; } const safeUrl = sanitizeUrl(url); if (!safeUrl) { this.setHtml(''); return; } const domain = getDomain(safeUrl); const displayTitle = title || safeUrl; this.addClass('link-preview'); this.setHtml(` `); } truncate(text, length) { if (text.length <= length) return text; return text.substring(0, length) + '...'; } onAttributeChanged(name, oldValue, newValue) { this.render(); } } customElements.define('link-preview', LinkPreview); export { LinkPreview };