{"version":3,"file":"attributeParser-D7S4t1UF.mjs","names":[],"sources":["../../src/embed/attributeParser.ts"],"sourcesContent":["import type { CustomizationParams, RedirectSettings } from '../types';\n\nexport interface ParsedConfig {\n  creatorId: string;\n  productId: string;\n  bumpProductIds?: string[];\n  couponCode?: string;\n  affiliateCode?: string;\n  checkoutSessionSecret: string;\n  environment: 'sandbox' | 'production';\n  overrideBaseUrl?: string;\n  theme?: CustomizationParams;\n  containerOptions?: {\n    width?: string;\n    height?: string;\n  };\n  redirectSettings?: RedirectSettings;\n  showSubmitButton?: boolean;\n}\n\n/**\n * Parse configuration from HTML data attributes\n */\nexport function parseDataAttributes(element: HTMLElement): ParsedConfig {\n  const config: Partial<ParsedConfig> = {};\n\n  // Required attributes\n  if (element.dataset['creatorId']) {\n    config.creatorId = element.dataset['creatorId'];\n  }\n\n  if (element.dataset['productId']) {\n    config.productId = element.dataset['productId'];\n  }\n\n  if (element.dataset['checkoutSessionSecret']) {\n    config.checkoutSessionSecret = element.dataset['checkoutSessionSecret'];\n  }\n\n  // Optional core attributes\n  if (element.dataset['bumpProductIds']) {\n    config.bumpProductIds = element.dataset['bumpProductIds'].split(',').map(id => id.trim());\n  }\n\n  if (element.dataset['couponCode']) {\n    config.couponCode = element.dataset['couponCode'];\n  }\n\n  if (element.dataset['affiliateCode']) {\n    config.affiliateCode = element.dataset['affiliateCode'];\n  }\n\n  if (element.dataset['environment']) {\n    config.environment = element.dataset['environment'] as 'sandbox' | 'production';\n  }\n\n  if (element.dataset['overrideBaseUrl']) {\n    config.overrideBaseUrl = element.dataset['overrideBaseUrl'];\n  }\n\n  if (element.dataset['showSubmitButton']) {\n    config.showSubmitButton = element.dataset['showSubmitButton'] === 'true';\n  }\n\n  // Container options\n  if (element.dataset['containerWidth'] || element.dataset['containerHeight']) {\n    config.containerOptions = {};\n    if (element.dataset['containerWidth']) {\n      config.containerOptions.width = element.dataset['containerWidth'];\n    }\n    if (element.dataset['containerHeight']) {\n      config.containerOptions.height = element.dataset['containerHeight'];\n    }\n  }\n\n  // Redirect settings\n  if (element.dataset['successRedirectUrl'] || element.dataset['failureRedirectUrl'] || element.dataset['alwaysRedirect']) {\n    config.redirectSettings = {};\n    if (element.dataset['successRedirectUrl']) {\n      config.redirectSettings.success_redirect_url = element.dataset['successRedirectUrl'];\n    }\n    if (element.dataset['failureRedirectUrl']) {\n      config.redirectSettings.failure_redirect_url = element.dataset['failureRedirectUrl'];\n    }\n    if (element.dataset['alwaysRedirect']) {\n      config.redirectSettings.always_redirect = element.dataset['alwaysRedirect'] === 'true';\n    }\n  }\n\n  // Theme attributes\n  if (element.dataset['theme'] || element.dataset['showProductInfo'] || element.dataset['productLayout'] || \n      element.dataset['showCouponRow'] || element.dataset['couponRowDisclaimer'] || element.dataset['accentColor'] || element.dataset['backgroundColor'] ||\n      element.dataset['labelColor'] || element.dataset['inputBackgroundColor'] || element.dataset['productTextColor'] ||\n      element.dataset['headingColor'] || element.dataset['secondaryColor'] || element.dataset['borderColor'] ||\n      element.dataset['surfaceColor'] || element.dataset['billingDisplayFields'] || element.dataset['billingFormPlacement'] ||\n      element.dataset['productImage']) {\n    \n    config.theme = {\n      theme: (element.dataset['theme'] as 'light' | 'dark') || 'light',\n      show_product_info: element.dataset['showProductInfo'] === 'true',\n      product_layout: (element.dataset['productLayout'] as 'left' | 'above') || 'left',\n      show_coupon_row: element.dataset['showCouponRow'] === 'true',\n      ...(element.dataset['couponRowDisclaimer'] !== undefined && {\n        coupon_row_disclaimer: element.dataset['couponRowDisclaimer'],\n      }),\n      accent_color: element.dataset['accentColor'] || '#007bff',\n      ...(element.dataset['backgroundColor'] && { background_color: element.dataset['backgroundColor'] }),\n      ...(element.dataset['labelColor'] && { label_color: element.dataset['labelColor'] }),\n      ...(element.dataset['inputBackgroundColor'] && { input_background_color: element.dataset['inputBackgroundColor'] }),\n      ...(element.dataset['productTextColor'] && { product_text_color: element.dataset['productTextColor'] }),\n      ...(element.dataset['headingColor'] && { heading_color: element.dataset['headingColor'] }),\n      ...(element.dataset['secondaryColor'] && { secondary_color: element.dataset['secondaryColor'] }),\n      ...(element.dataset['borderColor'] && { border_color: element.dataset['borderColor'] }),\n      ...(element.dataset['surfaceColor'] && { surface_color: element.dataset['surfaceColor'] }),\n      ...(element.dataset['productImage'] && { product_image: element.dataset['productImage'] }),\n      ...(element.dataset['billingDisplayFields'] && { billing_display_fields: element.dataset['billingDisplayFields'] }),\n      ...(element.dataset['billingFormPlacement'] && { billing_form_placement: element.dataset['billingFormPlacement'] as 'above' | 'left' })\n    };\n  }\n\n  config.containerOptions = {\n    width: '100%',\n    height: '100%'\n  };\n\n  return config as ParsedConfig;\n}\n\n/**\n * Validate parsed configuration\n */\nexport function validateParsedConfig(config: ParsedConfig): boolean {\n  return !!(config.creatorId && config.productId && config.checkoutSessionSecret);\n}\n\n/**\n * Auto-initialize checkout elements on the page\n */\nexport function autoInitialize(selector = '[data-checkout]'): void {\n  const elements = document.querySelectorAll(selector);\n  \n  elements.forEach((element) => {\n    if (element instanceof HTMLElement) {\n      try {\n        const config = parseDataAttributes(element);\n        \n        if (!validateParsedConfig(config)) {\n          console.warn('Invalid checkout configuration for element:', element);\n          return;\n        }\n\n        // Import and create checkout\n        import('../PaymentCheckout').then(({ PaymentCheckout }) => {\n          PaymentCheckout.fromElement(element, config);\n          console.log('Checkout initialized for element:', element);\n        }).catch((error) => {\n          console.error('Failed to initialize checkout:', error);\n        });\n      } catch (error) {\n        console.error('Error parsing checkout attributes:', error);\n      }\n    }\n  });\n}\n\n/**\n * Check if an element has valid checkout attributes\n */\nexport function hasValidCheckoutAttributes(element: HTMLElement): boolean {\n  try {\n    const config = parseDataAttributes(element);\n    return validateParsedConfig(config);\n  } catch {\n    return false;\n  }\n} "],"mappings":"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"}