{
  "version": 3,
  "sources": ["/cdn/shop/t/91/assets/florame-trust-reviews.js"],
  "sourcesContent": ["(() => {\r\n  'use strict';\r\n\r\n  const root = document.querySelector('[data-trust-florame]');\r\n  if (!root || root.dataset.tfReady === '1') return;\r\n  root.dataset.tfReady = '1';\r\n\r\n  const API_BASE = String(root.dataset.apiBase || '').replace(/\\/$/, '');\r\n  const TOKEN_KEY = 'florame_trust_author_v1';\r\n  const TAG_LABELS = {\r\n    creazione: 'Creazione',\r\n    chiarezza: 'Chiarezza',\r\n    qualita: 'Qualit\u00E0',\r\n    consegna: 'Consegna',\r\n    assistenza: 'Assistenza',\r\n    regalo: 'Regalo'\r\n  };\r\n  const ERROR_COPY = {\r\n    EMAIL_INVALID: 'Controlla l\u2019indirizzo email.',\r\n    EMAIL_VERIFICATION_RATE_LIMITED: 'Hai appena richiesto un codice. Attendi un minuto.',\r\n    VERIFICATION_CODE_INVALID: 'Il codice non \u00E8 corretto.',\r\n    VERIFICATION_REQUEST_EXPIRED: 'Il codice \u00E8 scaduto. Richiedine uno nuovo.',\r\n    VERIFICATION_ATTEMPTS_EXCEEDED: 'Troppi tentativi. Richiedi un nuovo codice.',\r\n    TRUST_REVIEW_COOLDOWN: 'Con questa email \u00E8 gi\u00E0 stata pubblicata una recensione recente.',\r\n    RATING_INVALID: 'Scegli da una a cinque stelle.',\r\n    TITLE_TOO_SHORT: 'Scrivi un titolo un po\u2019 pi\u00F9 chiaro.',\r\n    REVIEW_TOO_SHORT: 'Raccontaci qualcosa in pi\u00F9: bastano almeno 20 caratteri.',\r\n    MEDIA_TOO_LARGE: 'Il file \u00E8 troppo grande.',\r\n    MEDIA_TYPE_INVALID: 'Questo formato non \u00E8 supportato.',\r\n    MEDIA_LIMIT_REACHED: 'Puoi allegare al massimo quattro file.',\r\n    VIDEO_LIMIT_REACHED: 'Puoi allegare un solo video.',\r\n    TRUST_REVIEW_EDIT_EXPIRED: 'Il periodo di modifica di sette giorni \u00E8 terminato.',\r\n    RATE_LIMITED: 'Troppe richieste ravvicinate. Riprova tra qualche minuto.'\r\n  };\r\n\r\n  const $ = (selector, scope = root) => scope.querySelector(selector);\r\n  const $$ = (selector, scope = root) => Array.from(scope.querySelectorAll(selector));\r\n  const escapeHtml = (value) => String(value ?? '')\r\n    .replaceAll('&', '&amp;')\r\n    .replaceAll('<', '&lt;')\r\n    .replaceAll('>', '&gt;')\r\n    .replaceAll('\"', '&quot;')\r\n    .replaceAll(\"'\", '&#039;');\r\n\r\n  const state = {\r\n    token: (() => { try { return localStorage.getItem(TOKEN_KEY) || ''; } catch (_) { return ''; } })(),\r\n    requestId: '',\r\n    rating: null, category: 'customer_platform',\r\n    verifiedOnly: false,\r\n    cursor: '',\r\n    hasMore: false,\r\n    reviews: [],\r\n    aggregate: null,\r\n    publishedCount: 0,\r\n    mine: null,\r\n    media: [],\r\n    loading: false\r\n  };\r\n\r\n  async function api(path, { method = 'GET', body, headers = {} } = {}) {\r\n    const controller = method === 'GET' ? new AbortController() : null;\r\n    const timeout = controller ? setTimeout(() => controller.abort(), 12000) : null;\r\n    try {\r\n    const response = await fetch(`${API_BASE}/${path}`, {\r\n      ...(controller ? { signal: controller.signal } : {}),\r\n      method,\r\n      mode: 'cors', cache: 'no-store',\r\n      credentials: 'omit',\r\n      headers: body instanceof Blob ? headers : { 'Content-Type': 'application/json', ...headers },\r\n      body: body == null ? undefined : body instanceof Blob ? body : JSON.stringify(body)\r\n    });\r\n    const payload = await response.json().catch(() => ({}));\r\n    if (!response.ok || payload.success === false) {\r\n      const error = new Error(ERROR_COPY[payload.error] || 'Non siamo riusciti a completare l\u2019operazione. Riprova.');\r\n      error.code = payload.error || `HTTP_${response.status}`;\r\n      throw error;\r\n    }\r\n    return payload;\r\n    } catch (error) {\r\n      if (error.name === 'AbortError') throw new Error('La connessione sta impiegando troppo tempo. Riprova.');\r\n      throw error;\r\n    } finally { if (timeout) clearTimeout(timeout); }\r\n  }\r\n\r\n  function stars(rating) {\r\n    const rounded = Math.max(0, Math.min(5, Math.round(Number(rating || 0))));\r\n    return Array.from({ length: 5 }, (_, index) => `<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" style=\"opacity:${index < rounded ? 1 : .2}\"><path d=\"m12 2.8 2.8 5.7 6.3.9-4.6 4.5 1.1 6.3-5.6-3-5.6 3 1.1-6.3-4.6-4.5 6.3-.9L12 2.8Z\"></path></svg>`).join('');\r\n  }\r\n\r\n  function formatDate(value) {\r\n    if (!value) return '';\r\n    const date = new Date(value);\r\n    if (Number.isNaN(date.getTime())) return '';\r\n    return new Intl.DateTimeFormat('it-IT', { day: 'numeric', month: 'long', year: 'numeric' }).format(date);\r\n  }\r\n\r\n  function showNotice(message, tone = 'success') {\r\n    const notice = $('[data-tf-notice]');\r\n    if (!notice) return;\r\n    notice.textContent = message;\r\n    notice.hidden = !message;\r\n    notice.style.color = tone === 'error' ? '#9f2448' : '';\r\n    notice.style.background = tone === 'error' ? '#fff0f4' : '';\r\n  }\r\n\r\n  function renderScore() {\r\n    const aggregate = state.aggregate || { average: 0, count: 0, distribution: {} };\r\n    const verifiedCount = Number(aggregate.count || 0);\r\n    const publishedCount = Number(state.publishedCount || verifiedCount);\r\n    const scoreCard = $('[data-tf-score-card]');\r\n    const skeleton = $('.tf-score-skeleton', scoreCard);\r\n    const content = $('.tf-score-content', scoreCard);\r\n    skeleton.hidden = true;\r\n    content.hidden = false;\r\n    const average = Number(aggregate.average || 0);\r\n    $('[data-tf-average]').textContent = aggregate.count ? average.toFixed(1).replace('.', ',') : '\u2014';\r\n    const starNode = $('[data-tf-stars]');\r\n    starNode.innerHTML = stars(average);\r\n    starNode.setAttribute('aria-label', aggregate.count ? `${average.toFixed(1)} stelle su 5` : 'Nessuna valutazione');\r\n    $('[data-tf-count]').textContent = verifiedCount\r\n      ? `Basato su ${verifiedCount} ${verifiedCount === 1 ? 'esperienza verificata' : 'esperienze verificate'}`\r\n      : 'La prima esperienza pu\u00F2 essere la tua.';\r\n    $('[data-tf-filter-total]').textContent = `${publishedCount} ${publishedCount === 1 ? 'recensione pubblicata' : 'recensioni pubblicate'}`;\r\n    renderDistribution();\r\n  }\r\n\r\n  function renderDistribution() {\r\n    const aggregate = state.aggregate || { count: 0, distribution: {} };\r\n    const container = $('[data-tf-distribution]');\r\n    const total = Number(aggregate.count || 0);\r\n    container.innerHTML = [5, 4, 3, 2, 1].map((rating) => {\r\n      const count = Number(aggregate.distribution?.[String(rating)] || 0);\r\n      const percent = total ? Math.round((count / total) * 100) : 0;\r\n      return `<button type=\"button\" data-tf-rating-filter=\"${rating}\" class=\"${state.rating === rating ? 'is-active' : ''}\" aria-label=\"${rating} stelle: ${count} recensioni\" aria-pressed=\"${state.rating === rating}\"><span>${rating} \u2605</span><i aria-hidden=\"true\"><span style=\"width:${percent}%\"></span></i><small>${count}</small></button>`;\r\n    }).join('');\r\n    $('[data-tf-reset]').hidden = !state.rating && !state.verifiedOnly;\r\n    const count = $('[data-tf-filter-count]');\r\n    count.textContent = Number(!!state.rating) + Number(state.verifiedOnly);\r\n    count.hidden = !state.rating && !state.verifiedOnly;\r\n    count.setAttribute('aria-label', `${count.textContent} filtri attivi`);\r\n  }\r\n\r\n  function renderMedia(media = []) {\r\n    if (!media.length) return '';\r\n    return `<div class=\"tf-review-media\">${media.map((item) => item.type === 'video'\r\n      ? `<video controls preload=\"metadata\" playsinline aria-label=\"${escapeHtml(item.alt || 'Video della recensione')}\"><source src=\"${escapeHtml(item.url)}\"></video>`\r\n      : `<img src=\"${escapeHtml(item.url)}\" alt=\"${escapeHtml(item.alt || 'Foto della recensione')}\" loading=\"lazy\" decoding=\"async\">`).join('')}</div>`;\r\n  }\r\n\r\n  function renderReview(review) {\r\n    const verified = review.verification?.purchaseVerified === true;\r\n    const tags = Array.isArray(review.tags) ? review.tags.filter((tag) => TAG_LABELS[tag]) : [];\r\n    const product = review.commerce?.product;\r\n    const verificationLabel = review.legacy?.label || (verified ? 'Acquisto verificato' : 'Email verificata');\r\n    const productLink = product?.url ? `<a class=\"tf-review-product\" href=\"${escapeHtml(product.url)}\"><span>${product.imageUrl ? `<img src=\"${escapeHtml(product.imageUrl)}\" alt=\"\" loading=\"lazy\">` : '\u2197'}</span><span><small>Bouquet acquistato</small><strong>${escapeHtml(product.title || 'Apri il prodotto')}</strong></span></a>` : '';\r\n    return `<article class=\"tf-review-card\" data-review-id=\"${escapeHtml(review.id)}\">\r\n      <div class=\"tf-review-card-head\"><div class=\"tf-review-rating\" aria-label=\"${Number(review.rating || 0)} stelle\">${stars(review.rating)}</div><time class=\"tf-review-date\" datetime=\"${escapeHtml(review.publishedAt || review.submittedAt || '')}\">${escapeHtml(formatDate(review.publishedAt || review.submittedAt))}</time></div>\r\n      <h3>${escapeHtml(review.title)}</h3>\r\n      <p>${escapeHtml(review.body)}</p>\r\n      ${productLink}\r\n      ${renderMedia(review.media)}\r\n      ${tags.length ? `<div class=\"tf-review-tags\">${tags.map((tag) => `<span>${escapeHtml(TAG_LABELS[tag])}</span>`).join('')}</div>` : ''}\r\n      <div class=\"tf-review-meta\"><strong>${escapeHtml(review.publicName || 'Cliente Florame')}</strong>${review.city ? `<small>${escapeHtml(review.city)}</small>` : ''}<span class=\"tf-review-badge\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 3 20 7v5c0 5-3.4 8.4-8 9.7C7.4 20.4 4 17 4 12V7l8-4Z\"></path><path d=\"m8.5 12 2.2 2.2 4.8-5\"></path></svg>${escapeHtml(verificationLabel)}</span></div>\r\n      ${review.florameResponse?.body ? `<div class=\"tf-florame-response\"><strong>Risposta di florame.ai</strong><p>${escapeHtml(review.florameResponse.body)}</p></div>` : ''}\r\n      <div class=\"tf-review-footer\"><button class=\"tf-report-toggle\" type=\"button\" data-tf-report-toggle>Segnala contenuto</button></div>\r\n      <div class=\"tf-report-choices\" hidden><button type=\"button\" data-tf-report=\"privacy\">Dati personali</button><button type=\"button\" data-tf-report=\"spam\">Spam</button><button type=\"button\" data-tf-report=\"abuse\">Abuso</button><button type=\"button\" data-tf-report=\"not_genuine\">Non autentica</button></div>\r\n    </article>`;\r\n  }\r\n\r\n  function renderFeed({ append = false } = {}) {\r\n    const list = $('[data-tf-list]');\r\n    if (!state.reviews.length && state.category === 'partner_platform') {\r\n      list.innerHTML = '<div class=\"tf-empty\"><strong>Nessuna recensione di partner con questi filtri.</strong><p>Le esperienze professionali vengono inviate dal negozio autenticato in hub.florame.ai.</p><a class=\"tf-button tf-button-light\" href=\"https://hub.florame.ai/reviews\">Apri Hub</a></div>';\r\n    } else if (!state.reviews.length) {\r\n      list.innerHTML = `<div class=\"tf-empty\"><strong>${state.rating || state.verifiedOnly ? 'Nessuna recensione con questi filtri' : 'La prima esperienza pu\u00F2 essere la tua'}</strong><p>${state.rating || state.verifiedOnly ? 'Azzera i filtri per leggere tutte le esperienze.' : 'Quando arriver\u00E0 la prima esperienza verificata, comparir\u00E0 qui.'}</p><button class=\"tf-button tf-button-primary\" type=\"button\" ${state.rating || state.verifiedOnly ? 'data-tf-reset' : 'data-tf-open'}>${state.rating || state.verifiedOnly ? 'Mostra tutte le recensioni' : 'Scrivi la prima recensione'}</button></div>`;\r\n    } else {\r\n      const html = state.reviews.map(renderReview).join('');\r\n      list.innerHTML = append ? list.innerHTML + html : html;\r\n    }\r\n    $('[data-tf-more]').hidden = !state.hasMore;\r\n  }\r\n\r\n  async function loadReviews({ append = false } = {}) {\r\n    if (state.loading) return;\r\n    state.loading = true;\r\n    $('[data-tf-list]').setAttribute('aria-busy', 'true');\r\n    $$('[data-tf-rating-filter], [data-tf-reset], [data-tf-verified-filter], [data-tf-author-category]').forEach((control) => { control.disabled = true; });\r\n    const more = $('[data-tf-more]');\r\n    if (more) more.disabled = true;\r\n    try {\r\n      const params = new URLSearchParams({ limit: '12', category: state.category });\r\n      if (append && state.cursor) params.set('cursor', state.cursor);\r\n      if (state.rating) params.set('rating', String(state.rating));\r\n      if (state.verifiedOnly) params.set('verified', 'true');\r\n      const payload = await api(`trustFloramePublicListV1?${params.toString()}`);\r\n      state.aggregate = payload.aggregate || state.aggregate;\r\n      state.publishedCount = Number(payload.publishedCount || state.aggregate?.count || 0);\r\n      state.reviews = Array.isArray(payload.reviews) ? payload.reviews : [];\r\n      state.cursor = payload.nextCursor || '';\r\n      state.hasMore = payload.hasMore === true;\r\n      showNotice('');\r\n      renderScore();\r\n      renderFeed({ append });\r\n    } catch (error) {\r\n      showNotice(error.message, 'error');\r\n      if (!state.aggregate) {\r\n        $('.tf-score-skeleton').hidden = true;\r\n        $('.tf-score-content').hidden = false;\r\n        $('[data-tf-count]').textContent = 'Punteggio momentaneamente non disponibile';\r\n        $('[data-tf-filter-total]').textContent = 'Recensioni';\r\n      }\r\n      if (!append) {\r\n        $('[data-tf-list]').innerHTML = '<div class=\"tf-empty\"><strong>Le recensioni non si sono caricate</strong><p>Il caricamento non \u00E8 riuscito. Riprova tra poco.</p><button class=\"tf-button tf-button-light\" type=\"button\" data-tf-retry>Riprova</button></div>';\r\n      }\r\n    } finally {\r\n      state.loading = false;\r\n      $('[data-tf-list]').setAttribute('aria-busy', 'false');\r\n      $$('[data-tf-rating-filter], [data-tf-reset], [data-tf-verified-filter], [data-tf-author-category]').forEach((control) => { control.disabled = false; });\r\n      if (more) more.disabled = false;\r\n    }\r\n  }\r\n\r\n  function setStep(name) {\r\n    setFormError('');\r\n    $$('[data-tf-step]').forEach((step) => { step.hidden = step.dataset.tfStep !== name; });\r\n    $('[data-tf-dialog]').scrollTop = 0;\r\n  }\r\n\r\n  function openDialog() {\r\n    const dialog = $('[data-tf-dialog]');\r\n    setFormError('');\r\n    if (!dialog.open) dialog.showModal();\r\n    if (state.token) {\r\n      setStep('review');\r\n      loadMine();\r\n    } else {\r\n      setStep('email');\r\n    }\r\n  }\r\n\r\n  function closeDialog() {\r\n    const dialog = $('[data-tf-dialog]');\r\n    if (dialog.open) dialog.close();\r\n  }\r\n\r\n  function setFormError(message = '') {\r\n    const node = $('[data-tf-form-error]');\r\n    node.textContent = message;\r\n    node.hidden = !message;\r\n  }\r\n\r\n  function setButtonLoading(button, loading, label = 'Attendi\u2026') {\r\n    if (!button) return;\r\n    if (loading) {\r\n      if (!button.dataset.tfIdleHtml) button.dataset.tfIdleHtml = button.innerHTML;\r\n      button.disabled = true;\r\n      button.classList.add('is-loading');\r\n      button.setAttribute('aria-busy', 'true');\r\n      const spinner = document.createElement('span');\r\n      spinner.className = 'tf-button-spinner';\r\n      spinner.setAttribute('aria-hidden', 'true');\r\n      const copy = document.createElement('span');\r\n      copy.textContent = label;\r\n      button.replaceChildren(spinner, copy);\r\n      return;\r\n    }\r\n    button.classList.remove('is-loading');\r\n    button.removeAttribute('aria-busy');\r\n    if (button.dataset.tfIdleHtml) {\r\n      button.innerHTML = button.dataset.tfIdleHtml;\r\n      delete button.dataset.tfIdleHtml;\r\n    }\r\n    button.disabled = false;\r\n  }\r\n\r\n  function selectRating(value) {\r\n    const form = $('[data-tf-review-form]');\r\n    form.elements.rating.value = value || '';\r\n    $$('[data-rating]', form).forEach((button) => button.classList.toggle('is-active', Number(button.dataset.rating) <= Number(value || 0)));\r\n  }\r\n\r\n  function resetComposer() {\r\n    const form = $('[data-tf-review-form]');\r\n    form.reset();\r\n    selectRating(0);\r\n    state.media.forEach((item) => { if (item.previewUrl?.startsWith('blob:')) URL.revokeObjectURL(item.previewUrl); });\r\n    state.media = [];\r\n    state.mine = null;\r\n    renderMediaPreview();\r\n    $('[data-tf-withdraw]').hidden = true;\r\n    const submit = $('.tf-review-form .tf-button-primary');\r\n    submit.textContent = 'Pubblica la recensione';\r\n    submit.disabled = false;\r\n  }\r\n\r\n  function fillMine(review) {\r\n    if (!review) return;\r\n    const form = $('[data-tf-review-form]');\r\n    state.mine = review;\r\n    form.elements.publicName.value = review.publicName || '';\r\n    form.elements.city.value = review.city || '';\r\n    form.elements.title.value = review.title || '';\r\n    form.elements.body.value = review.body || '';\r\n    selectRating(review.rating || 0);\r\n    $$('input[name=\"tags\"]', form).forEach((input) => { input.checked = Array.isArray(review.tags) && review.tags.includes(input.value); });\r\n    state.media = Array.isArray(review.media) ? review.media.map((item) => ({ ...item, previewUrl: item.url, uploaded: true })) : [];\r\n    renderMediaPreview();\r\n    $('[data-tf-withdraw]').hidden = review.canEdit !== true;\r\n    $('.tf-review-form .tf-button-primary').textContent = review.canEdit ? 'Salva le modifiche' : 'Periodo di modifica terminato';\r\n    $('.tf-review-form .tf-button-primary').disabled = review.canEdit === false;\r\n  }\r\n\r\n  async function loadMine() {\r\n    if (!state.token) return;\r\n    try {\r\n      const payload = await api('trustFloramePublicV1', { method: 'POST', body: { action: 'mine', token: state.token } });\r\n      if (payload.review) fillMine(payload.review);\r\n      else resetComposer();\r\n    } catch (error) {\r\n      if (['TRUST_SESSION_NOT_FOUND', 'TRUST_SESSION_EXPIRED'].includes(error.code)) {\r\n        try { localStorage.removeItem(TOKEN_KEY); } catch (_) {}\r\n        state.token = '';\r\n        resetComposer();\r\n        setStep('email');\r\n      } else setFormError(error.message);\r\n    }\r\n  }\r\n\r\n  function renderMediaPreview() {\r\n    const container = $('[data-tf-media-preview]');\r\n    container.innerHTML = state.media.map((item, index) => `<figure data-media-index=\"${index}\">${item.type === 'video' || item.file?.type?.startsWith('video/')\r\n      ? `<video src=\"${escapeHtml(item.previewUrl || '')}\" muted playsinline></video>`\r\n      : `<img src=\"${escapeHtml(item.previewUrl || '')}\" alt=\"Anteprima allegato\">`}<button type=\"button\" aria-label=\"Rimuovi allegato\" data-tf-remove-media=\"${index}\">\u00D7</button>${item.uploading ? '<progress></progress>' : ''}</figure>`).join('');\r\n  }\r\n\r\n  async function uploadFiles(files) {\r\n    const accepted = Array.from(files || []).slice(0, 4 - state.media.length);\r\n    const videoAlready = state.media.some((item) => item.type === 'video' || item.file?.type?.startsWith('video/'));\r\n    for (const file of accepted) {\r\n      const isVideo = file.type.startsWith('video/');\r\n      if (isVideo && (videoAlready || state.media.some((item) => item.type === 'video'))) {\r\n        setFormError(ERROR_COPY.VIDEO_LIMIT_REACHED);\r\n        continue;\r\n      }\r\n      const limit = isVideo ? 24 * 1024 * 1024 : 10 * 1024 * 1024;\r\n      if (file.size > limit) {\r\n        setFormError(ERROR_COPY.MEDIA_TOO_LARGE);\r\n        continue;\r\n      }\r\n      const entry = { file, type: isVideo ? 'video' : 'image', previewUrl: URL.createObjectURL(file), uploading: true };\r\n      state.media.push(entry);\r\n      renderMediaPreview();\r\n      try {\r\n        const payload = await api('trustFlorameMediaUploadV1', {\r\n          method: 'POST',\r\n          body: file,\r\n          headers: { 'Content-Type': file.type || 'application/octet-stream', 'X-Trust-Token': state.token, 'X-File-Name': file.name || 'media' }\r\n        });\r\n        Object.assign(entry, payload.media, { uploaded: true, uploading: false });\r\n      } catch (error) {\r\n        const index = state.media.indexOf(entry);\r\n        if (index >= 0) state.media.splice(index, 1);\r\n        URL.revokeObjectURL(entry.previewUrl);\r\n        setFormError(error.message);\r\n      }\r\n      renderMediaPreview();\r\n    }\r\n  }\r\n\r\n  async function authorizeInvite(inviteToken) {\r\n    try {\r\n      const payload = await api('trustFloramePublicV1', { method: 'POST', body: { action: 'authorize_invite', inviteToken } });\r\n      state.token = payload.token;\r\n      try { localStorage.setItem(TOKEN_KEY, state.token); } catch (_) { /* Current session remains usable without persistent storage. */ }\r\n      const url = new URL(location.href);\r\n      url.hash = '';\r\n      url.searchParams.set('write', '1');\r\n      history.replaceState({}, '', url.toString());\r\n      openDialog();\r\n      showNotice('Ordine riconosciuto: la recensione avr\u00E0 il badge \u201CAcquisto verificato\u201D.');\r\n    } catch (error) {\r\n      showNotice('Il vecchio invito non \u00E8 pi\u00F9 utilizzabile. Puoi comunque verificare la tua email.', 'error');\r\n      openDialog();\r\n    }\r\n  }\r\n\r\n  root.addEventListener('click', async (event) => {\r\n    if (event.target.closest('[data-tf-info-open]')) { $('[data-tf-info-dialog]').showModal(); return; }\r\n    if (event.target.closest('[data-tf-info-close]')) { $('[data-tf-info-dialog]').close(); return; }\r\n    const open = event.target.closest('[data-tf-open]');\r\n    if (open) { event.preventDefault(); openDialog(); return; }\r\n    if (event.target.closest('[data-tf-close]')) { closeDialog(); return; }\r\n    if (event.target.closest('[data-tf-done]')) { closeDialog(); document.querySelector('.tf-reviews-layout')?.scrollIntoView({ behavior: 'smooth' }); return; }\r\n    if (event.target.closest('[data-tf-retry]')) { loadReviews(); return; }\r\n    const ratingFilter = event.target.closest('[data-tf-rating-filter]');\r\n    if (ratingFilter) {\r\n      if (state.loading) return;\r\n      const value = Number(ratingFilter.dataset.tfRatingFilter);\r\n      state.rating = state.rating === value ? null : value;\r\n      state.cursor = '';\r\n      loadReviews();\r\n      return;\r\n    }\r\n    if (event.target.closest('[data-tf-reset]')) {\r\n      if (state.loading) return;\r\n      state.rating = null;\r\n      state.verifiedOnly = false;\r\n      $('[data-tf-verified-filter]').checked = false;\r\n      state.cursor = '';\r\n      loadReviews();\r\n      return;\r\n    }\r\n    const ratingButton = event.target.closest('[data-rating]');\r\n    if (ratingButton) { selectRating(Number(ratingButton.dataset.rating)); return; }\r\n    const removeMedia = event.target.closest('[data-tf-remove-media]');\r\n    if (removeMedia) {\r\n      const index = Number(removeMedia.dataset.tfRemoveMedia);\r\n      const [item] = state.media.splice(index, 1);\r\n      if (item?.previewUrl?.startsWith('blob:')) URL.revokeObjectURL(item.previewUrl);\r\n      renderMediaPreview();\r\n      return;\r\n    }\r\n    const reportToggle = event.target.closest('[data-tf-report-toggle]');\r\n    if (reportToggle) {\r\n      const choices = $('.tf-report-choices', reportToggle.closest('.tf-review-card'));\r\n      choices.hidden = !choices.hidden;\r\n      return;\r\n    }\r\n    const reportButton = event.target.closest('[data-tf-report]');\r\n    if (reportButton) {\r\n      const card = reportButton.closest('[data-review-id]');\r\n      reportButton.disabled = true;\r\n      try {\r\n        await api('trustFloramePublicV1', { method: 'POST', body: { action: 'report', reviewId: card.dataset.reviewId, reason: reportButton.dataset.tfReport } });\r\n        $('.tf-report-choices', card).innerHTML = '<small>Grazie, la segnalazione \u00E8 stata inviata.</small>';\r\n      } catch (error) { showNotice(error.message, 'error'); }\r\n      return;\r\n    }\r\n    if (event.target.closest('[data-tf-more]')) loadReviews({ append: true });\r\n  });\r\n\r\n  $('[data-tf-verified-filter]').addEventListener('change', (event) => {\r\n    state.verifiedOnly = event.target.checked;\r\n    state.cursor = '';\r\n    loadReviews();\r\n  });\r\n\r\n  $('[data-tf-dialog]').addEventListener('click', (event) => {\r\n    if (event.target === event.currentTarget) closeDialog();\r\n  });\r\n  $('[data-tf-info-dialog]').addEventListener('click', (event) => {\r\n    if (event.target === event.currentTarget) event.currentTarget.close();\r\n  });\r\n\r\n  $('[data-tf-email-form]').addEventListener('submit', async (event) => {\r\n    event.preventDefault();\r\n    const button = event.currentTarget.querySelector('button');\r\n    setButtonLoading(button, true, 'Invio codice\u2026');\r\n    try {\r\n      const payload = await api('trustFloramePublicV1', { method: 'POST', body: { action: 'start', email: event.currentTarget.elements.email.value } });\r\n      state.requestId = payload.requestId;\r\n      setStep('code');\r\n      $('[data-tf-code-form] input').focus();\r\n    } catch (error) { setFormError(error.message); }\r\n    finally { setButtonLoading(button, false); }\r\n  });\r\n\r\n  $('[data-tf-code-form]').addEventListener('submit', async (event) => {\r\n    event.preventDefault();\r\n    const button = event.currentTarget.querySelector('button');\r\n    setButtonLoading(button, true, 'Verifica\u2026');\r\n    try {\r\n      const payload = await api('trustFloramePublicV1', { method: 'POST', body: { action: 'verify', requestId: state.requestId, code: event.currentTarget.elements.code.value } });\r\n      state.token = payload.token;\r\n      try { localStorage.setItem(TOKEN_KEY, state.token); } catch (_) { /* Current session remains usable without persistent storage. */ }\r\n      resetComposer();\r\n      setStep('review');\r\n    } catch (error) { setFormError(error.message); }\r\n    finally { setButtonLoading(button, false); }\r\n  });\r\n\r\n  $('[data-tf-media]').addEventListener('change', (event) => {\r\n    setFormError('');\r\n    uploadFiles(event.target.files);\r\n    event.target.value = '';\r\n  });\r\n\r\n  $('[data-tf-review-form]').addEventListener('submit', async (event) => {\r\n    event.preventDefault();\r\n    setFormError('');\r\n    if (state.media.some((item) => item.uploading)) { setFormError('Attendi il caricamento degli allegati.'); return; }\r\n    const form = event.currentTarget;\r\n    if (!form.elements.rating.value) {\r\n      setFormError('Scegli da una a cinque stelle.');\r\n      $('[data-rating=\"1\"]', form)?.focus();\r\n      return;\r\n    }\r\n    const button = form.querySelector('.tf-button-primary');\r\n    setButtonLoading(button, true, state.mine ? 'Salvataggio\u2026' : 'Pubblicazione\u2026');\r\n    try {\r\n      const payload = await api('trustFloramePublicV1', {\r\n        method: 'POST',\r\n        body: {\r\n          action: state.mine ? 'update' : 'submit',\r\n          token: state.token,\r\n          rating: Number(form.elements.rating.value),\r\n          publicName: form.elements.publicName.value,\r\n          city: form.elements.city.value,\r\n          title: form.elements.title.value,\r\n          body: form.elements.body.value,\r\n          tags: $$('input[name=\"tags\"]:checked', form).map((input) => input.value),\r\n          mediaIds: state.media.filter((item) => item.uploaded).map((item) => item.id)\r\n        }\r\n      });\r\n      state.mine = payload.review;\r\n      $('[data-tf-success-copy]').textContent = payload.review?.publishedAt\r\n        ? 'La recensione \u00E8 online. Potrai correggerla per sette giorni.'\r\n        : 'La recensione \u00E8 al sicuro e verr\u00E0 pubblicata dopo il controllo privacy.';\r\n      setStep('success');\r\n      state.cursor = '';\r\n      await loadReviews();\r\n    } catch (error) { setFormError(error.message); }\r\n    finally { setButtonLoading(button, false); }\r\n  });\r\n\r\n  $('[data-tf-withdraw]').addEventListener('click', async () => {\r\n    if (!await (window.FlorameUI?.confirm ? window.FlorameUI.confirm({title:'Ritirare la recensione?',detail:'La recensione e gli allegati non saranno pi\u00F9 visibili.',confirmLabel:'Ritira recensione',destructive:true}) : window.confirm('Vuoi ritirare la recensione? Non sar\u00E0 pi\u00F9 visibile.'))) return;\r\n    const button = $('[data-tf-withdraw]');\r\n    setButtonLoading(button, true, 'Ritiro\u2026');\r\n    try {\r\n      await api('trustFloramePublicV1', { method: 'POST', body: { action: 'withdraw', token: state.token } });\r\n      resetComposer();\r\n      setStep('success');\r\n      $('[data-tf-success-copy]').textContent = 'La recensione \u00E8 stata ritirata e gli allegati sono stati rimossi.';\r\n      await loadReviews();\r\n    } catch (error) { setFormError(error.message); }\r\n    finally { setButtonLoading(button, false); }\r\n  });\r\n\r\n  $('[data-tf-author-category]')?.addEventListener('change', event => { state.category=event.target.value;state.cursor='';state.verifiedOnly=false;$('[data-tf-verified-filter]').checked=false;loadReviews(); });\r\n  const params = new URLSearchParams(location.search);\r\n  const hashParams = new URLSearchParams(String(location.hash || '').replace(/^#/, ''));\r\n  loadReviews();\r\n  if (hashParams.get('invite')) authorizeInvite(hashParams.get('invite'));\r\n  else if (params.get('write') === '1' || root.dataset.openComposer === 'true') openDialog();\r\n})();\r\n"],
  "mappings": "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",
  "names": ["count", "params"]
}
