{
  "version": 3,
  "sources": ["/cdn/shop/t/75/assets/b2c-voice.js?t=1792410529296"],
  "sourcesContent": ["/*\n  B2C spraakzoeken (v5.5 \u2013 productieversie) \u2013 assets/b2c-voice.js\n  - Gebruikt uitsluitend de ingebouwde spraakherkenning van de browser (Web Speech API). Geen externe dienst, geen sleutel.\n  - De herkende tekst gaat in het bestaande zoekveld en activeert de bestaande zoeksuggesties (input-event, stap 3).\n    Enter of 'Bekijk alle' gaan naar de bestaande zoekpagina. Er is geen eigen zoeklogica.\n  - De microfoonknop verschijnt alleen als de browser spraakherkenning ondersteunt \u00E9n er genoeg typruimte overblijft.\n  - Typen en zoeken werken altijd, ook als spraak mislukt, geweigerd wordt of niet beschikbaar is.\n  - Er wordt niets opgeslagen of gelogd (de testconsole van v5.3 is verwijderd). Het geluid wordt door de browser zelf verwerkt (Chrome: Google, Safari: Apple).\n*/\n(function () {\n  'use strict'\n  if (window.B2CVoice) return\n  var SR = window.SpeechRecognition || window.webkitSpeechRecognition\n  // Opera en Brave tonen de API wel, maar hebben geen werkende spraakdienst: daar geen microfoonknop\n  var brokenApi = /\\bOPR\\/|\\bOPT\\//.test(navigator.userAgent) || !!navigator.brave\n  var supported = typeof SR === 'function' && !brokenApi\n  window.B2CVoice = { supported: supported, build: 'v5.5' }\n  if (!supported) return\n\n  var LANG = 'nl-NL'\n  var MAX_LISTEN_MS = 10000 // veiligheidsstop\n  var END_WAIT_MS = 1500 // v5.2: na stop() maximaal zo lang wachten op 'end' (iOS stuurt die soms nooit)\n  var MIN_TYPE_SPACE = 80 // px typruimte die minimaal moet overblijven (gemeten voor de open dropdown), anders geen microfoonknop\n  var touchOnly = window.matchMedia && window.matchMedia('(hover: none) and (pointer: coarse)')\n\n  var MIC_SVG = '<svg aria-hidden=\"true\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"9\" y=\"2.5\" width=\"6\" height=\"12\" rx=\"3\"/><path d=\"M5.5 11a6.5 6.5 0 0 0 13 0\"/><path d=\"M12 17.5V21\"/></svg>'\n  var CLOSE_SVG = '<svg aria-hidden=\"true\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\"><path d=\"M6 6l12 12M18 6L6 18\"/></svg>'\n  var STOP_SVG = '<svg aria-hidden=\"true\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\"/></svg>'\n\n  var MESSAGES = {\n    listening: 'Luisteren\u2026',\n    'no-speech': 'Niets gehoord. Probeer opnieuw of typ je zoekopdracht.',\n    'not-allowed': 'Geen toegang tot de microfoon. Sta de microfoon toe in je browser of typ je zoekopdracht.',\n    'service-not-allowed': 'Spraakherkenning is niet beschikbaar in deze browser. Typ je zoekopdracht.',\n    'audio-capture': 'Geen microfoon gevonden. Typ je zoekopdracht.',\n    network: 'Spraakherkenning is nu niet bereikbaar. Typ je zoekopdracht.',\n    'language-not-supported': 'Nederlandse spraakherkenning is hier niet beschikbaar. Typ je zoekopdracht.',\n    generic: 'Spraak lukte niet. Typ je zoekopdracht.'\n  }\n\n  // v5.4: bij 'service-not-allowed' alleen op iPhone/iPad een verwijzing naar de juiste instelling (los van microfoontoegang)\n  // iPadOS meldt zich als 'Macintosh' met touch; Android/Windows/Mac-desktop krijgen de algemene melding\n  var ua = navigator.userAgent\n  var isIOS = !/Android|Windows/.test(ua) && (/iP(hone|ad|od)/.test(ua) || (/Macintosh/.test(ua) && navigator.maxTouchPoints > 1))\n  if (isIOS) MESSAGES['service-not-allowed'] = 'Spraakherkenning staat uit voor deze browser. Zet hem aan via Instellingen \u203A Privacy en beveiliging \u203A Spraakherkenning, of typ je zoekopdracht.'\n\n  /* ---------- tekst opschonen (geen zoeklogica: alleen schrijfwijze) ---------- */\n  // 'Samsung S 26 Ultra.' -> 'Samsung S26 Ultra' \u00B7 'a 57' -> 'a57' \u00B7 'Moto g 85' -> 'Moto g85' \u00B7 'Tab S 9 FE' -> 'Tab S9 FE'\n  function normalize (text) {\n    return String(text || '')\n      .replace(/[.!?,;:]+/g, ' ')\n      .replace(/\\s+/g, ' ')\n      .trim()\n      .replace(/\\b([a-z])\\s+(\\d{1,4})\\b/gi, '$1$2')\n  }\n\n  /* ---------- knop toevoegen naast de toestelknop ---------- */\n  function $all (sel, root) { return Array.prototype.slice.call((root || document).querySelectorAll(sel)) }\n\n  function inject () {\n    $all('.header__search [data-b2c-device-chip]').forEach(function (chip) {\n      var field = chip.closest('.field')\n      if (!field || field.querySelector('[data-b2c-voice]')) return\n      var btn = document.createElement('a')\n      btn.className = 'b2c-voice'\n      btn.href = '#'\n      btn.setAttribute('role', 'button')\n      btn.setAttribute('data-b2c-voice', '')\n      btn.setAttribute('aria-pressed', 'false')\n      btn.setAttribute('aria-label', 'Zoeken met je stem')\n      btn.setAttribute('title', 'Zoeken met je stem')\n      btn.innerHTML = MIC_SVG\n      chip.parentNode.insertBefore(btn, chip)\n      var msg = document.createElement('div') // geen span: themaregel '.header__icon--search span' zou hem tonen\n      msg.className = 'b2c-voice__msg'\n      msg.setAttribute('role', 'status')\n      msg.setAttribute('aria-live', 'polite')\n      msg.setAttribute('data-b2c-voice-msg', '')\n      msg.hidden = true\n      // v5.5: tekst + sluitknop (X); div i.p.v. span vanwege themaregel '.header__icon--search span'\n      var msgText = document.createElement('div')\n      msgText.className = 'b2c-voice__msg-text'\n      msgText.setAttribute('data-b2c-voice-msg-text', '')\n      var close = document.createElement('button')\n      close.type = 'button'\n      close.className = 'b2c-voice__msg-close'\n      close.setAttribute('data-b2c-voice-msg-close', '')\n      close.setAttribute('aria-label', 'Melding sluiten')\n      close.setAttribute('title', 'Melding sluiten')\n      close.innerHTML = CLOSE_SVG\n      msg.appendChild(msgText)\n      msg.appendChild(close)\n      field.appendChild(msg)\n      field.classList.add('b2c-has-voice')\n      observeField(field)\n    })\n    fitAll()\n  }\n\n  // Alleen tonen als er na chip + microfoon nog genoeg typruimte is (smalle schermen, lange toestelnaam)\n  function fit (field) {\n    var input = field.querySelector('input[type=\"search\"]')\n    if (!input || field.offsetParent === null) return\n    if (state.listening && state.field === field) return\n    // eigen maat van de toestelknop (ook als het veld bij het laden verborgen was of de breedte later wijzigt)\n    var chip = field.querySelector('[data-b2c-device-chip]')\n    var cw = chip && chip.offsetWidth\n    if (cw > 0 && field.style.getPropertyValue('--b2c-voice-chip-w') !== cw + 'px') field.style.setProperty('--b2c-voice-chip-w', cw + 'px')\n    field.classList.remove('b2c-voice--nofit')\n    var cs = window.getComputedStyle(input)\n    var space = input.clientWidth - parseFloat(cs.paddingLeft) - parseFloat(cs.paddingRight)\n    // altijd rekenen met de open dropdown (daar komt de sluitknop X bij): de knop verspringt dan niet bij openen/sluiten\n    var details = field.closest('details')\n    if (details && !details.open) space -= (window.matchMedia && window.matchMedia('(max-width: 749px)').matches) ? 30 : 28\n    if (space < MIN_TYPE_SPACE) field.classList.add('b2c-voice--nofit')\n  }\n  function fitAll () { $all('.field.b2c-has-voice').forEach(fit) }\n  var fitPending = false\n  function scheduleFit () {\n    if (fitPending) return\n    fitPending = true\n    setTimeout(function () { fitPending = false; fitAll() }, 60)\n  }\n  function observeField (field) {\n    // b2c-device.js zet --b2c-chip-w (chipbreedte) als style op het veld: dan opnieuw meten\n    if (window.MutationObserver) new MutationObserver(scheduleFit).observe(field, { attributes: true, attributeFilter: ['style'] })\n    var details = field.closest('details')\n    if (details) details.addEventListener('toggle', function () {\n      if (!details.open && state.listening && state.field === field) abort('dropdown gesloten')\n      scheduleFit()\n    })\n  }\n\n  /* ---------- spraakherkenning ---------- */\n  var state = { rec: null, recIdle: true, listening: false, stopping: false, btn: null, field: null, input: null, finalText: '', interim: '', error: null, oldValue: '', oldPlaceholder: null, timer: null, endTimer: null, msgTimer: null }\n\n  // v5.2: \u00E9\u00E9n object hergebruiken zolang het netjes afgesloten is; hing het vorige (geen 'end'), dan een nieuw object\n  function getRecognizer () {\n    if (state.rec && state.recIdle) return state.rec\n    if (state.rec) detach(state.rec)\n    var rec = new SR()\n    rec.lang = LANG\n    rec.continuous = false\n    rec.interimResults = true\n    rec.maxAlternatives = 1\n    rec.onresult = function (event) {\n      if (rec !== state.rec || !state.listening) return\n      var interim = ''\n      var gotFinal = false\n      for (var i = event.resultIndex; i < event.results.length; i++) {\n        var r = event.results[i]\n        if (r.isFinal) { state.finalText += r[0].transcript + ' '; gotFinal = true } else interim += r[0].transcript\n      }\n      state.interim = interim\n      if (state.input) state.input.placeholder = normalize(state.finalText + interim) || MESSAGES.listening\n      // v5.2: definitieve tekst meteen invullen, niet wachten op 'end' (die blijft op iOS soms uit)\n      if (gotFinal) { try { rec.stop() } catch (e) {} finish() }\n    }\n    rec.onerror = function (event) {\n      var code = (event && event.error) || 'generic'\n      if (rec !== state.rec) return\n      if (!state.error) state.error = code\n      if (state.listening && code !== 'aborted') finish()\n    }\n    rec.onnomatch = function () { if (rec === state.rec && !state.error) state.error = 'no-speech' }\n    rec.onspeechend = function () { if (rec === state.rec) stop() }\n    rec.onend = function () {\n      if (rec !== state.rec) return\n      state.recIdle = true\n      finish()\n    }\n    state.rec = rec\n    state.recIdle = true\n    return rec\n  }\n  function detach (rec) {\n    rec.onresult = rec.onerror = rec.onnomatch = rec.onspeechend = rec.onend = null\n    try { rec.abort() } catch (e) {}\n  }\n\n  function setListening (on) {\n    state.listening = on\n    if (!state.btn) return\n    state.btn.classList.toggle('is-listening', on)\n    state.btn.setAttribute('aria-pressed', on ? 'true' : 'false')\n    state.btn.setAttribute('aria-label', on ? 'Stop met luisteren' : 'Zoeken met je stem')\n    state.btn.setAttribute('title', on ? 'Stop met luisteren' : 'Zoeken met je stem')\n    state.btn.innerHTML = on ? STOP_SVG : MIC_SVG\n    if (state.field) state.field.classList.toggle('b2c-voice--listening', on)\n  }\n\n  function showMessage (field, text) {\n    var msg = field && field.querySelector('[data-b2c-voice-msg]')\n    if (!msg) return\n    var msgText = msg.querySelector('[data-b2c-voice-msg-text]')\n    clearTimeout(state.msgTimer)\n    msgText.textContent = text\n    msg.hidden = !text\n    // lange meldingen (instelling op iPhone) langer tonen\n    if (text) state.msgTimer = setTimeout(function () { hideMessage(msg) }, text.length > 90 ? 10000 : 5000)\n  }\n  function hideMessage (msg) {\n    clearTimeout(state.msgTimer)\n    if (!msg) return\n    msg.hidden = true\n    var msgText = msg.querySelector('[data-b2c-voice-msg-text]')\n    if (msgText) msgText.textContent = ''\n  }\n\n  function start (btn) {\n    var field = btn.closest('.field')\n    var input = field && field.querySelector('input[type=\"search\"]')\n    if (!input) return\n    state.btn = btn\n    state.field = field\n    state.input = input\n    state.finalText = ''\n    state.interim = ''\n    state.error = null\n    state.stopping = false\n    state.oldValue = input.value\n    state.oldPlaceholder = input.getAttribute('placeholder')\n    // v5.2: op een touchscherm g\u00E9\u00E9n focus/toetsenbord tijdens het luisteren (iOS onderbreekt dan de microfoon)\n    if (isTouch() && document.activeElement === input) input.blur()\n    input.value = ''\n    input.placeholder = MESSAGES.listening\n    showMessage(field, '')\n    setListening(true)\n    var rec\n    try {\n      rec = getRecognizer()\n      state.recIdle = false\n      rec.start()\n    } catch (e) {\n      state.error = 'generic'\n      if (rec) { detach(rec); state.rec = null }\n      finish()\n      return\n    }\n    clearTimeout(state.timer)\n    state.timer = setTimeout(stop, MAX_LISTEN_MS)\n  }\n\n  // Stoppen met verwerken: tekst tot nu toe gebruiken. Komt 'end' niet binnen END_WAIT_MS, dan zelf afronden.\n  function stop (why) {\n    if (!state.listening || state.stopping) return\n    state.stopping = true\n    // meteen zichtbaar: knop niet langer oranje, tekst tot nu toe wordt verwerkt\n    if (state.btn) { state.btn.classList.remove('is-listening'); state.btn.innerHTML = MIC_SVG }\n    var rec = state.rec\n    try { rec && rec.stop() } catch (e) {}\n    clearTimeout(state.endTimer)\n    state.endTimer = setTimeout(function () {\n      if (!state.listening || rec !== state.rec) return\n      state.rec = null\n      if (rec) detach(rec)\n      finish()\n    }, END_WAIT_MS)\n  }\n\n  // Afbreken (typen, X, toestelkeuze, Escape, pagina weg): meteen terug naar normaal, herkende tekst negeren\n  function abort (why) {\n    if (!state.listening) return\n    var rec = state.rec\n    state.rec = null\n    if (rec) detach(rec)\n    finish({ discard: true, keepEmpty: why === 'wissen' })\n  }\n\n  function finish (opts) {\n    if (!state.listening) return\n    opts = opts || {}\n    clearTimeout(state.timer)\n    clearTimeout(state.endTimer)\n    state.stopping = false\n    var input = state.input\n    var field = state.field\n    var text = opts.discard ? '' : normalize(state.finalText || state.interim)\n    setListening(false)\n    if (input && state.oldPlaceholder !== null) input.setAttribute('placeholder', state.oldPlaceholder)\n    if (text) {\n      apply(input, text)\n    } else {\n      if (input && !input.value && state.oldValue && !opts.keepEmpty) input.value = state.oldValue\n      if (!opts.discard) {\n        var code = state.error || 'no-speech'\n        if (code !== 'aborted') showMessage(field, MESSAGES[code] || MESSAGES.generic)\n      }\n    }\n    fitAll()\n  }\n\n  // De herkende tekst via het normale input-event aan de bestaande zoekfunctie (stap 3) geven\n  function apply (input, text) {\n    if (!input) return\n    input.value = text\n    input.dispatchEvent(new Event('input', { bubbles: true }))\n    // geen focus op touchscherm: anders opent het toetsenbord over de suggesties\n    if (!isTouch()) { try { input.focus({ preventScroll: true }) } catch (e) { input.focus() } }\n  }\n\n  function isTouch () { return !!(touchOnly && touchOnly.matches) }\n\n  /* ---------- bediening ---------- */\n  var suppressClickUntil = 0\n  var userTapInputAt = 0\n\n  // v5.2: stoppen al bij het neerdrukken (iOS: de klik komt soms niet of te laat door)\n  document.addEventListener('pointerdown', function (event) {\n    var t = event.target\n    if (!(t instanceof Element)) return\n    if (state.listening && t.closest('[data-b2c-voice]')) {\n      event.preventDefault()\n      suppressClickUntil = Date.now() + 800\n      stop('knop')\n      return\n    }\n    if (state.input && t === state.input) userTapInputAt = Date.now()\n  }, true)\n\n  document.addEventListener('click', function (event) {\n    var t = event.target\n    if (!(t instanceof Element)) return\n    // v5.5: sluitknop van de melding (muis, touch, Enter/spatie); zoekveld en dropdown blijven zoals ze zijn\n    var closeBtn = t.closest('[data-b2c-voice-msg-close]')\n    if (closeBtn) {\n      event.preventDefault()\n      event.stopPropagation()\n      var m = closeBtn.closest('[data-b2c-voice-msg]')\n      var mic = m && m.parentNode && m.parentNode.querySelector('[data-b2c-voice]')\n      hideMessage(m)\n      if (mic && document.activeElement === closeBtn) { try { mic.focus({ preventScroll: true }) } catch (e) { mic.focus() } }\n      return\n    }\n    var btn = t.closest('[data-b2c-voice]')\n    if (!btn) {\n      if (!state.listening || t === state.input) return\n      // Elke andere tik tijdens het luisteren (X wissen, sluitknop, toestelknop, ernaast): spraak afbreken.\n      // De aangetikte knop doet daarna gewoon zijn eigen werk.\n      if (t.closest('button[type=\"reset\"]')) abort('wissen')\n      else if (t.closest('[data-b2c-device-chip]')) abort('toestelkeuze')\n      else abort('andere tik')\n      return\n    }\n    event.preventDefault()\n    if (state.listening || Date.now() < suppressClickUntil) {\n      event.stopPropagation() // dropdown laten zoals hij is\n      stop('knop')\n      return\n    }\n    var field = btn.closest('.field')\n    var input = field && field.querySelector('input[type=\"search\"]')\n    var details = btn.closest('details')\n    if (details && details.open) {\n      event.stopPropagation() // dropdown is al open: thema hoeft niets te doen (en focust dan ook het zoekveld niet)\n    } else if (input && isTouch()) {\n      // dropdown gaat via het thema open en dat focust het zoekveld; readonly voorkomt het toetsenbord\n      input.setAttribute('readonly', '')\n      setTimeout(function () {\n        if (document.activeElement === input) input.blur()\n        input.removeAttribute('readonly')\n      }, 0)\n    }\n    start(btn) // binnen de klik starten (vereist door Safari)\n  }, true)\n\n  // Touchscherm: zoekveld krijgt focus tijdens het luisteren. Bewuste tik = gebruiker wil typen -> afbreken; anders focus eraf.\n  document.addEventListener('focusin', function (event) {\n    if (!state.listening || event.target !== state.input || !isTouch()) return\n    if (Date.now() - userTapInputAt < 1000) { abort('tik in zoekveld'); return }\n    setTimeout(function () { if (state.listening && document.activeElement === state.input) state.input.blur() }, 0)\n  }, true)\n\n  document.addEventListener('keydown', function (event) {\n    if (state.listening && event.key === 'Escape') abort('Escape')\n  }, true)\n  // Typen tijdens het luisteren: spraak stoppen, typen gaat voor (getypte tekst blijft staan)\n  document.addEventListener('input', function (event) {\n    if (state.listening && event.target === state.input && event.isTrusted) abort('typen')\n  }, true)\n  document.addEventListener('visibilitychange', function () { if (document.hidden) abort('pagina verborgen') })\n  window.addEventListener('pagehide', function () { abort('pagina verlaten') })\n  window.addEventListener('resize', scheduleFit)\n\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', inject)\n  else inject()\n  if (document.fonts && document.fonts.ready) document.fonts.ready.then(scheduleFit)\n})()\n"],
  "mappings": "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",
  "names": []
}
