{"version":3,"sources":["webpack://@verndale/toolkit/./src/js/modules/ucbPage.ts"],"names":["UcbPage","Component","el","__publicField","containerSidebar","actionsMenu","option","target","id","y","shareDropdown","container","progress"],"mappings":"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","file":"scripts/6470.1c93daa558a0f3c75a93.js","sourcesContent":["import { Component } from '@verndale/core';\n\nclass UcbPage extends Component {\n  breakpoint = window.matchMedia('(min-width: 1280px)');\n  offsetTop = 0;\n\n  constructor(el: HTMLElement) {\n    super(el);\n\n    this.injectActionsMenu();\n    this.handleBreakpoint();\n    this.addEventListeners();\n  }\n\n  setupDefaults() {\n    this.dom = {\n      actionsMenu: this.el.querySelector<HTMLElement>('.page-actions-menu'),\n      containerSidebar:\n        this.el.querySelector<HTMLElement>('.container-sidebar'),\n      containerContent:\n        this.el.querySelector<HTMLElement>('.container-content'),\n      actionsShareDropdown: this.el.querySelector<HTMLElement>(\n        '.page-actions-menu__trigger--share'\n      ),\n      actionsMenuScroll: this.el.querySelectorAll(\n        '.page-actions-menu__trigger[data-scroll-to]'\n      ),\n      progressBar: this.el.querySelector<HTMLElement>(\n        '.page-actions-menu__progress'\n      )\n    };\n  }\n\n  injectActionsMenu() {\n    if (this.dom.containerSidebar) {\n      const containerSidebar = this.dom.containerSidebar as HTMLElement;\n      const actionsMenu = this.dom.actionsMenu as HTMLElement;\n\n      containerSidebar.appendChild(actionsMenu);\n    }\n  }\n\n  addEventListeners() {\n    document.addEventListener('scroll', this.handleScroll.bind(this));\n    this.breakpoint.addEventListener(\n      'change',\n      this.handleBreakpoint.bind(this)\n    );\n    (this.dom.actionsShareDropdown as HTMLElement).addEventListener(\n      'click',\n      this.handleShareClick.bind(this)\n    );\n\n    (this.dom.actionsMenuScroll as NodeListOf<HTMLButtonElement>).forEach(\n      option => {\n        option.addEventListener(\n          'click',\n          this.handleActionsScrollClick.bind(this)\n        );\n      }\n    );\n\n    // handle click outside\n    document.addEventListener('click', this.handleClickOutside.bind(this));\n  }\n\n  handleBreakpoint() {\n    this.offsetTop = this.breakpoint.matches ? 160 : 0;\n  }\n\n  handleScroll() {\n    this.addStickyFunctionality();\n    this.updateProgressBar();\n  }\n\n  handleShareClick(e: Event) {\n    const target = e.currentTarget as HTMLButtonElement;\n\n    if (target.getAttribute('aria-expanded') === 'false') {\n      target.setAttribute('aria-expanded', 'true');\n    } else {\n      target.setAttribute('aria-expanded', 'false');\n    }\n  }\n\n  handleActionsScrollClick(e: Event) {\n    e.preventDefault();\n\n    const target = e.currentTarget as HTMLButtonElement;\n    const id = target.dataset.scrollTo;\n\n    if (id) {\n      if (id === 'top') {\n        window.scrollTo({\n          top: 0,\n          behavior: 'smooth'\n        });\n      } else {\n        const el = document.getElementById(id.replace('#', ''));\n\n        if (el) {\n          //scroll to that element + offset\n          const y = el.getBoundingClientRect().top + window.scrollY - 150;\n\n          window.scrollTo({\n            top: y,\n            behavior: 'smooth'\n          });\n        }\n      }\n    }\n  }\n\n  handleClickOutside(e: Event) {\n    const target = e.target as HTMLElement;\n    const shareDropdown = this.dom.actionsShareDropdown as HTMLElement;\n\n    if (\n      !shareDropdown.contains(target) &&\n      shareDropdown.getAttribute('aria-expanded') === 'true'\n    ) {\n      shareDropdown.setAttribute('aria-expanded', 'false');\n    }\n  }\n\n  addStickyFunctionality() {\n    const { y } = this.el.getBoundingClientRect();\n    const actionsMenu = this.dom.actionsMenu as HTMLDivElement;\n\n    if (y <= this.offsetTop) {\n      if (!actionsMenu.classList.contains('page-actions-menu--sticky')) {\n        actionsMenu.classList.add('page-actions-menu--sticky');\n      }\n    } else if (actionsMenu.classList.contains('page-actions-menu--sticky')) {\n      actionsMenu.classList.remove('page-actions-menu--sticky');\n    }\n  }\n\n  updateProgressBar() {\n    let container = this.el;\n\n    if (this.dom.containerContent) {\n      container = this.dom.containerContent as HTMLElement;\n    }\n\n    const scrollDistance = -(\n      container.getBoundingClientRect().top - this.offsetTop\n    );\n\n    let progress =\n      (scrollDistance /\n        (container.getBoundingClientRect().height -\n          document.documentElement.clientHeight +\n          this.offsetTop)) *\n      100;\n\n    if (progress > 100) {\n      progress = 100;\n    } else if (progress < 0) {\n      progress = 0;\n    }\n\n    (this.dom.progressBar as HTMLElement).style.width = `${progress}%`;\n  }\n}\n\nexport default UcbPage;\n"],"sourceRoot":""}