{
  "version": 3,
  "sources": ["/cdn/shop/t/688/assets/mspa-granitt-kantstein.js?ms_mspa_family=20260629-supportwall-audit7"],
  "sourcesContent": ["/*!\n * MSPA Granitt kantstein v5.\n * Clean family port: MSPurchaseMotor owns visible QP/QS UI and cart-intent handoff.\n */\n(function () {\n  const ROOT_SELECTOR = \"[data-mspa-granitt-kantstein-calc]\";\n  const FAMILY = \"granitt-kantstein\";\n  const PORT = \"granitt-kantstein-v5\";\n  const VERSION = \"2026-06-11-granitt-kantstein-v5\";\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 sanitizeInteger = (value) => {\n    const normalized = String(value ?? \"\").replace(\",\", \".\").replace(/[^0-9.]/g, \"\");\n    const parsed = Number.parseFloat(normalized);\n    if (!Number.isFinite(parsed) || parsed <= 0) return \"\";\n    return String(Math.ceil(parsed));\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 && !Number.isInteger(number) ? 1 : 0;\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    if (host?.setAttribute) {\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    }\n    console.error(message || \"MSPA-motoren er ikke lastet. Granitt kantstein 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 MspaGranittKantstein {\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      this.config = {\n        unitMode: data.mspaUnitMode === \"piece\" ? \"piece\" : \"meter\",\n        pieceLengthCm: Math.max(1, intValue(data.mspaPieceLengthCm) || 60),\n        productId: data.mspaProductId || \"\",\n        handle: data.mspaProductHandle || \"\",\n        title: data.mspaProductTitle || \"Granitt kantstein\",\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        priceMeterCents: intValue(data.mspaPriceMeterCents),\n        compareMeterCents: intValue(data.mspaCompareMeterCents),\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        priceMeter: data.mspaPriceLabelMeter || \"Pris per l\u00F8pemeter\",\n        pricePiece: data.mspaPriceLabelPiece || \"Pris per stykk\",\n        toggleMeter: data.mspaPriceToggleMeter || \"Vis l\u00F8pemeterpris\",\n        togglePiece: data.mspaPriceTogglePiece || \"Vis stykkpris\",\n        meterHelp: data.mspaMeterHelp || \"Du bestiller i l\u00F8pemeter, ikke stykk eller m\u00B2. Vi leverer opp til n\u00E6rmeste hele meter.\",\n        readySummary: data.mspaReadySummary || \"Utvalget er klart. Legg i kurven.\"\n      };\n      this.config.isBenders = this.config.vendor.trim().toLowerCase().includes(\"benders\");\n\n      this.state = {\n        mode: this.config.unitMode === \"piece\" ? \"pieces\" : \"meters\",\n        priceMode: this.config.unitMode === \"piece\" ? \"piece\" : \"meter\",\n        pieces: 0,\n        meters: 0,\n        typingField: \"\",\n        editingStep: \"\",\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-granitt-kantstein\",\n        main: this.config, unit: this.config.unitMode === \"piece\" ? \"stk\" : \"lm\", quantity: () => this.calculation()?.quantity || 0,\n        eligible: (row) => row.variantId === String(this.config.variantId) && [\"piece\", \"meter\"].includes(this.config.unitMode) && Number.isFinite(this.config.pieceLengthCm) && this.config.pieceLengthCm > 0,\n        line: (row, quantity) => {\n          const view = Object.create(this); view.config = { ...this.config, variantId: row.variantId, sku: row.sku, grams: row.grams, priceCents: row.priceCents, available: row.available };\n          const pieces = this.config.unitMode === \"piece\";\n          const meters = pieces ? quantity * this.config.pieceLengthCm / 100 : quantity;\n          return view.cartIntent({ unitMode: pieces ? \"piece\" : \"meter\", inputMode: pieces ? \"pieces\" : \"meters\", quantity,\n            pieces: pieces ? quantity : undefined, meters: pieces ? undefined : quantity, requestedMeters: meters, deliveredMeters: meters });\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-granitt-kantstein.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      const chrome = [{\n        type: \"price\",\n        name: \"price\",\n        label: this.config.unitMode === \"piece\" ? this.config.pricePiece : this.config.priceMeter,\n        value: formatMoney(this.config.unitMode === \"piece\" ? this.config.priceCents : this.config.priceMeterCents),\n        priceCents: this.config.unitMode === \"piece\" ? this.config.priceCents : this.config.priceMeterCents,\n        compareCents: this.config.unitMode === \"piece\" ? this.config.compareCents : this.config.compareMeterCents,\n        toggleLabel: this.config.unitMode === \"piece\" ? this.config.toggleMeter : \"\"\n      }];\n      if (this.config.unitMode === \"piece\") {\n        chrome.push({\n          type: \"modeSwitch\",\n          name: \"mode\",\n          value: this.state.mode,\n          label: \"Velg beregning\",\n          options: [\n            { value: \"pieces\", label: \"Stykk\" },\n            { value: \"meters\", label: \"L\u00F8pemeter\" }\n          ]\n        });\n      }\n      return chrome;\n    }\n\n    buildDefinition() {\n      const steps = [];\n      if (this.config.unitMode === \"piece\") {\n        steps.push({\n          id: \"pieces\",\n          label: \"Antall stykk\",\n          components: [{\n            type: \"field\",\n            id: \"mspa-kantstein-pieces\",\n            name: \"pieces\",\n            inputType: \"text\",\n            inputmode: \"numeric\",\n            label: \"Antall stykk\",\n            placeholder: \"Skriv antall stykk\",\n            suffix: \"stk\"\n          }]\n        });\n      }\n      steps.push({\n        id: \"meters\",\n        label: \"Antall l\u00F8pemeter\",\n        components: [\n          {\n            type: \"field\",\n            id: \"mspa-kantstein-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      return steps;\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=\"mode\"]');\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.pieces = scope.querySelector('[data-mspa-control=\"pieces\"]');\n      this.els.meters = scope.querySelector('[data-mspa-control=\"meters\"]');\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) && this.config.unitMode === \"piece\") {\n          event.preventDefault();\n          this.state.priceMode = this.state.priceMode === \"piece\" ? \"meter\" : \"piece\";\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 !== \"mode\" || this.config.unitMode !== \"piece\") return;\n        const value = choice.getAttribute(\"data-mspa-choice\") || \"\";\n        const previous = this.calculation();\n        this.state.mode = value === \"meters\" ? \"meters\" : \"pieces\";\n        if (previous) {\n          if (this.state.mode === \"pieces\") {\n            this.state.pieces = previous.pieces || previous.quantity || 0;\n          } else {\n            this.state.meters = Math.ceil(previous.requestedMeters || previous.deliveredMeters || 0);\n          }\n        }\n        this.state.typingField = \"\";\n        this.state.editingStep = this.state.mode;\n        this.state.errorMessage = \"\";\n        this.render();\n        this.focusCurrent();\n      });\n\n      this.els.pieces?.addEventListener(\"input\", () => {\n        const value = sanitizeInteger(this.els.pieces.value);\n        if (this.els.pieces.value !== value) this.els.pieces.value = value;\n        this.state.pieces = intValue(value);\n        this.state.typingField = \"pieces\";\n        this.state.errorMessage = \"\";\n        this.render();\n      });\n      this.els.pieces?.addEventListener(\"blur\", (event) => {\n        this.state.typingField = \"\";\n        if (this.piecesComplete()) this.state.editingStep = \"\";\n        if (this.isCommerceActionBlur(event)) return;\n        this.render();\n      });\n      this.els.pieces?.addEventListener(\"keydown\", (event) => {\n        if (event.key !== \"Enter\") return;\n        event.preventDefault();\n        this.state.typingField = \"\";\n        this.els.pieces.blur();\n        this.render();\n      });\n\n      this.els.meters?.addEventListener(\"input\", () => {\n        const value = sanitizeInteger(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.host?.addEventListener(\"ms:mspa-step-history:edit\", (event) => {\n        const id = event.detail?.id || \"\";\n        if (![\"pieces\", \"meters\"].includes(id)) return;\n        event.preventDefault();\n        this.editStep(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.pieces && document.activeElement !== this.els.pieces) {\n        this.els.pieces.value = this.state.pieces ? String(this.state.pieces) : \"\";\n      }\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    piecesComplete() {\n      return this.state.pieces > 0;\n    }\n\n    metersComplete() {\n      return this.state.meters > 0;\n    }\n\n    currentValueComplete() {\n      return this.state.mode === \"pieces\" ? this.piecesComplete() : this.metersComplete();\n    }\n\n    calculation() {\n      if (this.state.mode === \"pieces\") {\n        if (!this.piecesComplete()) return null;\n        const pieces = this.state.pieces;\n        return {\n          unitMode: \"piece\",\n          inputMode: \"pieces\",\n          quantity: pieces,\n          pieces,\n          requestedMeters: (pieces * this.config.pieceLengthCm) / 100,\n          deliveredMeters: (pieces * this.config.pieceLengthCm) / 100\n        };\n      }\n\n      if (!this.metersComplete()) return null;\n      const meters = Math.ceil(this.state.meters);\n      if (this.config.unitMode === \"piece\") {\n        const pieces = Math.max(1, Math.ceil((meters * 100) / this.config.pieceLengthCm));\n        return {\n          unitMode: \"piece\",\n          inputMode: \"meters\",\n          quantity: pieces,\n          pieces,\n          requestedMeters: meters,\n          deliveredMeters: (pieces * this.config.pieceLengthCm) / 100\n        };\n      }\n      return {\n        unitMode: \"meter\",\n        inputMode: \"meters\",\n        quantity: meters,\n        meters,\n        requestedMeters: meters,\n        deliveredMeters: meters\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.currentValueComplete()) return this.state.mode;\n      if (this.state.typingField === this.state.mode) return this.state.mode;\n      return \"\";\n    }\n\n    currentFocusTarget() {\n      const step = this.currentStep();\n      if (step === \"pieces\") return this.els.pieces;\n      if (step === \"meters\") return this.els.meters;\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 showMeter = this.state.priceMode === \"meter\";\n      const value = showMeter ? (this.config.priceMeterCents || this.config.priceCents) : this.config.priceCents;\n      const compare = showMeter ? this.config.compareMeterCents : this.config.compareCents;\n      const label = showMeter ? this.config.priceMeter : this.config.pricePiece;\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.unitMode !== \"piece\" || !this.config.available || this.config.priceCents <= 0;\n        this.els.priceToggle.textContent = showMeter ? this.config.togglePiece : this.config.toggleMeter;\n        this.els.priceToggle.setAttribute(\"aria-pressed\", showMeter ? \"true\" : \"false\");\n      }\n      this.host.setAttribute(\"data-mspa-price-compare-cents\", compare > value ? String(compare) : \"\");\n    }\n\n    renderSteps(current) {\n      Object.entries(this.els.steps).forEach(([id, step]) => {\n        const inMode = id === this.state.mode || (this.config.unitMode !== \"piece\" && id === \"meters\");\n        const complete = id === \"pieces\" ? this.piecesComplete() : this.metersComplete();\n        const visible = id === current && inMode;\n        step.hidden = !visible;\n        step.setAttribute(\"aria-hidden\", visible ? \"false\" : \"true\");\n        step.setAttribute(\"data-mspa-step-state\", visible ? \"active\" : complete ? \"complete\" : \"idle\");\n        step.toggleAttribute(\"data-mspa-step-peek\", false);\n      });\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.pieces, this.piecesComplete() ? \"complete\" : current === \"pieces\" ? \"active\" : \"\");\n      setState(this.els.meters, 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 === \"pieces\") return \"Skriv inn stykk\";\n      return \"Skriv inn l\u00F8pemeter\";\n    }\n\n    readySummary(calculation) {\n      if (!calculation) return this.config.readySummary;\n      if (calculation.unitMode === \"piece\") {\n        const text = `Utvalget er klart. Legg ${formatNumber(calculation.quantity)} stk i kurven.`;\n        if (calculation.inputMode === \"meters\" && calculation.requestedMeters) {\n          return `${text} Beregnet fra ${formatMeters(calculation.requestedMeters)} lm.`;\n        }\n        return text;\n      }\n      return `Utvalget er klart. Legg ${formatNumber(calculation.quantity)} lm i kurven.`;\n    }\n\n    validationText(current, ready, calculation) {\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 === \"pieces\") return \"Skriv inn antall stykk.\";\n      if (current === \"meters\") return \"Skriv inn antall l\u00F8pemeter.\";\n      if (!calculation) return this.config.unitMode === \"piece\" ? \"Skriv inn stykk eller l\u00F8pemeter.\" : \"Skriv inn l\u00F8pemeter.\";\n      return \"Fullf\u00F8r valget for \u00E5 legge i kurven.\";\n    }\n\n    historySteps(current) {\n      const id = this.state.mode;\n      const complete = this.currentValueComplete();\n      return [{\n        id,\n        label: id === \"pieces\" ? \"Stykk\" : \"Meter\",\n        shortLabel: id === \"pieces\" ? \"Stykk\" : \"Meter\",\n        state: current === id ? \"current\" : complete ? \"complete\" : \"idle\",\n        edit: () => this.editStep(id),\n        target: this.els.steps[id] || null,\n        disabled: false\n      }];\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(\"mode\", this.state.mode);\n      this.renderSteps(current);\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: ready && !errorText ? \"\" : 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: \"Endre mengde\",\n          action: () => this.editStep(this.state.mode)\n        } : null,\n        add: (ready || this.state.adding) ? (context) => this.add(context) : null,\n        intent: ready ? this.cartIntent(calculation) : null\n      });\n    }\n\n    line(calculation) {\n      const unit = calculation.unitMode === \"piece\" ? \"stk\" : \"lm\";\n      return {\n        key: \"granitt-kantstein\",\n        quantity: calculation.quantity,\n        product: {\n          key: \"granitt-kantstein\",\n          handle: this.config.handle,\n          title: this.config.title,\n          productId: this.config.productId,\n          vendor: this.config.vendor,\n          unit,\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.quantity * (this.config.priceCents || 0)\n      };\n    }\n\n    cartIntent(calculation = this.calculation()) {\n      if (!calculation) return null;\n      const line = this.line(calculation);\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: line.product.title,\n          subtitle: this.intentSubtitle(calculation),\n          estimatedTotal: formatMoney(line.totalCents),\n          status: \"Legger kantstein i handlekurven...\",\n          lines: [{\n            title: line.product.title,\n            quantity: calculation.unitMode === \"piece\" ? `${calculation.quantity} stk` : `${calculation.quantity} lm`,\n            price: formatMoney(line.totalCents),\n            image: line.product.image,\n            note: this.intentSubtitle(calculation),\n            locked: true\n          }]\n        },\n        calculatorSummary: {\n          version: 1,\n          source: \"mspa_granitt_kantstein\",\n          family: FAMILY,\n          title: \"Granitt kantstein kalkulator\",\n          productTitle: line.product.title,\n          summaryText: calculation.unitMode === \"piece\" ? `${formatNumber(calculation.quantity)} stk` : `${formatNumber(calculation.quantity)} lm`,\n          lines: [\n            { label: \"Beregningstype\", value: calculation.unitMode === \"piece\" ? \"Stykk\" : \"L\u00F8pemeter\" },\n            { label: \"Antall\", value: calculation.unitMode === \"piece\" ? `${formatNumber(calculation.quantity)} stk` : `${formatNumber(calculation.quantity)} lm` },\n            calculation.deliveredMeters ? { label: \"Dekker ca.\", value: `${formatMeters(calculation.deliveredMeters)} lm` } : null\n          ].filter(Boolean),\n          products: [{\n            title: line.product.title,\n            quantity: calculation.unitMode === \"piece\" ? `${formatNumber(calculation.quantity)} stk` : `${formatNumber(calculation.quantity)} lm`,\n            role: \"main\"\n          }],\n          warnings: []\n        },\n        calculatorSnapshot: {\n          contract: \"mspa-calculator-snapshot-v1\",\n          source: \"mspa-granitt-kantstein\",\n          version: VERSION,\n          unitMode: calculation.unitMode,\n          inputMode: calculation.inputMode,\n          quantity: calculation.quantity,\n          pieces: calculation.pieces || null,\n          meters: calculation.meters || null,\n          requestedMeters: calculation.requestedMeters || null,\n          deliveredMeters: calculation.deliveredMeters || null,\n          pieceLengthCm: this.config.pieceLengthCm\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-granitt-kantstein\",\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_unit_mode: calculation.unitMode,\n        _ms_input_mode: calculation.inputMode,\n        _ms_quantity: String(calculation.quantity),\n        _ms_requested_meters: calculation.requestedMeters ? String(calculation.requestedMeters) : \"\",\n        _ms_delivered_meters: calculation.deliveredMeters ? String(calculation.deliveredMeters) : \"\",\n        _ms_piece_length_cm: String(this.config.pieceLengthCm)\n      };\n      if (calculation.unitMode === \"piece\") props._ms_pieces = String(calculation.pieces || calculation.quantity);\n      else props._ms_meters = String(calculation.meters || calculation.quantity);\n      if (this.config.isBenders) {\n        props._ms_pallet_owner = \"shipping_2\";\n        props._ms_pallet_role = \"quantity\";\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: \"quantity\",\n        owner: \"shipping_2\",\n        source: \"mspa-granitt-kantstein\",\n        properties\n      };\n    }\n\n    intentSubtitle(calculation) {\n      if (!calculation) return \"\";\n      if (calculation.unitMode === \"piece\") {\n        const extra = calculation.inputMode === \"meters\"\n          ? `, dekker ca. ${formatMeters(calculation.deliveredMeters)} lm`\n          : \"\";\n        return `${formatNumber(calculation.quantity)} stk${extra}.`;\n      }\n      return `${formatNumber(calculation.quantity)} 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-granitt-kantstein\", context: context || {} }\n        }));\n        if (!this.isQuickShop()) {\n          document.dispatchEvent(new CustomEvent(\"ms:cart:open-request\", {\n            bubbles: true,\n            detail: { source: \"mspa-granitt-kantstein\" }\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.mspaGranittKantsteinReady === \"1\") return;\n      root.dataset.mspaGranittKantsteinReady = \"1\";\n      new MspaGranittKantstein(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": []
}
