{
  "version": 3,
  "sources": ["/cdn/shop/t/1/assets/name-stamp-configurator.js?fontfix=20260521"],
  "sourcesContent": ["/* ============================================\n   Custom Kids Name Stamp \u2014 Configurator JS\n   ============================================ */\n\n(function () {\n  'use strict';\n\n  var MAX_CHARS_WITH_ICON = 18;\n  var MAX_CHARS_NO_ICON   = 26;\n\n  var state = {\n    shape: null,   // 'QN32' or 'QN41'\n    color: null,   // 'Blue' or 'Pink'\n    withIcon: null, // true or false\n    icon: null,    // icon id (e.g. \"a01\") or null\n    iconUrl: null, // CDN url for selected icon\n    name: ''\n  };\n\n  var tracking = {\n    configStartTracked: false,\n    previewReadyTracked: false\n  };\n\n  // --- DOM refs ---\n  var form, nameInput, charCounter, previewStamp, previewContent, addBtn;\n  var shapeError, colorError, iconToggleError, iconError, nameError;\n\n  function init() {\n    form          = document.getElementById('ns-form');\n    nameInput     = document.getElementById('ns-name');\n    charCounter   = document.getElementById('ns-char-counter');\n    previewStamp  = document.getElementById('ns-preview-stamp');\n    previewContent = document.getElementById('ns-preview-content');\n    addBtn        = document.getElementById('ns-add-to-cart');\n\n    shapeError      = document.getElementById('ns-error-shape');\n    colorError      = document.getElementById('ns-error-color');\n    iconToggleError = document.getElementById('ns-error-icon-toggle');\n    iconError       = document.getElementById('ns-error-icon');\n    nameError       = document.getElementById('ns-error-name');\n\n    buildIconPicker();\n    bindShapeOptions();\n    bindColorOptions();\n    bindIconToggle();\n    bindIconPicker();\n    bindNameInput();\n    bindAddToCart();\n    updatePreview();\n  }\n\n  function getLanguage() {\n    var lang = document.documentElement.getAttribute('lang') || '';\n    if (lang) return lang.toLowerCase();\n    return (window.location.pathname.indexOf('/zh') === 0) ? 'zh-hk' : 'en';\n  }\n\n  function getBaseEventParams() {\n    return {\n      product_handle: 'custom-kids-name-stamp',\n      page_path: window.location.pathname,\n      page_language: getLanguage(),\n      stamp_shape: state.shape || '',\n      stamp_color: state.color || '',\n      has_icon: state.withIcon === true ? 'yes' : (state.withIcon === false ? 'no' : ''),\n      icon_id: state.icon || '',\n      name_length: (state.name || '').trim().length\n    };\n  }\n\n  function trackEvent(name, params) {\n    var payload = params || {};\n    if (typeof window.gtag === 'function') {\n      window.gtag('event', name, payload);\n    }\n  }\n\n  function markConfigStart(interactionType) {\n    if (tracking.configStartTracked) return;\n    tracking.configStartTracked = true;\n    var params = getBaseEventParams();\n    params.interaction_type = interactionType;\n    trackEvent('stamp_config_start', params);\n  }\n\n  function isPreviewReady() {\n    var trimmedName = (state.name || '').trim();\n    if (!state.shape || !state.color || state.withIcon === null || !trimmedName) return false;\n    if (trimmedName.length > getMaxChars()) return false;\n    if (state.withIcon && !state.icon) return false;\n    return true;\n  }\n\n  function maybeTrackPreviewReady() {\n    if (tracking.previewReadyTracked || !isPreviewReady()) return;\n    tracking.previewReadyTracked = true;\n    trackEvent('stamp_preview_ready', getBaseEventParams());\n  }\n\n  function trackValidationErrors() {\n    var missingFields = [];\n    var trimmedName = (state.name || '').trim();\n\n    if (!state.shape) missingFields.push('shape');\n    if (!state.color) missingFields.push('color');\n    if (state.withIcon === null) missingFields.push('icon_toggle');\n    if (state.withIcon && !state.icon) missingFields.push('icon');\n    if (!trimmedName) missingFields.push('name');\n    if (trimmedName && trimmedName.length > getMaxChars()) missingFields.push('name_too_long');\n\n    var params = getBaseEventParams();\n    params.missing_fields = missingFields.join(',');\n    trackEvent('stamp_config_error', params);\n  }\n\n  // --- Category tabs ---\n  var ICON_CATEGORIES = [\n    { key: 'all', label: 'All' },\n    { key: 'boys', label: 'Boys' },\n    { key: 'girls', label: 'Girls' },\n    { key: 'plants', label: 'Plants' },\n    { key: 'animals', label: 'Animals' }\n  ];\n\n  var activeCategory = 'all';\n\n  function buildIconPicker() {\n    var picker = document.getElementById('ns-icon-picker');\n    var icons = window.stampIcons || [];\n\n    // Build tabs\n    var html = '<div class=\"ns-icon-tabs\">';\n    for (var t = 0; t < ICON_CATEGORIES.length; t++) {\n      var cat = ICON_CATEGORIES[t];\n      html += '<button type=\"button\" class=\"ns-icon-tab' + (cat.key === 'all' ? ' active' : '') + '\" data-category=\"' + cat.key + '\">' + cat.label + '</button>';\n    }\n    html += '</div>';\n\n    // Build grid\n    html += '<div class=\"ns-icon-grid\">';\n    for (var i = 0; i < icons.length; i++) {\n      var icon = icons[i];\n      html += '<label class=\"ns-icon-option\" data-value=\"' + icon.id + '\" data-url=\"' + icon.url + '\" data-category=\"' + (icon.category || '') + '\">';\n      html += '<input type=\"radio\" name=\"stamp_icon\" value=\"' + icon.id + '\">';\n      html += '<img src=\"' + icon.url + '\" width=\"40\" height=\"40\" alt=\"' + icon.label + '\" loading=\"lazy\">';\n      html += '<span class=\"ns-icon-label\">' + icon.label + '</span>';\n      html += '</label>';\n    }\n    html += '</div>';\n\n    picker.innerHTML = html;\n    bindCategoryTabs();\n  }\n\n  function bindCategoryTabs() {\n    var tabs = document.querySelectorAll('.ns-icon-tab');\n    tabs.forEach(function (tab) {\n      tab.addEventListener('click', function () {\n        tabs.forEach(function (t) { t.classList.remove('active'); });\n        tab.classList.add('active');\n        activeCategory = tab.getAttribute('data-category');\n        filterIcons();\n      });\n    });\n  }\n\n  function filterIcons() {\n    var options = document.querySelectorAll('.ns-icon-option');\n    options.forEach(function (el) {\n      var cat = el.getAttribute('data-category');\n      if (activeCategory === 'all' || cat === activeCategory) {\n        el.style.display = '';\n      } else {\n        el.style.display = 'none';\n      }\n    });\n  }\n\n  // --- Shape ---\n  function bindShapeOptions() {\n    var options = document.querySelectorAll('.ns-shape-option');\n    options.forEach(function (el) {\n      el.addEventListener('click', function () {\n        options.forEach(function (o) { o.classList.remove('selected'); });\n        el.classList.add('selected');\n        state.shape = el.getAttribute('data-value');\n        hideError(shapeError);\n        markConfigStart('shape_select');\n        updatePreview();\n      });\n    });\n  }\n\n  // --- Color ---\n  function bindColorOptions() {\n    var options = document.querySelectorAll('.ns-color-option');\n    options.forEach(function (el) {\n      el.addEventListener('click', function () {\n        options.forEach(function (o) { o.classList.remove('selected'); });\n        el.classList.add('selected');\n        state.color = el.getAttribute('data-value');\n        hideError(colorError);\n        markConfigStart('color_select');\n        updatePreview();\n      });\n    });\n  }\n\n  // --- Icon toggle ---\n  function bindIconToggle() {\n    var options = document.querySelectorAll('.ns-icon-toggle-option');\n    var picker  = document.getElementById('ns-icon-picker');\n    options.forEach(function (el) {\n      el.addEventListener('click', function () {\n        options.forEach(function (o) { o.classList.remove('selected'); });\n        el.classList.add('selected');\n        var val = el.getAttribute('data-value');\n        state.withIcon = (val === 'yes');\n        markConfigStart('icon_toggle');\n        if (!state.withIcon) {\n          state.icon = null;\n          state.iconUrl = null;\n          var iconOpts = document.querySelectorAll('.ns-icon-option');\n          iconOpts.forEach(function (o) { o.classList.remove('selected'); });\n        }\n        picker.classList.toggle('visible', state.withIcon);\n        hideError(iconToggleError);\n        hideError(iconError);\n        updateCharCounter();\n        updatePreview();\n      });\n    });\n  }\n\n  // --- Icon picker ---\n  function bindIconPicker() {\n    var options = document.querySelectorAll('.ns-icon-option');\n    options.forEach(function (el) {\n      el.addEventListener('click', function () {\n        options.forEach(function (o) { o.classList.remove('selected'); });\n        el.classList.add('selected');\n        state.icon = el.getAttribute('data-value');\n        state.iconUrl = el.getAttribute('data-url');\n        hideError(iconError);\n        markConfigStart('icon_select');\n        updatePreview();\n      });\n    });\n  }\n\n  // --- Name input ---\n  function bindNameInput() {\n    nameInput.addEventListener('keydown', function (e) {\n      if (e.key === 'Enter') {\n        e.preventDefault();\n        e.stopPropagation();\n      }\n    });\n    nameInput.addEventListener('input', function () {\n      state.name = nameInput.value;\n      updateCharCounter();\n      hideError(nameError);\n      if (state.name.trim()) {\n        markConfigStart('name_input');\n      }\n      updatePreview();\n    });\n  }\n\n  function getMaxChars() {\n    return state.withIcon ? MAX_CHARS_WITH_ICON : MAX_CHARS_NO_ICON;\n  }\n\n  function updateCharCounter() {\n    var max = getMaxChars();\n    var len = state.name.length;\n    charCounter.textContent = len + ' / ' + max;\n    if (len > max) {\n      charCounter.classList.add('over-limit');\n      nameInput.classList.add('error');\n    } else {\n      charCounter.classList.remove('over-limit');\n      nameInput.classList.remove('error');\n    }\n  }\n\n  // --- Preview ---\n  function updatePreview() {\n    var svgHTML = '';\n    var stampClass = '';\n\n    if (state.shape === 'QN32') {\n      stampClass = 'circle';\n      svgHTML = buildCircleStampSVG();\n      previewStamp.className = 'ns-preview-stamp ' + stampClass;\n      previewStamp.innerHTML = svgHTML;\n      previewContent.innerHTML = '';\n      previewContent.style.display = 'none';\n      maybeTrackPreviewReady();\n      return;\n    } else if (state.shape === 'QN41') {\n      stampClass = 'rectangle';\n      svgHTML = '<svg class=\"ns-stamp-bg\" viewBox=\"0 0 280 58\"><rect x=\"1\" y=\"1\" width=\"278\" height=\"56\" rx=\"28\" fill=\"#ffffff\" stroke=\"#222\" stroke-width=\"2\"/></svg>';\n    } else {\n      previewStamp.className = 'ns-preview-stamp';\n      previewStamp.innerHTML = '';\n      previewContent.style.display = '';\n      previewContent.innerHTML = '<span class=\"ns-preview-placeholder\">Select a shape to see preview</span>';\n      return;\n    }\n\n    previewStamp.className = 'ns-preview-stamp ' + stampClass;\n    previewStamp.innerHTML = svgHTML;\n    previewContent.style.display = '';\n    previewStamp.appendChild(previewContent);\n\n    var html = '';\n    if (state.withIcon && state.icon && state.iconUrl) {\n      html += '<img class=\"ns-preview-icon-img\" src=\"' + state.iconUrl + '\" width=\"44\" height=\"44\" alt=\"' + state.icon + '\">';\n    }\n\n    if (state.name) {\n      var fontSize = calcFontSize(state.name.length, state.shape);\n      html += '<span class=\"ns-preview-name\" style=\"font-size:' + fontSize + 'px\">' + escapeHTML(state.name) + '</span>';\n    } else {\n      html += '<span class=\"ns-preview-placeholder\" style=\"font-size:13px\">Type a name</span>';\n    }\n\n    previewContent.innerHTML = html;\n    maybeTrackPreviewReady();\n  }\n\n  function buildCircleStampSVG() {\n    var size = 220;\n    var cx = size / 2;\n    var cy = size / 2;\n    var outerR = 106;\n    var textR = 80;\n\n    var svg = '<svg class=\"ns-stamp-bg\" viewBox=\"0 0 ' + size + ' ' + size + '\" xmlns=\"http://www.w3.org/2000/svg\">';\n    svg += '<circle cx=\"' + cx + '\" cy=\"' + cy + '\" r=\"' + outerR + '\" fill=\"#ffffff\" stroke=\"#222\" stroke-width=\"2\"/>';\n\n    if (state.withIcon && state.icon && state.iconUrl) {\n      svg += '<image href=\"' + state.iconUrl + '\" x=\"' + (cx - 42) + '\" y=\"' + (cy - 42) + '\" width=\"84\" height=\"84\"/>';\n    }\n\n    if (state.name) {\n      var escapedName = escapeHTML(state.name);\n      var fontSize = calcCircleTextSize(state.name.length);\n      var startAngle = -180;\n      var endAngle = 0;\n      var startRad = startAngle * Math.PI / 180;\n      var endRad = endAngle * Math.PI / 180;\n      var x1 = cx + textR * Math.cos(startRad);\n      var y1 = cy + textR * Math.sin(startRad);\n      var x2 = cx + textR * Math.cos(endRad);\n      var y2 = cy + textR * Math.sin(endRad);\n\n      svg += '<defs><path id=\"ns-text-arc\" d=\"M ' + x1 + ' ' + y1 + ' A ' + textR + ' ' + textR + ' 0 1 1 ' + x2 + ' ' + y2 + '\"/></defs>';\n      svg += '<text font-size=\"' + fontSize + '\" fill=\"#333\" font-weight=\"700\" letter-spacing=\"1\" font-family=\"Arial, PMingLiU, \u65B0\u7D30\u660E\u9AD4, serif\">';\n      svg += '<textPath href=\"#ns-text-arc\" startOffset=\"50%\" text-anchor=\"middle\">' + escapedName + '</textPath>';\n      svg += '</text>';\n    } else if (!state.name) {\n      svg += '<text x=\"' + cx + '\" y=\"' + (state.withIcon && state.icon ? cy + 36 : cy + 4) + '\" text-anchor=\"middle\" font-size=\"13\" fill=\"#bbb\" dominant-baseline=\"central\" font-family=\"Arial, PMingLiU, \u65B0\u7D30\u660E\u9AD4, serif\">Type a name</text>';\n    }\n\n    svg += '</svg>';\n    return svg;\n  }\n\n  function calcCircleTextSize(len) {\n    if (len <= 3) return 30;\n    if (len <= 6) return 26;\n    if (len <= 9) return 22;\n    if (len <= 12) return 19;\n    if (len <= 15) return 16;\n    if (len <= 18) return 14;\n    return 12;\n  }\n\n  function calcFontSize(len, shape) {\n    if (shape === 'QN32') {\n      if (len <= 3) return 36;\n      if (len <= 6) return 32;\n      if (len <= 9) return 28;\n      if (len <= 12) return 24;\n      if (len <= 15) return 20;\n      if (len <= 18) return 17;\n      return 14;\n    } else {\n      if (len <= 4) return 32;\n      if (len <= 8) return 28;\n      if (len <= 12) return 24;\n      if (len <= 16) return 20;\n      if (len <= 20) return 18;\n      if (len <= 24) return 16;\n      return 14;\n    }\n  }\n\n  function escapeHTML(str) {\n    var div = document.createElement('div');\n    div.appendChild(document.createTextNode(str));\n    return div.innerHTML;\n  }\n\n  // --- Validation ---\n  function validate() {\n    var valid = true;\n\n    if (!state.shape) {\n      showError(shapeError, 'Please select a stamp shape');\n      valid = false;\n    }\n    if (!state.color) {\n      showError(colorError, 'Please select a color');\n      valid = false;\n    }\n    if (state.withIcon === null) {\n      showError(iconToggleError, 'Please choose with or without icon');\n      valid = false;\n    }\n    if (state.withIcon && !state.icon) {\n      showError(iconError, 'Please select an icon');\n      valid = false;\n    }\n    if (!state.name.trim()) {\n      showError(nameError, 'Please enter a name');\n      nameInput.classList.add('error');\n      valid = false;\n    } else if (state.name.length > getMaxChars()) {\n      showError(nameError, 'Name exceeds maximum ' + getMaxChars() + ' characters');\n      nameInput.classList.add('error');\n      valid = false;\n    }\n\n    return valid;\n  }\n\n  function showError(el, msg) {\n    el.textContent = msg;\n    el.classList.add('visible');\n  }\n\n  function hideError(el) {\n    if (el) {\n      el.classList.remove('visible');\n      el.textContent = '';\n    }\n  }\n\n  // --- Add to Cart ---\n  function bindAddToCart() {\n    addBtn.addEventListener('click', function (e) {\n      e.preventDefault();\n      if (!validate()) {\n        trackValidationErrors();\n        return;\n      }\n\n      var iconValue = (state.withIcon && state.icon) ? state.icon : 'None';\n\n      var variantId = form.getAttribute('data-variant-id');\n\n      var body = {\n        id: variantId,\n        quantity: 1,\n        properties: {\n          'Stamp Type': state.shape,\n          'Color': state.color,\n          'Name': state.name.trim(),\n          'Icon': iconValue\n        }\n      };\n\n      addBtn.disabled = true;\n      addBtn.textContent = '\u52A0\u5165\u4E2D...';\n\n      fetch('/cart/add.js', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify(body)\n      })\n      .then(function (res) {\n        if (!res.ok) throw new Error('Add to cart failed');\n        return res.json();\n      })\n      .then(function () {\n        var ecommerceItem = {\n          item_id: variantId,\n          item_name: 'Custom Kids Name Stamp',\n          item_category: 'custom_stamp',\n          item_variant: [state.shape || '', state.color || '', iconValue].filter(Boolean).join(' / '),\n          quantity: 1,\n          price: 120\n        };\n        trackEvent('add_to_cart', {\n          currency: 'HKD',\n          value: 120,\n          items: [ecommerceItem]\n        });\n        trackEvent('stamp_add_to_cart_success', getBaseEventParams());\n        addBtn.textContent = '\u5DF2\u52A0\u5165\uFF01';\n        setTimeout(function () {\n          addBtn.disabled = false;\n          addBtn.textContent = '\u52A0\u5165\u8CFC\u7269\u8ECA \u2014 HKD 120';\n        }, 1500);\n      })\n      .catch(function () {\n        trackEvent('stamp_add_to_cart_error', getBaseEventParams());\n        addBtn.disabled = false;\n        addBtn.textContent = '\u52A0\u5165\u8CFC\u7269\u8ECA \u2014 HKD 120';\n        alert('\u672A\u80FD\u52A0\u5165\u8CFC\u7269\u8ECA\uFF0C\u8ACB\u518D\u8A66\u4E00\u6B21\u3002');\n      });\n    });\n  }\n\n  // --- Init on DOM ready ---\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n\n})();\n\n\n"],
  "mappings": "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",
  "names": []
}
