{
  "version": 3,
  "sources": ["/cdn/shop/t/34/assets/gift-note-trigger-v2.js?sc_verify=1782767670"],
  "sourcesContent": ["if (!customElements.get('gift-note-trigger')) {\n  class GiftNoteTrigger extends HTMLElement {\n    // -- Properties from data attributes --\n    get sectionId() { return this.dataset.sectionId; }\n    get productId() { return this.dataset.productId; }\n    get productHandle() { return this.dataset.productHandle; }\n\n    // -- Resolve owning product form (same pattern as variant-selects.resolveOwningProductForm) --\n    get productFormId() {\n      return this.sectionId && this.productId\n        ? `Product-Form-${this.sectionId}${this.productId}`\n        : null;\n    }\n\n    resolveProductForm() {\n      // 1. By ID convention (most reliable)\n      if (this.productFormId) {\n        const form = document.getElementById(this.productFormId);\n        if (form?.tagName === 'FORM') return form;\n      }\n      // 2. Section-scoped fallback\n      const section = this.closest('section, .product, [data-section]');\n      return section?.querySelector('product-form form[action*=\"/cart/add\"]') || null;\n    }\n\n    resolveVariantSelect() {\n      const section = this.closest('section, .product, [data-section]');\n      return section?.querySelector('variant-selects, variant-radios') || null;\n    }\n\n    hasSelectableGiftVariant(variantSelect) {\n      if (!variantSelect?.findGiftWrappedVariant) return false;\n      try {\n        return !!variantSelect.findGiftWrappedVariant();\n      } catch (_) {\n        return false;\n      }\n    }\n\n    ensureGiftVariantSelected() {\n      const variantSelect = this.resolveVariantSelect();\n      if (!variantSelect?.selectGiftWrappedVariant) {\n        return { ok: false, error: 'variant_picker_not_found' };\n      }\n\n      return variantSelect.selectGiftWrappedVariant();\n    }\n\n    // -- localStorage key uses data-product-handle, NOT window.location.pathname --\n    getStorageKey() {\n      const handle = this.productHandle;\n      return handle\n        ? `sc_gift_config_prototype:${handle}`\n        : 'sc_gift_config_prototype';\n    }\n\n    loadConfig() {\n      try {\n        const raw = localStorage.getItem(this.getStorageKey());\n        return raw ? JSON.parse(raw) : null;\n      } catch (_) { return null; }\n    }\n\n    // -- Public method for modal to inject config into the correct form --\n    injectGiftConfig(config) {\n      const form = this.resolveProductForm();\n      if (!form) return { ok: false, error: 'form_not_found' };\n      const Gift = window.SnowcubesGift;\n      if (Gift?.upsertGiftInputs) {\n        return Gift.upsertGiftInputs(form, config);\n      }\n      return { ok: false, error: 'core_not_loaded' };\n    }\n\n    // -- Update this card's state from its own section context --\n    updateState({ animate = true } = {}) {\n      const Gift = window.SnowcubesGift;\n      if (!Gift) return;\n\n      const variantSelect = this.resolveVariantSelect();\n      const variantTitle = variantSelect?.currentVariant?.title || '';\n      const form = this.resolveProductForm();\n      const quantityInput = form?.querySelector('input[name=\"quantity\"]');\n      const quantity = parseInt(quantityInput?.value, 10) || 1;\n      const config = this.loadConfig();\n      const isGiftWrapped = Gift.isGiftWrappedVariantTitle\n        ? Gift.isGiftWrappedVariantTitle(variantTitle)\n        : /\\bgift[-\\s]*wrap(ped)?\\b/i.test(variantTitle || '');\n      const hasSelectableGiftVariant = this.hasSelectableGiftVariant(variantSelect);\n      const configAppliesToCurrentVariant = isGiftWrapped || !hasSelectableGiftVariant;\n\n      const model = Gift.deriveGiftNoteCardModel({\n        giftUIEnabled: true,\n        variantTitle,\n        quantity,\n        config,\n        giftAlwaysOn: this.hasAttribute('data-gift-always-on'),\n        configAppliesToCurrentVariant,\n      });\n\n      Gift.applyGiftNoteCardModel(this, model, { animate });\n    }\n\n    // -- Lifecycle --\n    connectedCallback() {\n      this._onClickBound = this._onClick.bind(this);\n      this.addEventListener('click', this._onClickBound);\n\n      // Initial state update (deferred to let variant-selects initialize first)\n      setTimeout(() => this.updateState({ animate: false }), 0);\n    }\n\n    disconnectedCallback() {\n      if (this._onClickBound) {\n        this.removeEventListener('click', this._onClickBound);\n      }\n    }\n\n    // -- Click handler: open modal with this trigger as context --\n    _onClick(e) {\n      const btn = e.target.closest('[data-gift-note-open]');\n      if (!btn) return;\n\n      // Stop propagation so the global click handler in gift-box-customizer-modal.js\n      // doesn't also fire (that handler is the backward-compat fallback)\n      e.stopPropagation();\n\n      const mode = btn.dataset.mode || 'add';\n      const options = { mode, trigger: this };\n\n      if (mode === 'edit') {\n        const config = this.loadConfig();\n        if (config) {\n          options.config = config;\n        } else {\n          options.mode = 'add';\n        }\n      }\n\n      window.openGiftBoxModal?.(options);\n    }\n  }\n\n  customElements.define('gift-note-trigger', GiftNoteTrigger);\n}\n"],
  "mappings": "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",
  "names": []
}
