{"version":3,"sources":["webpack:///./app/javascript/controllers/frontend/tabs_controller.js","webpack:///./app/javascript/controllers/frontend/tooltip_controller.js","webpack:///./app/javascript/controllers/frontend/ui_accordion_controller.js","webpack:///./app/javascript/controllers/frontend/ui_other_offers_controller.js","webpack:///./app/javascript/controllers/frontend/ui_recommended_tabs_controller.js","webpack:///./app/javascript/controllers/frontend/ui_tabs_controller.js","webpack:///./app/javascript/controllers/frontend/validation_controller.js"],"names":["matchMedia","matches","this","hasAccordionTarget","type","tab","mainTargets","forEach","main","classList","remove","setTimeout","initialize","event","preventDefault","index","indexOf","currentTarget","tabTargets","toggle","accordionTargets","content","contentTargets","contains","add","parseInt","data","get","value","set","Controller","targets","show","tooltipTarget","setAttribute","popperInstance","setOptions","options","modifiers","name","enabled","update","hide","removeAttribute","createPopper","buttonTarget","placement","placementValue","offset","offsetValue","padding","altAxis","element","addEventListener","destroy","values","String","default","Array","hasAttribute","openAll","panel","nextElementSibling","hideAll","style","maxHeight","scrollHeight","window","innerWidth","buttonElement","Element","scrollIntoView","behavior","block","once","exceptThis","i","buttonTargets","length","button","getAttribute","containerTarget","position","minHeight","height","loader","document","createElement","id","appendChild","Rails","ajax","url","target","success","result","selector","$","replaceWith","x","hidden","selectedBtns","btnTargets","filter","defaultTabValue","find","map","selectedTab","typeValue","checked","console","log","defaultTab","previousIsMobile","isMobile","adjustTabsForDevice","handleResize","bind","panelInnerTargets","panelInner","btn","setDefaultTab","showTab","tabId","selectedPanelInner","closest","selectedBtn","btnId","toggleTab","panelInnerTarget","isHidden","classes","field","valid","invalid","message","parentNode","insertAdjacentHTML","removeChild","querySelector","form","requiredFields","querySelectorAll","from","requiredField","checkValidity","removeMessage","addMessage"],"mappings":"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","file":"js/application~a98c8321-009d086db62a2959194d.chunk.js","sourcesContent":["import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n  static targets = ['tab', 'main', 'accordion', 'content'];\n\n  initialize() {\n    if ((matchMedia && matchMedia('(min-width: 768px)').matches) || !this.hasAccordionTarget) {\n      this.type = 'tab';\n      this.tab();\n    } else {\n      this.type = 'accordion';\n      this.mainTargets.forEach((main) => {\n        main.classList.remove('d-none');\n      });\n    }\n  }\n\n  resize() {\n    setTimeout(() => this.initialize(), 1000);\n  }\n\n  change(event) {\n    event.preventDefault();\n    this.index = this[`${this.type}Targets`].indexOf(event.currentTarget);\n  }\n\n  tab() {\n    this.tabTargets.forEach((tab, index) => {\n      const main = this.mainTargets[index];\n      tab.classList.toggle('c-tabs__nav-item--is-active', index === this.index);\n      main.classList.toggle('d-none', index !== this.index);\n    });\n  }\n\n  accordion() {\n    this.accordionTargets.forEach((tab, index) => {\n      const content = this.contentTargets[index];\n      if (!content.classList.contains('closed')) {\n        tab.classList.remove('c-tabs__accordion--is-active');\n        content.classList.add('closed');\n      } else {\n        tab.classList.toggle('c-tabs__accordion--is-active', index === this.index);\n        content.classList.toggle('closed', index !== this.index);\n      }\n    });\n  }\n\n  get index() {\n    return parseInt(this.data.get('index') || 0, 10);\n  }\n\n  set index(value) {\n    this.data.set('index', value);\n    this[this.type]();\n  }\n}\n","import { Controller } from '@hotwired/stimulus';\n// eslint-disable-next-line import/no-unresolved\nimport { createPopper } from '@popperjs/core';\n\nexport default class extends Controller {\n  static targets = ['button', 'tooltip'];\n\n  static values = {\n    placement: { type: String, default: 'top' },\n    offset: { type: Array, default: [0, 5] },\n  };\n\n  connect() {\n    // Create a new Popper instance\n    this.popperInstance = createPopper(this.buttonTarget, this.tooltipTarget, {\n      placement: this.placementValue,\n      modifiers: [\n        {\n          name: 'offset',\n          options: {\n            offset: this.offsetValue,\n          },\n        },\n        {\n          name: 'arrow',\n          options: {\n            padding: 5, // 5px from the edges of the popper\n          },\n        },\n        {\n          name: 'preventOverflow',\n          options: {\n            altAxis: true,\n            padding: 40,\n          },\n        },\n      ],\n    });\n\n    const showEvents = ['mouseenter', 'focus'];\n    const hideEvents = ['mouseleave', 'blur'];\n\n    showEvents.forEach((event) => {\n      this.element.addEventListener(event, this.show);\n    });\n\n    hideEvents.forEach((event) => {\n      this.element.addEventListener(event, this.hide);\n    });\n  }\n\n  show = () => {\n    this.tooltipTarget.setAttribute('data-show', '');\n\n    this.popperInstance.setOptions((options) => ({\n      ...options,\n      modifiers: [...options.modifiers, { name: 'eventListeners', enabled: true }],\n    }));\n\n    // We need to tell Popper to update the tooltip position\n    // after we show the tooltip, otherwise it will be incorrect\n    this.popperInstance.update();\n  };\n\n  hide = () => {\n    this.tooltipTarget.removeAttribute('data-show');\n\n    this.popperInstance.setOptions((options) => ({\n      ...options,\n      modifiers: [...options.modifiers, { name: 'eventListeners', enabled: false }],\n    }));\n  };\n\n  // Destroy the Popper instance\n  disconnect() {\n    if (this.popperInstance) {\n      this.popperInstance.destroy();\n    }\n  }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n  static targets = ['button'];\n\n  connect() {\n    if (this.element.hasAttribute('data-ui-accordion-open-all')) {\n      this.openAll();\n    }\n  }\n\n  toggle(event) {\n    event.preventDefault(); // Prevent default button behavior\n\n    const currentTarget = event.currentTarget;\n    currentTarget.classList.toggle('active');\n    const panel = currentTarget.nextElementSibling;\n\n    if (\n      !this.element.hasAttribute('data-ui-accordion-open-all') &&\n      this.element.hasAttribute('data-ui-accordion-auto-close')\n    ) {\n      this.hideAll(currentTarget);\n    }\n\n    if (panel.style.maxHeight) {\n      panel.style.maxHeight = null;\n    } else {\n      panel.style.maxHeight = `${panel.scrollHeight}px`;\n\n      // Only add scroll behavior for mobile devices\n      if (window.innerWidth < 768) {\n        // Store a reference to the currentTarget to avoid issues with event handling\n        const buttonElement = currentTarget;\n\n        panel.addEventListener(\n          'transitionend',\n          () => {\n            if (buttonElement instanceof Element) {\n              buttonElement.scrollIntoView({ behavior: 'smooth', block: 'center' });\n            }\n          },\n          { once: true },\n        );\n      }\n    }\n  }\n\n  hideAll(exceptThis) {\n    for (let i = 0; i < this.buttonTargets.length; i++) {\n      const panel = this.buttonTargets[i].nextElementSibling;\n\n      if (this.buttonTargets[i] !== exceptThis) {\n        this.buttonTargets[i].classList.remove('active');\n\n        if (panel.style.maxHeight) {\n          panel.style.maxHeight = null;\n        }\n      }\n    }\n  }\n\n  openAll() {\n    for (let i = 0; i < this.buttonTargets.length; i++) {\n      const button = this.buttonTargets[i];\n      const panel = button.nextElementSibling;\n\n      button.classList.add('active');\n      panel.style.maxHeight = `${panel.scrollHeight}px`;\n    }\n  }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport Rails from '@rails/ujs';\n\nexport default class extends Controller {\n  static targets = ['container'];\n\n  load(event) {\n    if (this.element.getAttribute('data-ui-other-offers-loaded')) {\n      return;\n    }\n\n    this.containerTarget.style.position = 'relative';\n    this.containerTarget.style.minHeight = '140px';\n    this.containerTarget.style.height = '140px';\n\n    const loader = document.createElement('div');\n    loader.id = 'loader';\n    this.containerTarget.appendChild(loader);\n\n    Rails.ajax({\n      url: event.target.getAttribute('data-ui-other-offers-path'),\n      type: 'get',\n      success: (result) => {\n        const selector = '[data-render-target=\"groups#derivatives\"]';\n        $(selector).replaceWith($(selector, result));\n        this.element.setAttribute('data-ui-other-offers-loaded', true);\n      },\n    });\n  }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n  static targets = ['btn', 'tab'];\n\n  static values = {\n    defaultTab: String,\n    type: String,\n  };\n\n  connect() {\n    // Hide all tabs by default\n    this.tabTargets.forEach((x) => {\n      x.hidden = true;\n    });\n\n    // Open default tab is specified\n    try {\n      const selectedBtns = this.btnTargets.filter((element) => element.id === this.defaultTabValue);\n      const selectedTab = this.tabTargets.find((element) => element.id === this.defaultTabValue);\n      selectedTab.hidden = false;\n      // selectedBtns.classList.add(\"active\")\n      selectedBtns.map((x) => x.classList.add('active'));\n    } catch {\n      /* empty */\n    }\n  }\n\n  select(event) {\n    // find tab with same id as clicked btn\n    let selectedTab;\n\n    if (this.typeValue === 'boolean') {\n      selectedTab = this.tabTargets.find((element) => element.id === `${event.target.checked}`);\n    } else {\n      selectedTab = this.tabTargets.find((element) => element.id === event.currentTarget.id);\n    }\n\n    if (this.typeValue === 'boolean') {\n      console.log(selectedTab);\n    }\n\n    if (selectedTab.hidden) {\n      // Close current tab and open selected tab\n      this.tabTargets.forEach((x) => {\n        x.hidden = true;\n      }); // hide all tabs\n      this.btnTargets.forEach((x) => x.classList.remove('active')); // deactive all btns\n      selectedTab.hidden = false; // show current tab\n      selectedTab.maxHeight = `${selectedTab.scrollHeight}px`;\n      const selectedBtns = this.btnTargets.filter((element) => element.id === event.currentTarget.id);\n      selectedBtns.map((x) => x.classList.add('active'));\n      // event.currentTarget.classList.add(\"active\") // active current btn\n    } else {\n      selectedTab.hidden = true; // hide current tab\n      event.currentTarget.classList.remove('active'); // active current btn\n    }\n  }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n  static targets = ['btn', 'tab', 'panelInner'];\n\n  static values = {\n    defaultTab: String,\n  };\n\n  // Initialize a variable to keep track of the previous mobile state\n  previousIsMobile = window.matchMedia('(max-width: 1200px)').matches;\n\n  connect() {\n    // Set the initial state based on the current window size\n    this.isMobile = this.previousIsMobile;\n    this.adjustTabsForDevice();\n\n    // Add the resize event listener\n    window.addEventListener('resize', this.handleResize.bind(this));\n  }\n\n  handleResize() {\n    // Update the isMobile state based on the current window size\n    this.isMobile = window.matchMedia('(max-width: 1200px)').matches;\n\n    // Only adjust tabs if there was a change in state\n    if (this.isMobile !== this.previousIsMobile) {\n      this.adjustTabsForDevice();\n      // Update the previousIsMobile state for the next resize event\n      this.previousIsMobile = this.isMobile;\n    }\n  }\n\n  adjustTabsForDevice() {\n    // Execute changes only if transitioning through the breakpoint\n    if (this.isMobile) {\n      // On mobile, close all tabs but keep the buttons visible\n      this.tabTargets.forEach((tab) => {\n        tab.hidden = false;\n      });\n      this.panelInnerTargets.forEach((panelInner) => {\n        panelInner.hidden = true;\n      });\n      this.btnTargets.forEach((btn) => btn.classList.remove('active'));\n    } else {\n      // On desktop, open the default tab\n      this.setDefaultTab();\n    }\n  }\n\n  setDefaultTab() {\n    // On desktop, show the default tab or the first if no default is specified\n    const defaultTab = this.defaultTabValue || this.btnTargets[0].id;\n    this.showTab(defaultTab);\n  }\n\n  showTab(tabId) {\n    // Close all tabs first\n    this.tabTargets.forEach((tab) => {\n      tab.hidden = true;\n    });\n    this.panelInnerTargets.forEach((panelInner) => {\n      panelInner.hidden = true;\n    });\n    this.btnTargets.forEach((btn) => btn.classList.remove('active'));\n\n    // Show the selected tab and button\n    const selectedTab = this.tabTargets.find((tab) => tab.id === tabId);\n    const selectedPanelInner = this.panelInnerTargets.find(\n      (panelInner) => panelInner.closest('.drv-tabs__panel').id === tabId,\n    );\n    const selectedBtn = this.btnTargets.find((btn) => btn.id === tabId);\n\n    if (selectedTab && selectedPanelInner && selectedBtn) {\n      selectedTab.hidden = false;\n      selectedPanelInner.hidden = false;\n      selectedBtn.classList.add('active');\n    }\n  }\n\n  select(event) {\n    const btnId = event.currentTarget.id;\n\n    if (this.isMobile) {\n      // Toggle the panel inner visibility on mobile\n      this.toggleTab(btnId);\n    } else {\n      // On desktop, show the clicked tab\n      this.showTab(btnId);\n    }\n  }\n\n  toggleTab(btnId) {\n    const panelInner = this.panelInnerTargets.find(\n      (panelInnerTarget) => panelInnerTarget.closest('.drv-tabs__panel').id === btnId,\n    );\n\n    if (panelInner) {\n      const isHidden = panelInner.hidden;\n      panelInner.hidden = !isHidden;\n      this.btnTargets.forEach((btn) => btn.classList.toggle('active', btn.id === btnId && isHidden));\n    }\n  }\n}\n","// https://www.telerik.com/blogs/building-html5-form-validation-bubble-replacements\n\nimport { Controller } from '@hotwired/stimulus';\n\nconst classes = {\n  field: { valid: 'is-valid', invalid: 'is-invalid' },\n  message: { valid: 'valid-feedback', invalid: 'invalid-feedback' },\n};\n\nexport default class extends Controller {\n  addMessage(field, type, message) {\n    if (field.classList.contains(classes.field[type])) return;\n\n    field.classList.add(classes.field[type]);\n    field.parentNode.insertAdjacentHTML('beforeend', `<div class=\"${classes.message[type]}\">${message}</div>`);\n  }\n\n  removeMessage(field, type) {\n    if (!field.classList.contains(classes.field[type])) return;\n\n    field.classList.remove(classes.field[type]);\n    field.parentNode.removeChild(field.parentNode.querySelector(`.${classes.message[type]}`));\n  }\n\n  connect() {\n    const form = this.element;\n\n    // rely on the good default browser form field validation\n    form.removeAttribute('novalidate');\n\n    const requiredFields = form.querySelectorAll('[name][required]');\n\n    Array.from(requiredFields).forEach((requiredField) => {\n      requiredField.addEventListener('blur', (event) => {\n        const isValid = event.target.checkValidity();\n\n        if (isValid) {\n          this.removeMessage(event.target, 'invalid');\n          this.addMessage(event.target, 'valid', 'Thank you.');\n        } else {\n          // checkValidity will automatically trigger `invalid` on the field\n        }\n      });\n\n      requiredField.addEventListener('invalid', (event) => {\n        // suppress the default form validation messages\n        event.preventDefault();\n\n        this.removeMessage(event.target, 'valid');\n        this.addMessage(event.target, 'invalid', 'Please check and enter it again.');\n      });\n    });\n  }\n}\n"],"sourceRoot":""}