{
  "version": 3,
  "sources": ["unit.ts"],
  "sourcesContent": ["/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nconst headerHeight = 3.5;\nconst breadcumbHeight = 2.5;\n\n/**\n * MainLayoutController calculates dynamic height values for header elements\n * to support variable size sticky positioned elements in the header so that\n * banners and breadcumbs may overflow to multiple lines.\n */\nexport class MainLayoutController {\n  private headerObserver: IntersectionObserver;\n  private navObserver: IntersectionObserver;\n  private asideObserver: IntersectionObserver;\n\n  constructor(\n    private mainHeader?: Element | null,\n    private mainNav?: Element | null,\n    private mainAside?: Element | null\n  ) {\n    this.headerObserver = new IntersectionObserver(\n      ([e]) => {\n        if (e.intersectionRatio < 1) {\n          for (const x of document.querySelectorAll('[class^=\"go-Main-header\"')) {\n            x.setAttribute('data-fixed', 'true');\n          }\n        } else {\n          for (const x of document.querySelectorAll('[class^=\"go-Main-header\"')) {\n            x.removeAttribute('data-fixed');\n          }\n          this.handleResize();\n        }\n      },\n      { threshold: 1, rootMargin: `${breadcumbHeight * 16}px` }\n    );\n    this.navObserver = new IntersectionObserver(\n      ([e]) => {\n        if (e.intersectionRatio < 1) {\n          this.mainNav?.classList.add('go-Main-nav--fixed');\n          this.mainNav?.setAttribute('data-fixed', 'true');\n        } else {\n          this.mainNav?.classList.remove('go-Main-nav--fixed');\n          this.mainNav?.removeAttribute('data-fixed');\n        }\n      },\n      { threshold: 1, rootMargin: `-${headerHeight * 16 + 10}px` }\n    );\n    this.asideObserver = new IntersectionObserver(\n      ([e]) => {\n        if (e.intersectionRatio < 1) {\n          this.mainHeader?.setAttribute('data-raised', 'true');\n        } else {\n          this.mainHeader?.removeAttribute('data-raised');\n        }\n      },\n      { threshold: 1, rootMargin: `-${headerHeight * 16 + 20}px 0px 0px 0px` }\n    );\n    this.init();\n  }\n\n  private init() {\n    this.handleResize();\n    window.addEventListener('resize', this.handleResize);\n    this.mainHeader?.addEventListener('dblclick', this.handleDoubleClick);\n    if (this.mainHeader?.hasChildNodes()) {\n      const headerSentinel = document.createElement('div');\n      this.mainHeader.prepend(headerSentinel);\n      this.headerObserver.observe(headerSentinel);\n    }\n    if (this.mainNav?.hasChildNodes()) {\n      const navSentinel = document.createElement('div');\n      this.mainNav.prepend(navSentinel);\n      this.navObserver.observe(navSentinel);\n    }\n    if (this.mainAside) {\n      const asideSentinel = document.createElement('div');\n      this.mainAside.prepend(asideSentinel);\n      this.asideObserver.observe(asideSentinel);\n    }\n  }\n\n  private handleDoubleClick: EventListener = e => {\n    const target = e.target;\n    if (target === this.mainHeader?.lastElementChild) {\n      window.getSelection()?.removeAllRanges();\n      window.scrollTo({ top: 0, behavior: 'smooth' });\n    }\n  };\n\n  private handleResize = () => {\n    const setProp = (name: string, value: string) =>\n      document.documentElement.style.setProperty(name, value);\n    setProp('--js-unit-header-height', '0');\n    setTimeout(() => {\n      const mainHeaderHeight = (this.mainHeader?.getBoundingClientRect().height ?? 0) / 16;\n      setProp('--js-unit-header-height', `${mainHeaderHeight}rem`);\n      setProp('--js-sticky-header-height', `${headerHeight}rem`);\n      setProp('--js-unit-header-top', `${(mainHeaderHeight - headerHeight) * -1}rem`);\n    });\n  };\n}\n\nconst el = <T extends HTMLElement>(selector: string) => document.querySelector<T>(selector);\nnew MainLayoutController(el('.js-mainHeader'), el('.js-mainNav'), el('.js-mainAside'));\n"],
  "mappings": "AAAA,AAOA,GAAM,GAAe,IACf,EAAkB,IAOjB,OAA2B,CAKhC,YACU,EACA,EACA,EACR,CAHQ,kBACA,eACA,iBA+DF,uBAAmC,GAAK,CAtFlD,QAwFI,AAAI,AADW,EAAE,SACF,SAAK,aAAL,cAAiB,mBAC9B,WAAO,iBAAP,QAAuB,kBACvB,OAAO,SAAS,CAAE,IAAK,EAAG,SAAU,aAIhC,kBAAe,IAAM,CAC3B,GAAM,GAAU,CAAC,EAAc,IAC7B,SAAS,gBAAgB,MAAM,YAAY,EAAM,GACnD,EAAQ,0BAA2B,KACnC,WAAW,IAAM,CAlGrB,QAmGM,GAAM,GAAoB,YAAK,aAAL,cAAiB,wBAAwB,SAAzC,OAAmD,GAAK,GAClF,EAAQ,0BAA2B,GAAG,QACtC,EAAQ,4BAA6B,GAAG,QACxC,EAAQ,uBAAwB,GAAI,GAAmB,GAAgB,YA7EzE,KAAK,eAAiB,GAAI,sBACxB,CAAC,CAAC,KAAO,CACP,GAAI,EAAE,kBAAoB,EACxB,OAAW,KAAK,UAAS,iBAAiB,4BACxC,EAAE,aAAa,aAAc,YAE1B,CACL,OAAW,KAAK,UAAS,iBAAiB,4BACxC,EAAE,gBAAgB,cAEpB,KAAK,iBAGT,CAAE,UAAW,EAAG,WAAY,GAAG,EAAkB,SAEnD,KAAK,YAAc,GAAI,sBACrB,CAAC,CAAC,KAAO,CAzCf,YA0CQ,AAAI,EAAE,kBAAoB,EACxB,SAAK,UAAL,QAAc,UAAU,IAAI,sBAC5B,QAAK,UAAL,QAAc,aAAa,aAAc,SAEzC,SAAK,UAAL,QAAc,UAAU,OAAO,sBAC/B,QAAK,UAAL,QAAc,gBAAgB,gBAGlC,CAAE,UAAW,EAAG,WAAY,IAAI,EAAe,GAAK,SAEtD,KAAK,cAAgB,GAAI,sBACvB,CAAC,CAAC,KAAO,CArDf,QAsDQ,AAAI,EAAE,kBAAoB,EACxB,QAAK,aAAL,QAAiB,aAAa,cAAe,QAE7C,QAAK,aAAL,QAAiB,gBAAgB,gBAGrC,CAAE,UAAW,EAAG,WAAY,IAAI,EAAe,GAAK,qBAEtD,KAAK,OAGC,MAAO,CAjEjB,UAqEI,GAHA,KAAK,eACL,OAAO,iBAAiB,SAAU,KAAK,cACvC,QAAK,aAAL,QAAiB,iBAAiB,WAAY,KAAK,mBAC/C,QAAK,aAAL,cAAiB,gBAAiB,CACpC,GAAM,GAAiB,SAAS,cAAc,OAC9C,KAAK,WAAW,QAAQ,GACxB,KAAK,eAAe,QAAQ,GAE9B,GAAI,QAAK,UAAL,cAAc,gBAAiB,CACjC,GAAM,GAAc,SAAS,cAAc,OAC3C,KAAK,QAAQ,QAAQ,GACrB,KAAK,YAAY,QAAQ,GAE3B,GAAI,KAAK,UAAW,CAClB,GAAM,GAAgB,SAAS,cAAc,OAC7C,KAAK,UAAU,QAAQ,GACvB,KAAK,cAAc,QAAQ,MAyB3B,EAAK,AAAwB,GAAqB,SAAS,cAAiB,GAClF,GAAI,GAAqB,EAAG,kBAAmB,EAAG,eAAgB,EAAG",
  "names": []
}
