{
  "version": 3,
  "sources": ["versions.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\n/**\n * VersionsController encapsulates event listeners and UI updates\n * for the versions page. As the expandable sections containing\n * the symbol history for a package are opened and closed it toggles\n * visiblity of the buttons to expand or collapse them. On page load\n * it adds an indicator to the version that matches the version request\n * by the user for the page or the canonical url path.\n */\nexport class VersionsController {\n  private expand = document.querySelector<HTMLButtonElement>('.js-versionsExpand');\n  private collapse = document.querySelector<HTMLButtonElement>('.js-versionsCollapse');\n  private details = [...document.querySelectorAll<HTMLDetailsElement>('.js-versionDetails')];\n\n  constructor() {\n    if (!this.expand?.parentElement) return;\n    if (this.details.some(d => d.tagName === 'DETAILS')) {\n      this.expand.parentElement.style.display = 'block';\n    }\n\n    for (const d of this.details) {\n      d.addEventListener('click', () => {\n        this.updateButtons();\n      });\n    }\n\n    this.expand?.addEventListener('click', () => {\n      this.details.map(d => (d.open = true));\n      this.updateButtons();\n    });\n\n    this.collapse?.addEventListener('click', () => {\n      this.details.map(d => (d.open = false));\n      this.updateButtons();\n    });\n\n    this.updateButtons();\n    this.setCurrent();\n  }\n\n  /**\n   * setCurrent applies the active style to the version dot\n   * for the version that matches the canonical URL path.\n   */\n  private setCurrent() {\n    const canonicalPath = document.querySelector<HTMLElement>('.js-canonicalURLPath')?.dataset\n      ?.canonicalUrlPath;\n    const versionLink = document.querySelector<HTMLElement>(\n      `.js-versionLink[href=\"${canonicalPath}\"]`\n    );\n    if (versionLink) {\n      versionLink.style.fontWeight = 'bold';\n    }\n  }\n\n  private updateButtons() {\n    setTimeout(() => {\n      if (!this.expand || !this.collapse) return;\n      let someOpen, someClosed;\n      for (const d of this.details) {\n        someOpen = someOpen || d.open;\n        someClosed = someClosed || !d.open;\n      }\n      this.expand.style.display = someClosed ? 'inline-block' : 'none';\n      this.collapse.style.display = someClosed ? 'none' : 'inline-block';\n    });\n  }\n}\n\nnew VersionsController();\n"],
  "mappings": "AAeO,IAAMA,EAAN,KAAyB,CAK9B,aAAc,CAJd,KAAQ,OAAS,SAAS,cAAiC,oBAAoB,EAC/E,KAAQ,SAAW,SAAS,cAAiC,sBAAsB,EACnF,KAAQ,QAAU,CAAC,GAAG,SAAS,iBAAqC,oBAAoB,CAAC,EAlB3F,IAAAC,EAAAC,EAAAC,EAqBI,IAAKF,EAAA,KAAK,SAAL,MAAAA,EAAa,cAClB,CAAI,KAAK,QAAQ,KAAKG,GAAKA,EAAE,UAAY,SAAS,IAChD,KAAK,OAAO,cAAc,MAAM,QAAU,SAG5C,QAAWA,KAAK,KAAK,QACnBA,EAAE,iBAAiB,QAAS,IAAM,CAChC,KAAK,cAAc,CACrB,CAAC,GAGHF,EAAA,KAAK,SAAL,MAAAA,EAAa,iBAAiB,QAAS,IAAM,CAC3C,KAAK,QAAQ,IAAIE,GAAMA,EAAE,KAAO,EAAK,EACrC,KAAK,cAAc,CACrB,IAEAD,EAAA,KAAK,WAAL,MAAAA,EAAe,iBAAiB,QAAS,IAAM,CAC7C,KAAK,QAAQ,IAAIC,GAAMA,EAAE,KAAO,EAAM,EACtC,KAAK,cAAc,CACrB,GAEA,KAAK,cAAc,EACnB,KAAK,WAAW,EAClB,CAMQ,YAAa,CAlDvB,IAAAH,EAAAC,EAmDI,IAAMG,GAAgBH,GAAAD,EAAA,SAAS,cAA2B,sBAAsB,IAA1D,YAAAA,EAA6D,UAA7D,YAAAC,EAClB,iBACEI,EAAc,SAAS,cAC3B,yBAAyBD,KAC3B,EACIC,IACFA,EAAY,MAAM,WAAa,OAEnC,CAEQ,eAAgB,CACtB,WAAW,IAAM,CACf,GAAI,CAAC,KAAK,QAAU,CAAC,KAAK,SAAU,OACpC,IAAIC,EAAUC,EACd,QAAWJ,KAAK,KAAK,QACnBG,EAAWA,GAAYH,EAAE,KACzBI,EAAaA,GAAc,CAACJ,EAAE,KAEhC,KAAK,OAAO,MAAM,QAAUI,EAAa,eAAiB,OAC1D,KAAK,SAAS,MAAM,QAAUA,EAAa,OAAS,cACtD,CAAC,CACH,CACF,EAEA,IAAIR",
  "names": ["VersionsController", "_a", "_b", "_c", "d", "canonicalPath", "versionLink", "someOpen", "someClosed"]
}
