{"version":3,"file":"option-select.bundle.mjs","sources":["../../../../src/digitalmarketplace/components/option-select/option-select.ts"],"sourcesContent":["import { DigitalMarketplaceFrontendComponent } from '../../digitalmarketplace-frontend-component'\n\nclass OptionSelect implements DigitalMarketplaceFrontendComponent {\n  static moduleName = 'dm-option-select'\n\n  $optionSelect: JQuery<HTMLElement>\n  $options: JQuery<HTMLInputElement>\n  $optionsContainer: JQuery<HTMLElement>\n  $optionList: JQuery<HTMLElement>\n  $allCheckboxes: JQuery<HTMLElement>\n  checkedCheckboxes: HTMLElement[]\n  filterOptions: FilterOptions | undefined\n\n  constructor ($module: JQuery<HTMLElement>) {\n    this.$optionSelect = $module\n    this.$options = this.$optionSelect.find<HTMLInputElement>('input[type=\"checkbox\"]')\n    this.$optionsContainer = this.$optionSelect.find('.js-options-container')\n    this.$optionList = this.$optionsContainer.find('.js-auto-height-inner')\n    this.$allCheckboxes = this.$optionsContainer.find('.govuk-checkboxes__item')\n    this.checkedCheckboxes = []\n  }\n\n  init () {\n    // Attach listener to update checked count\n    this.$optionSelect.on('change', (event) => {\n      const changedEl = event.target\n\n      if (changedEl.tagName === 'INPUT' && changedEl.getAttribute('type') === 'checkbox') {\n        this.updateCheckedCount()\n      }\n    })\n\n    // Replace div.container-head with a button\n    this.replaceHeadingSpanWithButton()\n\n    // Add js-collapsible class to parent for CSS\n    this.$optionSelect.addClass('js-collapsible')\n\n    // Add open/close listeners\n    this.$optionSelect.find('.js-container-button').on('click', (event) => {\n      this.toggleOptionSelect(event)\n    })\n\n    if (this.$optionSelect.data().closedOnLoad) {\n      this.close()\n    } else {\n      this.setupHeight()\n    }\n\n    const checkedString = this.checkedString()\n    if (checkedString) {\n      this.attachCheckedCounter(checkedString)\n    }\n\n    const $filter = this.$optionSelect.find('.js-dm-filter-options')\n    if ($filter.length) {\n      this.filterOptions = new FilterOptions($filter, this)\n      this.filterOptions.init()\n    }\n  }\n\n  getAllCheckedCheckboxes () {\n    this.checkedCheckboxes = []\n\n    this.$allCheckboxes.each((_index, checkbox) => {\n      if ($(checkbox).find('input[type=checkbox]').is(':checked')) {\n        this.checkedCheckboxes.push(checkbox)\n      }\n    })\n  }\n\n  replaceHeadingSpanWithButton () {\n    /* Replace the span within the heading with a button element. This is based on feedback from Léonie Watson.\n      * The button has all of the accessibility hooks that are used by screen readers and etc.\n      * We do this in the JavaScript because if the JavaScript is not active then the button shouldn't\n      * be there as there is no JS to handle the click event.\n    */\n    const $containerHead = this.$optionSelect.find('.js-container-button')\n    const jsContainerHeadHTML = $containerHead.html()\n\n    // Create button and replace the preexisting html with the button.\n    const $button = document.createElement('button')\n    $button.classList.add('js-container-button', 'dm-option-select__title', 'dm-option-select__button')\n    // Add type button to override default type submit when this component is used within a form\n    $button.setAttribute('type', 'button')\n    $button.setAttribute('aria-expanded', 'true')\n    $button.setAttribute('id', $containerHead.attr('id') as string)\n    $button.setAttribute('aria-controls', this.$optionsContainer.attr('id') as string)\n    $button.innerHTML = jsContainerHeadHTML\n    $containerHead.after($button.outerHTML)\n    $containerHead.remove()\n  }\n\n  attachCheckedCounter (checkedString: string) {\n    this.$optionSelect.find('.js-container-button').after(`<div class=\"dm-option-select__selected-counter js-selected-counter\">${checkedString}</div>`)\n  }\n\n  updateCheckedCount () {\n    const checkedString = this.checkedString()\n    const $checkedStringElement = this.$optionSelect.find('.js-selected-counter')\n\n    if (checkedString) {\n      if ($checkedStringElement.length) {\n        $checkedStringElement.text(checkedString)\n      } else {\n        this.attachCheckedCounter(checkedString)\n      }\n    } else {\n      $checkedStringElement.remove()\n    }\n  }\n\n  checkedString () {\n    this.getAllCheckedCheckboxes()\n    const count = this.checkedCheckboxes.length\n    return count > 0 ? `${count} selected` : ''\n  }\n\n  toggleOptionSelect (event: JQuery.ClickEvent) {\n    if (this.isClosed()) {\n      this.open()\n    } else {\n      this.close()\n    }\n    event.preventDefault()\n  }\n\n  open () {\n    if (this.isClosed()) {\n      this.$optionSelect.find('.js-container-button').attr('aria-expanded', 'true')\n      this.$optionSelect.removeClass('js-closed')\n      this.$optionSelect.addClass('js-opened')\n      if (!this.$optionsContainer.css('height')) {\n        this.setupHeight()\n      }\n    }\n  }\n\n  close () {\n    this.$optionSelect.removeClass('js-opened')\n    this.$optionSelect.addClass('js-closed')\n    this.$optionSelect.find('.js-container-button').attr('aria-expanded', 'false')\n  }\n\n  isClosed () {\n    return this.$optionSelect.hasClass('js-closed')\n  }\n\n  setContainerHeight (height: number) {\n    this.$optionsContainer.css('height', height + 'px')\n  }\n\n  getMaxContainerHeight () {\n    const maxHeight = parseFloat(window.getComputedStyle(this.$optionsContainer.get(0) as HTMLElement).maxHeight)\n\n    return Number.isNaN(maxHeight) ? 200 : maxHeight\n  }\n\n  isCheckboxVisible ($checkbox: JQuery<HTMLElement>, containerHeight: number) {\n    if (!$checkbox.is(':visible')) {\n      return false\n    }\n\n    const checkboxTop = ($checkbox.get(0) as HTMLElement).offsetTop\n\n    return checkboxTop < containerHeight\n  }\n\n  getVisibleCheckboxes (containerHeight: number) {\n    const allVisibleCheckboxes = this.$allCheckboxes.filter(':visible').get()\n    const visibleCheckboxes = allVisibleCheckboxes.filter((checkbox) => this.isCheckboxVisible($(checkbox), containerHeight))\n\n\n    // Add one extra visible row so the collapsed list hints there are more options.\n    if (visibleCheckboxes.length < allVisibleCheckboxes.length) {\n      visibleCheckboxes.push(allVisibleCheckboxes[visibleCheckboxes.length] as HTMLElement)\n    }\n\n    return visibleCheckboxes\n  }\n\n  setupHeight () {\n    const optionsContainer = this.$optionsContainer.get(0) as HTMLElement\n    const optionList = this.$optionList.get(0) as HTMLElement\n\n    const maxContainerHeight = this.getMaxContainerHeight()\n    const height = optionList.scrollHeight\n\n    // check whether this is hidden by progressive disclosure,\n    // because height calculations won't work\n    if (optionsContainer.offsetParent === null) {\n      this.setContainerHeight(maxContainerHeight)\n      return\n    }\n\n    // Resize if the list is only slightly bigger than its container\n    if (height <= maxContainerHeight + 50) {\n      this.setContainerHeight(height + 1)\n      return\n    }\n\n    // Resize to cut last item cleanly in half\n    const visibleCheckboxes = this.getVisibleCheckboxes(maxContainerHeight)\n\n    if (!visibleCheckboxes.length) {\n      this.setContainerHeight(height + 1)\n      return\n    }\n\n    const lastVisibleCheckbox = visibleCheckboxes[visibleCheckboxes.length - 1] as HTMLElement\n    const position = lastVisibleCheckbox?.offsetTop\n    const checkboxHeight = lastVisibleCheckbox?.offsetHeight ?? 0\n\n    // Never shrink below one full visible row.\n    const calculatedHeight = position + (checkboxHeight / 1.5)\n    this.setContainerHeight(Math.max(calculatedHeight, checkboxHeight + 1))\n  }\n}\n\nclass FilterOptions {\n  static moduleName = 'dm-filter-options'\n\n  $filter: JQuery<HTMLElement>\n  $optionSelect: JQuery<HTMLElement>\n  $optionsContainer: JQuery<HTMLElement>\n  $input: JQuery<HTMLInputElement>\n  $checkboxes: JQuery<HTMLElement>\n  optionSelect: OptionSelect\n\n  constructor ($module: JQuery<HTMLElement>, optionSelect: OptionSelect) {\n    this.$filter = $module\n    this.$optionSelect = optionSelect.$optionSelect\n    this.$optionsContainer = optionSelect.$optionsContainer\n    this.$input = this.$filter.find('input')\n    this.$checkboxes = this.$optionSelect.find('.govuk-checkboxes__item')\n    this.optionSelect = optionSelect\n  }\n\n  init () {\n    this.$input.on('keyup input search', () => this.filterCheckboxes())\n  }\n\n  filterCheckboxes () {\n    const query = (this.$input.val() as string).toLowerCase()\n\n    this.$checkboxes.each((_index, checkbox) => {\n      const $checkbox = $(checkbox)\n      const label = $checkbox.find('label').text().toLowerCase()\n\n      if (label.includes(query)) {\n        $checkbox.show()\n      } else {\n        $checkbox.hide()\n      }\n    })\n\n    this.$optionsContainer.css('height', 'auto')\n    this.optionSelect.setupHeight()\n  }\n}\n\nexport { OptionSelect }\n"],"names":[],"mappings":"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"}