import { t, i18n } from '../../i18n.js'; class PageListing extends HTMLElement { constructor() { super(); this.listing = null; this.loading = true; } connectedCallback() { this.listingId = this.dataset.id; this.render(); this.loadListing(); this.unsubscribe = i18n.subscribe(() => this.render()); } disconnectedCallback() { if (this.unsubscribe) this.unsubscribe(); } async loadListing() { await new Promise(resolve => setTimeout(resolve, 300)); this.listing = { id: this.listingId, title: 'iPhone 13 Pro - Sehr guter Zustand', description: 'Verkaufe mein iPhone 13 Pro in sehr gutem Zustand. Das Gerät hat keine Kratzer und funktioniert einwandfrei. Originalverpackung und Ladekabel sind dabei.', price: 699, location: 'Berlin, Mitte', category: 'electronics', createdAt: new Date().toISOString(), seller: { name: 'Max M.', memberSince: '2023' }, images: [] }; this.loading = false; this.render(); } render() { if (this.loading) { this.innerHTML = /* html */ `
`; return; } if (!this.listing) { this.innerHTML = /* html */ `
😕

${t('listing.notFound')}

${t('listing.backHome')}
`; return; } this.innerHTML = /* html */ `
${t(`categories.${this.listing.category}`)}

${this.escapeHtml(this.listing.title)}

€ ${this.listing.price}

📍 ${this.escapeHtml(this.listing.location)}

${t('listing.description')}

${this.escapeHtml(this.listing.description)}

${t('listing.seller')}

${this.listing.seller.name.charAt(0)}
${this.escapeHtml(this.listing.seller.name)} ${t('listing.memberSince')} ${this.listing.seller.memberSince}
`; } escapeHtml(text) { const div = document.createElement('div'); div.textContent = text; return div.innerHTML; } } customElements.define('page-listing', PageListing); const style = document.createElement('style'); style.textContent = /* css */ ` page-listing .listing-detail { display: grid; grid-template-columns: 1fr 400px; gap: var(--space-xl); } @media (max-width: 900px) { page-listing .listing-detail { grid-template-columns: 1fr; } } page-listing .listing-gallery { background: var(--color-bg-secondary); border-radius: var(--radius-lg); overflow: hidden; } page-listing .listing-image-main { aspect-ratio: 4 / 3; background: var(--color-bg-tertiary); } page-listing .listing-info header { margin-bottom: var(--space-xl); } page-listing .listing-info h1 { margin: var(--space-sm) 0; } page-listing .listing-price { font-size: var(--font-size-2xl); font-weight: var(--font-weight-bold); color: var(--color-primary); } page-listing .listing-location { color: var(--color-text-secondary); margin-top: var(--space-sm); } page-listing .listing-description, page-listing .listing-seller { margin-bottom: var(--space-xl); } page-listing .listing-description h2, page-listing .listing-seller h2 { font-size: var(--font-size-lg); margin-bottom: var(--space-md); } page-listing .seller-card { display: flex; align-items: center; gap: var(--space-md); padding: var(--space-md); background: var(--color-bg-secondary); border-radius: var(--radius-md); } page-listing .seller-avatar { width: 48px; height: 48px; border-radius: 50%; background: var(--color-primary); color: white; display: flex; align-items: center; justify-content: center; font-weight: var(--font-weight-bold); font-size: var(--font-size-lg); } page-listing .seller-info { display: flex; flex-direction: column; } page-listing .seller-info span { font-size: var(--font-size-sm); color: var(--color-text-muted); } page-listing .listing-actions { margin-top: var(--space-xl); } page-listing .listing-actions .btn { width: 100%; } `; document.head.appendChild(style);