(function () { 'use strict'; function escapeHtml(str) { var div = document.createElement('div'); div.appendChild(document.createTextNode(str || '')); return div.innerHTML; } function getBaseUrl(scriptEl) { var src = scriptEl.getAttribute('src') || ''; try { var url = new URL(src); return url.origin; } catch { return 'https://sifa.id'; } } function formatCompact(n) { if (n >= 1000000) return (n / 1000000).toFixed(1).replace(/\.0$/, '') + 'M'; if (n >= 1000) return (n / 1000).toFixed(1).replace(/\.0$/, '') + 'K'; return String(n); } var APP_COLORS = { bluesky: { bg: '#e0f2fe', text: '#075985' }, whitewind: { bg: '#f1f5f9', text: '#334155' }, smokesignal: { bg: '#ffedd5', text: '#9a3412' }, frontpage: { bg: '#ede9fe', text: '#5b21b6' }, picosky: { bg: '#fce7f3', text: '#9d174d' }, linkat: { bg: '#d1fae5', text: '#065f46' }, pastesphere: { bg: '#fef3c7', text: '#92400e' }, }; var FALLBACK_COLOR = { bg: '#f3f4f6', text: '#374151' }; var sifaIconSvg = '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + ''; function buildStyles(theme) { var lightVars = '--sifa-bg:#fff;--sifa-card:#fff;--sifa-text:#111;--sifa-muted:#666;--sifa-border:#e5e5e5;--sifa-primary:#6366f1;'; var darkVars = '--sifa-bg:#1a1a2e;--sifa-card:#16213e;--sifa-text:#eee;--sifa-muted:#888;--sifa-border:#333;--sifa-primary:#6366f1;'; var themeBlock = ''; if (theme === 'dark') { themeBlock = ':host{' + darkVars + '}'; } else if (theme === 'light') { themeBlock = ':host{' + lightVars + '}'; } else { themeBlock = ':host{' + lightVars + '}@media(prefers-color-scheme:dark){:host{' + darkVars + '}}'; } return ( themeBlock + ":host{display:block;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;color:var(--sifa-text);}" + '.card{background:var(--sifa-card);border:1px solid var(--sifa-border);border-radius:12px;padding:20px;max-width:400px;}' + '.top{display:flex;align-items:flex-start;gap:10px;}' + '.avatar-link{flex-shrink:0;}' + '.info{flex:1;min-width:0;}' + '.name-row a{text-decoration:none;color:inherit;}' + '.name{font-size:15px;font-weight:600;margin:0;}' + '.handle{font-size:12px;color:var(--sifa-muted);margin:0;}' + '.avatar{width:48px;height:48px;border-radius:50%;object-fit:cover;}' + '.avatar-placeholder{width:48px;height:48px;border-radius:50%;background:var(--sifa-primary);color:#fff;display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:600;}' + '.headline{font-size:13px;color:var(--sifa-muted);margin:6px 0 0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}' + '.location{font-size:12px;color:var(--sifa-muted);margin:4px 0 0;}' + '.open-to{display:flex;flex-wrap:wrap;gap:4px;margin:8px 0 0;}' + '.pill{font-size:11px;padding:2px 8px;border-radius:10px;background:var(--sifa-primary);color:#fff;}' + '.activity-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px;font-size:12px;color:var(--sifa-muted);}' + '.app-badges{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px;}' + '.app-badge{font-size:10px;font-weight:500;padding:2px 8px;border-radius:10px;}' + '.app-badges-link{text-decoration:none;color:inherit;display:block;}' + '.app-badges-link:hover .app-badge{opacity:0.8;}' + '.app-badge-more{background:var(--sifa-border);color:var(--sifa-muted);font-style:normal;}' + '.footer{margin-top:12px;padding-top:10px;border-top:1px solid var(--sifa-border);display:flex;align-items:center;justify-content:space-between;}' + '.cta{display:inline-block;font-size:13px;color:var(--sifa-primary);text-decoration:none;font-weight:500;}' + '.cta:hover{text-decoration:underline;}' + '.sifa-icon{width:16px;height:16px;color:var(--sifa-muted);opacity:0.5;}' + '.error{font-size:14px;color:var(--sifa-muted);padding:16px;text-align:center;}' ); } function renderCard(data) { var avatarHtml; if (data.avatar) { avatarHtml = '' +
        escapeHtml(data.displayName) +
        ''; } else { var letter = (data.displayName || data.handle || '?').charAt(0).toUpperCase(); avatarHtml = '
' + escapeHtml(letter) + '
'; } var headlineHtml = data.headline ? '
' + escapeHtml(data.headline) + '
' : ''; var locationHtml = data.location ? '
' + escapeHtml(data.location) + '
' : ''; var openToHtml = ''; if (data.openTo && data.openTo.length > 0) { var pills = ''; for (var i = 0; i < data.openTo.length; i++) { pills += '' + escapeHtml(data.openTo[i]) + ''; } openToHtml = '
' + pills + '
'; } // Activity row: follower count + PDS provider // Prefer AT Protocol follower count over Sifa-internal count // (mirrors src/lib/follower-utils.ts resolveDisplayFollowers) var isAtproto = data.atprotoFollowersCount != null && data.atprotoFollowersCount > 0; var displayFollowers = isAtproto ? data.atprotoFollowersCount : data.followersCount; var activityHtml = ''; var activityItems = ''; if (displayFollowers && displayFollowers > 0) { var followerSuffix = isAtproto ? ' followers on Bluesky' : ' followers'; activityItems += '' + escapeHtml(formatCompact(displayFollowers)) + followerSuffix + ''; } if (data.pdsProvider) { activityItems += 'on ' + escapeHtml(data.pdsProvider.name) + ''; } if (activityItems) { activityHtml = '
' + activityItems + '
'; } // Active apps indicators (max 2, linked to sifa.id) var appsHtml = ''; if (data.activeApps && data.activeApps.length > 0) { var maxShow = 2; var badges = ''; var shown = Math.min(data.activeApps.length, maxShow); for (var k = 0; k < shown; k++) { var app = data.activeApps[k]; var colors = APP_COLORS[app.id] || FALLBACK_COLOR; badges += '' + escapeHtml(app.name) + ''; } var overflow = data.activeApps.length - shown; if (overflow > 0) { badges += 'and ' + overflow + ' more on sifa.id'; } appsHtml = '' + '
' + badges + '
'; } var footerHtml = ''; return ( '
' + '
' + '' + avatarHtml + '' + '
' + '' + '

@' + escapeHtml(data.handle) + '

' + '
' + '
' + headlineHtml + locationHtml + openToHtml + activityHtml + appsHtml + footerHtml + '
' ); } function initSifaEmbeds() { var scripts = document.querySelectorAll("script[src*='embed.js']"); var promises = []; for (var i = 0; i < scripts.length; i++) { (function (scriptEl) { var did = scriptEl.getAttribute('data-did'); var handle = scriptEl.getAttribute('data-handle'); var identifier = did || handle; if (!identifier) return; var theme = scriptEl.getAttribute('data-theme') || 'auto'; var baseUrl = getBaseUrl(scriptEl); var apiUrl = baseUrl + '/api/embed/' + encodeURIComponent(identifier) + '/data'; var container = document.createElement('div'); container.className = 'sifa-embed'; var shadow = container.attachShadow({ mode: 'open' }); scriptEl.parentNode.insertBefore(container, scriptEl.nextSibling); var promise = fetch(apiUrl) .then(function (res) { if (!res.ok) throw new Error('Not found'); return res.json(); }) .then(function (data) { var styleEl = document.createElement('style'); styleEl.textContent = buildStyles(theme); shadow.appendChild(styleEl); var wrapper = document.createElement('div'); wrapper.innerHTML = renderCard(data); shadow.appendChild(wrapper); // Track embed load (excluding sifa.id itself) try { if (window.location.hostname !== 'sifa.id') { fetch(baseUrl + '/u/api/send', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ type: 'event', payload: { website: '7f659ec9-5d5f-4ee4-96e0-10d8bcefd69d', url: window.location.pathname, name: 'embed-load', hostname: window.location.hostname, data: { handle: identifier, host: window.location.hostname }, }, }), }).catch(function () {}); } } catch (_e) {} }) .catch(function () { var styleEl = document.createElement('style'); styleEl.textContent = buildStyles(theme); shadow.appendChild(styleEl); var errDiv = document.createElement('div'); errDiv.innerHTML = '
Profile not found
'; shadow.appendChild(errDiv); }); promises.push(promise); })(scripts[i]); } return Promise.all(promises); } window.initSifaEmbeds = initSifaEmbeds; if (typeof module !== 'undefined' && module.exports) { module.exports = { initSifaEmbeds: initSifaEmbeds }; } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initSifaEmbeds); } else { initSifaEmbeds(); } })();