{
  "version": 3,
  "sources": ["/cdn/shop/t/688/assets/mspa-granittmur.js?ms_mspa_family=20260629-supportwall-audit7"],
  "sourcesContent": ["(() => {\n  \"use strict\";\n\n  const ROOT_SELECTOR = \"[data-mspa-granittmur-calc]\";\n  const FAMILY = \"granittmur\";\n  const PORT = \"granittmur-v5\";\n  const VERSION = \"2026-06-29-granittmur-weight-v1\";\n  const GRANITT_MINIMUM_FREE_LM = 11;\n  const GRANITT_MINIMUM_FEE_NOTICE =\n    \"Minstekj\u00F8p uten tillegg er 11 l\u00F8pemeter.\";\n  const CONFIGS = {\n    \"20\": { label: \"20x20\", factor: 5, weightPerLm: 114, heights: [20, 40, 60, 80, 100, 120, 140], recommendedMax: 120 },\n    \"30\": { label: \"30x30\", factor: 3.33, weightPerLm: 255, heights: [30, 60, 90, 120, 150, 180], recommendedMax: 150 },\n    \"40\": { label: \"40x40\", factor: 2.5, weightPerLm: 450, heights: [40, 80, 120, 160, 200, 240, 280], recommendedMax: 240 },\n    \"50\": { label: \"50x50\", factor: 2, weightPerLm: 760, heights: [50, 100, 150, 200, 250, 300, 350, 400], recommendedMax: 400 }\n  };\n  const EXTRA_METER_THRESHOLD = 19;\n\n  const intValue = (value) => {\n    const parsed = Number.parseInt(String(value ?? \"\").replace(/[^\\d]/g, \"\"), 10);\n    return Number.isFinite(parsed) ? parsed : 0;\n  };\n\n  const decimalValue = (value) => {\n    const normalized = String(value ?? \"\").replace(\",\", \".\").replace(/[^0-9.]/g, \"\");\n    const parts = normalized.split(\".\");\n    const cleaned = parts.length > 2 ? `${parts.shift()}.${parts.join(\"\")}` : normalized;\n    const parsed = Number.parseFloat(cleaned);\n    return Number.isFinite(parsed) ? parsed : 0;\n  };\n\n  const sanitizeDecimal = (value) => {\n    const normalized = String(value ?? \"\").replace(\",\", \".\").replace(/[^0-9.]/g, \"\");\n    const parts = normalized.split(\".\");\n    if (parts.length <= 2) return normalized;\n    return `${parts.shift()}.${parts.join(\"\")}`;\n  };\n\n  const formatNumber = (value, decimals = 0) =>\n    Number(value || 0).toLocaleString(\"nb-NO\", {\n      minimumFractionDigits: decimals,\n      maximumFractionDigits: decimals\n    });\n\n  const formatMeters = (value) => {\n    const number = Number(value || 0);\n    const decimals = !number ? 0 : Number.isInteger(number) ? 0 : number < 10 ? 2 : 1;\n    return formatNumber(number, decimals);\n  };\n\n  const formatMoney = (cents) => {\n    const amount = Math.round(Number(cents || 0));\n    if (!Number.isFinite(amount) || amount <= 0) return \"\";\n    const hasDecimals = amount % 100 !== 0;\n    return `${(amount / 100).toLocaleString(\"nb-NO\", {\n      minimumFractionDigits: hasDecimals ? 2 : 0,\n      maximumFractionDigits: hasDecimals ? 2 : 0\n    })} kr`;\n  };\n\n  function hardMotorMissing(root, message) {\n    const host = root?.closest?.(\"[data-ms-calculator-host]\") || root;\n    host?.setAttribute?.(\"data-mspa-motor-missing\", \"true\");\n    host?.setAttribute?.(\"data-mspa-motor-status\", \"error\");\n    host?.setAttribute?.(\"data-mspa-motor-ready\", \"false\");\n    host?.setAttribute?.(\"data-mspa-motor-disabled\", \"true\");\n    host?.setAttribute?.(\"data-mspa-motor-error\", \"true\");\n    host?.setAttribute?.(\"data-mspa-motor-reason\", \"mspa-motor-missing\");\n    console.error(message || \"MSPA-motoren er ikke lastet. Granittmur stopper uten gammel flow.\");\n  }\n\n  function motorApi(root) {\n    if (\n      window.MSPurchaseMotor &&\n      typeof window.MSPurchaseMotor.mount === \"function\" &&\n      typeof window.MSPurchaseMotor.update === \"function\" &&\n      typeof window.MSPurchaseMotor.add === \"function\"\n    ) {\n      return window.MSPurchaseMotor;\n    }\n    hardMotorMissing(root);\n    return null;\n  }\n\n\n  // Manual stock selection owns only a draft; this adapter never edits calculator state.\n  function makeStockPurchaseOwner(spec) {\n    const fail = (code) => { const error = new Error(code); error.code = code; throw error; };\n    const text = (value) => String(value === undefined || value === null ? \"\" : value).trim();\n    function products() {\n      if (typeof spec.api.readShopifyVariantMap !== \"function\") return fail(\"MSPA_STOCK_VARIANT_MAP_UNAVAILABLE\");\n      const map = spec.api.readShopifyVariantMap(spec.host);\n      if (!map || text(map.productId) !== text(spec.main.productId) || !Array.isArray(map.variants)) return fail(\"MSPA_STOCK_PRODUCT_IDENTITY_CONFLICT\");\n      const selectedQuantity = spec.quantity();\n      if (!Number.isSafeInteger(selectedQuantity) || selectedQuantity < 0) return fail(\"MSPA_STOCK_QUANTITY_INVALID\");\n      const rows = map.variants.map((raw) => ({\n        ...spec.main, variantId: text(raw.variant_id), sku: text(raw.sku), variantTitle: text(raw.title),\n        priceCents: raw.price_cents, compareCents: raw.compare_at_price_cents, grams: raw.grams,\n        available: raw.available, requiresShipping: raw.requires_shipping,\n        unitsPerPallet: raw.units_per_pallet, m2PerPallet: raw.m2_per_pallet,\n        unit: spec.unit, role: \"main\", quantity: text(raw.variant_id) === text(spec.main.variantId) ? selectedQuantity : 0\n      }));\n      if (spec.extra) rows.push(...spec.extra());\n      const seen = new Set();\n      for (const row of rows) {\n        row.variantId = text(row.variantId); row.sku = text(row.sku);\n        if (!/^[1-9][0-9]{0,31}$/.test(row.variantId) || !row.sku || !text(row.title) || !text(row.unit)\n            || seen.has(row.variantId) || !Number.isSafeInteger(row.quantity) || row.quantity < 0) return fail(\"MSPA_STOCK_PRODUCT_IDENTITY_CONFLICT\");\n        seen.add(row.variantId);\n        row.canAdd = row.available === true && row.requiresShipping !== false\n          && Number.isFinite(row.grams) && row.grams > 0\n          && Number.isSafeInteger(row.priceCents) && row.priceCents > 0\n          && (!spec.eligible || spec.eligible(row) === true);\n      }\n      return rows;\n    }\n    function stockProducts() {\n      return products().map((row) => ({ variantId: row.variantId, sku: row.sku, title: row.title,\n        variantTitle: row.variantTitle || \"\", unit: row.unit, image: row.image || \"\", productId: text(row.productId),\n        handle: row.handle || \"\", quantity: row.quantity, canAdd: row.canAdd }));\n    }\n    function stockIntent(selection) {\n      if (!Array.isArray(selection) || !selection.length) return fail(\"MSPA_STOCK_SELECTION_INVALID\");\n      const catalog = new Map(products().map((row) => [row.variantId, row]));\n      const seen = new Set();\n      const chosen = selection.map((entry) => {\n        const row = catalog.get(text(entry.variantId));\n        if (!row || row.sku !== entry.sku || !row.canAdd || seen.has(row.variantId)\n            || !Number.isSafeInteger(entry.quantity) || entry.quantity <= 0) return fail(\"MSPA_STOCK_SELECTION_INVALID\");\n        seen.add(row.variantId); return { row, quantity: entry.quantity };\n      });\n      const singles = chosen.map(({ row, quantity }) => spec.line(row, quantity));\n      if (singles.some((intent) => !intent || typeof intent.then === \"function\" || !Array.isArray(intent.items) || intent.items.length !== 1)) return fail(\"MSPA_STOCK_INTENT_INVALID\");\n      const items = [], shippingItems = [], presentation = [], calculations = [];\n      singles.forEach((intent, index) => {\n        const { row, quantity } = chosen[index]; const item = intent.items[0];\n        if (text(item.id) !== row.variantId || item.quantity !== quantity) return fail(\"MSPA_STOCK_INTENT_IDENTITY_CONFLICT\");\n        if (item.properties && Object.keys(item.properties).length) item.properties = { ...item.properties, _ms_selection_mode: \"manual\" };\n        items.push(item); presentation.push({ item, title: row.title, image: row.image || \"\" });\n        for (const shipping of intent.shippingItems || []) {\n          if (text(shipping.variant_id || shipping.variantId || shipping.id) !== row.variantId || shipping.quantity !== quantity) return fail(\"MSPA_STOCK_SHIPPING_IDENTITY_CONFLICT\");\n          shippingItems.push({ ...shipping, id: row.variantId, variant_id: row.variantId, sku: row.sku, grams: row.grams,\n            price: row.priceCents, final_price: row.priceCents, product_id: text(row.productId),\n            vendor: row.vendor, product_vendor: row.vendor, properties: item.properties || {} });\n        }\n        calculations.push({ variantId: row.variantId, sku: row.sku, quantity, unit: row.unit,\n          calculation: intent.calculatorSnapshot || intent.calculatorSummary || null });\n      });\n      const descriptions = chosen.map(({ row, quantity }) => `${quantity} ${row.unit}`);\n      return { root: spec.host, family: spec.family, vendor: spec.main.vendor, items, shippingItems,\n        presentation: { lines: presentation }, requiresPostcode: true, openCart: true,\n        calculatorSummary: { version: 1, source: spec.source, family: spec.family, mode: \"manual\", selectionMode: \"manual\",\n          summaryText: descriptions.join(\" \u00B7 \"), products: chosen.map(({ row, quantity }) => ({ title: row.title, quantity: `${quantity} ${row.unit}`, role: row.role || \"main\" })),\n          items: chosen.map(({ row, quantity }) => ({ key: row.key || row.variantId, variantId: row.variantId, title: row.title, quantity })), warnings: [] },\n        calculatorSnapshot: { contract: \"mspa-calculator-snapshot-v1\", source: spec.source, version: spec.version, selectionMode: \"manual\", items: calculations },\n        preview: { title: spec.main.title, subtitle: \"Manuelt valgte mengder\", lines: chosen.map(({ row, quantity }) => ({ title: row.title, quantity: `${quantity} ${row.unit}`, image: row.image || \"\", locked: false })), estimatedTotal: \"\", status: \"Legger valgte varer i kurven...\" },\n        syncHints: { cart: true, freight: true, variants: true, pallets: singles.some((intent) => intent.syncHints?.pallets === true) } };\n    }\n    return Object.freeze({ stockProducts, stockIntent });\n  }\n\n  class MspaGranittmur {\n    constructor(root) {\n      this.root = root;\n      this.host = root.closest(\"[data-ms-calculator-host]\");\n      this.api = motorApi(root);\n      if (!this.api || !this.host) return;\n\n      const data = root.dataset || {};\n      const dimension = CONFIGS[data.mspaDimension] ? String(data.mspaDimension) : \"30\";\n      const dimensionConfig = CONFIGS[dimension];\n      const variantWeightKg = Number(data.mspaProductGrams || 0) / 1000;\n      this.config = {\n        dimension,\n        dimensionLabel: dimensionConfig.label,\n        factor: decimalValue(data.mspaLmFactor) || dimensionConfig.factor,\n        factorLabel: data.mspaFactorLabel || `${String(dimensionConfig.factor).replace(\".\", \",\")} lm/m\u00B2`,\n        weightPerLm: Number.isFinite(variantWeightKg) && variantWeightKg > 0 ? variantWeightKg : dimensionConfig.weightPerLm,\n        heights: dimensionConfig.heights,\n        recommendedMax: dimensionConfig.recommendedMax,\n        productId: data.mspaProductId || \"\",\n        handle: data.mspaProductHandle || \"\",\n        title: data.mspaProductTitle || \"Granittmur\",\n        vendor: data.mspaProductVendor || \"\",\n        sku: data.mspaProductSku || \"\",\n        variantId: intValue(data.mspaProductVariantId),\n        grams: Number(data.mspaProductGrams || 0),\n        priceCents: intValue(data.mspaProductPriceCents),\n        compareCents: intValue(data.mspaProductCompareAtCents),\n        priceM2Cents: intValue(data.mspaPriceM2Cents),\n        compareM2Cents: intValue(data.mspaCompareM2Cents),\n        image: data.mspaProductImage || \"\",\n        available: String(data.mspaProductAvailable || \"true\") === \"true\",\n        primary: data.mspaPrimaryCta || \"Legg i kurven\",\n        busy: data.mspaBusyCta || \"Legger i kurven...\",\n        soldOut: data.mspaSoldOutLabel || \"Utsolgt\",\n        priceLm: data.mspaPriceLabelLm || \"Pris per l\u00F8pemeter\",\n        priceM2: data.mspaPriceLabelM2 || \"Pris per m\u00B2\",\n        toggleM2: data.mspaPriceToggleM2 || \"Vis m\u00B2-pris\",\n        toggleLm: data.mspaPriceToggleLm || \"Vis l\u00F8pemeterpris\",\n        initial: data.mspaInitialMessage || \"Velg hvordan muren skal beregnes.\",\n        readySummary: data.mspaReadySummary || \"Utvalget er klart. Legg i kurven.\",\n        meterHelp: data.mspaMeterHelp || \"Du bestiller i l\u00F8pemeter, ikke stykk eller m\u00B2. Vi leverer opp til n\u00E6rmeste hele meter.\",\n        shortWarning: data.mspaShortWarning || \"Lengden virker kort. Granittmur selges i hele l\u00F8pemeter.\",\n        longWarning: data.mspaLongWarning || \"Lengden virker lang. Kontroller at tallet stemmer.\",\n        roundingMessage: data.mspaRoundingMessage || \"Granittmur selges i hele l\u00F8pemeter. Vi runder opp til n\u00E6rmeste hele meter.\"\n      };\n\n      this.config.isBenders = this.config.vendor.trim().toLowerCase().includes(\"benders\");\n      this.config.isAbcstein = this.config.vendor.trim().toLowerCase().includes(\"abcstein\");\n      this.config.hasGranittMinimumFee = this.config.isBenders || this.config.isAbcstein;\n      this.state = {\n        method: \"meters\",\n        lengthM: 0,\n        heightCm: 0,\n        meters: 0,\n        priceMode: \"lm\",\n        editingStep: \"\",\n        typingField: \"\",\n        adding: false,\n        errorMessage: \"\"\n      };\n      this.els = {};\n      this.rendered = false;\n      this.lastPointerTarget = null;\n      this.stockOwner = this.createStockOwner();\n      this.mount();\n      this.collect();\n      this.bind();\n      this.render();\n    }\n\n\n    createStockOwner() {\n      return makeStockPurchaseOwner({ api: this.api, host: this.host, family: FAMILY, version: VERSION, source: \"mspa-granittmur\",\n        main: this.config, unit: \"lm\", quantity: () => this.calculation()?.totalLm || 0,\n        eligible: (row) => row.variantId === String(this.config.variantId) && Number.isFinite(this.config.factor) && this.config.factor > 0,\n        line: (row, quantity) => {\n          const view = Object.create(this);\n          view.config = { ...this.config, variantId: row.variantId, sku: row.sku, grams: row.grams, priceCents: row.priceCents, weightPerLm: row.grams / 1000, available: row.available };\n          return view.cartIntent({ method: \"meters\", totalLm: quantity, inputMeters: quantity, rawLm: quantity,\n            areaM2: quantity / this.config.factor, weightKg: Math.ceil(quantity * row.grams / 1000), lengthM: 0, heightCm: 0, rounded: false });\n        } });\n    }\n\n    mount() {\n      this.host.setAttribute(\"data-mspa-ui-owner\", \"mspa\");\n      this.host.setAttribute(\"data-mspa-customer-summary\", \"off\");\n      this.host.setAttribute(\"data-mspa-legacy-policy\", \"clean-family-ui\");\n      this.host.setAttribute(\"data-mspa-family-port\", PORT);\n      this.host.setAttribute(\"data-mspa-family-port-version\", VERSION);\n      this.host.removeAttribute(\"data-mspa-motor-missing\");\n      this.host.setAttribute(\"data-mspa-motor-error\", \"false\");\n      this.host.classList.remove(\"is-mspa-error\");\n      this.api.define(FAMILY, {\n        port: PORT,\n        version: VERSION,\n        source: \"mspa-granittmur.js\"\n      });\n      this.api.mount(this.host, {\n        stockProducts: this.stockOwner.stockProducts,\n        stockIntent: this.stockOwner.stockIntent,\n        family: FAMILY,\n        port: PORT,\n        version: VERSION,\n        slot: \"[data-mspa-motor-root]\",\n        chrome: this.buildChrome(),\n        steps: this.buildDefinition()\n      });\n      this.rendered = true;\n    }\n\n    buildChrome() {\n      return [\n        {\n          type: \"modeSwitch\",\n          name: \"method\",\n          value: this.state.method,\n          label: \"Velg beregning\",\n          options: [\n            { value: \"meters\", label: \"L\u00F8pemeter\" },\n            { value: \"dimensions\", label: \"Lengde + h\u00F8yde\" }\n          ]\n        },\n        {\n          type: \"price\",\n          name: \"price\",\n          label: this.config.priceLm,\n          value: formatMoney(this.config.priceCents),\n          priceCents: this.config.priceCents,\n          compareCents: this.config.compareCents,\n          toggleLabel: this.config.toggleM2\n        }\n      ];\n    }\n\n    buildDefinition() {\n      return [\n        {\n          id: \"measure\",\n          label: \"M\u00E5l p\u00E5 muren\",\n          components: [\n            {\n              type: \"field\",\n              id: \"mspa-granittmur-length\",\n              name: \"lengthM\",\n              inputType: \"text\",\n              inputmode: \"decimal\",\n              label: \"Lengde\",\n              placeholder: \"Skriv meter\",\n              suffix: \"m\"\n            },\n            {\n              type: \"select\",\n              id: \"mspa-granittmur-height\",\n              name: \"heightCm\",\n              label: \"H\u00F8yde\",\n              options: [\n                { value: \"\", label: \"Velg h\u00F8yde\" },\n                ...this.config.heights.map((height) => ({ value: String(height), label: `${height} cm` }))\n              ]\n            }\n          ]\n        },\n        {\n          id: \"meters\",\n          label: \"Antall l\u00F8pemeter\",\n          components: [\n            {\n              type: \"field\",\n              id: \"mspa-granittmur-meters\",\n              name: \"meters\",\n              inputType: \"text\",\n              inputmode: \"decimal\",\n              label: \"Antall l\u00F8pemeter\",\n              placeholder: \"Skriv l\u00F8pemeter\",\n              suffix: \"lm\"\n            },\n            {\n              type: \"notice\",\n              name: \"meter-help\",\n              tone: \"warning\",\n              text: this.config.meterHelp\n            }\n          ]\n        }\n      ];\n    }\n\n    collect() {\n      const scope = this.host.querySelector(\"[data-mspa-motor-root]\") || this.host;\n      this.els.scope = scope;\n      this.els.steps = {};\n      scope.querySelectorAll(\"[data-mspa-step]\").forEach((step) => {\n        this.els.steps[step.getAttribute(\"data-mspa-step\")] = step;\n      });\n      this.els.modeSwitch = scope.querySelector('[data-mspa-component=\"mode-switch\"][data-mspa-choice-group=\"method\"]');\n      this.els.priceLabel = scope.querySelector('[data-mspa-price-label=\"price\"]');\n      this.els.priceValue = scope.querySelector('[data-mspa-price-value=\"price\"]');\n      this.els.priceToggle = scope.querySelector('[data-mspa-price-toggle=\"price\"]');\n      this.els.length = scope.querySelector('[data-mspa-control=\"lengthM\"]');\n      this.els.lengthUnit = this.els.length?.closest(\"[data-mspa-field]\")?.querySelector(\".mspa-field__input-wrap em\");\n      this.els.lengthWarning = scope.querySelector('[data-mspa-field-warning=\"lengthM\"]');\n      this.els.height = scope.querySelector('[data-mspa-select=\"heightCm\"]');\n      this.els.meters = scope.querySelector('[data-mspa-control=\"meters\"]');\n      this.els.metersWarning = scope.querySelector('[data-mspa-field-warning=\"meters\"]');\n      this.els.meterHelp = scope.querySelector('[data-mspa-notice=\"meter-help\"]');\n    }\n\n    bind() {\n      this.host.ownerDocument?.addEventListener(\"pointerdown\", (event) => {\n        this.lastPointerTarget = event.target;\n      }, true);\n\n      this.els.scope.addEventListener(\"click\", (event) => {\n        const priceToggle = event.target.closest(\"[data-mspa-price-toggle]\");\n        if (priceToggle && this.els.scope.contains(priceToggle)) {\n          event.preventDefault();\n          this.state.priceMode = this.state.priceMode === \"lm\" ? \"m2\" : \"lm\";\n          this.render();\n          return;\n        }\n\n        const choice = event.target.closest(\"[data-mspa-choice]\");\n        if (!choice || !this.els.scope.contains(choice)) return;\n        const group = choice.closest(\"[data-mspa-choice-group]\")?.getAttribute(\"data-mspa-choice-group\") || \"\";\n        if (group !== \"method\") return;\n        const value = choice.getAttribute(\"data-mspa-choice\") || \"\";\n        this.state.method = value === \"meters\" ? \"meters\" : \"dimensions\";\n        this.state.editingStep = \"\";\n        this.state.typingField = \"\";\n        this.state.errorMessage = \"\";\n        this.render();\n        this.focusCurrent();\n      });\n\n      this.els.length?.addEventListener(\"input\", () => {\n        const value = sanitizeDecimal(this.els.length.value);\n        if (this.els.length.value !== value) this.els.length.value = value;\n        this.state.lengthM = decimalValue(value);\n        this.state.typingField = \"lengthM\";\n        this.state.errorMessage = \"\";\n        this.render();\n      });\n      this.els.length?.addEventListener(\"blur\", () => {\n        this.state.typingField = \"\";\n        if (this.measureComplete()) this.state.editingStep = \"\";\n        this.render();\n      });\n      this.els.length?.addEventListener(\"keydown\", (event) => {\n        if (event.key !== \"Enter\") return;\n        event.preventDefault();\n        this.state.typingField = \"\";\n        this.els.height?.focus?.({ preventScroll: true });\n        this.render();\n      });\n\n      this.els.meters?.addEventListener(\"input\", () => {\n        const value = sanitizeDecimal(this.els.meters.value);\n        if (this.els.meters.value !== value) this.els.meters.value = value;\n        this.state.meters = decimalValue(value);\n        this.state.typingField = \"meters\";\n        this.state.errorMessage = \"\";\n        this.render();\n      });\n      this.els.meters?.addEventListener(\"blur\", (event) => {\n        this.state.typingField = \"\";\n        if (this.metersComplete()) this.state.editingStep = \"\";\n        if (this.isCommerceActionBlur(event)) return;\n        this.render();\n      });\n      this.els.meters?.addEventListener(\"keydown\", (event) => {\n        if (event.key !== \"Enter\") return;\n        event.preventDefault();\n        this.state.typingField = \"\";\n        this.els.meters.blur();\n        this.render();\n      });\n\n      this.els.height?.addEventListener(\"change\", () => {\n        this.state.heightCm = intValue(this.els.height.value);\n        this.state.typingField = \"\";\n        this.state.editingStep = \"\";\n        this.state.errorMessage = \"\";\n        this.render();\n      });\n\n      this.host?.addEventListener(\"ms:mspa-step-history:edit\", (event) => {\n        const id = event.detail?.id || \"\";\n        if (![\"method\", \"measure\", \"length\", \"height\", \"meters\"].includes(id)) return;\n        event.preventDefault();\n        this.editStep(id === \"length\" || id === \"height\" ? \"measure\" : id);\n      });\n    }\n\n    isCommerceActionTarget(target) {\n      return Boolean(target?.closest?.(\"[data-mspa-cta], [data-mspa-qp-cta], .quick-shop-action, [data-quick-shop-action]\"));\n    }\n\n    isCommerceActionBlur(event) {\n      const skip = this.isCommerceActionTarget(event.relatedTarget) || this.isCommerceActionTarget(this.lastPointerTarget);\n      this.lastPointerTarget = null;\n      return skip;\n    }\n\n    syncValues() {\n      if (this.els.length && document.activeElement !== this.els.length) {\n        this.els.length.value = this.state.lengthM ? String(this.state.lengthM).replace(\".\", \",\") : \"\";\n      }\n      if (this.els.height) this.els.height.value = this.state.heightCm ? String(this.state.heightCm) : \"\";\n      if (this.els.meters && document.activeElement !== this.els.meters) {\n        this.els.meters.value = this.state.meters ? String(this.state.meters).replace(\".\", \",\") : \"\";\n      }\n    }\n\n    methodComplete() {\n      return this.state.method === \"dimensions\" || this.state.method === \"meters\";\n    }\n\n    lengthComplete() {\n      return this.state.lengthM > 0;\n    }\n\n    heightComplete() {\n      return this.state.heightCm > 0;\n    }\n\n    metersComplete() {\n      return this.state.meters > 0;\n    }\n\n    measureComplete() {\n      return this.lengthComplete() && this.heightComplete();\n    }\n\n    calculation() {\n      if (this.state.method === \"meters\") {\n        if (!this.metersComplete()) return null;\n        const totalLm = Math.ceil(this.state.meters);\n        return {\n          method: \"meters\",\n          totalLm,\n          inputMeters: this.state.meters,\n          rawLm: this.state.meters,\n          areaM2: totalLm / this.config.factor,\n          weightKg: Math.ceil(totalLm * this.config.weightPerLm),\n          lengthM: 0,\n          heightCm: 0,\n          rounded: totalLm > this.state.meters\n        };\n      }\n      if (this.state.method !== \"dimensions\" || !this.measureComplete()) return null;\n      const areaM2 = this.state.lengthM * (this.state.heightCm / 100);\n      const rawLm = areaM2 * this.config.factor;\n      const rounded = Math.ceil(rawLm);\n      const totalLm = rounded > EXTRA_METER_THRESHOLD ? rounded + 1 : rounded;\n      return {\n        method: \"dimensions\",\n        lengthM: this.state.lengthM,\n        heightCm: this.state.heightCm,\n        rawLm,\n        totalLm,\n        areaM2,\n        weightKg: Math.ceil(totalLm * this.config.weightPerLm),\n        rounded: totalLm > rawLm,\n        heightWarning: this.state.heightCm > this.config.recommendedMax\n      };\n    }\n\n    ready() {\n      if (!this.config.available || this.config.variantId <= 0 || this.state.adding || this.state.errorMessage) return false;\n      return Boolean(this.calculation());\n    }\n\n    currentStep() {\n      if (this.state.editingStep) return this.state.editingStep;\n      if (!this.methodComplete()) return \"method\";\n      if (this.state.method === \"meters\") {\n        if (this.metersComplete() && (this.state.typingField === \"meters\" || document.activeElement === this.els.meters)) return \"meters\";\n        return this.metersComplete() ? \"\" : \"meters\";\n      }\n      if (!this.measureComplete()) return \"measure\";\n      if (this.state.typingField === \"lengthM\") return \"measure\";\n      return \"\";\n    }\n\n    currentFocusTarget() {\n      const step = this.currentStep();\n      if (step === \"method\") return this.els.modeSwitch?.querySelector(\"[data-mspa-choice]\");\n      if (step === \"meters\") return this.els.meters;\n      if (step === \"measure\") return this.lengthComplete() ? this.els.height : this.els.length;\n      return null;\n    }\n\n    focusCurrent() {\n      const target = this.currentFocusTarget();\n      if (!target) return;\n      window.setTimeout(() => {\n        try {\n          target.focus({ preventScroll: true });\n        } catch (_) {\n          target.focus();\n        }\n      }, 80);\n    }\n\n    editStep(id) {\n      this.state.editingStep = id || \"\";\n      this.state.typingField = \"\";\n      this.render();\n      this.focusCurrent();\n    }\n\n    setChoiceGroup(group, value) {\n      const groupNode = this.els.scope.querySelector(`[data-mspa-choice-group=\"${group}\"]`);\n      if (!groupNode) return;\n      groupNode.setAttribute(\"data-mspa-choice-value\", value || \"\");\n      groupNode.querySelectorAll(\"[data-mspa-choice]\").forEach((button) => {\n        const active = button.getAttribute(\"data-mspa-choice\") === value;\n        button.classList.toggle(\"is-active\", active);\n        button.setAttribute(\"aria-pressed\", active ? \"true\" : \"false\");\n      });\n    }\n\n    renderPrice() {\n      if (!this.els.priceLabel || !this.els.priceValue) return;\n      const showM2 = this.state.priceMode === \"m2\";\n      const priceM2 = this.config.priceM2Cents || Math.round(this.config.priceCents * this.config.factor);\n      const compareM2 = this.config.compareM2Cents || Math.round(this.config.compareCents * this.config.factor);\n      const value = showM2 ? priceM2 : this.config.priceCents;\n      const compare = showM2 ? compareM2 : this.config.compareCents;\n      const label = showM2 ? `${this.config.priceM2} (${this.config.factorLabel})` : this.config.priceLm;\n      const valueText = this.config.available ? formatMoney(value) : this.config.soldOut;\n      if (this.api.updatePriceCard) {\n        this.api.updatePriceCard(this.els.scope || this.host, {\n          name: \"price\",\n          label,\n          valueText,\n          priceCents: value,\n          compareCents: compare\n        });\n      } else {\n        this.els.priceLabel.textContent = label;\n        this.els.priceValue.textContent = valueText;\n      }\n      if (this.els.priceToggle) {\n        this.els.priceToggle.hidden = !this.config.available || this.config.priceCents <= 0;\n        this.els.priceToggle.textContent = showM2 ? this.config.toggleLm : this.config.toggleM2;\n        this.els.priceToggle.setAttribute(\"aria-pressed\", showM2 ? \"true\" : \"false\");\n      }\n      this.host.setAttribute(\"data-mspa-granittmur-price-compare\", compare > value ? String(compare) : \"\");\n    }\n\n    renderSteps(current) {\n      Object.entries(this.els.steps).forEach(([id, step]) => {\n        const keepMeterHelpVisible = id === \"meters\" && this.state.method === \"meters\";\n        const visible = id === current || keepMeterHelpVisible;\n        const complete = id === \"measure\" ? this.measureComplete() : id === \"meters\" ? this.metersComplete() : false;\n        step.hidden = !visible;\n        step.setAttribute(\"aria-hidden\", visible ? \"false\" : \"true\");\n        step.setAttribute(\"data-mspa-step-state\", id === current ? \"active\" : complete ? \"complete\" : \"idle\");\n        step.toggleAttribute(\"data-mspa-step-peek\", false);\n      });\n    }\n\n    warningForLength() {\n      return \"\";\n    }\n\n    warningForMeters() {\n      return \"\";\n    }\n\n    renderWarnings() {\n      this.renderMeterHelp(this.calculation());\n      const lengthWarning = this.warningForLength();\n      if (this.els.lengthWarning) {\n        this.els.lengthWarning.textContent = lengthWarning;\n        this.els.lengthWarning.hidden = !lengthWarning;\n      }\n      const metersWarning = this.warningForMeters();\n      if (this.els.metersWarning) {\n        this.els.metersWarning.textContent = metersWarning;\n        this.els.metersWarning.hidden = !metersWarning;\n      }\n      const lengthField = this.els.length?.closest(\"[data-mspa-field]\");\n      const meterField = this.els.meters?.closest(\"[data-mspa-field]\");\n      lengthField?.toggleAttribute(\"data-mspa-field-warning-active\", Boolean(lengthWarning));\n      meterField?.toggleAttribute(\"data-mspa-field-warning-active\", Boolean(metersWarning));\n    }\n\n    renderMeterHelp(calculation) {\n      if (!this.els.meterHelp) return;\n      const shouldShowMinimumFeeNotice =\n        this.config.hasGranittMinimumFee\n        && calculation\n        && calculation.totalLm > 0\n        && calculation.totalLm < GRANITT_MINIMUM_FREE_LM;\n      this.els.meterHelp.textContent = shouldShowMinimumFeeNotice\n        ? `${this.config.meterHelp} ${GRANITT_MINIMUM_FEE_NOTICE}`\n        : this.config.meterHelp;\n    }\n\n    renderFieldStates(current) {\n      const setState = (node, state) => {\n        const field = node?.closest?.(\"[data-mspa-field]\");\n        if (!field) return;\n        if (state) field.setAttribute(\"data-mspa-field-state\", state);\n        else field.removeAttribute(\"data-mspa-field-state\");\n      };\n      setState(this.els.length, this.warningForLength() ? \"warning\" : this.lengthComplete() ? \"complete\" : current === \"measure\" ? \"active\" : \"\");\n      setState(this.els.height, this.heightComplete() ? \"complete\" : current === \"measure\" && this.lengthComplete() ? \"active\" : \"\");\n      setState(this.els.meters, this.warningForMeters() ? \"warning\" : this.metersComplete() ? \"complete\" : current === \"meters\" ? \"active\" : \"\");\n    }\n\n    ctaLabel(current, ready) {\n      if (!this.config.available) return this.config.soldOut;\n      if (this.state.adding) return this.config.busy;\n      if (ready) return this.config.primary;\n      if (current === \"method\") return \"Velg f\u00F8rst metode\";\n      if (current === \"meters\") return \"Skriv inn l\u00F8pemeter\";\n      if (current === \"measure\" && !this.lengthComplete()) return \"Skriv inn lengde\";\n      if (current === \"measure\" && !this.heightComplete()) return \"Velg h\u00F8yde\";\n      return \"Fullf\u00F8r valg\";\n    }\n\n    readySummary(calculation) {\n      if (!calculation?.totalLm) return this.config.readySummary;\n      return `Utvalget er klart. Legg ${formatNumber(calculation.totalLm)} lm i kurven.`;\n    }\n\n    validationText(current, ready, calculation) {\n      if (calculation?.heightWarning) return \"Valgt h\u00F8yde er h\u00F8yere enn vanlig anbefaling for dimensjonen. Vurder faglig f\u00F8r bestilling.\";\n      if (ready) return \"\";\n      if (!this.config.available) return this.config.soldOut;\n      if (this.config.variantId <= 0) return \"Produktet mangler variant-ID for kurv.\";\n      if (current === \"method\") return this.config.initial;\n      if (current === \"meters\") return \"Skriv inn antall l\u00F8pemeter.\";\n      if (current === \"measure\" && !this.lengthComplete() && !this.heightComplete()) return \"Skriv inn lengde i meter og velg h\u00F8yde.\";\n      if (current === \"measure\" && !this.lengthComplete()) return \"Skriv inn lengde i meter.\";\n      if (current === \"measure\" && !this.heightComplete()) return \"Velg h\u00F8yde.\";\n      return \"Fullf\u00F8r valgene for \u00E5 legge i kurven.\";\n    }\n\n    historySteps(current) {\n      const steps = [];\n      const add = (id, label, disabled = false) => {\n        const complete = id === \"method\"\n          ? this.methodComplete()\n          : id === \"measure\"\n            ? this.measureComplete()\n            : id === \"meters\"\n              ? this.metersComplete()\n              : false;\n        steps.push({\n          id,\n          label,\n          shortLabel: label,\n          state: current === id ? \"current\" : complete ? \"complete\" : \"idle\",\n          edit: () => this.editStep(id),\n          target: id === \"method\" ? this.els.modeSwitch : this.els.steps[id] || null,\n          disabled\n        });\n      };\n      add(\"method\", \"Metode\");\n      if (this.state.method === \"dimensions\") {\n        add(\"measure\", \"M\u00E5l\", !this.methodComplete());\n      } else if (this.state.method === \"meters\") {\n        add(\"meters\", \"Meter\", !this.methodComplete());\n      }\n      return steps;\n    }\n\n    render() {\n      if (!this.rendered) return;\n      this.syncValues();\n      const calculation = this.calculation();\n      const current = this.currentStep();\n      const ready = this.ready();\n      const errorText = this.state.errorMessage || \"\";\n      const label = this.ctaLabel(current, ready);\n      const validation = errorText || this.validationText(current, ready, calculation);\n\n      this.renderPrice();\n      this.setChoiceGroup(\"method\", this.state.method);\n      this.renderSteps(current);\n      this.renderWarnings();\n      this.renderFieldStates(current);\n\n      this.api.update(this.host, {\n        family: FAMILY,\n        status: errorText ? \"error\" : this.state.adding ? \"busy\" : ready ? \"ready\" : \"not-ready\",\n        ready: ready && !errorText,\n        busy: this.state.adding,\n        disabled: !ready || Boolean(errorText),\n        error: Boolean(errorText) || this.config.variantId <= 0,\n        label: errorText ? \"Pr\u00F8v igjen\" : label,\n        step: errorText ? \"Kurvfeil\" : ready ? \"Legg i kurven\" : label,\n        summary: errorText ? \"\" : ready ? this.readySummary(calculation) : \"\",\n        validation,\n        reason: errorText || (!this.config.available ? \"sold-out\" : this.config.variantId <= 0 ? \"missing-variant\" : current || \"ready\"),\n        focusTarget: current ? this.currentFocusTarget() : null,\n        steps: [],\n        secondaryAction: ready && !current ? {\n          id: \"edit-quantity\",\n          label: this.state.method === \"dimensions\" ? \"Endre m\u00E5l\" : \"Endre mengde\",\n          action: () => this.editStep(this.state.method === \"dimensions\" ? \"measure\" : \"meters\")\n        } : null,\n        add: (ready || this.state.adding) ? (context) => this.add(context) : null,\n        intent: ready ? this.cartIntent(calculation) : null\n      });\n    }\n\n    recommendedLine(calculation) {\n      if (!calculation) return null;\n      return {\n        key: \"granittmur\",\n        quantity: calculation.totalLm,\n        product: {\n          key: \"granittmur\",\n          handle: this.config.handle,\n          title: this.config.title,\n          productId: this.config.productId,\n          vendor: this.config.vendor,\n          unit: \"lm\",\n          variantId: this.config.variantId,\n          sku: this.config.sku,\n          grams: this.config.grams,\n          cents: this.config.priceCents,\n          image: this.config.image,\n          available: this.config.available,\n          locked: true\n        },\n        totalCents: calculation.totalLm * (this.config.priceCents || 0)\n      };\n    }\n\n    cartIntent(calculation = this.calculation()) {\n      const line = this.recommendedLine(calculation);\n      if (!line) return null;\n      const properties = this.cartProperties(calculation, line);\n      const item = {\n        id: line.product.variantId,\n        quantity: line.quantity,\n        properties\n      };\n      const shippingItems = this.config.isBenders ? [this.shippingItem(line, properties)] : [];\n      return {\n        root: this.host,\n        family: FAMILY,\n        vendor: this.config.vendor,\n        items: [item],\n        shippingItems,\n        presentation: { lines: [{ item, title: line.product.title, image: line.product.image || \"\" }] },\n        preview: {\n          title: \"Granittmur beregning\",\n          subtitle: this.intentSubtitle(calculation),\n          estimatedTotal: formatMoney(line.totalCents),\n          status: \"Legger Granittmur i handlekurven...\",\n          lines: [{\n            title: line.product.title,\n            quantity: `${line.quantity} lm`,\n            price: formatMoney(line.totalCents),\n            image: line.product.image,\n            note: `${this.config.dimensionLabel} \u00B7 ca. ${formatNumber(calculation.weightKg)} kg`,\n            locked: true\n          }]\n        },\n        calculatorSummary: {\n          type: FAMILY,\n          mode: calculation.method,\n          dimension: this.config.dimensionLabel,\n          lengthM: calculation.lengthM,\n          heightCm: calculation.heightCm,\n          inputMeters: calculation.inputMeters,\n          totalLm: calculation.totalLm,\n          areaM2: calculation.areaM2,\n          weightKg: calculation.weightKg,\n          items: [{\n            key: line.key,\n            title: line.product.title,\n            quantity: line.quantity,\n            variantId: line.product.variantId\n          }]\n        },\n        calculatorSnapshot: {\n          contract: \"mspa-calculator-snapshot-v1\",\n          source: \"mspa-granittmur\",\n          version: VERSION,\n          mode: calculation.method,\n          dimension: this.config.dimensionLabel,\n          factor: this.config.factor,\n          lengthM: calculation.lengthM,\n          heightCm: calculation.heightCm,\n          inputMeters: calculation.inputMeters,\n          totalLm: calculation.totalLm,\n          rawLm: calculation.rawLm,\n          areaM2: calculation.areaM2,\n          weightKg: calculation.weightKg\n        },\n        syncHints: {\n          cart: true,\n          freight: true,\n          pallets: this.config.isBenders,\n          variants: true\n        }\n      };\n    }\n\n    cartProperties(calculation, line) {\n      const props = {\n        _ms_calculator_family: FAMILY,\n        _ms_source: \"mspa-granittmur\",\n        _ms_port: PORT,\n        _ms_product_key: line.key,\n        _ms_product_title: line.product.title,\n        _ms_product_vendor: line.product.vendor || this.config.vendor,\n        _ms_preview_title: line.product.title,\n        _ms_locked: \"true\",\n        _ms_line_order: \"1\",\n        _ms_mode: calculation.method,\n        _ms_dimension: this.config.dimensionLabel,\n        _ms_total_lm: String(calculation.totalLm),\n        _ms_weight_kg: String(calculation.weightKg)\n      };\n      if (calculation.method === \"dimensions\") {\n        props._ms_length_m = String(calculation.lengthM || \"\");\n        props._ms_height_cm = String(calculation.heightCm || \"\");\n      } else {\n        props._ms_input_lm = String(calculation.inputMeters || \"\");\n      }\n      if (this.config.isBenders) {\n        props._ms_pallet_owner = \"shipping_2\";\n        props._ms_pallet_role = \"granittmur\";\n      }\n      return props;\n    }\n\n    shippingItem(line, properties) {\n      return {\n        id: line.product.variantId,\n        variantId: line.product.variantId,\n        productId: line.product.productId,\n        handle: line.product.handle,\n        title: line.product.title,\n        vendor: line.product.vendor || this.config.vendor,\n        quantity: line.quantity,\n        grams: line.product.grams,\n        sku: line.product.sku,\n        role: \"granittmur\",\n        owner: \"shipping_2\",\n        source: \"mspa-granittmur\",\n        properties\n      };\n    }\n\n    intentSubtitle(calculation) {\n      if (!calculation) return \"\";\n      if (calculation.method === \"meters\") {\n        return `${formatNumber(calculation.totalLm)} lm.`;\n      }\n      return `${formatMeters(calculation.lengthM)} m mur, ${formatNumber(calculation.heightCm)} cm h\u00F8yde, ${formatNumber(calculation.totalLm)} lm.`;\n    }\n\n    async add(context) {\n      if (this.state.adding || !this.ready()) return null;\n      this.state.adding = true;\n      this.render();\n      try {\n        const result = await this.api.add(this.host, this.cartIntent());\n        document.dispatchEvent(new CustomEvent(\"cartModal:done\", {\n          bubbles: true,\n          detail: { source: \"mspa-granittmur\", context: context || {} }\n        }));\n        if (!this.isQuickShop()) {\n          document.dispatchEvent(new CustomEvent(\"ms:cart:open-request\", {\n            bubbles: true,\n            detail: { source: \"mspa-granittmur\" }\n          }));\n        }\n        return result;\n      } catch (error) {\n        if (this.api?.isPurchaseLayerError?.(error) || window.MSPurchaseMotor?.isPurchaseLayerError?.(error)) {\n          this.state.errorMessage = \"\";\n        } else {\n          this.state.errorMessage = error?.message || \"Kunne ikke legge i kurven.\";\n        }\n        throw error;\n      } finally {\n        this.state.adding = false;\n        this.render();\n      }\n    }\n\n    isQuickShop() {\n      return this.host?.getAttribute(\"data-calculator-context\") === \"quick-shop\" ||\n        this.root.closest(\"[data-quick-shop-root], [data-quick-shop-content], .quick-shop-drawer\");\n    }\n  }\n\n  function init(scope = document) {\n    scope.querySelectorAll(ROOT_SELECTOR).forEach((root) => {\n      if (root.dataset.mspaGranittmurReady === \"1\") return;\n      root.dataset.mspaGranittmurReady = \"1\";\n      new MspaGranittmur(root);\n    });\n  }\n\n  if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", () => init(), { once: true });\n  else init();\n  document.addEventListener(\"shopify:section:load\", (event) => init(event.target));\n  document.addEventListener(\"ms:quick-shop:loaded\", (event) => init(event.detail?.content || event.detail?.container || event.target || document));\n})();\n"],
  "mappings": "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",
  "names": ["totalLm"]
}
