{
  "version": 3,
  "sources": ["/cdn/shop/t/152/assets/product-measurements.js?rev=20260804-2"],
  "sourcesContent": ["(() => {\n  const UNKNOWN_PRIORITY = 1000;\n  const LONG_VALUE_CHARACTER_THRESHOLD = 32;\n  const PACKED_MEASUREMENT_LABELS = [\n    'package dimensions?',\n    'height without head',\n    'under breastline',\n    'shoulder breadth',\n    'shoulder width',\n    'arm circumference',\n    'thigh circumference',\n    'calf circumference',\n    'head circumference',\n    'billing weight',\n    'shipping weight',\n    'package weight',\n    'torso weight',\n    'body weight',\n    'net weight',\n    'breastline',\n    'waistline',\n    'hip line',\n    'thigh line',\n    'calf line',\n    'feet size',\n    'full bust',\n    'upper bust',\n    'under bust',\n    'underbust',\n    'vagina depth',\n    'vaginal depth',\n    'anus depth',\n    'anal depth',\n    'oral depth',\n    'penile length',\n    'foot length',\n    'hand length',\n    'leg length',\n    'arm length',\n    'neckline',\n    'circumference',\n    'skin tone',\n    'vagina',\n    'anus',\n    'mouth',\n    'brands?',\n    'height',\n    'weight',\n    'breasts?',\n    'chest',\n    'bust',\n    'waist',\n    'hips?',\n  ];\n  const PACKED_MEASUREMENT_LABEL_PATTERN = new RegExp(\n    `(^|\\\\s)(${PACKED_MEASUREMENT_LABELS.join('|')})\\\\s*[:\uFF1A\uFE55]`,\n    'gi',\n  );\n\n  function normalizeMeasurementLabel(label) {\n    return String(label ?? '')\n      .toLowerCase()\n      .replace(/[()\\[\\]{}]/g, ' ')\n      .replace(/[^a-z0-9]+/g, ' ')\n      .trim()\n      .replace(/\\s+/g, ' ');\n  }\n\n  function getMeasurementPriority(label) {\n    const normalizedLabel = normalizeMeasurementLabel(label);\n\n    if (!normalizedLabel) return UNKNOWN_PRIORITY;\n    if (/\\bunder\\s*bust\\b/.test(normalizedLabel)) return 35;\n    if (/\\b(?:bust|breast|chest)\\b/.test(normalizedLabel)) return 10;\n    if (/\\bwaist\\b/.test(normalizedLabel)) return 20;\n    if (/\\bhips?\\b/.test(normalizedLabel)) return 30;\n    if (/\\b(?:height|stature)\\b/.test(normalizedLabel)) return 40;\n    if (/^(?:body |net )?weight$/.test(normalizedLabel)) return 50;\n    if (/\\bweight\\b/.test(normalizedLabel) && !/\\b(?:billing|shipping|package)\\b/.test(normalizedLabel)) return 55;\n    if (/\\b(?:billing|shipping|package) weight\\b/.test(normalizedLabel)) return 60;\n\n    return UNKNOWN_PRIORITY;\n  }\n\n  function formatMeasurementValue(value) {\n    return String(value ?? '')\n      .trim()\n      .replace(/\\s*[\u00D7*]\\s*/g, ' \u00D7 ')\n      .replace(/(\\d)(cm|mm|kg|lbs?|in)\\b/gi, '$1 $2')\n      .replace(/\\s+/g, ' ');\n  }\n\n  function splitMeasurementValueNote(label, value) {\n    const normalizedValue = String(value ?? '').trim();\n    if (normalizedValue.length <= LONG_VALUE_CHARACTER_THRESHOLD) return { value: normalizedValue, note: '' };\n\n    const match = normalizedValue.match(/^(.{1,32}?)\\s*\\(([^()]*)\\)$/);\n    if (!match) return { value: normalizedValue, note: '' };\n\n    const conciseValue = match[1].trim();\n    const note = match[2].trim();\n    if (!conciseValue || !note) return { value: normalizedValue, note: '' };\n\n    return { value: conciseValue, note: `${label}: ${note}` };\n  }\n\n  function isInternalMeasurementNote(label, note) {\n    const normalizedLabel = normalizeMeasurementLabel(label);\n    if (!/\\bweight\\b/.test(normalizedLabel)) return false;\n\n    return /(?:after|with)\\s+(?:the\\s+)?weight reduction|\\bwith reduction\\b|only\\s+(?:support\\s+)?silicone\\s+(?:doll\\s+)?(?:production|available)/i.test(\n      String(note ?? ''),\n    );\n  }\n\n  function splitPackedMeasurementLine(line) {\n    const normalizedLine = String(line ?? '').replace(/[\uFF1A\uFE55]/g, ':');\n    const matches = [...normalizedLine.matchAll(PACKED_MEASUREMENT_LABEL_PATTERN)];\n    PACKED_MEASUREMENT_LABEL_PATTERN.lastIndex = 0;\n\n    if (matches.length < 2) return [normalizedLine];\n\n    return matches.map((match, index) => {\n      const start = match.index + match[1].length;\n      const nextMatch = matches[index + 1];\n      const end = nextMatch ? nextMatch.index + nextMatch[1].length : normalizedLine.length;\n      return normalizedLine.slice(start, end).trim();\n    });\n  }\n\n  function isMeasurementTitleLine(line) {\n    return /^measurements?(?:\\s+chart)?$/i.test(String(line ?? '').trim());\n  }\n\n  function parseMeasurementContent(text) {\n    const lines = String(text ?? '')\n      .replace(/\\u00a0/g, ' ')\n      .split(/\\n+/)\n      .map((line) => line.trim())\n      .filter(Boolean)\n      .filter((line) => !isMeasurementTitleLine(line))\n      .flatMap(splitPackedMeasurementLine);\n\n    const entries = [];\n    const notes = [];\n\n    for (const line of lines) {\n      const normalizedLine = line.replace(/[\uFF1A\uFE55]/g, ':');\n      const separatorIndex = normalizedLine.indexOf(':');\n      if (separatorIndex <= 0 || separatorIndex === normalizedLine.length - 1) {\n        notes.push(line);\n        continue;\n      }\n\n      const label = normalizedLine.slice(0, separatorIndex).trim();\n      const formattedValue = formatMeasurementValue(normalizedLine.slice(separatorIndex + 1));\n      const { value, note } = splitMeasurementValueNote(label, formattedValue);\n      if (!label || !value) {\n        notes.push(line);\n        continue;\n      }\n\n      entries.push({ label, value });\n      if (note && !isInternalMeasurementNote(label, note)) notes.push(note);\n    }\n\n    if (entries.length < 2) return { entries: [], notes: lines };\n    return { entries, notes };\n  }\n\n  function parseMeasurementText(text) {\n    return parseMeasurementContent(text).entries;\n  }\n\n  function sortMeasurementEntries(entries) {\n    return entries\n      .map((entry, index) => ({ ...entry, sourceIndex: index }))\n      .sort((first, second) => {\n        const priorityDifference = getMeasurementPriority(first.label) - getMeasurementPriority(second.label);\n        return priorityDifference || first.sourceIndex - second.sourceIndex;\n      })\n      .map(({ sourceIndex, ...entry }) => entry);\n  }\n\n  function extractMeasurementText(element) {\n    const clone = element.cloneNode(true);\n\n    clone.querySelectorAll('br').forEach((lineBreak) => lineBreak.replaceWith('\\n'));\n    clone.querySelectorAll('p, div, li').forEach((block) => block.append('\\n'));\n\n    return clone.textContent ?? '';\n  }\n\n  function buildMeasurementGrid(entries) {\n    const grid = document.createElement('dl');\n    grid.className = 'product-measurements__grid';\n\n    entries.forEach(({ label, value }) => {\n      const row = document.createElement('div');\n      const term = document.createElement('dt');\n      const description = document.createElement('dd');\n\n      row.className = 'product-measurements__row';\n      if (value.length > LONG_VALUE_CHARACTER_THRESHOLD) {\n        row.classList.add('product-measurements__row--long-value');\n      }\n      term.className = 'product-measurements__label';\n      description.className = 'product-measurements__value';\n      term.textContent = label;\n      description.textContent = value;\n\n      row.append(term, description);\n      grid.append(row);\n    });\n\n    return grid;\n  }\n\n  function buildMeasurementNotes(notes) {\n    if (!notes.length) return null;\n\n    const container = document.createElement('div');\n    container.className = 'product-measurements__notes';\n\n    notes.forEach((note) => {\n      const paragraph = document.createElement('p');\n      paragraph.textContent = note;\n      container.append(paragraph);\n    });\n\n    return container;\n  }\n\n  if (!customElements.get('product-measurements')) {\n    customElements.define(\n      'product-measurements',\n      class ProductMeasurements extends HTMLElement {\n        connectedCallback() {\n          if (this.enhance()) return;\n\n          this.contentObserver = new MutationObserver(() => {\n            if (!this.enhance()) return;\n            this.contentObserver.disconnect();\n          });\n          this.contentObserver.observe(this, { childList: true, subtree: true });\n        }\n\n        disconnectedCallback() {\n          this.contentObserver?.disconnect();\n        }\n\n        enhance() {\n          if (this.dataset.enhanced === 'true') return true;\n\n          const { entries, notes } = parseMeasurementContent(extractMeasurementText(this));\n          if (!entries.length) return false;\n\n          const content = [buildMeasurementGrid(sortMeasurementEntries(entries)), buildMeasurementNotes(notes)].filter(\n            Boolean,\n          );\n          this.replaceChildren(...content);\n          this.dataset.enhanced = 'true';\n          return true;\n        }\n      },\n    );\n  }\n\n  window.LureDollsProductMeasurements = {\n    formatMeasurementValue,\n    getMeasurementPriority,\n    isInternalMeasurementNote,\n    isMeasurementTitleLine,\n    normalizeMeasurementLabel,\n    parseMeasurementContent,\n    parseMeasurementText,\n    splitMeasurementValueNote,\n    splitPackedMeasurementLine,\n    sortMeasurementEntries,\n  };\n})();\n"],
  "mappings": "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",
  "names": []
}
