{"version":3,"file":"client.mjs","names":[],"sources":["../app/kredite-teaser-widget.scss?inline","../app/loan-calculator.ts","../app/trikot-campaign-subline.ts","../app/credit-teaser-campaign-trikot.client.ts"],"sourcesContent":[".c24-kredite-home-teaser-container {\n  position: relative;\n}\n\n.c24-kredite-home-teaser-content {\n  height: 360px;\n  width: 100%;\n  color: #ffffff;\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  align-items: center;\n  padding: 20px;\n  box-sizing: border-box;\n  background-position: right center;\n  background-repeat: repeat-x;\n  text-decoration: none;\n  color: #ffffff;\n  position: relative;\n\n  @media (max-width: 768px) {\n    height: 230px;\n    padding-top: 0;\n  }\n\n  .responsive-break {\n    display: none;\n\n    &--tablet-only {\n      @media (min-width: 769px) and (max-width: 959px) {\n        display: block;\n      }\n    }\n\n    &--mobile-only {\n      @media (max-width: 768px) {\n        display: block;\n      }\n    }\n  }\n\n  @media (max-width: 768px) {\n    align-items: start;\n  }\n\n  @media (min-width: 960px) {\n    pointer-events: none;\n    cursor: default;\n    text-decoration: none;\n  }\n\n  @media (max-width: 959px) {\n    .c24-kredite-home-teaser-link {\n      display: flex;\n      gap: 16px;\n      flex-direction: column;\n      align-items: center;\n      width: 100%;\n    }\n  }\n\n  @media (max-width: 768px) {\n    .c24-kredite-home-teaser-link {\n      align-items: flex-start;\n    }\n  }\n\n  .c24-kredite-home-teaser-headline {\n    font-size: 30px;\n    line-height: 50px;\n    height: 100%;\n    padding-top: 30px;\n    flex: 1;\n    z-index: 1;\n    text-align: center;\n    display: flex;\n    flex-direction: column;\n\n    @media (max-width: 959px) {\n      margin-left: 24px;\n      gap: 15px;\n      justify-self: center;\n      align-items: center;\n    }\n\n    @media (max-width: 959px) {\n      margin-top: 0;\n      margin-left: 0;\n      font-size: 20px;\n      line-height: 26px;\n      padding-right: 0;\n      padding-top: 0;\n    }\n\n    @media (max-width: 768px) {\n      align-items: flex-start;\n      text-align: left;\n    }\n\n    p {\n      margin: 0;\n\n      &:first-of-type {\n        font-weight: 700;\n      }\n\n      &:last-of-type {\n        font-size: 18px;\n      }\n\n      @media (max-width: 768px) {\n        position: relative;\n        z-index: 1;\n      }\n\n      @media (max-width: 959px) {\n        font-size: 20px;\n        font-weight: 400;\n      }\n    }\n\n    img {\n      max-height: 180px;\n      max-width: 100%;\n\n      @media (max-width: 768px) {\n        height: 130px;\n        position: absolute;\n        top: 30%;\n        right: 10%;\n        z-index: 0;\n      }\n\n      @media (min-width: 960px) {\n        height: 160px;\n        top: 45px;\n        right: calc(50% - 440px);\n        position: absolute;\n        margin-top: 0;\n      }\n      @media (min-width: 1081px) {\n        height: 190px;\n        max-height: 190px;\n        top: 30px;\n        right: calc(50% - 485px);\n      }\n\n      @media (min-width: 1281px) {\n        height: 190px;\n        max-height: 190px;\n        right: calc(50% - 580px);\n        top: 15px;\n      }\n    }\n  }\n}\n\n@media (max-width: 959px) {\n  .c24-kredite-home-teaser-box {\n    display: none;\n  }\n}\n\n.c24-kredite-home-teaser-box-container {\n  z-index: 1;\n  position: absolute;\n  bottom: 60px;\n  left: 16px;\n  right: 16px;\n  display: flex;\n  justify-content: center;\n\n  .c24-kredite-home-teaser-box {\n    background-color: #ffffff;\n    color: #181818;\n    border: 3px solid #ffbb1c;\n    border-radius: 100px;\n    width: 100%;\n    max-width: 922px;\n\n    .c24-kredite-home-teaser-box-3-columns {\n      display: flex;\n      gap: 19px;\n      padding: 7px 6px 7px 20px;\n      align-items: center;\n\n      > div,\n      button {\n        flex: 1;\n        height: 44px;\n      }\n\n      .c24-kredite-home-teaser-input-flex,\n      .c24-dropdown-input-container {\n        position: relative;\n        display: flex;\n\n        input,\n        select {\n          flex: 1;\n          border: none;\n          outline: none;\n          font-size: 16px;\n          color: #181818;\n          padding-top: 7px;\n          background-color: transparent;\n          padding-left: 0;\n        }\n\n        select {\n          appearance: none;\n          -webkit-appearance: none;\n          -moz-appearance: none;\n          background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23949494' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\");\n          background-repeat: no-repeat;\n          background-position: right -8px;\n          background-size: 24px;\n          padding-right: 28px;\n          cursor: pointer;\n        }\n\n        .c24-value-placeholder {\n          position: absolute;\n          top: 50%;\n          right: 0;\n          transform: translate(-50%, -50%);\n        }\n      }\n\n      .c24-kredite-home-teaser-box-label {\n        font-size: 14px;\n        text-align: left;\n      }\n\n      .c24-kredite-home-teaser-dropdown {\n        position: relative;\n        padding-left: 24px;\n\n        &::before {\n          content: \"\";\n          position: absolute;\n          left: 0;\n          top: 50%;\n          transform: translateY(-50%);\n          width: 1px;\n          height: 40px;\n          background-color: #949494;\n        }\n      }\n\n      button {\n        max-width: 220px;\n        border-radius: 100px;\n        background-color: #0563c1;\n        color: #ffffff;\n        border: none;\n        cursor: pointer;\n        font-size: 16px;\n      }\n    }\n  }\n}\n","export enum LoanPurpose {\n    NEUFAHRZEUG = \"1\",\n    GEBRAUCHTFAHRZEUG = \"2\",\n    EINRICHTUNG_MOEBEL = \"3\",\n    UMSCHULDUNG = \"4\",\n    MODERNISIERUNG = \"5\",\n    PC_AUDIO_VIDEO = \"6\",\n    REISE = \"7\",\n    FREIE_VERWENDUNG = \"8\",\n    AUSGLEICH_DISPO = \"10\",\n    MOTORRAD = \"11\",\n    BAUFINANZIERUNG = \"5\",\n    TILGUNG_RATENKAUF = \"4\",\n}\n\n/**\n * Keeps a mapping of loan purposes to loan amount breakpoints and their corresponding most popular durations (in months).\n *\n * For each loan purpose, the object maps loan amount thresholds (in euros) to the most common loan duration (in months)\n * used for that amount and purpose. Used to determine the default duration when \"egal Monate\" (any duration) is selected.\n */\nexport const POPULAR_DURATIONS_BY_LOAN_AMOUNT_AND_PURPOSE: Record<LoanPurpose, Record<number, number>> = {\n    [LoanPurpose.AUSGLEICH_DISPO]: {\n        5000: 24,\n        60000: 84,\n        105000: 96,\n    },\n    [LoanPurpose.EINRICHTUNG_MOEBEL]: {\n        5000: 12,\n        15000: 48,\n        40000: 60,\n        55000: 84,\n        105000: 96,\n    },\n    [LoanPurpose.FREIE_VERWENDUNG]: {\n        5000: 12,\n        10000: 36,\n        15000: 48,\n        30000: 60,\n        50000: 84,\n        105000: 96,\n    },\n    [LoanPurpose.GEBRAUCHTFAHRZEUG]: {\n        5000: 24,\n        10000: 36,\n        15000: 48,\n        90000: 60,\n        120000: 72,\n        150000: 96,\n    },\n    [LoanPurpose.MODERNISIERUNG]: {\n        5000: 24,\n        10000: 48,\n        15000: 60,\n        20000: 72,\n        30000: 84,\n        105000: 96,\n        150000: 120,\n    },\n    [LoanPurpose.MOTORRAD]: {\n        5000: 24,\n        10000: 36,\n        15000: 48,\n        90000: 60,\n        120000: 72,\n        150000: 96,\n    },\n    [LoanPurpose.NEUFAHRZEUG]: {\n        5000: 24,\n        10000: 36,\n        15000: 48,\n        90000: 60,\n        120000: 72,\n        150000: 96,\n    },\n    [LoanPurpose.PC_AUDIO_VIDEO]: {\n        5000: 24,\n        55000: 84,\n        105000: 96,\n    },\n    [LoanPurpose.REISE]: {\n        5000: 24,\n        55000: 84,\n        105000: 96,\n    },\n    [LoanPurpose.UMSCHULDUNG]: {\n        5000: 24,\n        10000: 36,\n        15000: 48,\n        30000: 60,\n        35000: 84,\n        105000: 96,\n    },\n};\n\n\n/**\n * For the \"egal\" option, determine the most popular duration for the given loan amount and purpose.\n * This function returns the duration (in months) that should be used as the background value.\n * The mapping is based on the closest breakpoint for the loan amount and the selected purpose.\n */\nexport function getPopularDurationByLoanAmountAndPurpose(loanAmountInEuros: number, loanPurpose: LoanPurpose): number {\n    // Validate purpose\n    if (!POPULAR_DURATIONS_BY_LOAN_AMOUNT_AND_PURPOSE[loanPurpose]) {\n        throw new Error(\"Invalid purpose provided\");\n    }\n\n    const purposeData = POPULAR_DURATIONS_BY_LOAN_AMOUNT_AND_PURPOSE[loanPurpose];\n    const amountBreakpoints = Object.keys(purposeData)\n        .map(Number)\n        .sort((a, b) => a - b);\n\n    let selectedDurationInMonths: number | undefined;\n    for (const breakpoint of amountBreakpoints) {\n        if (loanAmountInEuros < breakpoint) {\n            selectedDurationInMonths = purposeData[breakpoint];\n            break;\n        }\n    }\n    if (selectedDurationInMonths === undefined) {\n        // If loanAmount is above all breakpoints, use the last one\n        const lastBreakpoint = amountBreakpoints[amountBreakpoints.length - 1];\n        selectedDurationInMonths = purposeData[lastBreakpoint];\n    }\n    return selectedDurationInMonths;\n}\n","const TRIKOT_TEASER_YEAR = 2026;\n\nfunction getTrikotTeaserWindowLocal(now: Date) {\n  return {\n    start: new Date(TRIKOT_TEASER_YEAR, 8, 23, 9, 0, 0, 0),\n    end: new Date(TRIKOT_TEASER_YEAR, 9, 1, 23, 59, 59, 999),\n  };\n}\n\n/** Countdown prefix for Trikot CHECK24 home teaser (device local time). */\nexport function getTrikotTeaserCountdownPrefixLocal(now = new Date()) {\n  const { start, end } = getTrikotTeaserWindowLocal(now);\n  if (now < start || now > end) {\n    return undefined;\n  }\n\n  const month = now.getMonth() + 1;\n  const day = now.getDate();\n\n  if (month === 10 && day === 1) {\n    return \"Nur noch heute\";\n  }\n  if (month === 9 && day === 30) {\n    return \"Nur noch 2 Tage\";\n  }\n  if (month === 9 && day === 29) {\n    return \"Nur noch 3 Tage\";\n  }\n\n  if (month === 9 && day === 23 && now.getHours() < 9) {\n    return undefined;\n  }\n  if (month === 9 && day >= 23 && day <= 28) {\n    return \"Bis 01.10.\";\n  }\n\n  return undefined;\n}\n\nexport function getTrikotTeaserSublineHtmlFromLocalTime(now = new Date()) {\n  const prefix = getTrikotTeaserCountdownPrefixLocal(now);\n  if (!prefix) {\n    return undefined;\n  }\n  return `${prefix} Kredit abschließen\n          <br class=\"responsive-break responsive-break--mobile-only\" />\n          und <br class=\"responsive-break responsive-break--tablet-only\" />\n          <strong>Trikot + Cashback</strong>\n          <br class=\"responsive-break responsive-break--mobile-only\" />\n          sichern`;\n}\n","import html from \"./kredite-teaser-widget.html?raw\";\nimport styles from \"./kredite-teaser-widget.scss?inline\";\nimport {\n  getPopularDurationByLoanAmountAndPurpose,\n  LoanPurpose,\n} from \"./loan-calculator\";\nimport { getTrikotTeaserSublineHtmlFromLocalTime } from \"./trikot-campaign-subline\";\n\ninterface BpmResponse {\n  status: number;\n  data: {\n    credit_amount?: number;\n    credit_period?: number;\n    credit_usage?: number;\n  };\n}\n\nclass CreditTeaserCampaignTrikotWidget extends HTMLElement {\n  private readonly root: ShadowRoot;\n\n  private kpInput: HTMLInputElement | null = null;\n  private form: HTMLFormElement | null = null;\n  private lzSelect: HTMLSelectElement | null = null;\n  private vzSelect: HTMLSelectElement | null = null;\n\n  constructor() {\n    super();\n    this.root = this.attachShadow({ mode: \"closed\" });\n  }\n\n  connectedCallback(): void {\n    this.render();\n    this.applyCampaignSubline();\n    this.setupInputHandlers();\n    this.fetchBpmData();\n    this.fetchTeaserVisual();\n  }\n\n  private applyCampaignSubline(): void {\n    const subline = this.root.querySelector(\"#teaser-subline\");\n    if (!subline) {\n      return;\n    }\n\n    const html = getTrikotTeaserSublineHtmlFromLocalTime();\n    if (html) {\n      subline.innerHTML = html;\n    }\n  }\n\n  private async fetchTeaserVisual(): Promise<void> {\n    const teaserVisual = this.root.querySelector(\n      \"#teaser-visual\",\n    ) as HTMLImageElement;\n    teaserVisual.src = `https://${this.isProduction() ? \"kredit.check24.de\" : \"kredit.check24-test.de\"}/img/promos/2026/campaign-trikot.webp`;\n  }\n\n  private async fetchBpmData(): Promise<void> {\n    try {\n      const domain = this.isProduction()\n        ? \"www.check24.de\"\n        : \"www.check24-test.de\";\n      const timestamp = Date.now();\n      const response = await fetch(\n        `https://${domain}/ajax/bpm/get/?product=financing&_=${timestamp}`,\n        { credentials: \"include\" },\n      );\n      const data: BpmResponse = await response.json();\n\n      if (data.status === 200 && data.data) {\n        this.applyBpmData(data.data);\n      }\n    } catch (error) {\n      // Silently fail - keep default values\n      console.debug(\"BPM data fetch failed, using defaults\", error);\n    }\n  }\n\n  private applyBpmData(data: BpmResponse[\"data\"]): void {\n    // Update credit amount\n    if (data.credit_amount && this.kpInput) {\n      this.kpInput.value = this.formatWithThousandDelimiter(\n        String(data.credit_amount),\n      );\n    }\n\n    // Update credit period (lz select)\n    if (data.credit_period && this.lzSelect) {\n      const periodOption = this.lzSelect.querySelector(\n        `option[value=\"${data.credit_period}\"]`,\n      );\n      if (periodOption) {\n        this.lzSelect.value = String(data.credit_period);\n      }\n    }\n\n    // Update credit usage (vz select)\n    if (data.credit_usage && this.vzSelect) {\n      const usageOption = this.vzSelect.querySelector(\n        `option[value=\"${data.credit_usage}\"]`,\n      );\n      if (usageOption) {\n        this.vzSelect.value = String(data.credit_usage);\n      }\n    }\n\n    // Update hidden lz input to match selected value\n    this.updateHiddenLzInput();\n  }\n\n  private updateHiddenLzInput(): void {\n    if (this.lzSelect && this.form) {\n      if (this.lzSelect.value === \"egal\") {\n        const hiddenAnyDurationInput = this.form.querySelector(\n          'input[type=\"hidden\"][name=\"anyDurationSelected\"]',\n        );\n        if (!hiddenAnyDurationInput) {\n          const newHiddenAnyDurationInput = document.createElement(\"input\");\n          newHiddenAnyDurationInput.type = \"hidden\";\n          newHiddenAnyDurationInput.name = \"anyDurationSelected\";\n          newHiddenAnyDurationInput.value = \"true\";\n          this.form.appendChild(newHiddenAnyDurationInput);\n        }\n      } else {\n        const hiddenAnyDurationInput = this.form.querySelector(\n          'input[type=\"hidden\"][name=\"anyDurationSelected\"]',\n        );\n        if (hiddenAnyDurationInput) {\n          hiddenAnyDurationInput.remove();\n        }\n      }\n      const hiddenLzInput = this.form.querySelector(\n        'input[type=\"hidden\"][name=\"lz\"]',\n      ) as HTMLInputElement;\n      if (hiddenLzInput) {\n        if (this.lzSelect.value === \"egal\") {\n          const kpValue = Number(this.kpInput?.value.replace(/\\./g, \"\"));\n          const vzValue = this.vzSelect?.value as LoanPurpose;\n          hiddenLzInput.value = String(\n            getPopularDurationByLoanAmountAndPurpose(kpValue, vzValue),\n          );\n        } else {\n          hiddenLzInput.value = this.lzSelect.value;\n        }\n      }\n    }\n  }\n\n  private isProduction(): boolean {\n    return (\n      window.location.hostname.endsWith(\"check24.de\") &&\n      !window.location.hostname.includes(\"check24-test.de\") &&\n      !window.location.hostname.includes(\"check24-int.de\")\n    );\n  }\n\n  private render(): void {\n    this.root.innerHTML = `\n      <style>\n        ${styles}\n      </style>\n      \n      ${html}\n    `;\n  }\n\n  private setupInputHandlers(): void {\n    this.kpInput = this.root.querySelector('input[name=\"kp\"]');\n    this.form = this.root.querySelector(\"form\");\n    this.lzSelect = this.root.querySelector('select[name=\"lz-select\"]');\n    this.vzSelect = this.root.querySelector('select[name=\"vz\"]');\n\n    if (this.kpInput) {\n      // Clear value on focus\n      this.kpInput.addEventListener(\"focus\", this.handleFocus.bind(this));\n\n      // Format with thousand delimiter while typing\n      this.kpInput.addEventListener(\"input\", this.handleInput.bind(this));\n\n      this.kpInput.addEventListener(\"blur\", this.handleBlur.bind(this));\n    }\n\n    if (this.form) {\n      // Remove delimiter on form submit\n      this.form.addEventListener(\"submit\", this.handleSubmit.bind(this));\n    }\n\n    if (this.lzSelect) {\n      // Update hidden input when select changes\n      this.lzSelect.addEventListener(\"change\", () =>\n        this.updateHiddenLzInput(),\n      );\n    }\n\n    if (this.vzSelect) {\n      // Update hidden input when select changes\n      this.vzSelect.addEventListener(\"change\", () =>\n        this.updateHiddenLzInput(),\n      );\n    }\n\n    // Initialize hidden inputs based on default values\n    this.updateHiddenLzInput();\n  }\n\n  private handleFocus(event: FocusEvent): void {\n    const input = event.target as HTMLInputElement;\n    input.placeholder = input.value;\n    input.value = \"\";\n  }\n\n  private handleInput(event: Event): void {\n    const input = event.target as HTMLInputElement;\n    // Remove all non-digit characters\n    const rawValue = input.value.replace(/\\D/g, \"\");\n    // Format with thousand delimiter\n    input.value = this.formatWithThousandDelimiter(rawValue);\n  }\n\n  private handleBlur(event: FocusEvent): void {\n    const input = event.target as HTMLInputElement;\n    if (!input.value) {\n      input.value = input.placeholder || \"20.000\";\n    }\n    const inputValue = Number(input.value.replace(/\\D/g, \"\"));\n    const purposeSelect = this.root.querySelector(\n      'select[name=\"vz\"]',\n    ) as HTMLSelectElement;\n    const selectedPurpose = purposeSelect.value;\n    if (inputValue < 500) {\n      input.value = \"500\";\n      return;\n    }\n    if (\n      (selectedPurpose === \"1\" || selectedPurpose === \"2\") &&\n      inputValue > 150000\n    ) {\n      input.value = \"150.000\";\n      return;\n    }\n    if (inputValue > 100000) {\n      input.value = \"100.000\";\n      return;\n    }\n\n    this.updateHiddenLzInput();\n  }\n\n  private handleSubmit(event: Event): void {\n    if (this.kpInput) {\n      // Remove thousand delimiter before submitting\n      this.kpInput.value = this.kpInput.value.replace(/\\./g, \"\");\n      requestAnimationFrame(() => {\n        if (this.kpInput) {\n          this.kpInput.value = this.formatWithThousandDelimiter(\n            this.kpInput.value,\n          );\n        }\n      });\n    }\n  }\n\n  private formatWithThousandDelimiter(value: string): string {\n    if (!value) return \"\";\n    // Convert to number and format with German thousand delimiter (.)\n    return parseInt(value, 10).toLocaleString(\"de-DE\");\n  }\n}\n\ncustomElements.define(\n  \"credit-teaser-campaign-trikot\",\n  CreditTeaserCampaignTrikotWidget,\n);\n\nexport default CreditTeaserCampaignTrikotWidget;\n"],"mappings":"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"}