static/frontend: hide expand/collapse on smaller readmes
The readme expand/collapse toggle will only appear
after page load when the readme content is higher than
320px.
Fixes golang/go#48193
Change-Id: I300025bac382059d55c25785fbf48085039a54f7
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/378097
Trust: Jamal Carvalho <jamal@golang.org>
Run-TryBot: Jamal Carvalho <jamal@golang.org>
TryBot-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/static/frontend/unit/main/_readme.css b/static/frontend/unit/main/_readme.css
index 4b3d5bf..0c3c104 100644
--- a/static/frontend/unit/main/_readme.css
+++ b/static/frontend/unit/main/_readme.css
@@ -58,10 +58,13 @@
max-height: initial;
overflow: initial;
}
+.UnitReadme--toggle .UnitReadme-expandLink {
+ display: block;
+}
.UnitReadme--expanded .UnitReadme-expandLink {
display: none;
}
-.UnitReadme--expanded .UnitReadme-collapseLink {
+.UnitReadme--expanded.UnitReadme--toggle .UnitReadme-collapseLink {
display: block;
}
diff --git a/static/frontend/unit/main/_readme.tmpl b/static/frontend/unit/main/_readme.tmpl
index a0d27cd..288c690 100644
--- a/static/frontend/unit/main/_readme.tmpl
+++ b/static/frontend/unit/main/_readme.tmpl
@@ -5,7 +5,7 @@
-->
{{define "unit-readme"}}
- <div class="UnitReadme {{if .ExpandReadme}}UnitReadme--expanded{{end}} js-readme">
+ <div class="UnitReadme UnitReadme--expanded js-readme">
<h2 class="UnitReadme-title" id="section-readme">
<img class="go-Icon" height="24" width="24" src="/static/shared/icon/chrome_reader_mode_gm_grey_24dp.svg" alt="">
README
diff --git a/static/frontend/unit/main/main.js b/static/frontend/unit/main/main.js
index a38f518..f0d396a 100644
--- a/static/frontend/unit/main/main.js
+++ b/static/frontend/unit/main/main.js
@@ -1,4 +1,4 @@
-var o={PLAY_HREF:".js-exampleHref",PLAY_CONTAINER:".js-exampleContainer",EXAMPLE_INPUT:".Documentation-exampleCode",EXAMPLE_OUTPUT:".Documentation-exampleOutput",EXAMPLE_ERROR:".Documentation-exampleError",PLAY_BUTTON:".Documentation-examplePlayButton",SHARE_BUTTON:".Documentation-exampleShareButton",FORMAT_BUTTON:".Documentation-exampleFormatButton",RUN_BUTTON:".Documentation-exampleRunButton"},g=class{constructor(e){this.exampleEl=e;var t,i,s,r;this.exampleEl=e,this.anchorEl=e.querySelector("a"),this.errorEl=e.querySelector(o.EXAMPLE_ERROR),this.playButtonEl=e.querySelector(o.PLAY_BUTTON),this.shareButtonEl=e.querySelector(o.SHARE_BUTTON),this.formatButtonEl=e.querySelector(o.FORMAT_BUTTON),this.runButtonEl=e.querySelector(o.RUN_BUTTON),this.inputEl=this.makeTextArea(e.querySelector(o.EXAMPLE_INPUT)),this.outputEl=e.querySelector(o.EXAMPLE_OUTPUT),(t=this.playButtonEl)==null||t.addEventListener("click",()=>this.handleShareButtonClick()),(i=this.shareButtonEl)==null||i.addEventListener("click",()=>this.handleShareButtonClick()),(s=this.formatButtonEl)==null||s.addEventListener("click",()=>this.handleFormatButtonClick()),(r=this.runButtonEl)==null||r.addEventListener("click",()=>this.handleRunButtonClick()),!!this.inputEl&&(this.resize(),this.inputEl.addEventListener("keyup",()=>this.resize()),this.inputEl.addEventListener("keydown",n=>this.onKeydown(n)))}makeTextArea(e){var i,s;let t=document.createElement("textarea");return t.classList.add("Documentation-exampleCode","code"),t.spellcheck=!1,t.value=(i=e==null?void 0:e.textContent)!=null?i:"",(s=e==null?void 0:e.parentElement)==null||s.replaceChild(t,e),t}getAnchorHash(){var e;return(e=this.anchorEl)==null?void 0:e.hash}expand(){this.exampleEl.open=!0}resize(){var e;if((e=this.inputEl)==null?void 0:e.value){let t=(this.inputEl.value.match(/\n/g)||[]).length;this.inputEl.style.height=`${(20+t*20+12+2)/16}rem`}}onKeydown(e){e.key==="Tab"&&(document.execCommand("insertText",!1," "),e.preventDefault())}setInputText(e){this.inputEl&&(this.inputEl.value=e)}setOutputText(e){this.outputEl&&(this.outputEl.textContent=e)}setErrorText(e){this.errorEl&&(this.errorEl.textContent=e),this.setOutputText("An error has occurred\u2026")}handleShareButtonClick(){var t;let e="https://play.golang.org/p/";this.setOutputText("Waiting for remote server\u2026"),fetch("/play/share",{method:"POST",body:(t=this.inputEl)==null?void 0:t.value}).then(i=>i.text()).then(i=>{let s=e+i;this.setOutputText(`<a href="${s}">${s}</a>`),window.open(s)}).catch(i=>{this.setErrorText(i)})}handleFormatButtonClick(){var t,i;this.setOutputText("Waiting for remote server\u2026");let e=new FormData;e.append("body",(i=(t=this.inputEl)==null?void 0:t.value)!=null?i:""),fetch("/play/fmt",{method:"POST",body:e}).then(s=>s.json()).then(({Body:s,Error:r})=>{this.setOutputText(r||"Done."),s&&(this.setInputText(s),this.resize())}).catch(s=>{this.setErrorText(s)})}handleRunButtonClick(){var e;this.setOutputText("Waiting for remote server\u2026"),fetch("/play/compile",{method:"POST",body:JSON.stringify({body:(e=this.inputEl)==null?void 0:e.value,version:2})}).then(t=>t.json()).then(async({Events:t,Errors:i})=>{this.setOutputText(i||"");for(let s of t||[])this.setOutputText(s.Message),await new Promise(r=>setTimeout(r,s.Delay/1e6))}).catch(t=>{this.setErrorText(t)})}};function y(){let l=location.hash.match(/^#(example-.*)$/);if(l){let i=document.getElementById(l[1]);i&&(i.open=!0)}let e=[...document.querySelectorAll(o.PLAY_HREF)],t=i=>e.find(s=>s.hash===i.getAnchorHash());for(let i of document.querySelectorAll(o.PLAY_CONTAINER)){let s=new g(i),r=t(s);r?r.addEventListener("click",()=>{s.expand()}):console.warn("example href not found")}}var p=class{constructor(e){this.el=e;this.el.addEventListener("change",t=>{let i=t.target,s=i.value;i.value.startsWith("/")||(s="/"+s),window.location.href=s})}};function A(l){let e=document.createElement("label");e.classList.add("go-Label"),e.setAttribute("aria-label","Menu");let t=document.createElement("select");t.classList.add("go-Select","js-selectNav"),e.appendChild(t);let i=document.createElement("optgroup");i.label="Outline",t.appendChild(i);let s={},r;for(let n of l.treeitems){if(Number(n.depth)>4)continue;n.groupTreeitem?(r=s[n.groupTreeitem.label],r||(r=s[n.groupTreeitem.label]=document.createElement("optgroup"),r.label=n.groupTreeitem.label,t.appendChild(r))):r=i;let a=document.createElement("option");a.label=n.label,a.textContent=n.label,a.value=n.el.href.replace(window.location.origin,"").replace("/",""),r.appendChild(a)}return l.addObserver(n=>{var c;let a=n.el.hash,d=(c=t.querySelector(`[value$="${a}"]`))==null?void 0:c.value;d&&(t.value=d)},50),e}var f=class{constructor(e){this.el=e;this.handleResize=()=>{this.el.style.setProperty("--js-tree-height","100vh"),this.el.style.setProperty("--js-tree-height",this.el.clientHeight+"px")};this.treeitems=[],this.firstChars=[],this.firstTreeitem=null,this.lastTreeitem=null,this.observerCallbacks=[],this.init()}init(){this.handleResize(),window.addEventListener("resize",this.handleResize),this.findTreeItems(),this.updateVisibleTreeitems(),this.observeTargets(),this.firstTreeitem&&(this.firstTreeitem.el.tabIndex=0)}observeTargets(){this.addObserver(i=>{this.expandTreeitem(i),this.setSelected(i)});let e=new Map,t=new IntersectionObserver(i=>{for(let s of i)e.set(s.target.id,s.isIntersecting||s.intersectionRatio===1);for(let[s,r]of e)if(r){let n=this.treeitems.find(a=>{var d;return(d=a.el)==null?void 0:d.href.endsWith(`#${s}`)});if(n)for(let a of this.observerCallbacks)a(n);break}},{threshold:1,rootMargin:"-60px 0px 0px 0px"});for(let i of this.treeitems.map(s=>s.el.getAttribute("href")))if(i){let s=i.replace(window.location.origin,"").replace("/","").replace("#",""),r=document.getElementById(s);r&&t.observe(r)}}addObserver(e,t=200){this.observerCallbacks.push(M(e,t))}setFocusToNextItem(e){let t=null;for(let i=e.index+1;i<this.treeitems.length;i++){let s=this.treeitems[i];if(s.isVisible){t=s;break}}t&&this.setFocusToItem(t)}setFocusToPreviousItem(e){let t=null;for(let i=e.index-1;i>-1;i--){let s=this.treeitems[i];if(s.isVisible){t=s;break}}t&&this.setFocusToItem(t)}setFocusToParentItem(e){e.groupTreeitem&&this.setFocusToItem(e.groupTreeitem)}setFocusToFirstItem(){this.firstTreeitem&&this.setFocusToItem(this.firstTreeitem)}setFocusToLastItem(){this.lastTreeitem&&this.setFocusToItem(this.lastTreeitem)}setSelected(e){var t;for(let i of this.el.querySelectorAll('[aria-expanded="true"]'))i!==e.el&&(((t=i.nextElementSibling)==null?void 0:t.contains(e.el))||i.setAttribute("aria-expanded","false"));for(let i of this.el.querySelectorAll("[aria-selected]"))i!==e.el&&i.setAttribute("aria-selected","false");e.el.setAttribute("aria-selected","true"),this.updateVisibleTreeitems(),this.setFocusToItem(e,!1)}expandTreeitem(e){let t=e;for(;t;)t.isExpandable&&t.el.setAttribute("aria-expanded","true"),t=t.groupTreeitem;this.updateVisibleTreeitems()}expandAllSiblingItems(e){for(let t of this.treeitems)t.groupTreeitem===e.groupTreeitem&&t.isExpandable&&this.expandTreeitem(t)}collapseTreeitem(e){let t=null;e.isExpanded()?t=e:t=e.groupTreeitem,t&&(t.el.setAttribute("aria-expanded","false"),this.updateVisibleTreeitems(),this.setFocusToItem(t))}setFocusByFirstCharacter(e,t){let i,s;t=t.toLowerCase(),i=e.index+1,i===this.treeitems.length&&(i=0),s=this.getIndexFirstChars(i,t),s===-1&&(s=this.getIndexFirstChars(0,t)),s>-1&&this.setFocusToItem(this.treeitems[s])}findTreeItems(){let e=(t,i)=>{let s=i,r=t.firstElementChild;for(;r;)(r.tagName==="A"||r.tagName==="SPAN")&&(s=new L(r,this,i),this.treeitems.push(s),this.firstChars.push(s.label.substring(0,1).toLowerCase())),r.firstElementChild&&e(r,s),r=r.nextElementSibling};e(this.el,null),this.treeitems.map((t,i)=>t.index=i)}updateVisibleTreeitems(){this.firstTreeitem=this.treeitems[0];for(let e of this.treeitems){let t=e.groupTreeitem;for(e.isVisible=!0;t&&t.el!==this.el;)t.isExpanded()||(e.isVisible=!1),t=t.groupTreeitem;e.isVisible&&(this.lastTreeitem=e)}}setFocusToItem(e,t=!0){e.el.tabIndex=0,t&&e.el.focus();for(let i of this.treeitems)i!==e&&(i.el.tabIndex=-1)}getIndexFirstChars(e,t){for(let i=e;i<this.firstChars.length;i++)if(this.treeitems[i].isVisible&&t===this.firstChars[i])return i;return-1}},L=class{constructor(e,t,i){var n,a,d,c,v;e.tabIndex=-1,this.el=e,this.groupTreeitem=i,this.label=(a=(n=e.textContent)==null?void 0:n.trim())!=null?a:"",this.tree=t,this.depth=((i==null?void 0:i.depth)||0)+1,this.index=0;let s=e.parentElement;(s==null?void 0:s.tagName.toLowerCase())==="li"&&(s==null||s.setAttribute("role","none")),e.setAttribute("aria-level",this.depth+""),e.getAttribute("aria-label")&&(this.label=(c=(d=e==null?void 0:e.getAttribute("aria-label"))==null?void 0:d.trim())!=null?c:""),this.isExpandable=!1,this.isVisible=!1,this.isInGroup=!!i;let r=e.nextElementSibling;for(;r;){if(r.tagName.toLowerCase()=="ul"){let x=`${(v=i==null?void 0:i.label)!=null?v:""} nav group ${this.label}`.replace(/[\W_]+/g,"_");e.setAttribute("aria-owns",x),e.setAttribute("aria-expanded","false"),r.setAttribute("role","group"),r.setAttribute("id",x),this.isExpandable=!0;break}r=r.nextElementSibling}this.init()}init(){this.el.tabIndex=-1,this.el.getAttribute("role")||this.el.setAttribute("role","treeitem"),this.el.addEventListener("keydown",this.handleKeydown.bind(this)),this.el.addEventListener("click",this.handleClick.bind(this)),this.el.addEventListener("focus",this.handleFocus.bind(this)),this.el.addEventListener("blur",this.handleBlur.bind(this))}isExpanded(){return this.isExpandable?this.el.getAttribute("aria-expanded")==="true":!1}isSelected(){return this.el.getAttribute("aria-selected")==="true"}handleClick(e){e.target!==this.el&&e.target!==this.el.firstElementChild||(this.isExpandable&&(this.isExpanded()&&this.isSelected()?this.tree.collapseTreeitem(this):this.tree.expandTreeitem(this),e.stopPropagation()),this.tree.setSelected(this))}handleFocus(){var t;let e=this.el;this.isExpandable&&(e=(t=e.firstElementChild)!=null?t:e),e.classList.add("focus")}handleBlur(){var t;let e=this.el;this.isExpandable&&(e=(t=e.firstElementChild)!=null?t:e),e.classList.remove("focus")}handleKeydown(e){if(e.altKey||e.ctrlKey||e.metaKey)return;let t=!1;switch(e.key){case" ":case"Enter":this.isExpandable?(this.isExpanded()&&this.isSelected()?this.tree.collapseTreeitem(this):this.tree.expandTreeitem(this),t=!0):e.stopPropagation(),this.tree.setSelected(this);break;case"ArrowUp":this.tree.setFocusToPreviousItem(this),t=!0;break;case"ArrowDown":this.tree.setFocusToNextItem(this),t=!0;break;case"ArrowRight":this.isExpandable&&(this.isExpanded()?this.tree.setFocusToNextItem(this):this.tree.expandTreeitem(this)),t=!0;break;case"ArrowLeft":this.isExpandable&&this.isExpanded()?(this.tree.collapseTreeitem(this),t=!0):this.isInGroup&&(this.tree.setFocusToParentItem(this),t=!0);break;case"Home":this.tree.setFocusToFirstItem(),t=!0;break;case"End":this.tree.setFocusToLastItem(),t=!0;break;default:e.key.length===1&&e.key.match(/\S/)&&(e.key=="*"?this.tree.expandAllSiblingItems(this):this.tree.setFocusByFirstCharacter(this,e.key),t=!0);break}t&&(e.stopPropagation(),e.preventDefault())}};function M(l,e){let t;return(...i)=>{let s=()=>{t=null,l(...i)};t&&clearTimeout(t),t=setTimeout(s,e)}}var T=class{constructor(e,t){this.table=e;this.toggleAll=t;this.expandAllItems=()=>{this.toggles.map(e=>e.setAttribute("aria-expanded","true")),this.update()};this.collapseAllItems=()=>{this.toggles.map(e=>e.setAttribute("aria-expanded","false")),this.update()};this.update=()=>{this.updateVisibleItems(),setTimeout(()=>this.updateGlobalToggle())};this.rows=Array.from(e.querySelectorAll("[data-aria-controls]")),this.toggles=Array.from(this.table.querySelectorAll("[aria-expanded]")),this.setAttributes(),this.attachEventListeners(),this.update()}setAttributes(){for(let e of["data-aria-controls","data-aria-labelledby","data-id"])this.table.querySelectorAll(`[${e}]`).forEach(t=>{var i;t.setAttribute(e.replace("data-",""),(i=t.getAttribute(e))!=null?i:""),t.removeAttribute(e)})}attachEventListeners(){var e;this.rows.forEach(t=>{t.addEventListener("click",i=>{this.handleToggleClick(i)})}),(e=this.toggleAll)==null||e.addEventListener("click",()=>{this.expandAllItems()}),document.addEventListener("keydown",t=>{(t.ctrlKey||t.metaKey)&&t.key==="f"&&this.expandAllItems()})}handleToggleClick(e){let t=e.currentTarget;(t==null?void 0:t.hasAttribute("aria-expanded"))||(t=this.table.querySelector(`button[aria-controls="${t==null?void 0:t.getAttribute("aria-controls")}"]`));let i=(t==null?void 0:t.getAttribute("aria-expanded"))==="true";t==null||t.setAttribute("aria-expanded",i?"false":"true"),e.stopPropagation(),this.update()}updateVisibleItems(){this.rows.map(e=>{var s;let t=(e==null?void 0:e.getAttribute("aria-expanded"))==="true",i=(s=e==null?void 0:e.getAttribute("aria-controls"))==null?void 0:s.trimEnd().split(" ");i==null||i.map(r=>{let n=document.getElementById(`${r}`);t?(n==null||n.classList.add("visible"),n==null||n.classList.remove("hidden")):(n==null||n.classList.add("hidden"),n==null||n.classList.remove("visible"))})})}updateGlobalToggle(){if(!this.toggleAll)return;this.rows.some(t=>t.hasAttribute("aria-expanded"))&&(this.toggleAll.style.display="block"),this.toggles.some(t=>t.getAttribute("aria-expanded")==="false")?(this.toggleAll.innerText="Expand all",this.toggleAll.onclick=this.expandAllItems):(this.toggleAll.innerText="Collapse all",this.toggleAll.onclick=this.collapseAllItems)}};y();var I=document.querySelector(".js-expandableTable");if(I){let l=new T(I,document.querySelector(".js-expandAllDirectories"));window.location.search.includes("expand-directories")&&l.expandAllItems()}var C=document.querySelector(".js-tree");if(C){let l=new f(C),e=A(l),t=document.querySelector(".js-mainNavMobile");t&&t.firstElementChild&&(t==null||t.replaceChild(e,t.firstElementChild)),e.firstElementChild&&new p(e.firstElementChild)}var u=document.querySelector(".js-readme"),E=document.querySelector(".js-readmeContent"),S=document.querySelector(".js-readmeOutline"),m=document.querySelectorAll(".js-readmeExpand"),k=document.querySelector(".js-readmeCollapse"),b=document.querySelector(".DocNavMobile-select");u&&E&&S&&m.length&&k&&(window.location.hash.includes("readme")&&h(),b==null||b.addEventListener("change",l=>{l.target.value.startsWith("readme-")&&h()}),m.forEach(l=>l.addEventListener("click",e=>{e.preventDefault(),h(),u.scrollIntoView()})),k.addEventListener("click",l=>{l.preventDefault(),u.classList.remove("UnitReadme--expanded"),m[1]&&m[1].scrollIntoView({block:"center"})}),E.addEventListener("keyup",()=>{h()}),E.addEventListener("click",()=>{h()}),S.addEventListener("click",()=>{h()}),document.addEventListener("keydown",l=>{(l.ctrlKey||l.metaKey)&&l.key==="f"&&h()}));function h(){history.replaceState(null,"",`${location.pathname}#section-readme`),u==null||u.classList.add("UnitReadme--expanded")}function w(){var t;if(!location.hash)return;let l=document.getElementById(location.hash.slice(1)),e=(t=l==null?void 0:l.parentElement)==null?void 0:t.parentElement;(e==null?void 0:e.nodeName)==="DETAILS"&&(e.open=!0)}w();window.addEventListener("hashchange",()=>w());document.querySelectorAll(".js-buildContextSelect").forEach(l=>{l.addEventListener("change",e=>{window.location.search=`?GOOS=${e.target.value}`})});
+var d={PLAY_HREF:".js-exampleHref",PLAY_CONTAINER:".js-exampleContainer",EXAMPLE_INPUT:".Documentation-exampleCode",EXAMPLE_OUTPUT:".Documentation-exampleOutput",EXAMPLE_ERROR:".Documentation-exampleError",PLAY_BUTTON:".Documentation-examplePlayButton",SHARE_BUTTON:".Documentation-exampleShareButton",FORMAT_BUTTON:".Documentation-exampleFormatButton",RUN_BUTTON:".Documentation-exampleRunButton"},g=class{constructor(e){this.exampleEl=e;var t,i,s,r;this.exampleEl=e,this.anchorEl=e.querySelector("a"),this.errorEl=e.querySelector(d.EXAMPLE_ERROR),this.playButtonEl=e.querySelector(d.PLAY_BUTTON),this.shareButtonEl=e.querySelector(d.SHARE_BUTTON),this.formatButtonEl=e.querySelector(d.FORMAT_BUTTON),this.runButtonEl=e.querySelector(d.RUN_BUTTON),this.inputEl=this.makeTextArea(e.querySelector(d.EXAMPLE_INPUT)),this.outputEl=e.querySelector(d.EXAMPLE_OUTPUT),(t=this.playButtonEl)==null||t.addEventListener("click",()=>this.handleShareButtonClick()),(i=this.shareButtonEl)==null||i.addEventListener("click",()=>this.handleShareButtonClick()),(s=this.formatButtonEl)==null||s.addEventListener("click",()=>this.handleFormatButtonClick()),(r=this.runButtonEl)==null||r.addEventListener("click",()=>this.handleRunButtonClick()),!!this.inputEl&&(this.resize(),this.inputEl.addEventListener("keyup",()=>this.resize()),this.inputEl.addEventListener("keydown",n=>this.onKeydown(n)))}makeTextArea(e){var i,s;let t=document.createElement("textarea");return t.classList.add("Documentation-exampleCode","code"),t.spellcheck=!1,t.value=(i=e==null?void 0:e.textContent)!=null?i:"",(s=e==null?void 0:e.parentElement)==null||s.replaceChild(t,e),t}getAnchorHash(){var e;return(e=this.anchorEl)==null?void 0:e.hash}expand(){this.exampleEl.open=!0}resize(){var e;if((e=this.inputEl)==null?void 0:e.value){let t=(this.inputEl.value.match(/\n/g)||[]).length;this.inputEl.style.height=`${(20+t*20+12+2)/16}rem`}}onKeydown(e){e.key==="Tab"&&(document.execCommand("insertText",!1," "),e.preventDefault())}setInputText(e){this.inputEl&&(this.inputEl.value=e)}setOutputText(e){this.outputEl&&(this.outputEl.textContent=e)}setErrorText(e){this.errorEl&&(this.errorEl.textContent=e),this.setOutputText("An error has occurred\u2026")}handleShareButtonClick(){var t;let e="https://play.golang.org/p/";this.setOutputText("Waiting for remote server\u2026"),fetch("/play/share",{method:"POST",body:(t=this.inputEl)==null?void 0:t.value}).then(i=>i.text()).then(i=>{let s=e+i;this.setOutputText(`<a href="${s}">${s}</a>`),window.open(s)}).catch(i=>{this.setErrorText(i)})}handleFormatButtonClick(){var t,i;this.setOutputText("Waiting for remote server\u2026");let e=new FormData;e.append("body",(i=(t=this.inputEl)==null?void 0:t.value)!=null?i:""),fetch("/play/fmt",{method:"POST",body:e}).then(s=>s.json()).then(({Body:s,Error:r})=>{this.setOutputText(r||"Done."),s&&(this.setInputText(s),this.resize())}).catch(s=>{this.setErrorText(s)})}handleRunButtonClick(){var e;this.setOutputText("Waiting for remote server\u2026"),fetch("/play/compile",{method:"POST",body:JSON.stringify({body:(e=this.inputEl)==null?void 0:e.value,version:2})}).then(t=>t.json()).then(async({Events:t,Errors:i})=>{this.setOutputText(i||"");for(let s of t||[])this.setOutputText(s.Message),await new Promise(r=>setTimeout(r,s.Delay/1e6))}).catch(t=>{this.setErrorText(t)})}};function y(){let l=location.hash.match(/^#(example-.*)$/);if(l){let i=document.getElementById(l[1]);i&&(i.open=!0)}let e=[...document.querySelectorAll(d.PLAY_HREF)],t=i=>e.find(s=>s.hash===i.getAnchorHash());for(let i of document.querySelectorAll(d.PLAY_CONTAINER)){let s=new g(i),r=t(s);r?r.addEventListener("click",()=>{s.expand()}):console.warn("example href not found")}}var p=class{constructor(e){this.el=e;this.el.addEventListener("change",t=>{let i=t.target,s=i.value;i.value.startsWith("/")||(s="/"+s),window.location.href=s})}};function A(l){let e=document.createElement("label");e.classList.add("go-Label"),e.setAttribute("aria-label","Menu");let t=document.createElement("select");t.classList.add("go-Select","js-selectNav"),e.appendChild(t);let i=document.createElement("optgroup");i.label="Outline",t.appendChild(i);let s={},r;for(let n of l.treeitems){if(Number(n.depth)>4)continue;n.groupTreeitem?(r=s[n.groupTreeitem.label],r||(r=s[n.groupTreeitem.label]=document.createElement("optgroup"),r.label=n.groupTreeitem.label,t.appendChild(r))):r=i;let a=document.createElement("option");a.label=n.label,a.textContent=n.label,a.value=n.el.href.replace(window.location.origin,"").replace("/",""),r.appendChild(a)}return l.addObserver(n=>{var c;let a=n.el.hash,h=(c=t.querySelector(`[value$="${a}"]`))==null?void 0:c.value;h&&(t.value=h)},50),e}var f=class{constructor(e){this.el=e;this.handleResize=()=>{this.el.style.setProperty("--js-tree-height","100vh"),this.el.style.setProperty("--js-tree-height",this.el.clientHeight+"px")};this.treeitems=[],this.firstChars=[],this.firstTreeitem=null,this.lastTreeitem=null,this.observerCallbacks=[],this.init()}init(){this.handleResize(),window.addEventListener("resize",this.handleResize),this.findTreeItems(),this.updateVisibleTreeitems(),this.observeTargets(),this.firstTreeitem&&(this.firstTreeitem.el.tabIndex=0)}observeTargets(){this.addObserver(i=>{this.expandTreeitem(i),this.setSelected(i)});let e=new Map,t=new IntersectionObserver(i=>{for(let s of i)e.set(s.target.id,s.isIntersecting||s.intersectionRatio===1);for(let[s,r]of e)if(r){let n=this.treeitems.find(a=>{var h;return(h=a.el)==null?void 0:h.href.endsWith(`#${s}`)});if(n)for(let a of this.observerCallbacks)a(n);break}},{threshold:1,rootMargin:"-60px 0px 0px 0px"});for(let i of this.treeitems.map(s=>s.el.getAttribute("href")))if(i){let s=i.replace(window.location.origin,"").replace("/","").replace("#",""),r=document.getElementById(s);r&&t.observe(r)}}addObserver(e,t=200){this.observerCallbacks.push(M(e,t))}setFocusToNextItem(e){let t=null;for(let i=e.index+1;i<this.treeitems.length;i++){let s=this.treeitems[i];if(s.isVisible){t=s;break}}t&&this.setFocusToItem(t)}setFocusToPreviousItem(e){let t=null;for(let i=e.index-1;i>-1;i--){let s=this.treeitems[i];if(s.isVisible){t=s;break}}t&&this.setFocusToItem(t)}setFocusToParentItem(e){e.groupTreeitem&&this.setFocusToItem(e.groupTreeitem)}setFocusToFirstItem(){this.firstTreeitem&&this.setFocusToItem(this.firstTreeitem)}setFocusToLastItem(){this.lastTreeitem&&this.setFocusToItem(this.lastTreeitem)}setSelected(e){var t;for(let i of this.el.querySelectorAll('[aria-expanded="true"]'))i!==e.el&&(((t=i.nextElementSibling)==null?void 0:t.contains(e.el))||i.setAttribute("aria-expanded","false"));for(let i of this.el.querySelectorAll("[aria-selected]"))i!==e.el&&i.setAttribute("aria-selected","false");e.el.setAttribute("aria-selected","true"),this.updateVisibleTreeitems(),this.setFocusToItem(e,!1)}expandTreeitem(e){let t=e;for(;t;)t.isExpandable&&t.el.setAttribute("aria-expanded","true"),t=t.groupTreeitem;this.updateVisibleTreeitems()}expandAllSiblingItems(e){for(let t of this.treeitems)t.groupTreeitem===e.groupTreeitem&&t.isExpandable&&this.expandTreeitem(t)}collapseTreeitem(e){let t=null;e.isExpanded()?t=e:t=e.groupTreeitem,t&&(t.el.setAttribute("aria-expanded","false"),this.updateVisibleTreeitems(),this.setFocusToItem(t))}setFocusByFirstCharacter(e,t){let i,s;t=t.toLowerCase(),i=e.index+1,i===this.treeitems.length&&(i=0),s=this.getIndexFirstChars(i,t),s===-1&&(s=this.getIndexFirstChars(0,t)),s>-1&&this.setFocusToItem(this.treeitems[s])}findTreeItems(){let e=(t,i)=>{let s=i,r=t.firstElementChild;for(;r;)(r.tagName==="A"||r.tagName==="SPAN")&&(s=new L(r,this,i),this.treeitems.push(s),this.firstChars.push(s.label.substring(0,1).toLowerCase())),r.firstElementChild&&e(r,s),r=r.nextElementSibling};e(this.el,null),this.treeitems.map((t,i)=>t.index=i)}updateVisibleTreeitems(){this.firstTreeitem=this.treeitems[0];for(let e of this.treeitems){let t=e.groupTreeitem;for(e.isVisible=!0;t&&t.el!==this.el;)t.isExpanded()||(e.isVisible=!1),t=t.groupTreeitem;e.isVisible&&(this.lastTreeitem=e)}}setFocusToItem(e,t=!0){e.el.tabIndex=0,t&&e.el.focus();for(let i of this.treeitems)i!==e&&(i.el.tabIndex=-1)}getIndexFirstChars(e,t){for(let i=e;i<this.firstChars.length;i++)if(this.treeitems[i].isVisible&&t===this.firstChars[i])return i;return-1}},L=class{constructor(e,t,i){var n,a,h,c,v;e.tabIndex=-1,this.el=e,this.groupTreeitem=i,this.label=(a=(n=e.textContent)==null?void 0:n.trim())!=null?a:"",this.tree=t,this.depth=((i==null?void 0:i.depth)||0)+1,this.index=0;let s=e.parentElement;(s==null?void 0:s.tagName.toLowerCase())==="li"&&(s==null||s.setAttribute("role","none")),e.setAttribute("aria-level",this.depth+""),e.getAttribute("aria-label")&&(this.label=(c=(h=e==null?void 0:e.getAttribute("aria-label"))==null?void 0:h.trim())!=null?c:""),this.isExpandable=!1,this.isVisible=!1,this.isInGroup=!!i;let r=e.nextElementSibling;for(;r;){if(r.tagName.toLowerCase()=="ul"){let x=`${(v=i==null?void 0:i.label)!=null?v:""} nav group ${this.label}`.replace(/[\W_]+/g,"_");e.setAttribute("aria-owns",x),e.setAttribute("aria-expanded","false"),r.setAttribute("role","group"),r.setAttribute("id",x),this.isExpandable=!0;break}r=r.nextElementSibling}this.init()}init(){this.el.tabIndex=-1,this.el.getAttribute("role")||this.el.setAttribute("role","treeitem"),this.el.addEventListener("keydown",this.handleKeydown.bind(this)),this.el.addEventListener("click",this.handleClick.bind(this)),this.el.addEventListener("focus",this.handleFocus.bind(this)),this.el.addEventListener("blur",this.handleBlur.bind(this))}isExpanded(){return this.isExpandable?this.el.getAttribute("aria-expanded")==="true":!1}isSelected(){return this.el.getAttribute("aria-selected")==="true"}handleClick(e){e.target!==this.el&&e.target!==this.el.firstElementChild||(this.isExpandable&&(this.isExpanded()&&this.isSelected()?this.tree.collapseTreeitem(this):this.tree.expandTreeitem(this),e.stopPropagation()),this.tree.setSelected(this))}handleFocus(){var t;let e=this.el;this.isExpandable&&(e=(t=e.firstElementChild)!=null?t:e),e.classList.add("focus")}handleBlur(){var t;let e=this.el;this.isExpandable&&(e=(t=e.firstElementChild)!=null?t:e),e.classList.remove("focus")}handleKeydown(e){if(e.altKey||e.ctrlKey||e.metaKey)return;let t=!1;switch(e.key){case" ":case"Enter":this.isExpandable?(this.isExpanded()&&this.isSelected()?this.tree.collapseTreeitem(this):this.tree.expandTreeitem(this),t=!0):e.stopPropagation(),this.tree.setSelected(this);break;case"ArrowUp":this.tree.setFocusToPreviousItem(this),t=!0;break;case"ArrowDown":this.tree.setFocusToNextItem(this),t=!0;break;case"ArrowRight":this.isExpandable&&(this.isExpanded()?this.tree.setFocusToNextItem(this):this.tree.expandTreeitem(this)),t=!0;break;case"ArrowLeft":this.isExpandable&&this.isExpanded()?(this.tree.collapseTreeitem(this),t=!0):this.isInGroup&&(this.tree.setFocusToParentItem(this),t=!0);break;case"Home":this.tree.setFocusToFirstItem(),t=!0;break;case"End":this.tree.setFocusToLastItem(),t=!0;break;default:e.key.length===1&&e.key.match(/\S/)&&(e.key=="*"?this.tree.expandAllSiblingItems(this):this.tree.setFocusByFirstCharacter(this,e.key),t=!0);break}t&&(e.stopPropagation(),e.preventDefault())}};function M(l,e){let t;return(...i)=>{let s=()=>{t=null,l(...i)};t&&clearTimeout(t),t=setTimeout(s,e)}}var T=class{constructor(e,t){this.table=e;this.toggleAll=t;this.expandAllItems=()=>{this.toggles.map(e=>e.setAttribute("aria-expanded","true")),this.update()};this.collapseAllItems=()=>{this.toggles.map(e=>e.setAttribute("aria-expanded","false")),this.update()};this.update=()=>{this.updateVisibleItems(),setTimeout(()=>this.updateGlobalToggle())};this.rows=Array.from(e.querySelectorAll("[data-aria-controls]")),this.toggles=Array.from(this.table.querySelectorAll("[aria-expanded]")),this.setAttributes(),this.attachEventListeners(),this.update()}setAttributes(){for(let e of["data-aria-controls","data-aria-labelledby","data-id"])this.table.querySelectorAll(`[${e}]`).forEach(t=>{var i;t.setAttribute(e.replace("data-",""),(i=t.getAttribute(e))!=null?i:""),t.removeAttribute(e)})}attachEventListeners(){var e;this.rows.forEach(t=>{t.addEventListener("click",i=>{this.handleToggleClick(i)})}),(e=this.toggleAll)==null||e.addEventListener("click",()=>{this.expandAllItems()}),document.addEventListener("keydown",t=>{(t.ctrlKey||t.metaKey)&&t.key==="f"&&this.expandAllItems()})}handleToggleClick(e){let t=e.currentTarget;(t==null?void 0:t.hasAttribute("aria-expanded"))||(t=this.table.querySelector(`button[aria-controls="${t==null?void 0:t.getAttribute("aria-controls")}"]`));let i=(t==null?void 0:t.getAttribute("aria-expanded"))==="true";t==null||t.setAttribute("aria-expanded",i?"false":"true"),e.stopPropagation(),this.update()}updateVisibleItems(){this.rows.map(e=>{var s;let t=(e==null?void 0:e.getAttribute("aria-expanded"))==="true",i=(s=e==null?void 0:e.getAttribute("aria-controls"))==null?void 0:s.trimEnd().split(" ");i==null||i.map(r=>{let n=document.getElementById(`${r}`);t?(n==null||n.classList.add("visible"),n==null||n.classList.remove("hidden")):(n==null||n.classList.add("hidden"),n==null||n.classList.remove("visible"))})})}updateGlobalToggle(){if(!this.toggleAll)return;this.rows.some(t=>t.hasAttribute("aria-expanded"))&&(this.toggleAll.style.display="block"),this.toggles.some(t=>t.getAttribute("aria-expanded")==="false")?(this.toggleAll.innerText="Expand all",this.toggleAll.onclick=this.expandAllItems):(this.toggleAll.innerText="Collapse all",this.toggleAll.onclick=this.collapseAllItems)}};y();var I=document.querySelector(".js-expandableTable");if(I){let l=new T(I,document.querySelector(".js-expandAllDirectories"));window.location.search.includes("expand-directories")&&l.expandAllItems()}var C=document.querySelector(".js-tree");if(C){let l=new f(C),e=A(l),t=document.querySelector(".js-mainNavMobile");t&&t.firstElementChild&&(t==null||t.replaceChild(e,t.firstElementChild)),e.firstElementChild&&new p(e.firstElementChild)}var o=document.querySelector(".js-readme"),E=document.querySelector(".js-readmeContent"),S=document.querySelector(".js-readmeOutline"),m=document.querySelectorAll(".js-readmeExpand"),k=document.querySelector(".js-readmeCollapse"),b=document.querySelector(".DocNavMobile-select");o&&E&&S&&m.length&&k&&(o.clientHeight>320&&(o==null||o.classList.remove("UnitReadme--expanded"),o==null||o.classList.add("UnitReadme--toggle")),window.location.hash.includes("readme")&&u(),b==null||b.addEventListener("change",l=>{l.target.value.startsWith("readme-")&&u()}),m.forEach(l=>l.addEventListener("click",e=>{e.preventDefault(),u(),o.scrollIntoView()})),k.addEventListener("click",l=>{l.preventDefault(),o.classList.remove("UnitReadme--expanded"),m[1]&&m[1].scrollIntoView({block:"center"})}),E.addEventListener("keyup",()=>{u()}),E.addEventListener("click",()=>{u()}),S.addEventListener("click",()=>{u()}),document.addEventListener("keydown",l=>{(l.ctrlKey||l.metaKey)&&l.key==="f"&&u()}));function u(){history.replaceState(null,"",`${location.pathname}#section-readme`),o==null||o.classList.add("UnitReadme--expanded")}function w(){var t;if(!location.hash)return;let l=document.getElementById(location.hash.slice(1)),e=(t=l==null?void 0:l.parentElement)==null?void 0:t.parentElement;(e==null?void 0:e.nodeName)==="DETAILS"&&(e.open=!0)}w();window.addEventListener("hashchange",()=>w());document.querySelectorAll(".js-buildContextSelect").forEach(l=>{l.addEventListener("change",e=>{window.location.search=`?GOOS=${e.target.value}`})});
/*!
* @license
* Copyright 2020 The Go Authors. All rights reserved.
diff --git a/static/frontend/unit/main/main.js.map b/static/frontend/unit/main/main.js.map
index f966e10..6d16a90 100644
--- a/static/frontend/unit/main/main.js.map
+++ b/static/frontend/unit/main/main.js.map
@@ -1,7 +1,7 @@
{
"version": 3,
"sources": ["../../../shared/playground/playground.ts", "../../../shared/outline/select.ts", "../../../shared/outline/tree.ts", "../../../shared/table/table.ts", "main.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// This file implements the playground implementation of the documentation\n// page. The playground involves a \"play\" button that allows you to open up\n// a new link to play.golang.org using the example code.\n\n// The CSS is in static/frontend/unit/main/_doc.css\n\n/**\n * CSS classes used by PlaygroundExampleController\n */\nconst PlayExampleClassName = {\n PLAY_HREF: '.js-exampleHref',\n PLAY_CONTAINER: '.js-exampleContainer',\n EXAMPLE_INPUT: '.Documentation-exampleCode',\n EXAMPLE_OUTPUT: '.Documentation-exampleOutput',\n EXAMPLE_ERROR: '.Documentation-exampleError',\n PLAY_BUTTON: '.Documentation-examplePlayButton',\n SHARE_BUTTON: '.Documentation-exampleShareButton',\n FORMAT_BUTTON: '.Documentation-exampleFormatButton',\n RUN_BUTTON: '.Documentation-exampleRunButton',\n};\n\n/**\n * This controller enables playground examples to expand their dropdown or\n * generate shareable Go Playground URLs.\n */\nexport class PlaygroundExampleController {\n /**\n * The anchor tag used to identify the container with an example href.\n * There is only one in an example container div.\n */\n private readonly anchorEl: HTMLAnchorElement | null;\n\n /**\n * The error element\n */\n private readonly errorEl: Element | null;\n\n /**\n * Buttons that redirect to an example's playground, this element\n * only exists in executable examples.\n */\n private readonly playButtonEl: Element | null;\n private readonly shareButtonEl: Element | null;\n\n /**\n * Button that formats the code in an example's playground.\n */\n private readonly formatButtonEl: Element | null;\n\n /**\n * Button that runs the code in an example's playground, this element\n * only exists in executable examples.\n */\n private readonly runButtonEl: Element | null;\n\n /**\n * The executable code of an example.\n */\n private readonly inputEl: HTMLTextAreaElement | null;\n\n /**\n * The output of the given example code. This only exists if the\n * author of the package provides an output for this example.\n */\n private readonly outputEl: Element | null;\n\n /**\n * @param exampleEl The div that contains playground content for the given example.\n */\n constructor(private readonly exampleEl: HTMLDetailsElement) {\n this.exampleEl = exampleEl;\n this.anchorEl = exampleEl.querySelector('a');\n this.errorEl = exampleEl.querySelector(PlayExampleClassName.EXAMPLE_ERROR);\n this.playButtonEl = exampleEl.querySelector(PlayExampleClassName.PLAY_BUTTON);\n this.shareButtonEl = exampleEl.querySelector(PlayExampleClassName.SHARE_BUTTON);\n this.formatButtonEl = exampleEl.querySelector(PlayExampleClassName.FORMAT_BUTTON);\n this.runButtonEl = exampleEl.querySelector(PlayExampleClassName.RUN_BUTTON);\n this.inputEl = this.makeTextArea(exampleEl.querySelector(PlayExampleClassName.EXAMPLE_INPUT));\n this.outputEl = exampleEl.querySelector(PlayExampleClassName.EXAMPLE_OUTPUT);\n\n // This is legacy listener to be replaced the listener for shareButtonEl.\n this.playButtonEl?.addEventListener('click', () => this.handleShareButtonClick());\n this.shareButtonEl?.addEventListener('click', () => this.handleShareButtonClick());\n this.formatButtonEl?.addEventListener('click', () => this.handleFormatButtonClick());\n this.runButtonEl?.addEventListener('click', () => this.handleRunButtonClick());\n\n if (!this.inputEl) return;\n\n this.resize();\n this.inputEl.addEventListener('keyup', () => this.resize());\n this.inputEl.addEventListener('keydown', e => this.onKeydown(e));\n }\n\n /**\n * Replace the pre element with a textarea. The examples are initially rendered\n * as pre elements so they're fully visible when JS is disabled.\n */\n makeTextArea(el: Element | null): HTMLTextAreaElement {\n const t = document.createElement('textarea');\n t.classList.add('Documentation-exampleCode', 'code');\n t.spellcheck = false;\n t.value = el?.textContent ?? '';\n el?.parentElement?.replaceChild(t, el);\n return t;\n }\n\n /**\n * Retrieve the hash value of the anchor element.\n */\n getAnchorHash(): string | undefined {\n return this.anchorEl?.hash;\n }\n\n /**\n * Expands the current playground example.\n */\n expand(): void {\n this.exampleEl.open = true;\n }\n\n /**\n * Resizes the input element to accomodate the amount of text present.\n */\n private resize(): void {\n if (this.inputEl?.value) {\n const numLineBreaks = (this.inputEl.value.match(/\\n/g) || []).length;\n // min-height + lines x line-height + padding + border\n this.inputEl.style.height = `${(20 + numLineBreaks * 20 + 12 + 2) / 16}rem`;\n }\n }\n\n /**\n * Handler to override keyboard behavior in the playground's\n * textarea element.\n *\n * Tab key inserts tabs into the example playground instead of\n * switching to the next interactive element.\n * @param e input element keyboard event.\n */\n private onKeydown(e: KeyboardEvent) {\n if (e.key === 'Tab') {\n document.execCommand('insertText', false, '\\t');\n e.preventDefault();\n }\n }\n\n /**\n * Changes the text of the example's input box.\n */\n private setInputText(output: string) {\n if (this.inputEl) {\n this.inputEl.value = output;\n }\n }\n\n /**\n * Changes the text of the example's output box.\n */\n private setOutputText(output: string) {\n if (this.outputEl) {\n this.outputEl.textContent = output;\n }\n }\n\n /**\n * Sets the error message text and overwrites\n * output box to indicate a failed response.\n */\n private setErrorText(err: string) {\n if (this.errorEl) {\n this.errorEl.textContent = err;\n }\n this.setOutputText('An error has occurred\u2026');\n }\n\n /**\n * Opens a new window to play.golang.org using the\n * example snippet's code in the playground.\n */\n private handleShareButtonClick() {\n const PLAYGROUND_BASE_URL = 'https://play.golang.org/p/';\n\n this.setOutputText('Waiting for remote server\u2026');\n\n fetch('/play/share', {\n method: 'POST',\n body: this.inputEl?.value,\n })\n .then(res => res.text())\n .then(shareId => {\n const href = PLAYGROUND_BASE_URL + shareId;\n this.setOutputText(`<a href=\"${href}\">${href}</a>`);\n window.open(href);\n })\n .catch(err => {\n this.setErrorText(err);\n });\n }\n\n /**\n * Runs gofmt on the example snippet in the playground.\n */\n private handleFormatButtonClick() {\n this.setOutputText('Waiting for remote server\u2026');\n const body = new FormData();\n body.append('body', this.inputEl?.value ?? '');\n\n fetch('/play/fmt', {\n method: 'POST',\n body: body,\n })\n .then(res => res.json())\n .then(({ Body, Error }) => {\n this.setOutputText(Error || 'Done.');\n if (Body) {\n this.setInputText(Body);\n this.resize();\n }\n })\n .catch(err => {\n this.setErrorText(err);\n });\n }\n\n /**\n * Runs the code snippet in the example playground.\n */\n private handleRunButtonClick() {\n this.setOutputText('Waiting for remote server\u2026');\n\n fetch('/play/compile', {\n method: 'POST',\n body: JSON.stringify({ body: this.inputEl?.value, version: 2 }),\n })\n .then(res => res.json())\n .then(async ({ Events, Errors }) => {\n this.setOutputText(Errors || '');\n for (const e of Events || []) {\n this.setOutputText(e.Message);\n await new Promise(resolve => setTimeout(resolve, e.Delay / 1000000));\n }\n })\n .catch(err => {\n this.setErrorText(err);\n });\n }\n}\n\nexport function initPlaygrounds(): void {\n const exampleHashRegex = location.hash.match(/^#(example-.*)$/);\n if (exampleHashRegex) {\n const exampleHashEl = document.getElementById(exampleHashRegex[1]) as HTMLDetailsElement;\n if (exampleHashEl) {\n exampleHashEl.open = true;\n }\n }\n\n // We use a spread operator to convert a nodelist into an array of elements.\n const exampleHrefs = [\n ...document.querySelectorAll<HTMLAnchorElement>(PlayExampleClassName.PLAY_HREF),\n ];\n\n /**\n * Sometimes exampleHrefs and playContainers are in different order, so we\n * find an exampleHref from a common hash.\n * @param playContainer - playground container\n */\n const findExampleHash = (playContainer: PlaygroundExampleController) =>\n exampleHrefs.find(ex => {\n return ex.hash === playContainer.getAnchorHash();\n });\n\n for (const el of document.querySelectorAll(PlayExampleClassName.PLAY_CONTAINER)) {\n // There should be the same amount of hrefs referencing examples as example containers.\n const playContainer = new PlaygroundExampleController(el as HTMLDetailsElement);\n const exampleHref = findExampleHash(playContainer);\n if (exampleHref) {\n exampleHref.addEventListener('click', () => {\n playContainer.expand();\n });\n } else {\n console.warn('example href not found');\n }\n }\n}\n", "/**\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\nimport { TreeNavController } from './tree.js';\n\nexport class SelectNavController {\n constructor(private el: Element) {\n this.el.addEventListener('change', e => {\n const target = e.target as HTMLSelectElement;\n let href = target.value;\n if (!target.value.startsWith('/')) {\n href = '/' + href;\n }\n window.location.href = href;\n });\n }\n}\n\nexport function makeSelectNav(tree: TreeNavController): HTMLLabelElement {\n const label = document.createElement('label');\n label.classList.add('go-Label');\n label.setAttribute('aria-label', 'Menu');\n const select = document.createElement('select');\n select.classList.add('go-Select', 'js-selectNav');\n label.appendChild(select);\n const outline = document.createElement('optgroup');\n outline.label = 'Outline';\n select.appendChild(outline);\n const groupMap: Record<string, HTMLOptGroupElement> = {};\n let group: HTMLOptGroupElement;\n for (const t of tree.treeitems) {\n if (Number(t.depth) > 4) continue;\n if (t.groupTreeitem) {\n group = groupMap[t.groupTreeitem.label];\n if (!group) {\n group = groupMap[t.groupTreeitem.label] = document.createElement('optgroup');\n group.label = t.groupTreeitem.label;\n select.appendChild(group);\n }\n } else {\n group = outline;\n }\n const o = document.createElement('option');\n o.label = t.label;\n o.textContent = t.label;\n o.value = (t.el as HTMLAnchorElement).href.replace(window.location.origin, '').replace('/', '');\n group.appendChild(o);\n }\n tree.addObserver(t => {\n const hash = (t.el as HTMLAnchorElement).hash;\n const value = select.querySelector<HTMLOptionElement>(`[value$=\"${hash}\"]`)?.value;\n if (value) {\n select.value = value;\n }\n }, 50);\n return label;\n}\n", "/**\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 * TreeNavController is the navigation tree component of the documentation page.\n * It adds accessiblity attributes to a tree, observes the heading elements\n * focus the topmost link for headings visible on the page, and implements the\n * WAI-ARIA Treeview Design Pattern with full\n * [keyboard support](https://www.w3.org/TR/wai-aria-practices/examples/treeview/treeview-2/treeview-2a.html#kbd_label).\n */\nexport class TreeNavController {\n treeitems: TreeItem[];\n\n /**\n * firstChars is the first character of each treeitem in the same order\n * as this.treeitems. We use this array to set focus by character when\n * navigating the tree with a keyboard.\n */\n private firstChars: string[];\n private firstTreeitem: TreeItem | null;\n private lastTreeitem: TreeItem | null;\n private observerCallbacks: ((t: TreeItem) => void)[];\n\n constructor(private el: HTMLElement) {\n this.treeitems = [];\n this.firstChars = [];\n this.firstTreeitem = null;\n this.lastTreeitem = null;\n this.observerCallbacks = [];\n this.init();\n }\n\n private init(): void {\n this.handleResize();\n window.addEventListener('resize', this.handleResize);\n this.findTreeItems();\n this.updateVisibleTreeitems();\n this.observeTargets();\n if (this.firstTreeitem) {\n this.firstTreeitem.el.tabIndex = 0;\n }\n }\n\n private handleResize = (): void => {\n this.el.style.setProperty('--js-tree-height', '100vh');\n this.el.style.setProperty('--js-tree-height', this.el.clientHeight + 'px');\n };\n\n private observeTargets() {\n this.addObserver(treeitem => {\n this.expandTreeitem(treeitem);\n this.setSelected(treeitem);\n // TODO: Fix scroll issue in https://golang.org/issue/47450.\n // treeitem.el.scrollIntoView({ block: 'nearest' });\n });\n\n const targets = new Map<string, boolean>();\n const observer = new IntersectionObserver(\n entries => {\n for (const entry of entries) {\n targets.set(entry.target.id, entry.isIntersecting || entry.intersectionRatio === 1);\n }\n for (const [id, isIntersecting] of targets) {\n if (isIntersecting) {\n const active = this.treeitems.find(t =>\n (t.el as HTMLAnchorElement)?.href.endsWith(`#${id}`)\n );\n if (active) {\n for (const fn of this.observerCallbacks) {\n fn(active);\n }\n }\n break;\n }\n }\n },\n {\n threshold: 1.0,\n rootMargin: '-60px 0px 0px 0px',\n }\n );\n\n for (const href of this.treeitems.map(t => t.el.getAttribute('href'))) {\n if (href) {\n const id = href.replace(window.location.origin, '').replace('/', '').replace('#', '');\n const target = document.getElementById(id);\n if (target) {\n observer.observe(target);\n }\n }\n }\n }\n\n addObserver(fn: (t: TreeItem) => void, delay = 200): void {\n this.observerCallbacks.push(debounce(fn, delay));\n }\n\n setFocusToNextItem(currentItem: TreeItem): void {\n let nextItem = null;\n for (let i = currentItem.index + 1; i < this.treeitems.length; i++) {\n const ti = this.treeitems[i];\n if (ti.isVisible) {\n nextItem = ti;\n break;\n }\n }\n if (nextItem) {\n this.setFocusToItem(nextItem);\n }\n }\n\n setFocusToPreviousItem(currentItem: TreeItem): void {\n let prevItem = null;\n for (let i = currentItem.index - 1; i > -1; i--) {\n const ti = this.treeitems[i];\n if (ti.isVisible) {\n prevItem = ti;\n break;\n }\n }\n if (prevItem) {\n this.setFocusToItem(prevItem);\n }\n }\n\n setFocusToParentItem(currentItem: TreeItem): void {\n if (currentItem.groupTreeitem) {\n this.setFocusToItem(currentItem.groupTreeitem);\n }\n }\n\n setFocusToFirstItem(): void {\n this.firstTreeitem && this.setFocusToItem(this.firstTreeitem);\n }\n\n setFocusToLastItem(): void {\n this.lastTreeitem && this.setFocusToItem(this.lastTreeitem);\n }\n\n setSelected(currentItem: TreeItem): void {\n for (const l1 of this.el.querySelectorAll('[aria-expanded=\"true\"]')) {\n if (l1 === currentItem.el) continue;\n if (!l1.nextElementSibling?.contains(currentItem.el)) {\n l1.setAttribute('aria-expanded', 'false');\n }\n }\n for (const l1 of this.el.querySelectorAll('[aria-selected]')) {\n if (l1 !== currentItem.el) {\n l1.setAttribute('aria-selected', 'false');\n }\n }\n currentItem.el.setAttribute('aria-selected', 'true');\n this.updateVisibleTreeitems();\n this.setFocusToItem(currentItem, false);\n }\n\n expandTreeitem(treeitem: TreeItem): void {\n let currentItem: TreeItem | null = treeitem;\n while (currentItem) {\n if (currentItem.isExpandable) {\n currentItem.el.setAttribute('aria-expanded', 'true');\n }\n currentItem = currentItem.groupTreeitem;\n }\n this.updateVisibleTreeitems();\n }\n\n expandAllSiblingItems(currentItem: TreeItem): void {\n for (const ti of this.treeitems) {\n if (ti.groupTreeitem === currentItem.groupTreeitem && ti.isExpandable) {\n this.expandTreeitem(ti);\n }\n }\n }\n\n collapseTreeitem(currentItem: TreeItem): void {\n let groupTreeitem = null;\n\n if (currentItem.isExpanded()) {\n groupTreeitem = currentItem;\n } else {\n groupTreeitem = currentItem.groupTreeitem;\n }\n\n if (groupTreeitem) {\n groupTreeitem.el.setAttribute('aria-expanded', 'false');\n this.updateVisibleTreeitems();\n this.setFocusToItem(groupTreeitem);\n }\n }\n\n setFocusByFirstCharacter(currentItem: TreeItem, char: string): void {\n let start: number, index: number;\n char = char.toLowerCase();\n\n // Get start index for search based on position of currentItem\n start = currentItem.index + 1;\n if (start === this.treeitems.length) {\n start = 0;\n }\n\n // Check remaining slots in the menu\n index = this.getIndexFirstChars(start, char);\n\n // If not found in remaining slots, check from beginning\n if (index === -1) {\n index = this.getIndexFirstChars(0, char);\n }\n\n // If match was found...\n if (index > -1) {\n this.setFocusToItem(this.treeitems[index]);\n }\n }\n\n private findTreeItems() {\n const findItems = (el: HTMLElement, group: TreeItem | null) => {\n let ti = group;\n let curr = el.firstElementChild as HTMLElement;\n while (curr) {\n if (curr.tagName === 'A' || curr.tagName === 'SPAN') {\n ti = new TreeItem(curr, this, group);\n this.treeitems.push(ti);\n this.firstChars.push(ti.label.substring(0, 1).toLowerCase());\n }\n if (curr.firstElementChild) {\n findItems(curr, ti);\n }\n curr = curr.nextElementSibling as HTMLElement;\n }\n };\n findItems(this.el as HTMLElement, null);\n this.treeitems.map((ti, idx) => (ti.index = idx));\n }\n\n private updateVisibleTreeitems(): void {\n this.firstTreeitem = this.treeitems[0];\n\n for (const ti of this.treeitems) {\n let parent = ti.groupTreeitem;\n ti.isVisible = true;\n while (parent && parent.el !== this.el) {\n if (!parent.isExpanded()) {\n ti.isVisible = false;\n }\n parent = parent.groupTreeitem;\n }\n if (ti.isVisible) {\n this.lastTreeitem = ti;\n }\n }\n }\n\n private setFocusToItem(treeitem: TreeItem, focusEl = true) {\n treeitem.el.tabIndex = 0;\n if (focusEl) {\n treeitem.el.focus();\n }\n for (const ti of this.treeitems) {\n if (ti !== treeitem) {\n ti.el.tabIndex = -1;\n }\n }\n }\n\n private getIndexFirstChars(startIndex: number, char: string): number {\n for (let i = startIndex; i < this.firstChars.length; i++) {\n if (this.treeitems[i].isVisible && char === this.firstChars[i]) {\n return i;\n }\n }\n return -1;\n }\n}\n\nclass TreeItem {\n el: HTMLElement;\n groupTreeitem: TreeItem | null;\n label: string;\n isExpandable: boolean;\n isVisible: boolean;\n depth: number;\n index: number;\n\n private tree: TreeNavController;\n private isInGroup: boolean;\n\n constructor(el: HTMLElement, treeObj: TreeNavController, group: TreeItem | null) {\n el.tabIndex = -1;\n this.el = el;\n this.groupTreeitem = group;\n this.label = el.textContent?.trim() ?? '';\n this.tree = treeObj;\n this.depth = (group?.depth || 0) + 1;\n this.index = 0;\n\n const parent = el.parentElement;\n if (parent?.tagName.toLowerCase() === 'li') {\n parent?.setAttribute('role', 'none');\n }\n el.setAttribute('aria-level', this.depth + '');\n if (el.getAttribute('aria-label')) {\n this.label = el?.getAttribute('aria-label')?.trim() ?? '';\n }\n\n this.isExpandable = false;\n this.isVisible = false;\n this.isInGroup = !!group;\n\n let curr = el.nextElementSibling;\n while (curr) {\n if (curr.tagName.toLowerCase() == 'ul') {\n const groupId = `${group?.label ?? ''} nav group ${this.label}`.replace(/[\\W_]+/g, '_');\n el.setAttribute('aria-owns', groupId);\n el.setAttribute('aria-expanded', 'false');\n curr.setAttribute('role', 'group');\n curr.setAttribute('id', groupId);\n this.isExpandable = true;\n break;\n }\n\n curr = curr.nextElementSibling;\n }\n this.init();\n }\n\n private init() {\n this.el.tabIndex = -1;\n if (!this.el.getAttribute('role')) {\n this.el.setAttribute('role', 'treeitem');\n }\n this.el.addEventListener('keydown', this.handleKeydown.bind(this));\n this.el.addEventListener('click', this.handleClick.bind(this));\n this.el.addEventListener('focus', this.handleFocus.bind(this));\n this.el.addEventListener('blur', this.handleBlur.bind(this));\n }\n\n isExpanded() {\n if (this.isExpandable) {\n return this.el.getAttribute('aria-expanded') === 'true';\n }\n\n return false;\n }\n\n isSelected() {\n return this.el.getAttribute('aria-selected') === 'true';\n }\n\n private handleClick(event: MouseEvent) {\n // only process click events that directly happened on this treeitem\n if (event.target !== this.el && event.target !== this.el.firstElementChild) {\n return;\n }\n if (this.isExpandable) {\n if (this.isExpanded() && this.isSelected()) {\n this.tree.collapseTreeitem(this);\n } else {\n this.tree.expandTreeitem(this);\n }\n event.stopPropagation();\n }\n this.tree.setSelected(this);\n }\n\n private handleFocus() {\n let el = this.el;\n if (this.isExpandable) {\n el = (el.firstElementChild as HTMLElement) ?? el;\n }\n el.classList.add('focus');\n }\n\n private handleBlur() {\n let el = this.el;\n if (this.isExpandable) {\n el = (el.firstElementChild as HTMLElement) ?? el;\n }\n el.classList.remove('focus');\n }\n\n private handleKeydown(event: KeyboardEvent) {\n if (event.altKey || event.ctrlKey || event.metaKey) {\n return;\n }\n\n let captured = false;\n switch (event.key) {\n case ' ':\n case 'Enter':\n if (this.isExpandable) {\n if (this.isExpanded() && this.isSelected()) {\n this.tree.collapseTreeitem(this);\n } else {\n this.tree.expandTreeitem(this);\n }\n captured = true;\n } else {\n event.stopPropagation();\n }\n this.tree.setSelected(this);\n break;\n\n case 'ArrowUp':\n this.tree.setFocusToPreviousItem(this);\n captured = true;\n break;\n\n case 'ArrowDown':\n this.tree.setFocusToNextItem(this);\n captured = true;\n break;\n\n case 'ArrowRight':\n if (this.isExpandable) {\n if (this.isExpanded()) {\n this.tree.setFocusToNextItem(this);\n } else {\n this.tree.expandTreeitem(this);\n }\n }\n captured = true;\n break;\n\n case 'ArrowLeft':\n if (this.isExpandable && this.isExpanded()) {\n this.tree.collapseTreeitem(this);\n captured = true;\n } else {\n if (this.isInGroup) {\n this.tree.setFocusToParentItem(this);\n captured = true;\n }\n }\n break;\n\n case 'Home':\n this.tree.setFocusToFirstItem();\n captured = true;\n break;\n\n case 'End':\n this.tree.setFocusToLastItem();\n captured = true;\n break;\n\n default:\n if (event.key.length === 1 && event.key.match(/\\S/)) {\n if (event.key == '*') {\n this.tree.expandAllSiblingItems(this);\n } else {\n this.tree.setFocusByFirstCharacter(this, event.key);\n }\n captured = true;\n }\n break;\n }\n\n if (captured) {\n event.stopPropagation();\n event.preventDefault();\n }\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction debounce<T extends (...args: any[]) => any>(func: T, wait: number) {\n let timeout: ReturnType<typeof setTimeout> | null;\n return (...args: Parameters<T>) => {\n const later = () => {\n timeout = null;\n func(...args);\n };\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(later, wait);\n };\n}\n", "/*!\n * @license\n * Copyright 2020 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 * Controller for a table element with expandable rows. Adds event listeners to\n * a toggle within a table row that controls visiblity of additional related\n * rows in the table.\n *\n * @example\n * ```typescript\n * import {ExpandableRowsTableController} from '/static/js/table';\n *\n * const el = document .querySelector<HTMLTableElement>('.js-myTableElement')\n * new ExpandableRowsTableController(el));\n * ```\n */\nexport class ExpandableRowsTableController {\n private rows: HTMLTableRowElement[];\n private toggles: HTMLButtonElement[];\n\n /**\n * Create a table controller.\n * @param table - The table element to which the controller binds.\n */\n constructor(private table: HTMLTableElement, private toggleAll?: HTMLButtonElement | null) {\n this.rows = Array.from(table.querySelectorAll<HTMLTableRowElement>('[data-aria-controls]'));\n this.toggles = Array.from(this.table.querySelectorAll('[aria-expanded]'));\n this.setAttributes();\n this.attachEventListeners();\n this.update();\n }\n\n /**\n * setAttributes sets data-aria-* and data-id attributes to regular\n * html attributes as a workaround for limitations from safehtml.\n */\n private setAttributes() {\n for (const a of ['data-aria-controls', 'data-aria-labelledby', 'data-id']) {\n this.table.querySelectorAll(`[${a}]`).forEach(t => {\n t.setAttribute(a.replace('data-', ''), t.getAttribute(a) ?? '');\n t.removeAttribute(a);\n });\n }\n }\n\n private attachEventListeners() {\n this.rows.forEach(t => {\n t.addEventListener('click', e => {\n this.handleToggleClick(e);\n });\n });\n this.toggleAll?.addEventListener('click', () => {\n this.expandAllItems();\n });\n\n document.addEventListener('keydown', e => {\n if ((e.ctrlKey || e.metaKey) && e.key === 'f') {\n this.expandAllItems();\n }\n });\n }\n\n private handleToggleClick(e: MouseEvent) {\n let target = e.currentTarget as HTMLTableRowElement | null;\n if (!target?.hasAttribute('aria-expanded')) {\n target = this.table.querySelector(\n `button[aria-controls=\"${target?.getAttribute('aria-controls')}\"]`\n );\n }\n const isExpanded = target?.getAttribute('aria-expanded') === 'true';\n target?.setAttribute('aria-expanded', isExpanded ? 'false' : 'true');\n e.stopPropagation();\n this.update();\n }\n\n expandAllItems = (): void => {\n this.toggles.map(t => t.setAttribute('aria-expanded', 'true'));\n this.update();\n };\n\n private collapseAllItems = () => {\n this.toggles.map(t => t.setAttribute('aria-expanded', 'false'));\n this.update();\n };\n\n private update = () => {\n this.updateVisibleItems();\n setTimeout(() => this.updateGlobalToggle());\n };\n\n private updateVisibleItems() {\n this.rows.map(t => {\n const isExpanded = t?.getAttribute('aria-expanded') === 'true';\n const rowIds = t?.getAttribute('aria-controls')?.trimEnd().split(' ');\n rowIds?.map(id => {\n const target = document.getElementById(`${id}`);\n if (isExpanded) {\n target?.classList.add('visible');\n target?.classList.remove('hidden');\n } else {\n target?.classList.add('hidden');\n target?.classList.remove('visible');\n }\n });\n });\n }\n\n private updateGlobalToggle() {\n if (!this.toggleAll) return;\n if (this.rows.some(t => t.hasAttribute('aria-expanded'))) {\n this.toggleAll.style.display = 'block';\n }\n const someCollapsed = this.toggles.some(el => el.getAttribute('aria-expanded') === 'false');\n if (someCollapsed) {\n this.toggleAll.innerText = 'Expand all';\n this.toggleAll.onclick = this.expandAllItems;\n } else {\n this.toggleAll.innerText = 'Collapse all';\n this.toggleAll.onclick = this.collapseAllItems;\n }\n }\n}\n", "import { initPlaygrounds } from 'static/shared/playground/playground';\nimport { SelectNavController, makeSelectNav } from 'static/shared/outline/select';\nimport { TreeNavController } from 'static/shared/outline/tree';\nimport { ExpandableRowsTableController } from 'static/shared/table/table';\n\ninitPlaygrounds();\n\nconst directories = document.querySelector<HTMLTableElement>('.js-expandableTable');\nif (directories) {\n const table = new ExpandableRowsTableController(\n directories,\n document.querySelector<HTMLButtonElement>('.js-expandAllDirectories')\n );\n // Expand directories on page load with expand-directories query param.\n if (window.location.search.includes('expand-directories')) {\n table.expandAllItems();\n }\n}\n\nconst treeEl = document.querySelector<HTMLElement>('.js-tree');\nif (treeEl) {\n const treeCtrl = new TreeNavController(treeEl);\n const select = makeSelectNav(treeCtrl);\n const mobileNav = document.querySelector('.js-mainNavMobile');\n if (mobileNav && mobileNav.firstElementChild) {\n mobileNav?.replaceChild(select, mobileNav.firstElementChild);\n }\n if (select.firstElementChild) {\n new SelectNavController(select.firstElementChild);\n }\n}\n\n/**\n * Event handlers for expanding and collapsing the readme section.\n */\nconst readme = document.querySelector('.js-readme');\nconst readmeContent = document.querySelector('.js-readmeContent');\nconst readmeOutline = document.querySelector('.js-readmeOutline');\nconst readmeExpand = document.querySelectorAll('.js-readmeExpand');\nconst readmeCollapse = document.querySelector('.js-readmeCollapse');\nconst mobileNavSelect = document.querySelector<HTMLSelectElement>('.DocNavMobile-select');\nif (readme && readmeContent && readmeOutline && readmeExpand.length && readmeCollapse) {\n if (window.location.hash.includes('readme')) {\n expandReadme();\n }\n mobileNavSelect?.addEventListener('change', e => {\n if ((e.target as HTMLSelectElement).value.startsWith('readme-')) {\n expandReadme();\n }\n });\n readmeExpand.forEach(el =>\n el.addEventListener('click', e => {\n e.preventDefault();\n expandReadme();\n readme.scrollIntoView();\n })\n );\n readmeCollapse.addEventListener('click', e => {\n e.preventDefault();\n readme.classList.remove('UnitReadme--expanded');\n if (readmeExpand[1]) {\n readmeExpand[1].scrollIntoView({ block: 'center' });\n }\n });\n readmeContent.addEventListener('keyup', () => {\n expandReadme();\n });\n readmeContent.addEventListener('click', () => {\n expandReadme();\n });\n readmeOutline.addEventListener('click', () => {\n expandReadme();\n });\n document.addEventListener('keydown', e => {\n if ((e.ctrlKey || e.metaKey) && e.key === 'f') {\n expandReadme();\n }\n });\n}\n\n/**\n * expandReadme expands the readme and adds the section-readme hash to the\n * URL so it stays expanded when navigating back from an external link.\n */\nfunction expandReadme() {\n history.replaceState(null, '', `${location.pathname}#section-readme`);\n readme?.classList.add('UnitReadme--expanded');\n}\n\n/**\n * Expand details items that are focused. This will expand\n * deprecated symbols when they are navigated to from the index\n * or a direct link.\n */\nfunction openDeprecatedSymbol() {\n if (!location.hash) return;\n const heading = document.getElementById(location.hash.slice(1));\n const grandParent = heading?.parentElement?.parentElement as HTMLDetailsElement | null;\n if (grandParent?.nodeName === 'DETAILS') {\n grandParent.open = true;\n }\n}\nopenDeprecatedSymbol();\nwindow.addEventListener('hashchange', () => openDeprecatedSymbol());\n\n/**\n * Listen for changes in the build context dropdown.\n */\ndocument.querySelectorAll('.js-buildContextSelect').forEach(el => {\n el.addEventListener('change', e => {\n window.location.search = `?GOOS=${(e.target as HTMLSelectElement).value}`;\n });\n});\n"],
- "mappings": "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",
+ "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// This file implements the playground implementation of the documentation\n// page. The playground involves a \"play\" button that allows you to open up\n// a new link to play.golang.org using the example code.\n\n// The CSS is in static/frontend/unit/main/_doc.css\n\n/**\n * CSS classes used by PlaygroundExampleController\n */\nconst PlayExampleClassName = {\n PLAY_HREF: '.js-exampleHref',\n PLAY_CONTAINER: '.js-exampleContainer',\n EXAMPLE_INPUT: '.Documentation-exampleCode',\n EXAMPLE_OUTPUT: '.Documentation-exampleOutput',\n EXAMPLE_ERROR: '.Documentation-exampleError',\n PLAY_BUTTON: '.Documentation-examplePlayButton',\n SHARE_BUTTON: '.Documentation-exampleShareButton',\n FORMAT_BUTTON: '.Documentation-exampleFormatButton',\n RUN_BUTTON: '.Documentation-exampleRunButton',\n};\n\n/**\n * This controller enables playground examples to expand their dropdown or\n * generate shareable Go Playground URLs.\n */\nexport class PlaygroundExampleController {\n /**\n * The anchor tag used to identify the container with an example href.\n * There is only one in an example container div.\n */\n private readonly anchorEl: HTMLAnchorElement | null;\n\n /**\n * The error element\n */\n private readonly errorEl: Element | null;\n\n /**\n * Buttons that redirect to an example's playground, this element\n * only exists in executable examples.\n */\n private readonly playButtonEl: Element | null;\n private readonly shareButtonEl: Element | null;\n\n /**\n * Button that formats the code in an example's playground.\n */\n private readonly formatButtonEl: Element | null;\n\n /**\n * Button that runs the code in an example's playground, this element\n * only exists in executable examples.\n */\n private readonly runButtonEl: Element | null;\n\n /**\n * The executable code of an example.\n */\n private readonly inputEl: HTMLTextAreaElement | null;\n\n /**\n * The output of the given example code. This only exists if the\n * author of the package provides an output for this example.\n */\n private readonly outputEl: Element | null;\n\n /**\n * @param exampleEl The div that contains playground content for the given example.\n */\n constructor(private readonly exampleEl: HTMLDetailsElement) {\n this.exampleEl = exampleEl;\n this.anchorEl = exampleEl.querySelector('a');\n this.errorEl = exampleEl.querySelector(PlayExampleClassName.EXAMPLE_ERROR);\n this.playButtonEl = exampleEl.querySelector(PlayExampleClassName.PLAY_BUTTON);\n this.shareButtonEl = exampleEl.querySelector(PlayExampleClassName.SHARE_BUTTON);\n this.formatButtonEl = exampleEl.querySelector(PlayExampleClassName.FORMAT_BUTTON);\n this.runButtonEl = exampleEl.querySelector(PlayExampleClassName.RUN_BUTTON);\n this.inputEl = this.makeTextArea(exampleEl.querySelector(PlayExampleClassName.EXAMPLE_INPUT));\n this.outputEl = exampleEl.querySelector(PlayExampleClassName.EXAMPLE_OUTPUT);\n\n // This is legacy listener to be replaced the listener for shareButtonEl.\n this.playButtonEl?.addEventListener('click', () => this.handleShareButtonClick());\n this.shareButtonEl?.addEventListener('click', () => this.handleShareButtonClick());\n this.formatButtonEl?.addEventListener('click', () => this.handleFormatButtonClick());\n this.runButtonEl?.addEventListener('click', () => this.handleRunButtonClick());\n\n if (!this.inputEl) return;\n\n this.resize();\n this.inputEl.addEventListener('keyup', () => this.resize());\n this.inputEl.addEventListener('keydown', e => this.onKeydown(e));\n }\n\n /**\n * Replace the pre element with a textarea. The examples are initially rendered\n * as pre elements so they're fully visible when JS is disabled.\n */\n makeTextArea(el: Element | null): HTMLTextAreaElement {\n const t = document.createElement('textarea');\n t.classList.add('Documentation-exampleCode', 'code');\n t.spellcheck = false;\n t.value = el?.textContent ?? '';\n el?.parentElement?.replaceChild(t, el);\n return t;\n }\n\n /**\n * Retrieve the hash value of the anchor element.\n */\n getAnchorHash(): string | undefined {\n return this.anchorEl?.hash;\n }\n\n /**\n * Expands the current playground example.\n */\n expand(): void {\n this.exampleEl.open = true;\n }\n\n /**\n * Resizes the input element to accomodate the amount of text present.\n */\n private resize(): void {\n if (this.inputEl?.value) {\n const numLineBreaks = (this.inputEl.value.match(/\\n/g) || []).length;\n // min-height + lines x line-height + padding + border\n this.inputEl.style.height = `${(20 + numLineBreaks * 20 + 12 + 2) / 16}rem`;\n }\n }\n\n /**\n * Handler to override keyboard behavior in the playground's\n * textarea element.\n *\n * Tab key inserts tabs into the example playground instead of\n * switching to the next interactive element.\n * @param e input element keyboard event.\n */\n private onKeydown(e: KeyboardEvent) {\n if (e.key === 'Tab') {\n document.execCommand('insertText', false, '\\t');\n e.preventDefault();\n }\n }\n\n /**\n * Changes the text of the example's input box.\n */\n private setInputText(output: string) {\n if (this.inputEl) {\n this.inputEl.value = output;\n }\n }\n\n /**\n * Changes the text of the example's output box.\n */\n private setOutputText(output: string) {\n if (this.outputEl) {\n this.outputEl.textContent = output;\n }\n }\n\n /**\n * Sets the error message text and overwrites\n * output box to indicate a failed response.\n */\n private setErrorText(err: string) {\n if (this.errorEl) {\n this.errorEl.textContent = err;\n }\n this.setOutputText('An error has occurred\u2026');\n }\n\n /**\n * Opens a new window to play.golang.org using the\n * example snippet's code in the playground.\n */\n private handleShareButtonClick() {\n const PLAYGROUND_BASE_URL = 'https://play.golang.org/p/';\n\n this.setOutputText('Waiting for remote server\u2026');\n\n fetch('/play/share', {\n method: 'POST',\n body: this.inputEl?.value,\n })\n .then(res => res.text())\n .then(shareId => {\n const href = PLAYGROUND_BASE_URL + shareId;\n this.setOutputText(`<a href=\"${href}\">${href}</a>`);\n window.open(href);\n })\n .catch(err => {\n this.setErrorText(err);\n });\n }\n\n /**\n * Runs gofmt on the example snippet in the playground.\n */\n private handleFormatButtonClick() {\n this.setOutputText('Waiting for remote server\u2026');\n const body = new FormData();\n body.append('body', this.inputEl?.value ?? '');\n\n fetch('/play/fmt', {\n method: 'POST',\n body: body,\n })\n .then(res => res.json())\n .then(({ Body, Error }) => {\n this.setOutputText(Error || 'Done.');\n if (Body) {\n this.setInputText(Body);\n this.resize();\n }\n })\n .catch(err => {\n this.setErrorText(err);\n });\n }\n\n /**\n * Runs the code snippet in the example playground.\n */\n private handleRunButtonClick() {\n this.setOutputText('Waiting for remote server\u2026');\n\n fetch('/play/compile', {\n method: 'POST',\n body: JSON.stringify({ body: this.inputEl?.value, version: 2 }),\n })\n .then(res => res.json())\n .then(async ({ Events, Errors }) => {\n this.setOutputText(Errors || '');\n for (const e of Events || []) {\n this.setOutputText(e.Message);\n await new Promise(resolve => setTimeout(resolve, e.Delay / 1000000));\n }\n })\n .catch(err => {\n this.setErrorText(err);\n });\n }\n}\n\nexport function initPlaygrounds(): void {\n const exampleHashRegex = location.hash.match(/^#(example-.*)$/);\n if (exampleHashRegex) {\n const exampleHashEl = document.getElementById(exampleHashRegex[1]) as HTMLDetailsElement;\n if (exampleHashEl) {\n exampleHashEl.open = true;\n }\n }\n\n // We use a spread operator to convert a nodelist into an array of elements.\n const exampleHrefs = [\n ...document.querySelectorAll<HTMLAnchorElement>(PlayExampleClassName.PLAY_HREF),\n ];\n\n /**\n * Sometimes exampleHrefs and playContainers are in different order, so we\n * find an exampleHref from a common hash.\n * @param playContainer - playground container\n */\n const findExampleHash = (playContainer: PlaygroundExampleController) =>\n exampleHrefs.find(ex => {\n return ex.hash === playContainer.getAnchorHash();\n });\n\n for (const el of document.querySelectorAll(PlayExampleClassName.PLAY_CONTAINER)) {\n // There should be the same amount of hrefs referencing examples as example containers.\n const playContainer = new PlaygroundExampleController(el as HTMLDetailsElement);\n const exampleHref = findExampleHash(playContainer);\n if (exampleHref) {\n exampleHref.addEventListener('click', () => {\n playContainer.expand();\n });\n } else {\n console.warn('example href not found');\n }\n }\n}\n", "/**\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\nimport { TreeNavController } from './tree.js';\n\nexport class SelectNavController {\n constructor(private el: Element) {\n this.el.addEventListener('change', e => {\n const target = e.target as HTMLSelectElement;\n let href = target.value;\n if (!target.value.startsWith('/')) {\n href = '/' + href;\n }\n window.location.href = href;\n });\n }\n}\n\nexport function makeSelectNav(tree: TreeNavController): HTMLLabelElement {\n const label = document.createElement('label');\n label.classList.add('go-Label');\n label.setAttribute('aria-label', 'Menu');\n const select = document.createElement('select');\n select.classList.add('go-Select', 'js-selectNav');\n label.appendChild(select);\n const outline = document.createElement('optgroup');\n outline.label = 'Outline';\n select.appendChild(outline);\n const groupMap: Record<string, HTMLOptGroupElement> = {};\n let group: HTMLOptGroupElement;\n for (const t of tree.treeitems) {\n if (Number(t.depth) > 4) continue;\n if (t.groupTreeitem) {\n group = groupMap[t.groupTreeitem.label];\n if (!group) {\n group = groupMap[t.groupTreeitem.label] = document.createElement('optgroup');\n group.label = t.groupTreeitem.label;\n select.appendChild(group);\n }\n } else {\n group = outline;\n }\n const o = document.createElement('option');\n o.label = t.label;\n o.textContent = t.label;\n o.value = (t.el as HTMLAnchorElement).href.replace(window.location.origin, '').replace('/', '');\n group.appendChild(o);\n }\n tree.addObserver(t => {\n const hash = (t.el as HTMLAnchorElement).hash;\n const value = select.querySelector<HTMLOptionElement>(`[value$=\"${hash}\"]`)?.value;\n if (value) {\n select.value = value;\n }\n }, 50);\n return label;\n}\n", "/**\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 * TreeNavController is the navigation tree component of the documentation page.\n * It adds accessiblity attributes to a tree, observes the heading elements\n * focus the topmost link for headings visible on the page, and implements the\n * WAI-ARIA Treeview Design Pattern with full\n * [keyboard support](https://www.w3.org/TR/wai-aria-practices/examples/treeview/treeview-2/treeview-2a.html#kbd_label).\n */\nexport class TreeNavController {\n treeitems: TreeItem[];\n\n /**\n * firstChars is the first character of each treeitem in the same order\n * as this.treeitems. We use this array to set focus by character when\n * navigating the tree with a keyboard.\n */\n private firstChars: string[];\n private firstTreeitem: TreeItem | null;\n private lastTreeitem: TreeItem | null;\n private observerCallbacks: ((t: TreeItem) => void)[];\n\n constructor(private el: HTMLElement) {\n this.treeitems = [];\n this.firstChars = [];\n this.firstTreeitem = null;\n this.lastTreeitem = null;\n this.observerCallbacks = [];\n this.init();\n }\n\n private init(): void {\n this.handleResize();\n window.addEventListener('resize', this.handleResize);\n this.findTreeItems();\n this.updateVisibleTreeitems();\n this.observeTargets();\n if (this.firstTreeitem) {\n this.firstTreeitem.el.tabIndex = 0;\n }\n }\n\n private handleResize = (): void => {\n this.el.style.setProperty('--js-tree-height', '100vh');\n this.el.style.setProperty('--js-tree-height', this.el.clientHeight + 'px');\n };\n\n private observeTargets() {\n this.addObserver(treeitem => {\n this.expandTreeitem(treeitem);\n this.setSelected(treeitem);\n // TODO: Fix scroll issue in https://golang.org/issue/47450.\n // treeitem.el.scrollIntoView({ block: 'nearest' });\n });\n\n const targets = new Map<string, boolean>();\n const observer = new IntersectionObserver(\n entries => {\n for (const entry of entries) {\n targets.set(entry.target.id, entry.isIntersecting || entry.intersectionRatio === 1);\n }\n for (const [id, isIntersecting] of targets) {\n if (isIntersecting) {\n const active = this.treeitems.find(t =>\n (t.el as HTMLAnchorElement)?.href.endsWith(`#${id}`)\n );\n if (active) {\n for (const fn of this.observerCallbacks) {\n fn(active);\n }\n }\n break;\n }\n }\n },\n {\n threshold: 1.0,\n rootMargin: '-60px 0px 0px 0px',\n }\n );\n\n for (const href of this.treeitems.map(t => t.el.getAttribute('href'))) {\n if (href) {\n const id = href.replace(window.location.origin, '').replace('/', '').replace('#', '');\n const target = document.getElementById(id);\n if (target) {\n observer.observe(target);\n }\n }\n }\n }\n\n addObserver(fn: (t: TreeItem) => void, delay = 200): void {\n this.observerCallbacks.push(debounce(fn, delay));\n }\n\n setFocusToNextItem(currentItem: TreeItem): void {\n let nextItem = null;\n for (let i = currentItem.index + 1; i < this.treeitems.length; i++) {\n const ti = this.treeitems[i];\n if (ti.isVisible) {\n nextItem = ti;\n break;\n }\n }\n if (nextItem) {\n this.setFocusToItem(nextItem);\n }\n }\n\n setFocusToPreviousItem(currentItem: TreeItem): void {\n let prevItem = null;\n for (let i = currentItem.index - 1; i > -1; i--) {\n const ti = this.treeitems[i];\n if (ti.isVisible) {\n prevItem = ti;\n break;\n }\n }\n if (prevItem) {\n this.setFocusToItem(prevItem);\n }\n }\n\n setFocusToParentItem(currentItem: TreeItem): void {\n if (currentItem.groupTreeitem) {\n this.setFocusToItem(currentItem.groupTreeitem);\n }\n }\n\n setFocusToFirstItem(): void {\n this.firstTreeitem && this.setFocusToItem(this.firstTreeitem);\n }\n\n setFocusToLastItem(): void {\n this.lastTreeitem && this.setFocusToItem(this.lastTreeitem);\n }\n\n setSelected(currentItem: TreeItem): void {\n for (const l1 of this.el.querySelectorAll('[aria-expanded=\"true\"]')) {\n if (l1 === currentItem.el) continue;\n if (!l1.nextElementSibling?.contains(currentItem.el)) {\n l1.setAttribute('aria-expanded', 'false');\n }\n }\n for (const l1 of this.el.querySelectorAll('[aria-selected]')) {\n if (l1 !== currentItem.el) {\n l1.setAttribute('aria-selected', 'false');\n }\n }\n currentItem.el.setAttribute('aria-selected', 'true');\n this.updateVisibleTreeitems();\n this.setFocusToItem(currentItem, false);\n }\n\n expandTreeitem(treeitem: TreeItem): void {\n let currentItem: TreeItem | null = treeitem;\n while (currentItem) {\n if (currentItem.isExpandable) {\n currentItem.el.setAttribute('aria-expanded', 'true');\n }\n currentItem = currentItem.groupTreeitem;\n }\n this.updateVisibleTreeitems();\n }\n\n expandAllSiblingItems(currentItem: TreeItem): void {\n for (const ti of this.treeitems) {\n if (ti.groupTreeitem === currentItem.groupTreeitem && ti.isExpandable) {\n this.expandTreeitem(ti);\n }\n }\n }\n\n collapseTreeitem(currentItem: TreeItem): void {\n let groupTreeitem = null;\n\n if (currentItem.isExpanded()) {\n groupTreeitem = currentItem;\n } else {\n groupTreeitem = currentItem.groupTreeitem;\n }\n\n if (groupTreeitem) {\n groupTreeitem.el.setAttribute('aria-expanded', 'false');\n this.updateVisibleTreeitems();\n this.setFocusToItem(groupTreeitem);\n }\n }\n\n setFocusByFirstCharacter(currentItem: TreeItem, char: string): void {\n let start: number, index: number;\n char = char.toLowerCase();\n\n // Get start index for search based on position of currentItem\n start = currentItem.index + 1;\n if (start === this.treeitems.length) {\n start = 0;\n }\n\n // Check remaining slots in the menu\n index = this.getIndexFirstChars(start, char);\n\n // If not found in remaining slots, check from beginning\n if (index === -1) {\n index = this.getIndexFirstChars(0, char);\n }\n\n // If match was found...\n if (index > -1) {\n this.setFocusToItem(this.treeitems[index]);\n }\n }\n\n private findTreeItems() {\n const findItems = (el: HTMLElement, group: TreeItem | null) => {\n let ti = group;\n let curr = el.firstElementChild as HTMLElement;\n while (curr) {\n if (curr.tagName === 'A' || curr.tagName === 'SPAN') {\n ti = new TreeItem(curr, this, group);\n this.treeitems.push(ti);\n this.firstChars.push(ti.label.substring(0, 1).toLowerCase());\n }\n if (curr.firstElementChild) {\n findItems(curr, ti);\n }\n curr = curr.nextElementSibling as HTMLElement;\n }\n };\n findItems(this.el as HTMLElement, null);\n this.treeitems.map((ti, idx) => (ti.index = idx));\n }\n\n private updateVisibleTreeitems(): void {\n this.firstTreeitem = this.treeitems[0];\n\n for (const ti of this.treeitems) {\n let parent = ti.groupTreeitem;\n ti.isVisible = true;\n while (parent && parent.el !== this.el) {\n if (!parent.isExpanded()) {\n ti.isVisible = false;\n }\n parent = parent.groupTreeitem;\n }\n if (ti.isVisible) {\n this.lastTreeitem = ti;\n }\n }\n }\n\n private setFocusToItem(treeitem: TreeItem, focusEl = true) {\n treeitem.el.tabIndex = 0;\n if (focusEl) {\n treeitem.el.focus();\n }\n for (const ti of this.treeitems) {\n if (ti !== treeitem) {\n ti.el.tabIndex = -1;\n }\n }\n }\n\n private getIndexFirstChars(startIndex: number, char: string): number {\n for (let i = startIndex; i < this.firstChars.length; i++) {\n if (this.treeitems[i].isVisible && char === this.firstChars[i]) {\n return i;\n }\n }\n return -1;\n }\n}\n\nclass TreeItem {\n el: HTMLElement;\n groupTreeitem: TreeItem | null;\n label: string;\n isExpandable: boolean;\n isVisible: boolean;\n depth: number;\n index: number;\n\n private tree: TreeNavController;\n private isInGroup: boolean;\n\n constructor(el: HTMLElement, treeObj: TreeNavController, group: TreeItem | null) {\n el.tabIndex = -1;\n this.el = el;\n this.groupTreeitem = group;\n this.label = el.textContent?.trim() ?? '';\n this.tree = treeObj;\n this.depth = (group?.depth || 0) + 1;\n this.index = 0;\n\n const parent = el.parentElement;\n if (parent?.tagName.toLowerCase() === 'li') {\n parent?.setAttribute('role', 'none');\n }\n el.setAttribute('aria-level', this.depth + '');\n if (el.getAttribute('aria-label')) {\n this.label = el?.getAttribute('aria-label')?.trim() ?? '';\n }\n\n this.isExpandable = false;\n this.isVisible = false;\n this.isInGroup = !!group;\n\n let curr = el.nextElementSibling;\n while (curr) {\n if (curr.tagName.toLowerCase() == 'ul') {\n const groupId = `${group?.label ?? ''} nav group ${this.label}`.replace(/[\\W_]+/g, '_');\n el.setAttribute('aria-owns', groupId);\n el.setAttribute('aria-expanded', 'false');\n curr.setAttribute('role', 'group');\n curr.setAttribute('id', groupId);\n this.isExpandable = true;\n break;\n }\n\n curr = curr.nextElementSibling;\n }\n this.init();\n }\n\n private init() {\n this.el.tabIndex = -1;\n if (!this.el.getAttribute('role')) {\n this.el.setAttribute('role', 'treeitem');\n }\n this.el.addEventListener('keydown', this.handleKeydown.bind(this));\n this.el.addEventListener('click', this.handleClick.bind(this));\n this.el.addEventListener('focus', this.handleFocus.bind(this));\n this.el.addEventListener('blur', this.handleBlur.bind(this));\n }\n\n isExpanded() {\n if (this.isExpandable) {\n return this.el.getAttribute('aria-expanded') === 'true';\n }\n\n return false;\n }\n\n isSelected() {\n return this.el.getAttribute('aria-selected') === 'true';\n }\n\n private handleClick(event: MouseEvent) {\n // only process click events that directly happened on this treeitem\n if (event.target !== this.el && event.target !== this.el.firstElementChild) {\n return;\n }\n if (this.isExpandable) {\n if (this.isExpanded() && this.isSelected()) {\n this.tree.collapseTreeitem(this);\n } else {\n this.tree.expandTreeitem(this);\n }\n event.stopPropagation();\n }\n this.tree.setSelected(this);\n }\n\n private handleFocus() {\n let el = this.el;\n if (this.isExpandable) {\n el = (el.firstElementChild as HTMLElement) ?? el;\n }\n el.classList.add('focus');\n }\n\n private handleBlur() {\n let el = this.el;\n if (this.isExpandable) {\n el = (el.firstElementChild as HTMLElement) ?? el;\n }\n el.classList.remove('focus');\n }\n\n private handleKeydown(event: KeyboardEvent) {\n if (event.altKey || event.ctrlKey || event.metaKey) {\n return;\n }\n\n let captured = false;\n switch (event.key) {\n case ' ':\n case 'Enter':\n if (this.isExpandable) {\n if (this.isExpanded() && this.isSelected()) {\n this.tree.collapseTreeitem(this);\n } else {\n this.tree.expandTreeitem(this);\n }\n captured = true;\n } else {\n event.stopPropagation();\n }\n this.tree.setSelected(this);\n break;\n\n case 'ArrowUp':\n this.tree.setFocusToPreviousItem(this);\n captured = true;\n break;\n\n case 'ArrowDown':\n this.tree.setFocusToNextItem(this);\n captured = true;\n break;\n\n case 'ArrowRight':\n if (this.isExpandable) {\n if (this.isExpanded()) {\n this.tree.setFocusToNextItem(this);\n } else {\n this.tree.expandTreeitem(this);\n }\n }\n captured = true;\n break;\n\n case 'ArrowLeft':\n if (this.isExpandable && this.isExpanded()) {\n this.tree.collapseTreeitem(this);\n captured = true;\n } else {\n if (this.isInGroup) {\n this.tree.setFocusToParentItem(this);\n captured = true;\n }\n }\n break;\n\n case 'Home':\n this.tree.setFocusToFirstItem();\n captured = true;\n break;\n\n case 'End':\n this.tree.setFocusToLastItem();\n captured = true;\n break;\n\n default:\n if (event.key.length === 1 && event.key.match(/\\S/)) {\n if (event.key == '*') {\n this.tree.expandAllSiblingItems(this);\n } else {\n this.tree.setFocusByFirstCharacter(this, event.key);\n }\n captured = true;\n }\n break;\n }\n\n if (captured) {\n event.stopPropagation();\n event.preventDefault();\n }\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction debounce<T extends (...args: any[]) => any>(func: T, wait: number) {\n let timeout: ReturnType<typeof setTimeout> | null;\n return (...args: Parameters<T>) => {\n const later = () => {\n timeout = null;\n func(...args);\n };\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(later, wait);\n };\n}\n", "/*!\n * @license\n * Copyright 2020 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 * Controller for a table element with expandable rows. Adds event listeners to\n * a toggle within a table row that controls visiblity of additional related\n * rows in the table.\n *\n * @example\n * ```typescript\n * import {ExpandableRowsTableController} from '/static/js/table';\n *\n * const el = document .querySelector<HTMLTableElement>('.js-myTableElement')\n * new ExpandableRowsTableController(el));\n * ```\n */\nexport class ExpandableRowsTableController {\n private rows: HTMLTableRowElement[];\n private toggles: HTMLButtonElement[];\n\n /**\n * Create a table controller.\n * @param table - The table element to which the controller binds.\n */\n constructor(private table: HTMLTableElement, private toggleAll?: HTMLButtonElement | null) {\n this.rows = Array.from(table.querySelectorAll<HTMLTableRowElement>('[data-aria-controls]'));\n this.toggles = Array.from(this.table.querySelectorAll('[aria-expanded]'));\n this.setAttributes();\n this.attachEventListeners();\n this.update();\n }\n\n /**\n * setAttributes sets data-aria-* and data-id attributes to regular\n * html attributes as a workaround for limitations from safehtml.\n */\n private setAttributes() {\n for (const a of ['data-aria-controls', 'data-aria-labelledby', 'data-id']) {\n this.table.querySelectorAll(`[${a}]`).forEach(t => {\n t.setAttribute(a.replace('data-', ''), t.getAttribute(a) ?? '');\n t.removeAttribute(a);\n });\n }\n }\n\n private attachEventListeners() {\n this.rows.forEach(t => {\n t.addEventListener('click', e => {\n this.handleToggleClick(e);\n });\n });\n this.toggleAll?.addEventListener('click', () => {\n this.expandAllItems();\n });\n\n document.addEventListener('keydown', e => {\n if ((e.ctrlKey || e.metaKey) && e.key === 'f') {\n this.expandAllItems();\n }\n });\n }\n\n private handleToggleClick(e: MouseEvent) {\n let target = e.currentTarget as HTMLTableRowElement | null;\n if (!target?.hasAttribute('aria-expanded')) {\n target = this.table.querySelector(\n `button[aria-controls=\"${target?.getAttribute('aria-controls')}\"]`\n );\n }\n const isExpanded = target?.getAttribute('aria-expanded') === 'true';\n target?.setAttribute('aria-expanded', isExpanded ? 'false' : 'true');\n e.stopPropagation();\n this.update();\n }\n\n expandAllItems = (): void => {\n this.toggles.map(t => t.setAttribute('aria-expanded', 'true'));\n this.update();\n };\n\n private collapseAllItems = () => {\n this.toggles.map(t => t.setAttribute('aria-expanded', 'false'));\n this.update();\n };\n\n private update = () => {\n this.updateVisibleItems();\n setTimeout(() => this.updateGlobalToggle());\n };\n\n private updateVisibleItems() {\n this.rows.map(t => {\n const isExpanded = t?.getAttribute('aria-expanded') === 'true';\n const rowIds = t?.getAttribute('aria-controls')?.trimEnd().split(' ');\n rowIds?.map(id => {\n const target = document.getElementById(`${id}`);\n if (isExpanded) {\n target?.classList.add('visible');\n target?.classList.remove('hidden');\n } else {\n target?.classList.add('hidden');\n target?.classList.remove('visible');\n }\n });\n });\n }\n\n private updateGlobalToggle() {\n if (!this.toggleAll) return;\n if (this.rows.some(t => t.hasAttribute('aria-expanded'))) {\n this.toggleAll.style.display = 'block';\n }\n const someCollapsed = this.toggles.some(el => el.getAttribute('aria-expanded') === 'false');\n if (someCollapsed) {\n this.toggleAll.innerText = 'Expand all';\n this.toggleAll.onclick = this.expandAllItems;\n } else {\n this.toggleAll.innerText = 'Collapse all';\n this.toggleAll.onclick = this.collapseAllItems;\n }\n }\n}\n", "import { initPlaygrounds } from 'static/shared/playground/playground';\nimport { SelectNavController, makeSelectNav } from 'static/shared/outline/select';\nimport { TreeNavController } from 'static/shared/outline/tree';\nimport { ExpandableRowsTableController } from 'static/shared/table/table';\n\ninitPlaygrounds();\n\nconst directories = document.querySelector<HTMLTableElement>('.js-expandableTable');\nif (directories) {\n const table = new ExpandableRowsTableController(\n directories,\n document.querySelector<HTMLButtonElement>('.js-expandAllDirectories')\n );\n // Expand directories on page load with expand-directories query param.\n if (window.location.search.includes('expand-directories')) {\n table.expandAllItems();\n }\n}\n\nconst treeEl = document.querySelector<HTMLElement>('.js-tree');\nif (treeEl) {\n const treeCtrl = new TreeNavController(treeEl);\n const select = makeSelectNav(treeCtrl);\n const mobileNav = document.querySelector('.js-mainNavMobile');\n if (mobileNav && mobileNav.firstElementChild) {\n mobileNav?.replaceChild(select, mobileNav.firstElementChild);\n }\n if (select.firstElementChild) {\n new SelectNavController(select.firstElementChild);\n }\n}\n\n/**\n * Event handlers for expanding and collapsing the readme section.\n */\nconst readme = document.querySelector('.js-readme');\nconst readmeContent = document.querySelector('.js-readmeContent');\nconst readmeOutline = document.querySelector('.js-readmeOutline');\nconst readmeExpand = document.querySelectorAll('.js-readmeExpand');\nconst readmeCollapse = document.querySelector('.js-readmeCollapse');\nconst mobileNavSelect = document.querySelector<HTMLSelectElement>('.DocNavMobile-select');\nif (readme && readmeContent && readmeOutline && readmeExpand.length && readmeCollapse) {\n if (readme.clientHeight > 320) {\n readme?.classList.remove('UnitReadme--expanded');\n readme?.classList.add('UnitReadme--toggle');\n }\n if (window.location.hash.includes('readme')) {\n expandReadme();\n }\n mobileNavSelect?.addEventListener('change', e => {\n if ((e.target as HTMLSelectElement).value.startsWith('readme-')) {\n expandReadme();\n }\n });\n readmeExpand.forEach(el =>\n el.addEventListener('click', e => {\n e.preventDefault();\n expandReadme();\n readme.scrollIntoView();\n })\n );\n readmeCollapse.addEventListener('click', e => {\n e.preventDefault();\n readme.classList.remove('UnitReadme--expanded');\n if (readmeExpand[1]) {\n readmeExpand[1].scrollIntoView({ block: 'center' });\n }\n });\n readmeContent.addEventListener('keyup', () => {\n expandReadme();\n });\n readmeContent.addEventListener('click', () => {\n expandReadme();\n });\n readmeOutline.addEventListener('click', () => {\n expandReadme();\n });\n document.addEventListener('keydown', e => {\n if ((e.ctrlKey || e.metaKey) && e.key === 'f') {\n expandReadme();\n }\n });\n}\n\n/**\n * expandReadme expands the readme and adds the section-readme hash to the\n * URL so it stays expanded when navigating back from an external link.\n */\nfunction expandReadme() {\n history.replaceState(null, '', `${location.pathname}#section-readme`);\n readme?.classList.add('UnitReadme--expanded');\n}\n\n/**\n * Expand details items that are focused. This will expand\n * deprecated symbols when they are navigated to from the index\n * or a direct link.\n */\nfunction openDeprecatedSymbol() {\n if (!location.hash) return;\n const heading = document.getElementById(location.hash.slice(1));\n const grandParent = heading?.parentElement?.parentElement as HTMLDetailsElement | null;\n if (grandParent?.nodeName === 'DETAILS') {\n grandParent.open = true;\n }\n}\nopenDeprecatedSymbol();\nwindow.addEventListener('hashchange', () => openDeprecatedSymbol());\n\n/**\n * Listen for changes in the build context dropdown.\n */\ndocument.querySelectorAll('.js-buildContextSelect').forEach(el => {\n el.addEventListener('change', e => {\n window.location.search = `?GOOS=${(e.target as HTMLSelectElement).value}`;\n });\n});\n"],
+ "mappings": "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",
"names": []
}
diff --git a/static/frontend/unit/main/main.min.css b/static/frontend/unit/main/main.min.css
index ef7fe34..282845f 100644
--- a/static/frontend/unit/main/main.min.css
+++ b/static/frontend/unit/main/main.min.css
@@ -3,7 +3,7 @@
* Use of this source code is governed by a BSD-style
* license that can be found in the LICENSE file.
*/
-.UnitBuildContext-titleContext label,.UnitBuildContext-singleContext{color:var(--color-text-subtle);font-size:.875rem}.UnitBuildContext-singleContext{padding:.35rem 0}.UnitBuildContext-titleContext select{border-color:var(--color-border);color:var(--color-text-subtle);margin-left:.25rem;min-width:6rem}.UnitBuildContext-titleContext option{color:var(--color-text-subtle)}.UnitBuildContext-link{display:none}@media only screen and (min-width: 30rem){.UnitBuildContext-link{display:initial}}.UnitDoc .UnitBuildContext-titleContext{position:relative}.UnitDoc .UnitBuildContext-titleContext label,.UnitDoc .UnitBuildContext-singleContext{bottom:.875rem;position:absolute;right:0}.UnitDirectories{margin-bottom:2rem}.UnitDirectories h2 a.UnitDirectories-idLink,.UnitDirectories summary a{opacity:0}.UnitDirectories h2:hover a,.UnitDirectories summary:focus a{opacity:1}.UnitDirectories-title{border-bottom:var(--border);font-size:1.375rem;margin:.5rem 0 0;padding-bottom:1rem}.UnitDirectories-title img{margin:auto 1rem auto 0}.UnitDirectories-table{border-collapse:collapse;height:0;table-layout:auto;width:100%}.UnitDirectories-table--tree{margin-top:-2rem}.UnitDirectories-tableHeader{background-color:var(--color-background-accented)}.UnitDirectories-tableHeader--tree{visibility:hidden}.UnitDirectories td{border-bottom:var(--border);max-width:32rem;min-width:12rem;padding:.25rem 1rem;vertical-align:middle;word-break:break-word}.UnitDirectories th{padding:.5rem 1rem;text-align:left}.UnitDirectories tr.hidden{display:none}.UnitDirectories tr[aria-controls]{cursor:pointer}.UnitDirectories tr[aria-controls]:hover{background-color:var(--color-background-accented)}.UnitDirectories th.UnitDirectories-toggleHead{font-size:0;max-width:.625rem;padding:0;width:.625rem}.UnitDirectories td.UnitDirectories-toggleCell,th.UnitDirectories-toggleCell{background-color:var(--background);border:var(--white);max-width:.625rem;padding:0;width:.625rem}.UnitDirectories-toggleButton{font-size:1.25rem;left:-.75rem;margin:0 0 -1rem -.875rem;padding:0;position:absolute;vertical-align:top}.UnitDirectories-subSpacer{border-right:var(--border);display:inline;margin-right:.875rem;width:.0625rem}.UnitDirectories-toggleButton[aria-expanded=true] img{transform:rotate(90deg)}.UnitDirectories-pathCell{align-items:flex-start;display:flex;flex-direction:column;line-height:1.75rem;word-break:break-all}.UnitDirectories-pathCell>div{position:relative}.UnitDirectories-subdirectory{border-left:var(--border);display:flex;flex-direction:column;margin-left:.375rem;padding:.5rem 1rem}.UnitDirectories-mobileSynopsis{display:none;line-height:1.25rem;margin-top:.25rem;word-break:keep-all}@media only screen and (max-width: 52rem){.UnitDirectories-mobileSynopsis{display:initial}.UnitDirectories-table th.UnitDirectories-desktopSynopsis,.UnitDirectories-table td.UnitDirectories-desktopSynopsis{display:none}}.UnitDirectories-expandButton{position:relative}.UnitDirectories-expandButton button{background-color:transparent;border:none;bottom:1rem;color:var(--color-brand-primary);cursor:pointer;display:none;font-size:.875rem;position:absolute;right:0;text-decoration:none}.UnitDirectories-badge{border:.0625rem solid var(--color-text-subtle);border-radius:.125rem;font-size:.6875rem;font-weight:500;line-height:1rem;margin-left:.5rem;margin-top:.125rem;padding:0 .35rem;text-align:center}.UnitDoc{margin-bottom:2rem;word-break:break-word}.UnitDoc h2 a.UnitDoc-idLink,.UnitDoc summary a{opacity:0}.UnitDoc h2:hover a,.UnitDoc summary:focus a{opacity:1}.UnitDoc-title{border-bottom:var(--border);padding-bottom:1rem}.UnitDoc-title img{margin:auto 1rem auto 0}.UnitDoc-emptySection{background-color:var(--color-background-accented);color:var(--gray-2);height:12.25rem;margin-top:1.5rem;text-align:center}.UnitDoc-emptySection img{height:7.8125rem;width:auto}.UnitDoc-emptySection p{margin:1rem auto}.UnitDoc .Documentation h4{margin-top:1.5rem}.Documentation{display:block}.Documentation p{margin:1rem 0}.Documentation h2,.Documentation h3{margin-top:1.5rem}.Documentation a{text-decoration:none}.Documentation a:hover{text-decoration:underline}.Documentation h2 a,.Documentation h3 a,.Documentation h4 a.Documentation-idLink,.Documentation summary a{opacity:0}.Documentation a:focus{opacity:1}.Documentation h3 a.Documentation-source{opacity:1}.Documentation h2:hover a,.Documentation h3:hover a,.Documentation h4:hover a,.Documentation summary:hover a,.Documentation summary:focus a{opacity:1}.Documentation ul{line-height:1.5rem;list-style:none;padding-left:0}.Documentation ul ul{padding-left:2em}.Documentation pre+pre{margin-top:.625rem}.Documentation .Documentation-declarationLink+pre{border-radius:0 0 .3em .3em;border-top:var(--border);margin-top:0}.Documentation pre .comment{color:var(--color-code-comment)}.Documentation-toc,.Documentation-overview,.Documentation-index,.Documentation-examples{padding-bottom:0}.Documentation-empty{color:var(--color-text-subtle);margin-top:-.5rem}@media only screen and (min-width: 64rem){.Documentation-toc{margin-left:2rem;white-space:nowrap}.Documentation-toc-columns{columns:2}}.Documentation-toc:empty{display:none}.Documentation-tocItem{overflow:hidden;text-overflow:ellipsis}.Documentation-tocItem--constants,.Documentation-tocItem--funcsAndTypes,.Documentation-tocItem--functions,.Documentation-tocItem--types,.Documentation-tocItem--variables,.Documentation-tocItem--notes{display:none}.Documentation-overviewHeader,.Documentation-indexHeader,.Documentation-constantsHeader,.Documentation-variablesHeader,.Documentation-examplesHeader,.Documentation-filesHeader,.Documentation-functionHeader,.Documentation-typeHeader,.Documentation-typeMethodHeader,.Documentation-typeFuncHeader{margin-bottom:.5rem}.Documentation-function h4,.Documentation-type h4,.Documentation-typeFunc h4,.Documentation-typeMethod h4{align-items:baseline;display:flex;justify-content:space-between}.Documentation-sinceVersion{color:var(--color-text-subtle);font-size:.9375rem;font-weight:400}.Documentation-constants br:last-of-type,.Documentation-variables br:last-of-type{display:none}.Documentation-build{color:var(--color-text-subtle);padding-top:1.5rem;text-align:right}.Documentation-declaration pre{scroll-padding-top:calc(var(--js-sticky-header-height, 3.5rem) + 3.75rem)}@media only screen and (min-width: 64rem){.Documentation-declaration pre{scroll-padding-top:calc(var(--js-sticky-header-height, 3.5rem) + .75rem)}}.Documentation-declaration+.Documentation-declaration{margin-top:.625rem}.Documentation-declarationLink{background-color:var(--color-background-accented);border:var(--border);border-bottom:none;border-radius:.3em .3em 0 0;display:block;font-size:.75rem;line-height:.5rem;padding:.375rem;text-align:right}.Documentation-exampleButtonsContainer{align-items:center;display:flex;justify-content:flex-end;margin-top:.5rem}.Documentation-examplePlayButton{background-color:var(--white);border:.15rem solid var(--turq-med);color:var(--turq-med);cursor:pointer;flex-shrink:0;height:2.5rem;width:4.125rem}.Documentation-exampleRunButton,.Documentation-exampleShareButton,.Documentation-exampleFormatButton{border:.0625rem solid var(--turq-dark);border-radius:.25rem;cursor:pointer;height:2rem;margin-left:.5rem;padding:0 1rem}.Documentation-exampleRunButton{background-color:var(--turq-dark);color:var(--white)}.Documentation-exampleShareButton,.Documentation-exampleFormatButton{background-color:var(--white);color:var(--turq-dark)}.Documentation-exampleDetails{margin-top:1rem}.Documentation-exampleDetailsBody pre{border-radius:0 0 .3rem .3rem;margin-bottom:1rem;margin-top:-.25rem}.Documentation-exampleDetailsBody textarea{height:100%;outline:none;overflow-x:auto;resize:none;white-space:pre;width:100%}.Documentation-exampleDetailsBody .Documentation-exampleCode{border-bottom-left-radius:0;border-bottom-right-radius:0;margin:0}.Documentation-exampleDetailsBody .Documentation-exampleOutput{border-top-left-radius:0;border-top-right-radius:0;margin:0 0 .5rem}.Documentation-exampleDetailsHeader{color:var(--color-brand-primary);cursor:pointer;margin-bottom:2rem;outline:none;text-decoration:none}.Documentation-exampleOutputLabel{color:var(--color-text-subtle)}.Documentation-exampleError{color:var(--pink);margin-right:.4rem;padding-right:.5rem}.Documentation-function pre,.Documentation-typeFunc pre,.Documentation-typeMethod pre{white-space:pre-wrap;word-break:break-all;word-wrap:break-word}.Documentation-indexDeprecated{margin-left:.5rem}.Documentation-deprecatedBody{color:var(--color-text-subtle);font-size:.87rem;font-weight:400;margin-left:.25rem;margin-right:.5rem}.Documentation-deprecatedTag{background-color:var(--color-border);border-radius:.125rem;color:var(--color-text-inverted);font-size:.75rem;font-weight:400;line-height:1.375;padding:.125rem .25rem;text-transform:uppercase;vertical-align:middle}.Documentation-deprecatedTitle{align-items:center;display:flex;gap:.5rem}.Documentation-deprecatedDetails,.Documentation-deprecatedDetails a{color:var(--color-text-subtle)}.Documentation-deprecatedDetails[open]{color:var(--color-text)}.Documentation-deprecatedDetails[open] a{color:var(--color-brand-primary)}.Documentation-deprecatedDetails .Documentation-deprecatedBody:after{color:var(--color-brand-primary);content:"Show"}.Documentation-deprecatedDetails[open] .Documentation-deprecatedBody:after{color:var(--color-brand-primary);content:"Hide"}.Documentation-deprecatedDetails>summary{list-style:none;opacity:1}.Documentation-deprecatedDetails .Documentation-source{opacity:1}.Documentation-deprecatedItemBody{padding:1rem 1rem .5rem}.Documentation-deprecatedMessage{align-items:center;display:flex;gap:.5rem;margin-bottom:1rem}.UnitFiles{margin-bottom:2rem}.UnitFiles-titleLink{position:relative}.UnitFiles-titleLink a{bottom:1rem;font-size:.875rem;position:absolute;right:0}.UnitFiles-titleLink a:after{background-image:url(/static/shared/icon/launch_gm_grey_24dp.svg);background-repeat:no-repeat;background-size:.875rem 1.25rem;content:"";display:inline-block;height:1rem;left:.3125rem;position:relative;top:.125rem;width:1rem}.UnitFiles h2 a.UnitFiles-idLink,.UnitFiles summary a{opacity:0}.UnitFiles h2:hover a,.UnitFiles summary:focus a{opacity:1}.UnitFiles-title{border-bottom:var(--border);font-size:1.375rem;margin:.5rem 0 0;padding-bottom:1rem}.UnitFiles-title img{margin:auto 1rem auto 0}.UnitFiles-fileList{column-count:5;column-width:12.5rem;line-height:1.5rem;list-style:none;margin-top:1rem;padding-left:0;word-break:break-all}.UnitMeta{display:grid;gap:1rem 2rem;grid-template-columns:max-content auto;white-space:nowrap}.UnitMeta-details,.UnitMeta-links{display:flex;flex-flow:wrap;flex-direction:row;gap:1rem 2rem}.UnitMeta-repo{align-items:center;display:flex}.UnitMeta-repo a{overflow:hidden;text-overflow:ellipsis}@media (min-width: 50rem){.UnitMeta{grid-template-columns:max-content auto}.UnitMeta-details,.UnitMeta-links{flex-direction:row}}@media (min-width: 112rem){:root[data-layout=responsive] .UnitMeta{grid-template-columns:100%}:root[data-layout=responsive] .UnitMeta-details,:root[data-layout=responsive] .UnitMeta-links{flex-direction:column;white-space:nowrap}}.UnitMeta-detailsLearn{width:100%}@media (min-width: 50rem){.UnitMeta-detailsLearn{width:initial}}.UnitOutline-jumpTo{display:flex;margin-bottom:1rem}.UnitOutline-jumpTo button{align-items:center;background-color:var(--color-background);border:var(--border);border-radius:.25rem;color:var(--color-text-subtle);cursor:pointer;height:2rem;padding-left:1rem;text-align:left;width:100%}.UnitOutline-jumpTo button:hover:not([disabled]){border-color:var(--color-border)}.UnitOutline-jumpToInput:disabled{background-color:var(--gray-9)}.Overview-readmeContent details{display:block}.Overview-readmeContent summary{display:list-item}.Overview-readmeContent a{background-color:initial}.Overview-readmeContent a:active,.Overview-readmeContent a:hover{outline-width:0}.Overview-readmeContent strong{font-weight:inherit;font-weight:bolder}.Overview-readmeContent h3{font-size:2em;margin:.67em 0}.Overview-readmeContent img{border-style:none}.Overview-readmeContent code,.Overview-readmeContent kbd,.Overview-readmeContent pre{font-family:monospace,monospace;font-size:1em}.Overview-readmeContent hr{box-sizing:initial;height:0;overflow:visible}.Overview-readmeContent input{font:inherit;margin:0}.Overview-readmeContent input{overflow:visible}.Overview-readmeContent [type=checkbox]{box-sizing:border-box;padding:0}.Overview-readmeContent *{box-sizing:border-box}.Overview-readmeContent input{font-family:inherit;font-size:inherit;line-height:inherit}.Overview-readmeContent a{color:var(--color-brand-primary);text-decoration:none}.Overview-readmeContent a:hover{text-decoration:underline}.Overview-readmeContent strong{font-weight:600}.Overview-readmeContent hr{height:0;margin:.9375rem 0;overflow:hidden;background:transparent;border:0;border-bottom:var(--border)}.Overview-readmeContent hr:after,.Overview-readmeContent hr:before{display:table;content:""}.Overview-readmeContent hr:after{clear:both}.Overview-readmeContent table{border-spacing:0;border-collapse:collapse}.Overview-readmeContent td,.Overview-readmeContent th{padding:0}.Overview-readmeContent details summary{cursor:pointer}.Overview-readmeContent kbd{display:inline-block;padding:.1875rem .3125rem;font:.6875rem SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;line-height:.625rem;color:#444d56;vertical-align:middle;background-color:var(--color-background-accented);border:var(--border);border-radius:.1875rem;box-shadow:inset 0 -.0625rem 0 var(--border)}.Overview-readmeContent h3,.Overview-readmeContent h4,.Overview-readmeContent h5,.Overview-readmeContent h6,.Overview-readmeContent div[aria-level="7"],.Overview-readmeContent div[aria-level="8"]{margin-top:0;margin-bottom:0}.Overview-readmeContent h3{font-size:2rem}.Overview-readmeContent h3,.Overview-readmeContent h4{font-weight:600}.Overview-readmeContent h4{font-size:1.5rem}.Overview-readmeContent h5{font-size:1.25rem}.Overview-readmeContent h5,.Overview-readmeContent h6{font-weight:600}.Overview-readmeContent h6{font-size:1rem}.Overview-readmeContent div[aria-level="7"]{font-size:.875rem}.Overview-readmeContent div[aria-level="7"],.Overview-readmeContent div[aria-level="8"]{font-weight:600}.Overview-readmeContent div[aria-level="8"]{font-size:.75rem}.Overview-readmeContent p{margin-top:0;margin-bottom:.625rem}.Overview-readmeContent blockquote{margin:0}.Overview-readmeContent ol,.Overview-readmeContent ul{padding-left:0;margin-top:0;margin-bottom:0}.Overview-readmeContent ol ol,.Overview-readmeContent ul ol{list-style-type:lower-roman}.Overview-readmeContent ol ol ol,.Overview-readmeContent ol ul ol,.Overview-readmeContent ul ol ol,.Overview-readmeContent ul ul ol{list-style-type:lower-alpha}.Overview-readmeContent dd{margin-left:0}.Overview-readmeContent code,.Overview-readmeContent pre{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:.75rem}.Overview-readmeContent pre{margin-top:0;margin-bottom:0}.Overview-readmeContent input::-webkit-inner-spin-button,.Overview-readmeContent input::-webkit-outer-spin-button{margin:0;-webkit-appearance:none;appearance:none}.Overview-readmeContent :checked+.radio-label{position:relative;z-index:1;border-color:var(--color-brand-primary)}.Overview-readmeContent hr{border-bottom-color:var(--color-border)}.Overview-readmeContent kbd{display:inline-block;padding:.1875rem .3125rem;font:.6875rem SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;line-height:.625rem;color:#444d56;vertical-align:middle;background-color:var(--color-background-accented);border:var(--border);border-radius:.1875rem;box-shadow:inset 0 -.0625rem 0 var(--color-border)}.Overview-readmeContent a:not([href]){color:inherit;text-decoration:none}.Overview-readmeContent blockquote,.Overview-readmeContent details,.Overview-readmeContent dl,.Overview-readmeContent ol,.Overview-readmeContent p,.Overview-readmeContent pre,.Overview-readmeContent table,.Overview-readmeContent ul{margin-top:0;margin-bottom:1rem}.Overview-readmeContent hr{height:.25em;padding:0;margin:1.5rem 0;background-color:var(--color-border);border:0}.Overview-readmeContent blockquote{padding:0 1em;color:var(--color-text-subtle);border-left:.25em solid var(--color-border)}.Overview-readmeContent blockquote>:first-child{margin-top:0}.Overview-readmeContent blockquote>:last-child{margin-bottom:0}.Overview-readmeContent h3,.Overview-readmeContent h4,.Overview-readmeContent h5,.Overview-readmeContent h6,.Overview-readmeContent div[aria-level="7"],.Overview-readmeContent div[aria-level="8"]{margin-top:1.5rem;margin-bottom:1rem;font-weight:600;line-height:1.25}.Overview-readmeContent h3{font-size:2em}.Overview-readmeContent h3,.Overview-readmeContent h4{padding-bottom:.3em;border-bottom:var(--border)}.Overview-readmeContent h4{font-size:1.5em}.Overview-readmeContent h5{font-size:1.25em}.Overview-readmeContent h6{font-size:1em}.Overview-readmeContent div[aria-level="7"]{font-size:.875em}.Overview-readmeContent div[aria-level="8"]{font-size:.85em;color:var(--color-text-subtle)}.Overview-readmeContent ol,.Overview-readmeContent ul{padding-left:2em}.Overview-readmeContent ol ol,.Overview-readmeContent ol ul,.Overview-readmeContent ul ol,.Overview-readmeContent ul ul{margin-top:0;margin-bottom:0}.Overview-readmeContent li{word-wrap:break-all}.Overview-readmeContent li>p{margin-top:1rem}.Overview-readmeContent li+li{margin-top:.25em}.Overview-readmeContent dl{padding:0}.Overview-readmeContent dl dt{padding:0;margin-top:1rem;font-size:1em;font-style:italic;font-weight:600}.Overview-readmeContent dl dd{padding:0 1rem;margin-bottom:1rem}.Overview-readmeContent table{display:block;width:100%;overflow:auto}.Overview-readmeContent table th{font-weight:600}.Overview-readmeContent table td,.Overview-readmeContent table th{padding:.375rem .8125rem;border:var(--border)}.Overview-readmeContent table tr{background-color:var(--color-background);border-top:var(--border)}.Overview-readmeContent table tr:nth-child(2n){background-color:var(--color-background-accented)}.Overview-readmeContent img{max-width:100%;box-sizing:initial;background-color:var(--color-background)}.Overview-readmeContent img[align=right]{padding-left:1.25rem}.Overview-readmeContent img[align=left]{padding-right:1.25rem}.Overview-readmeContent code{padding:.2em .4em;margin:0;font-size:85%;background-color:var(--color-background-accented);border-radius:.1875rem}.Overview-readmeContent pre{word-wrap:normal}.Overview-readmeContent pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.Overview-readmeContent pre{padding:1rem;overflow:auto;font-size:85%;line-height:1.45;background-color:var(--color-background-accented);border-radius:.1875rem}.Overview-readmeContent pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:initial;border:0}.UnitReadme{margin-bottom:2rem}.UnitReadme ul,.UnitReadme ol{list-style:circle}.UnitReadme h2 a.UnitReadme-idLink,.UnitReadme summary a{opacity:0}.UnitReadme h2:hover a,.UnitReadme summary:focus a{opacity:1}.UnitReadme-title{border-bottom:var(--border);font-size:1.375rem;padding-bottom:1rem}.UnitReadme-title img{margin:auto 1rem auto 0}.UnitReadme-content{-webkit-mask-image:linear-gradient(to bottom,black 75%,transparent 100%);mask-image:linear-gradient(to bottom,black 75%,transparent 100%);max-height:20rem;overflow:hidden;position:relative}.UnitReadme-content ul{line-height:1.5rem}.UnitReadme-expandLink{background:none;border:none;color:var(--color-brand-primary);cursor:pointer;padding:0}.UnitReadme-collapseLink{background:none;border:none;color:var(--color-brand-primary);cursor:pointer;display:none;padding:0}.UnitReadme--expanded .UnitReadme-content{-webkit-mask-image:none;mask-image:none;max-height:initial;overflow:initial}.UnitReadme--expanded .UnitReadme-expandLink{display:none}.UnitReadme--expanded .UnitReadme-collapseLink{display:block}.Overview-readmeContent{overflow-wrap:break-word}.UnitDetails{column-gap:2rem;display:grid;grid-template-columns:minmax(0,auto);margin:auto;min-height:32rem}@media only screen and (min-width: 64rem){.UnitDetails{grid-template-columns:15.5rem minmax(30.5rem,43.125rem) minmax(10rem,15.5rem)}}@media only screen and (min-width: 80rem){.UnitDetails{grid-template-columns:15.5rem minmax(43.125rem,60rem) 15.5rem;justify-content:center}}.UnitDetails :target{scroll-margin-top:calc(var(--js-sticky-header-height, 3.5rem) * 2.15)}@media only screen and (min-width: 64rem){.UnitDetails :target{scroll-margin-top:calc(var(--js-sticky-header-height, 3.5rem) * 1.25)}}.UnitDetails :target:not(details,h2){background-color:var(--color-background-highlighted);padding:.25rem}.UnitDetails-meta{order:-1}@media only screen and (min-width: 64rem){.UnitDetails-meta{display:block;margin-top:2rem;order:initial}}.UnitDetails-contentEmpty{align-items:center;background-color:var(--color-background-accented);color:var(--color-text-subtle);display:flex;flex-direction:column;height:15rem;padding-top:1rem;text-align:center}.UnitDetails-contentEmpty img{height:7.8125rem;width:auto}
+.UnitBuildContext-titleContext label,.UnitBuildContext-singleContext{color:var(--color-text-subtle);font-size:.875rem}.UnitBuildContext-singleContext{padding:.35rem 0}.UnitBuildContext-titleContext select{border-color:var(--color-border);color:var(--color-text-subtle);margin-left:.25rem;min-width:6rem}.UnitBuildContext-titleContext option{color:var(--color-text-subtle)}.UnitBuildContext-link{display:none}@media only screen and (min-width: 30rem){.UnitBuildContext-link{display:initial}}.UnitDoc .UnitBuildContext-titleContext{position:relative}.UnitDoc .UnitBuildContext-titleContext label,.UnitDoc .UnitBuildContext-singleContext{bottom:.875rem;position:absolute;right:0}.UnitDirectories{margin-bottom:2rem}.UnitDirectories h2 a.UnitDirectories-idLink,.UnitDirectories summary a{opacity:0}.UnitDirectories h2:hover a,.UnitDirectories summary:focus a{opacity:1}.UnitDirectories-title{border-bottom:var(--border);font-size:1.375rem;margin:.5rem 0 0;padding-bottom:1rem}.UnitDirectories-title img{margin:auto 1rem auto 0}.UnitDirectories-table{border-collapse:collapse;height:0;table-layout:auto;width:100%}.UnitDirectories-table--tree{margin-top:-2rem}.UnitDirectories-tableHeader{background-color:var(--color-background-accented)}.UnitDirectories-tableHeader--tree{visibility:hidden}.UnitDirectories td{border-bottom:var(--border);max-width:32rem;min-width:12rem;padding:.25rem 1rem;vertical-align:middle;word-break:break-word}.UnitDirectories th{padding:.5rem 1rem;text-align:left}.UnitDirectories tr.hidden{display:none}.UnitDirectories tr[aria-controls]{cursor:pointer}.UnitDirectories tr[aria-controls]:hover{background-color:var(--color-background-accented)}.UnitDirectories th.UnitDirectories-toggleHead{font-size:0;max-width:.625rem;padding:0;width:.625rem}.UnitDirectories td.UnitDirectories-toggleCell,th.UnitDirectories-toggleCell{background-color:var(--background);border:var(--white);max-width:.625rem;padding:0;width:.625rem}.UnitDirectories-toggleButton{font-size:1.25rem;left:-.75rem;margin:0 0 -1rem -.875rem;padding:0;position:absolute;vertical-align:top}.UnitDirectories-subSpacer{border-right:var(--border);display:inline;margin-right:.875rem;width:.0625rem}.UnitDirectories-toggleButton[aria-expanded=true] img{transform:rotate(90deg)}.UnitDirectories-pathCell{align-items:flex-start;display:flex;flex-direction:column;line-height:1.75rem;word-break:break-all}.UnitDirectories-pathCell>div{position:relative}.UnitDirectories-subdirectory{border-left:var(--border);display:flex;flex-direction:column;margin-left:.375rem;padding:.5rem 1rem}.UnitDirectories-mobileSynopsis{display:none;line-height:1.25rem;margin-top:.25rem;word-break:keep-all}@media only screen and (max-width: 52rem){.UnitDirectories-mobileSynopsis{display:initial}.UnitDirectories-table th.UnitDirectories-desktopSynopsis,.UnitDirectories-table td.UnitDirectories-desktopSynopsis{display:none}}.UnitDirectories-expandButton{position:relative}.UnitDirectories-expandButton button{background-color:transparent;border:none;bottom:1rem;color:var(--color-brand-primary);cursor:pointer;display:none;font-size:.875rem;position:absolute;right:0;text-decoration:none}.UnitDirectories-badge{border:.0625rem solid var(--color-text-subtle);border-radius:.125rem;font-size:.6875rem;font-weight:500;line-height:1rem;margin-left:.5rem;margin-top:.125rem;padding:0 .35rem;text-align:center}.UnitDoc{margin-bottom:2rem;word-break:break-word}.UnitDoc h2 a.UnitDoc-idLink,.UnitDoc summary a{opacity:0}.UnitDoc h2:hover a,.UnitDoc summary:focus a{opacity:1}.UnitDoc-title{border-bottom:var(--border);padding-bottom:1rem}.UnitDoc-title img{margin:auto 1rem auto 0}.UnitDoc-emptySection{background-color:var(--color-background-accented);color:var(--gray-2);height:12.25rem;margin-top:1.5rem;text-align:center}.UnitDoc-emptySection img{height:7.8125rem;width:auto}.UnitDoc-emptySection p{margin:1rem auto}.UnitDoc .Documentation h4{margin-top:1.5rem}.Documentation{display:block}.Documentation p{margin:1rem 0}.Documentation h2,.Documentation h3{margin-top:1.5rem}.Documentation a{text-decoration:none}.Documentation a:hover{text-decoration:underline}.Documentation h2 a,.Documentation h3 a,.Documentation h4 a.Documentation-idLink,.Documentation summary a{opacity:0}.Documentation a:focus{opacity:1}.Documentation h3 a.Documentation-source{opacity:1}.Documentation h2:hover a,.Documentation h3:hover a,.Documentation h4:hover a,.Documentation summary:hover a,.Documentation summary:focus a{opacity:1}.Documentation ul{line-height:1.5rem;list-style:none;padding-left:0}.Documentation ul ul{padding-left:2em}.Documentation pre+pre{margin-top:.625rem}.Documentation .Documentation-declarationLink+pre{border-radius:0 0 .3em .3em;border-top:var(--border);margin-top:0}.Documentation pre .comment{color:var(--color-code-comment)}.Documentation-toc,.Documentation-overview,.Documentation-index,.Documentation-examples{padding-bottom:0}.Documentation-empty{color:var(--color-text-subtle);margin-top:-.5rem}@media only screen and (min-width: 64rem){.Documentation-toc{margin-left:2rem;white-space:nowrap}.Documentation-toc-columns{columns:2}}.Documentation-toc:empty{display:none}.Documentation-tocItem{overflow:hidden;text-overflow:ellipsis}.Documentation-tocItem--constants,.Documentation-tocItem--funcsAndTypes,.Documentation-tocItem--functions,.Documentation-tocItem--types,.Documentation-tocItem--variables,.Documentation-tocItem--notes{display:none}.Documentation-overviewHeader,.Documentation-indexHeader,.Documentation-constantsHeader,.Documentation-variablesHeader,.Documentation-examplesHeader,.Documentation-filesHeader,.Documentation-functionHeader,.Documentation-typeHeader,.Documentation-typeMethodHeader,.Documentation-typeFuncHeader{margin-bottom:.5rem}.Documentation-function h4,.Documentation-type h4,.Documentation-typeFunc h4,.Documentation-typeMethod h4{align-items:baseline;display:flex;justify-content:space-between}.Documentation-sinceVersion{color:var(--color-text-subtle);font-size:.9375rem;font-weight:400}.Documentation-constants br:last-of-type,.Documentation-variables br:last-of-type{display:none}.Documentation-build{color:var(--color-text-subtle);padding-top:1.5rem;text-align:right}.Documentation-declaration pre{scroll-padding-top:calc(var(--js-sticky-header-height, 3.5rem) + 3.75rem)}@media only screen and (min-width: 64rem){.Documentation-declaration pre{scroll-padding-top:calc(var(--js-sticky-header-height, 3.5rem) + .75rem)}}.Documentation-declaration+.Documentation-declaration{margin-top:.625rem}.Documentation-declarationLink{background-color:var(--color-background-accented);border:var(--border);border-bottom:none;border-radius:.3em .3em 0 0;display:block;font-size:.75rem;line-height:.5rem;padding:.375rem;text-align:right}.Documentation-exampleButtonsContainer{align-items:center;display:flex;justify-content:flex-end;margin-top:.5rem}.Documentation-examplePlayButton{background-color:var(--white);border:.15rem solid var(--turq-med);color:var(--turq-med);cursor:pointer;flex-shrink:0;height:2.5rem;width:4.125rem}.Documentation-exampleRunButton,.Documentation-exampleShareButton,.Documentation-exampleFormatButton{border:.0625rem solid var(--turq-dark);border-radius:.25rem;cursor:pointer;height:2rem;margin-left:.5rem;padding:0 1rem}.Documentation-exampleRunButton{background-color:var(--turq-dark);color:var(--white)}.Documentation-exampleShareButton,.Documentation-exampleFormatButton{background-color:var(--white);color:var(--turq-dark)}.Documentation-exampleDetails{margin-top:1rem}.Documentation-exampleDetailsBody pre{border-radius:0 0 .3rem .3rem;margin-bottom:1rem;margin-top:-.25rem}.Documentation-exampleDetailsBody textarea{height:100%;outline:none;overflow-x:auto;resize:none;white-space:pre;width:100%}.Documentation-exampleDetailsBody .Documentation-exampleCode{border-bottom-left-radius:0;border-bottom-right-radius:0;margin:0}.Documentation-exampleDetailsBody .Documentation-exampleOutput{border-top-left-radius:0;border-top-right-radius:0;margin:0 0 .5rem}.Documentation-exampleDetailsHeader{color:var(--color-brand-primary);cursor:pointer;margin-bottom:2rem;outline:none;text-decoration:none}.Documentation-exampleOutputLabel{color:var(--color-text-subtle)}.Documentation-exampleError{color:var(--pink);margin-right:.4rem;padding-right:.5rem}.Documentation-function pre,.Documentation-typeFunc pre,.Documentation-typeMethod pre{white-space:pre-wrap;word-break:break-all;word-wrap:break-word}.Documentation-indexDeprecated{margin-left:.5rem}.Documentation-deprecatedBody{color:var(--color-text-subtle);font-size:.87rem;font-weight:400;margin-left:.25rem;margin-right:.5rem}.Documentation-deprecatedTag{background-color:var(--color-border);border-radius:.125rem;color:var(--color-text-inverted);font-size:.75rem;font-weight:400;line-height:1.375;padding:.125rem .25rem;text-transform:uppercase;vertical-align:middle}.Documentation-deprecatedTitle{align-items:center;display:flex;gap:.5rem}.Documentation-deprecatedDetails,.Documentation-deprecatedDetails a{color:var(--color-text-subtle)}.Documentation-deprecatedDetails[open]{color:var(--color-text)}.Documentation-deprecatedDetails[open] a{color:var(--color-brand-primary)}.Documentation-deprecatedDetails .Documentation-deprecatedBody:after{color:var(--color-brand-primary);content:"Show"}.Documentation-deprecatedDetails[open] .Documentation-deprecatedBody:after{color:var(--color-brand-primary);content:"Hide"}.Documentation-deprecatedDetails>summary{list-style:none;opacity:1}.Documentation-deprecatedDetails .Documentation-source{opacity:1}.Documentation-deprecatedItemBody{padding:1rem 1rem .5rem}.Documentation-deprecatedMessage{align-items:center;display:flex;gap:.5rem;margin-bottom:1rem}.UnitFiles{margin-bottom:2rem}.UnitFiles-titleLink{position:relative}.UnitFiles-titleLink a{bottom:1rem;font-size:.875rem;position:absolute;right:0}.UnitFiles-titleLink a:after{background-image:url(/static/shared/icon/launch_gm_grey_24dp.svg);background-repeat:no-repeat;background-size:.875rem 1.25rem;content:"";display:inline-block;height:1rem;left:.3125rem;position:relative;top:.125rem;width:1rem}.UnitFiles h2 a.UnitFiles-idLink,.UnitFiles summary a{opacity:0}.UnitFiles h2:hover a,.UnitFiles summary:focus a{opacity:1}.UnitFiles-title{border-bottom:var(--border);font-size:1.375rem;margin:.5rem 0 0;padding-bottom:1rem}.UnitFiles-title img{margin:auto 1rem auto 0}.UnitFiles-fileList{column-count:5;column-width:12.5rem;line-height:1.5rem;list-style:none;margin-top:1rem;padding-left:0;word-break:break-all}.UnitMeta{display:grid;gap:1rem 2rem;grid-template-columns:max-content auto;white-space:nowrap}.UnitMeta-details,.UnitMeta-links{display:flex;flex-flow:wrap;flex-direction:row;gap:1rem 2rem}.UnitMeta-repo{align-items:center;display:flex}.UnitMeta-repo a{overflow:hidden;text-overflow:ellipsis}@media (min-width: 50rem){.UnitMeta{grid-template-columns:max-content auto}.UnitMeta-details,.UnitMeta-links{flex-direction:row}}@media (min-width: 112rem){:root[data-layout=responsive] .UnitMeta{grid-template-columns:100%}:root[data-layout=responsive] .UnitMeta-details,:root[data-layout=responsive] .UnitMeta-links{flex-direction:column;white-space:nowrap}}.UnitMeta-detailsLearn{width:100%}@media (min-width: 50rem){.UnitMeta-detailsLearn{width:initial}}.UnitOutline-jumpTo{display:flex;margin-bottom:1rem}.UnitOutline-jumpTo button{align-items:center;background-color:var(--color-background);border:var(--border);border-radius:.25rem;color:var(--color-text-subtle);cursor:pointer;height:2rem;padding-left:1rem;text-align:left;width:100%}.UnitOutline-jumpTo button:hover:not([disabled]){border-color:var(--color-border)}.UnitOutline-jumpToInput:disabled{background-color:var(--gray-9)}.Overview-readmeContent details{display:block}.Overview-readmeContent summary{display:list-item}.Overview-readmeContent a{background-color:initial}.Overview-readmeContent a:active,.Overview-readmeContent a:hover{outline-width:0}.Overview-readmeContent strong{font-weight:inherit;font-weight:bolder}.Overview-readmeContent h3{font-size:2em;margin:.67em 0}.Overview-readmeContent img{border-style:none}.Overview-readmeContent code,.Overview-readmeContent kbd,.Overview-readmeContent pre{font-family:monospace,monospace;font-size:1em}.Overview-readmeContent hr{box-sizing:initial;height:0;overflow:visible}.Overview-readmeContent input{font:inherit;margin:0}.Overview-readmeContent input{overflow:visible}.Overview-readmeContent [type=checkbox]{box-sizing:border-box;padding:0}.Overview-readmeContent *{box-sizing:border-box}.Overview-readmeContent input{font-family:inherit;font-size:inherit;line-height:inherit}.Overview-readmeContent a{color:var(--color-brand-primary);text-decoration:none}.Overview-readmeContent a:hover{text-decoration:underline}.Overview-readmeContent strong{font-weight:600}.Overview-readmeContent hr{height:0;margin:.9375rem 0;overflow:hidden;background:transparent;border:0;border-bottom:var(--border)}.Overview-readmeContent hr:after,.Overview-readmeContent hr:before{display:table;content:""}.Overview-readmeContent hr:after{clear:both}.Overview-readmeContent table{border-spacing:0;border-collapse:collapse}.Overview-readmeContent td,.Overview-readmeContent th{padding:0}.Overview-readmeContent details summary{cursor:pointer}.Overview-readmeContent kbd{display:inline-block;padding:.1875rem .3125rem;font:.6875rem SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;line-height:.625rem;color:#444d56;vertical-align:middle;background-color:var(--color-background-accented);border:var(--border);border-radius:.1875rem;box-shadow:inset 0 -.0625rem 0 var(--border)}.Overview-readmeContent h3,.Overview-readmeContent h4,.Overview-readmeContent h5,.Overview-readmeContent h6,.Overview-readmeContent div[aria-level="7"],.Overview-readmeContent div[aria-level="8"]{margin-top:0;margin-bottom:0}.Overview-readmeContent h3{font-size:2rem}.Overview-readmeContent h3,.Overview-readmeContent h4{font-weight:600}.Overview-readmeContent h4{font-size:1.5rem}.Overview-readmeContent h5{font-size:1.25rem}.Overview-readmeContent h5,.Overview-readmeContent h6{font-weight:600}.Overview-readmeContent h6{font-size:1rem}.Overview-readmeContent div[aria-level="7"]{font-size:.875rem}.Overview-readmeContent div[aria-level="7"],.Overview-readmeContent div[aria-level="8"]{font-weight:600}.Overview-readmeContent div[aria-level="8"]{font-size:.75rem}.Overview-readmeContent p{margin-top:0;margin-bottom:.625rem}.Overview-readmeContent blockquote{margin:0}.Overview-readmeContent ol,.Overview-readmeContent ul{padding-left:0;margin-top:0;margin-bottom:0}.Overview-readmeContent ol ol,.Overview-readmeContent ul ol{list-style-type:lower-roman}.Overview-readmeContent ol ol ol,.Overview-readmeContent ol ul ol,.Overview-readmeContent ul ol ol,.Overview-readmeContent ul ul ol{list-style-type:lower-alpha}.Overview-readmeContent dd{margin-left:0}.Overview-readmeContent code,.Overview-readmeContent pre{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:.75rem}.Overview-readmeContent pre{margin-top:0;margin-bottom:0}.Overview-readmeContent input::-webkit-inner-spin-button,.Overview-readmeContent input::-webkit-outer-spin-button{margin:0;-webkit-appearance:none;appearance:none}.Overview-readmeContent :checked+.radio-label{position:relative;z-index:1;border-color:var(--color-brand-primary)}.Overview-readmeContent hr{border-bottom-color:var(--color-border)}.Overview-readmeContent kbd{display:inline-block;padding:.1875rem .3125rem;font:.6875rem SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;line-height:.625rem;color:#444d56;vertical-align:middle;background-color:var(--color-background-accented);border:var(--border);border-radius:.1875rem;box-shadow:inset 0 -.0625rem 0 var(--color-border)}.Overview-readmeContent a:not([href]){color:inherit;text-decoration:none}.Overview-readmeContent blockquote,.Overview-readmeContent details,.Overview-readmeContent dl,.Overview-readmeContent ol,.Overview-readmeContent p,.Overview-readmeContent pre,.Overview-readmeContent table,.Overview-readmeContent ul{margin-top:0;margin-bottom:1rem}.Overview-readmeContent hr{height:.25em;padding:0;margin:1.5rem 0;background-color:var(--color-border);border:0}.Overview-readmeContent blockquote{padding:0 1em;color:var(--color-text-subtle);border-left:.25em solid var(--color-border)}.Overview-readmeContent blockquote>:first-child{margin-top:0}.Overview-readmeContent blockquote>:last-child{margin-bottom:0}.Overview-readmeContent h3,.Overview-readmeContent h4,.Overview-readmeContent h5,.Overview-readmeContent h6,.Overview-readmeContent div[aria-level="7"],.Overview-readmeContent div[aria-level="8"]{margin-top:1.5rem;margin-bottom:1rem;font-weight:600;line-height:1.25}.Overview-readmeContent h3{font-size:2em}.Overview-readmeContent h3,.Overview-readmeContent h4{padding-bottom:.3em;border-bottom:var(--border)}.Overview-readmeContent h4{font-size:1.5em}.Overview-readmeContent h5{font-size:1.25em}.Overview-readmeContent h6{font-size:1em}.Overview-readmeContent div[aria-level="7"]{font-size:.875em}.Overview-readmeContent div[aria-level="8"]{font-size:.85em;color:var(--color-text-subtle)}.Overview-readmeContent ol,.Overview-readmeContent ul{padding-left:2em}.Overview-readmeContent ol ol,.Overview-readmeContent ol ul,.Overview-readmeContent ul ol,.Overview-readmeContent ul ul{margin-top:0;margin-bottom:0}.Overview-readmeContent li{word-wrap:break-all}.Overview-readmeContent li>p{margin-top:1rem}.Overview-readmeContent li+li{margin-top:.25em}.Overview-readmeContent dl{padding:0}.Overview-readmeContent dl dt{padding:0;margin-top:1rem;font-size:1em;font-style:italic;font-weight:600}.Overview-readmeContent dl dd{padding:0 1rem;margin-bottom:1rem}.Overview-readmeContent table{display:block;width:100%;overflow:auto}.Overview-readmeContent table th{font-weight:600}.Overview-readmeContent table td,.Overview-readmeContent table th{padding:.375rem .8125rem;border:var(--border)}.Overview-readmeContent table tr{background-color:var(--color-background);border-top:var(--border)}.Overview-readmeContent table tr:nth-child(2n){background-color:var(--color-background-accented)}.Overview-readmeContent img{max-width:100%;box-sizing:initial;background-color:var(--color-background)}.Overview-readmeContent img[align=right]{padding-left:1.25rem}.Overview-readmeContent img[align=left]{padding-right:1.25rem}.Overview-readmeContent code{padding:.2em .4em;margin:0;font-size:85%;background-color:var(--color-background-accented);border-radius:.1875rem}.Overview-readmeContent pre{word-wrap:normal}.Overview-readmeContent pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.Overview-readmeContent pre{padding:1rem;overflow:auto;font-size:85%;line-height:1.45;background-color:var(--color-background-accented);border-radius:.1875rem}.Overview-readmeContent pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:initial;border:0}.UnitReadme{margin-bottom:2rem}.UnitReadme ul,.UnitReadme ol{list-style:circle}.UnitReadme h2 a.UnitReadme-idLink,.UnitReadme summary a{opacity:0}.UnitReadme h2:hover a,.UnitReadme summary:focus a{opacity:1}.UnitReadme-title{border-bottom:var(--border);font-size:1.375rem;padding-bottom:1rem}.UnitReadme-title img{margin:auto 1rem auto 0}.UnitReadme-content{-webkit-mask-image:linear-gradient(to bottom,black 75%,transparent 100%);mask-image:linear-gradient(to bottom,black 75%,transparent 100%);max-height:20rem;overflow:hidden;position:relative}.UnitReadme-content ul{line-height:1.5rem}.UnitReadme-expandLink{background:none;border:none;color:var(--color-brand-primary);cursor:pointer;padding:0}.UnitReadme-collapseLink{background:none;border:none;color:var(--color-brand-primary);cursor:pointer;display:none;padding:0}.UnitReadme--expanded .UnitReadme-content{-webkit-mask-image:none;mask-image:none;max-height:initial;overflow:initial}.UnitReadme--toggle .UnitReadme-expandLink{display:block}.UnitReadme--expanded .UnitReadme-expandLink{display:none}.UnitReadme--expanded.UnitReadme--toggle .UnitReadme-collapseLink{display:block}.Overview-readmeContent{overflow-wrap:break-word}.UnitDetails{column-gap:2rem;display:grid;grid-template-columns:minmax(0,auto);margin:auto;min-height:32rem}@media only screen and (min-width: 64rem){.UnitDetails{grid-template-columns:15.5rem minmax(30.5rem,43.125rem) minmax(10rem,15.5rem)}}@media only screen and (min-width: 80rem){.UnitDetails{grid-template-columns:15.5rem minmax(43.125rem,60rem) 15.5rem;justify-content:center}}.UnitDetails :target{scroll-margin-top:calc(var(--js-sticky-header-height, 3.5rem) * 2.15)}@media only screen and (min-width: 64rem){.UnitDetails :target{scroll-margin-top:calc(var(--js-sticky-header-height, 3.5rem) * 1.25)}}.UnitDetails :target:not(details,h2){background-color:var(--color-background-highlighted);padding:.25rem}.UnitDetails-meta{order:-1}@media only screen and (min-width: 64rem){.UnitDetails-meta{display:block;margin-top:2rem;order:initial}}.UnitDetails-contentEmpty{align-items:center;background-color:var(--color-background-accented);color:var(--color-text-subtle);display:flex;flex-direction:column;height:15rem;padding-top:1rem;text-align:center}.UnitDetails-contentEmpty img{height:7.8125rem;width:auto}
/*!
* Copyright 2020 The Go Authors. All rights reserved.
* Use of this source code is governed by a BSD-style
diff --git a/static/frontend/unit/main/main.min.css.map b/static/frontend/unit/main/main.min.css.map
index 4eb7141..cedd269 100644
--- a/static/frontend/unit/main/main.min.css.map
+++ b/static/frontend/unit/main/main.min.css.map
@@ -1,7 +1,7 @@
{
"version": 3,
"sources": ["_build-context.css", "_directories.css", "_doc.css", "_files.css", "_meta.css", "_outline.css", "_readme_gen.css", "_readme.css", "main.css"],
- "sourcesContent": ["/*!\n * Copyright 2020 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.UnitBuildContext-titleContext label,\n.UnitBuildContext-singleContext {\n color: var(--color-text-subtle);\n font-size: 0.875rem;\n}\n.UnitBuildContext-singleContext {\n padding: 0.35rem 0;\n}\n.UnitBuildContext-titleContext select {\n border-color: var(--color-border);\n color: var(--color-text-subtle);\n margin-left: 0.25rem;\n min-width: 6rem;\n}\n.UnitBuildContext-titleContext option {\n color: var(--color-text-subtle);\n}\n.UnitBuildContext-link {\n display: none;\n}\n@media only screen and (min-width: 30rem) {\n .UnitBuildContext-link {\n display: initial;\n }\n}\n\n.UnitDoc .UnitBuildContext-titleContext {\n position: relative;\n}\n.UnitDoc .UnitBuildContext-titleContext label,\n.UnitDoc .UnitBuildContext-singleContext {\n bottom: 0.875rem;\n position: absolute;\n right: 0;\n}\n", "/*!\n * Copyright 2020 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.UnitDirectories {\n margin-bottom: 2rem;\n}\n.UnitDirectories h2 a.UnitDirectories-idLink,\n.UnitDirectories summary a {\n opacity: 0;\n}\n.UnitDirectories h2:hover a,\n.UnitDirectories summary:focus a {\n opacity: 1;\n}\n.UnitDirectories-title {\n border-bottom: var(--border);\n font-size: 1.375rem;\n margin: 0.5rem 0 0 0;\n padding-bottom: 1rem;\n}\n.UnitDirectories-title img {\n margin: auto 1rem auto 0;\n}\n.UnitDirectories-table {\n border-collapse: collapse;\n height: 0;\n table-layout: auto;\n width: 100%;\n}\n.UnitDirectories-table--tree {\n margin-top: -2rem;\n}\n.UnitDirectories-tableHeader {\n background-color: var(--color-background-accented);\n}\n.UnitDirectories-tableHeader--tree {\n visibility: hidden;\n}\n.UnitDirectories td {\n border-bottom: var(--border);\n max-width: 32rem;\n min-width: 12rem;\n padding: 0.25rem 1rem;\n vertical-align: middle;\n word-break: break-word;\n}\n.UnitDirectories th {\n padding: 0.5rem 1rem;\n text-align: left;\n}\n.UnitDirectories tr.hidden {\n display: none;\n}\n.UnitDirectories tr[aria-controls] {\n cursor: pointer;\n}\n.UnitDirectories tr[aria-controls]:hover {\n background-color: var(--color-background-accented);\n}\n.UnitDirectories th.UnitDirectories-toggleHead {\n font-size: 0;\n max-width: 0.625rem;\n padding: 0;\n width: 0.625rem;\n}\n.UnitDirectories td.UnitDirectories-toggleCell,\nth.UnitDirectories-toggleCell {\n background-color: var(--background);\n border: var(--white);\n max-width: 0.625rem;\n padding: 0;\n width: 0.625rem;\n}\n.UnitDirectories-toggleButton {\n font-size: 1.25rem;\n left: -0.75rem;\n margin: 0 0 -1rem -0.875rem;\n padding: 0;\n position: absolute;\n vertical-align: top;\n}\n.UnitDirectories-subSpacer {\n border-right: var(--border);\n display: inline;\n margin-right: 0.875rem;\n width: 0.0625rem;\n}\n.UnitDirectories-toggleButton[aria-expanded='true'] img {\n transform: rotate(90deg);\n}\n.UnitDirectories-pathCell {\n align-items: flex-start;\n display: flex;\n flex-direction: column;\n line-height: 1.75rem;\n word-break: break-all;\n}\n.UnitDirectories-pathCell > div {\n position: relative;\n}\n.UnitDirectories-subdirectory {\n border-left: var(--border);\n display: flex;\n flex-direction: column;\n margin-left: 0.375rem;\n padding: 0.5rem 1rem;\n}\n.UnitDirectories-mobileSynopsis {\n display: none;\n line-height: 1.25rem;\n margin-top: 0.25rem;\n word-break: keep-all;\n}\n@media only screen and (max-width: 52rem) {\n .UnitDirectories-mobileSynopsis {\n display: initial;\n }\n .UnitDirectories-table th.UnitDirectories-desktopSynopsis,\n .UnitDirectories-table td.UnitDirectories-desktopSynopsis {\n display: none;\n }\n}\n.UnitDirectories-expandButton {\n position: relative;\n}\n.UnitDirectories-expandButton button {\n background-color: transparent;\n border: none;\n bottom: 1rem;\n color: var(--color-brand-primary);\n cursor: pointer;\n display: none;\n font-size: 0.875rem;\n position: absolute;\n right: 0;\n text-decoration: none;\n}\n.UnitDirectories-badge {\n border: 0.0625rem solid var(--color-text-subtle);\n border-radius: 0.125rem;\n font-size: 0.6875rem;\n font-weight: 500;\n line-height: 1rem;\n margin-left: 0.5rem;\n margin-top: 0.125rem;\n padding: 0 0.35rem;\n text-align: center;\n}\n", "/*!\n * Copyright 2020 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/* stylelint-disable no-descending-specificity */\n.UnitDoc {\n margin-bottom: 2rem;\n word-break: break-word;\n}\n.UnitDoc h2 a.UnitDoc-idLink,\n.UnitDoc summary a {\n opacity: 0;\n}\n.UnitDoc h2:hover a,\n.UnitDoc summary:focus a {\n opacity: 1;\n}\n.UnitDoc-title {\n border-bottom: var(--border);\n padding-bottom: 1rem;\n}\n.UnitDoc-title img {\n margin: auto 1rem auto 0;\n}\n.UnitDoc-emptySection {\n background-color: var(--color-background-accented);\n color: var(--gray-2);\n height: 12.25rem;\n margin-top: 1.5rem;\n text-align: center;\n}\n.UnitDoc-emptySection img {\n height: 7.8125rem;\n width: auto;\n}\n.UnitDoc-emptySection p {\n margin: 1rem auto;\n}\n.UnitDoc .Documentation h4 {\n margin-top: 1.5rem;\n}\n.Documentation {\n display: block;\n}\n.Documentation p {\n margin: 1rem 0;\n}\n.Documentation h2,\n.Documentation h3 {\n margin-top: 1.5rem;\n}\n.Documentation a {\n text-decoration: none;\n}\n.Documentation a:hover {\n text-decoration: underline;\n}\n.Documentation h2 a,\n.Documentation h3 a,\n.Documentation h4 a.Documentation-idLink,\n.Documentation summary a {\n opacity: 0;\n}\n.Documentation a:focus {\n opacity: 1;\n}\n.Documentation h3 a.Documentation-source {\n opacity: 1;\n}\n.Documentation h2:hover a,\n.Documentation h3:hover a,\n.Documentation h4:hover a,\n.Documentation summary:hover a,\n.Documentation summary:focus a {\n opacity: 1;\n}\n.Documentation ul {\n line-height: 1.5rem;\n list-style: none;\n padding-left: 0;\n}\n.Documentation ul ul {\n padding-left: 2em;\n}\n\n.Documentation pre + pre {\n margin-top: 0.625rem;\n}\n\n.Documentation .Documentation-declarationLink + pre {\n border-radius: 0 0 0.3em 0.3em;\n border-top: var(--border);\n margin-top: 0;\n}\n.Documentation pre .comment {\n color: var(--color-code-comment);\n}\n\n.Documentation-toc,\n.Documentation-overview,\n.Documentation-index,\n.Documentation-examples {\n padding-bottom: 0;\n}\n.Documentation-empty {\n color: var(--color-text-subtle);\n margin-top: -0.5rem;\n}\n@media only screen and (min-width: 64rem) {\n .Documentation-toc {\n margin-left: 2rem;\n white-space: nowrap;\n }\n .Documentation-toc-columns {\n columns: 2;\n }\n}\n.Documentation-toc:empty {\n display: none;\n}\n.Documentation-tocItem {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.Documentation-tocItem--constants,\n.Documentation-tocItem--funcsAndTypes,\n.Documentation-tocItem--functions,\n.Documentation-tocItem--types,\n.Documentation-tocItem--variables,\n.Documentation-tocItem--notes {\n display: none;\n}\n\n.Documentation-overviewHeader,\n.Documentation-indexHeader,\n.Documentation-constantsHeader,\n.Documentation-variablesHeader,\n.Documentation-examplesHeader,\n.Documentation-filesHeader,\n.Documentation-functionHeader,\n.Documentation-typeHeader,\n.Documentation-typeMethodHeader,\n.Documentation-typeFuncHeader {\n margin-bottom: 0.5rem;\n}\n\n.Documentation-function h4,\n.Documentation-type h4,\n.Documentation-typeFunc h4,\n.Documentation-typeMethod h4 {\n align-items: baseline;\n display: flex;\n justify-content: space-between;\n}\n.Documentation-sinceVersion {\n color: var(--color-text-subtle);\n font-size: 0.9375rem;\n font-weight: 400;\n}\n\n.Documentation-constants br:last-of-type,\n.Documentation-variables br:last-of-type {\n display: none;\n}\n\n.Documentation-build {\n color: var(--color-text-subtle);\n padding-top: 1.5rem;\n text-align: right;\n}\n.Documentation-declaration pre {\n scroll-padding-top: calc(var(--js-sticky-header-height, 3.5rem) + 3.75rem);\n}\n@media only screen and (min-width: 64rem) {\n .Documentation-declaration pre {\n scroll-padding-top: calc(var(--js-sticky-header-height, 3.5rem) + 0.75rem);\n }\n}\n.Documentation-declaration + .Documentation-declaration {\n margin-top: 0.625rem;\n}\n.Documentation-declarationLink {\n background-color: var(--color-background-accented);\n border: var(--border);\n border-bottom: none;\n border-radius: 0.3em 0.3em 0 0;\n display: block;\n font-size: 0.75rem;\n line-height: 0.5rem;\n padding: 0.375rem;\n text-align: right;\n}\n.Documentation-exampleButtonsContainer {\n align-items: center;\n display: flex;\n justify-content: flex-end;\n margin-top: 0.5rem;\n}\n.Documentation-examplePlayButton {\n background-color: var(--white);\n border: 0.15rem solid var(--turq-med);\n color: var(--turq-med);\n cursor: pointer;\n flex-shrink: 0;\n height: 2.5rem;\n width: 4.125rem;\n}\n.Documentation-exampleRunButton,\n.Documentation-exampleShareButton,\n.Documentation-exampleFormatButton {\n border: 0.0625rem solid var(--turq-dark);\n border-radius: 0.25rem;\n cursor: pointer;\n height: 2rem;\n margin-left: 0.5rem;\n padding: 0 1rem;\n}\n.Documentation-exampleRunButton {\n background-color: var(--turq-dark);\n color: var(--white);\n}\n.Documentation-exampleShareButton,\n.Documentation-exampleFormatButton {\n background-color: var(--white);\n color: var(--turq-dark);\n}\n.Documentation-exampleDetails {\n margin-top: 1rem;\n}\n.Documentation-exampleDetailsBody pre {\n border-radius: 0 0 0.3rem 0.3rem;\n margin-bottom: 1rem;\n margin-top: -0.25rem;\n}\n.Documentation-exampleDetailsBody textarea {\n height: 100%;\n outline: none;\n overflow-x: auto;\n resize: none;\n white-space: pre;\n width: 100%;\n}\n\n/**\n * We add another selector here to these two classes to increase CSS specificity,\n * the selector .Documentation pre + pre overrides .Documentation-exampleCode\n * and .Documentation-exampleOutput by itself and would replace the styles.\n */\n.Documentation-exampleDetailsBody .Documentation-exampleCode {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n margin: 0;\n}\n.Documentation-exampleDetailsBody .Documentation-exampleOutput {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n margin: 0 0 0.5rem;\n}\n.Documentation-exampleDetailsHeader {\n color: var(--color-brand-primary);\n cursor: pointer;\n margin-bottom: 2rem;\n outline: none;\n text-decoration: none;\n}\n.Documentation-exampleOutputLabel {\n color: var(--color-text-subtle);\n}\n.Documentation-exampleError {\n color: var(--pink);\n margin-right: 0.4rem;\n padding-right: 0.5rem;\n}\n\n/* See https://golang.org/issue/43368 for context. */\n.Documentation-function pre,\n.Documentation-typeFunc pre,\n.Documentation-typeMethod pre {\n white-space: pre-wrap;\n word-break: break-all;\n word-wrap: break-word;\n}\n\n.Documentation-indexDeprecated {\n margin-left: 0.5rem;\n}\n.Documentation-deprecatedBody {\n color: var(--color-text-subtle);\n font-size: 0.87rem;\n font-weight: 400;\n margin-left: 0.25rem;\n margin-right: 0.5rem;\n}\n.Documentation-deprecatedTag {\n background-color: var(--color-border);\n border-radius: 0.125rem;\n color: var(--color-text-inverted);\n font-size: 0.75rem;\n font-weight: normal;\n line-height: 1.375;\n padding: 0.125rem 0.25rem;\n text-transform: uppercase;\n vertical-align: middle;\n}\n.Documentation-deprecatedTitle {\n align-items: center;\n display: flex;\n gap: 0.5rem;\n}\n.Documentation-deprecatedDetails {\n color: var(--color-text-subtle);\n}\n.Documentation-deprecatedDetails a {\n color: var(--color-text-subtle);\n}\n.Documentation-deprecatedDetails[open] {\n color: var(--color-text);\n}\n.Documentation-deprecatedDetails[open] a {\n color: var(--color-brand-primary);\n}\n.Documentation-deprecatedDetails .Documentation-deprecatedBody::after {\n color: var(--color-brand-primary);\n content: 'Show';\n}\n.Documentation-deprecatedDetails[open] .Documentation-deprecatedBody::after {\n color: var(--color-brand-primary);\n content: 'Hide';\n}\n.Documentation-deprecatedDetails > summary {\n list-style: none;\n opacity: 1;\n}\n.Documentation-deprecatedDetails .Documentation-source {\n opacity: 1;\n}\n.Documentation-deprecatedItemBody {\n padding: 1rem 1rem 0.5rem 1rem;\n}\n.Documentation-deprecatedMessage {\n align-items: center;\n display: flex;\n gap: 0.5rem;\n margin-bottom: 1rem;\n}\n", "/*!\n * Copyright 2020 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.UnitFiles {\n margin-bottom: 2rem;\n}\n.UnitFiles-titleLink {\n position: relative;\n}\n.UnitFiles-titleLink a {\n bottom: 1rem;\n font-size: 0.875rem;\n position: absolute;\n right: 0;\n}\n.UnitFiles-titleLink a::after {\n background-image: url(/static/shared/icon/launch_gm_grey_24dp.svg);\n background-repeat: no-repeat;\n background-size: 0.875rem 1.25rem;\n content: '';\n display: inline-block;\n height: 1rem;\n left: 0.3125rem;\n position: relative;\n top: 0.125rem;\n width: 1rem;\n}\n.UnitFiles h2 a.UnitFiles-idLink,\n.UnitFiles summary a {\n opacity: 0;\n}\n.UnitFiles h2:hover a,\n.UnitFiles summary:focus a {\n opacity: 1;\n}\n.UnitFiles-title {\n border-bottom: var(--border);\n font-size: 1.375rem;\n margin: 0.5rem 0 0 0;\n padding-bottom: 1rem;\n}\n.UnitFiles-title img {\n margin: auto 1rem auto 0;\n}\n.UnitFiles-fileList {\n column-count: 5;\n column-width: 12.5rem;\n line-height: 1.5rem;\n list-style: none;\n margin-top: 1rem;\n padding-left: 0;\n word-break: break-all;\n}\n", "/*!\n* Copyright 2019-2020 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.UnitMeta {\n display: grid;\n gap: 1rem 2rem;\n grid-template-columns: max-content auto;\n white-space: nowrap;\n}\n.UnitMeta-details,\n.UnitMeta-links {\n display: flex;\n flex-flow: wrap;\n flex-direction: row;\n gap: 1rem 2rem;\n}\n.UnitMeta-repo {\n align-items: center;\n display: flex;\n}\n.UnitMeta-repo a {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n@media (min-width: 50rem) {\n .UnitMeta {\n grid-template-columns: max-content auto;\n }\n .UnitMeta-details,\n .UnitMeta-links {\n flex-direction: row;\n }\n}\n@media (min-width: 112rem) {\n :root[data-layout='responsive'] .UnitMeta {\n grid-template-columns: 100%;\n }\n :root[data-layout='responsive'] .UnitMeta-details,\n :root[data-layout='responsive'] .UnitMeta-links {\n flex-direction: column;\n white-space: nowrap;\n }\n}\n.UnitMeta-detailsLearn {\n width: 100%;\n}\n@media (min-width: 50rem) {\n .UnitMeta-detailsLearn {\n width: initial;\n }\n}\n", "/*!\n * Copyright 2020 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.UnitOutline-jumpTo {\n display: flex;\n margin-bottom: 1rem;\n}\n.UnitOutline-jumpTo button {\n align-items: center;\n background-color: var(--color-background);\n border: var(--border);\n border-radius: 0.25rem;\n color: var(--color-text-subtle);\n cursor: pointer;\n height: 2rem;\n padding-left: 1rem;\n text-align: left;\n width: 100%;\n}\n.UnitOutline-jumpTo button:hover:not([disabled]) {\n border-color: var(--color-border);\n}\n.UnitOutline-jumpToInput:disabled {\n background-color: var(--gray-9);\n}\n", "/*!\n* Copyright 2019-2020 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/*\n/* The CSS classes below are generated using devtools/cmd/css/main.go\n/* If the generated CSS already exists, the file is overwritten\n/*\n/* ---------- */\n\n.Overview-readmeContent details {\n display: block;\n}\n.Overview-readmeContent summary {\n display: list-item;\n}\n.Overview-readmeContent a {\n background-color: initial;\n}\n.Overview-readmeContent a:active,\n.Overview-readmeContent a:hover {\n outline-width: 0;\n}\n.Overview-readmeContent strong {\n font-weight: inherit;\n font-weight: bolder;\n}\n.Overview-readmeContent h3 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n.Overview-readmeContent img {\n border-style: none;\n}\n.Overview-readmeContent code,\n.Overview-readmeContent kbd,\n.Overview-readmeContent pre {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n.Overview-readmeContent hr {\n box-sizing: initial;\n height: 0;\n overflow: visible;\n}\n.Overview-readmeContent input {\n font: inherit;\n margin: 0;\n}\n.Overview-readmeContent input {\n overflow: visible;\n}\n.Overview-readmeContent [type='checkbox'] {\n box-sizing: border-box;\n padding: 0;\n}\n.Overview-readmeContent * {\n box-sizing: border-box;\n}\n.Overview-readmeContent input {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n.Overview-readmeContent a {\n color: var(--color-brand-primary);\n text-decoration: none;\n}\n.Overview-readmeContent a:hover {\n text-decoration: underline;\n}\n.Overview-readmeContent strong {\n font-weight: 600;\n}\n.Overview-readmeContent hr {\n height: 0;\n margin: 0.9375rem 0;\n overflow: hidden;\n background: transparent;\n border: 0;\n border-bottom: var(--border);\n}\n.Overview-readmeContent hr:after,\n.Overview-readmeContent hr:before {\n display: table;\n content: '';\n}\n.Overview-readmeContent hr:after {\n clear: both;\n}\n.Overview-readmeContent table {\n border-spacing: 0;\n border-collapse: collapse;\n}\n.Overview-readmeContent td,\n.Overview-readmeContent th {\n padding: 0;\n}\n.Overview-readmeContent details summary {\n cursor: pointer;\n}\n.Overview-readmeContent kbd {\n display: inline-block;\n padding: 0.1875rem 0.3125rem;\n font: 0.6875rem SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;\n line-height: 0.625rem;\n color: #444d56;\n vertical-align: middle;\n background-color: var(--color-background-accented);\n border: var(--border);\n border-radius: 0.1875rem;\n box-shadow: inset 0 -0.0625rem 0 var(--border);\n}\n.Overview-readmeContent h3,\n.Overview-readmeContent h4,\n.Overview-readmeContent h5,\n.Overview-readmeContent h6,\n.Overview-readmeContent div[aria-level='7'],\n.Overview-readmeContent div[aria-level='8'] {\n margin-top: 0;\n margin-bottom: 0;\n}\n.Overview-readmeContent h3 {\n font-size: 2rem;\n}\n.Overview-readmeContent h3,\n.Overview-readmeContent h4 {\n font-weight: 600;\n}\n.Overview-readmeContent h4 {\n font-size: 1.5rem;\n}\n.Overview-readmeContent h5 {\n font-size: 1.25rem;\n}\n.Overview-readmeContent h5,\n.Overview-readmeContent h6 {\n font-weight: 600;\n}\n.Overview-readmeContent h6 {\n font-size: 1rem;\n}\n.Overview-readmeContent div[aria-level='7'] {\n font-size: 0.875rem;\n}\n.Overview-readmeContent div[aria-level='7'],\n.Overview-readmeContent div[aria-level='8'] {\n font-weight: 600;\n}\n.Overview-readmeContent div[aria-level='8'] {\n font-size: 0.75rem;\n}\n.Overview-readmeContent p {\n margin-top: 0;\n margin-bottom: 0.625rem;\n}\n.Overview-readmeContent blockquote {\n margin: 0;\n}\n.Overview-readmeContent ol,\n.Overview-readmeContent ul {\n padding-left: 0;\n margin-top: 0;\n margin-bottom: 0;\n}\n.Overview-readmeContent ol ol,\n.Overview-readmeContent ul ol {\n list-style-type: lower-roman;\n}\n.Overview-readmeContent ol ol ol,\n.Overview-readmeContent ol ul ol,\n.Overview-readmeContent ul ol ol,\n.Overview-readmeContent ul ul ol {\n list-style-type: lower-alpha;\n}\n.Overview-readmeContent dd {\n margin-left: 0;\n}\n.Overview-readmeContent code,\n.Overview-readmeContent pre {\n font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;\n font-size: 0.75rem;\n}\n.Overview-readmeContent pre {\n margin-top: 0;\n margin-bottom: 0;\n}\n.Overview-readmeContent input::-webkit-inner-spin-button,\n.Overview-readmeContent input::-webkit-outer-spin-button {\n margin: 0;\n -webkit-appearance: none;\n appearance: none;\n}\n.Overview-readmeContent :checked + .radio-label {\n position: relative;\n z-index: 1;\n border-color: var(--color-brand-primary);\n}\n.Overview-readmeContent hr {\n border-bottom-color: var(--color-border);\n}\n.Overview-readmeContent kbd {\n display: inline-block;\n padding: 0.1875rem 0.3125rem;\n font: 0.6875rem SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;\n line-height: 0.625rem;\n color: #444d56;\n vertical-align: middle;\n background-color: var(--color-background-accented);\n border: var(--border);\n border-radius: 0.1875rem;\n box-shadow: inset 0 -0.0625rem 0 var(--color-border);\n}\n.Overview-readmeContent a:not([href]) {\n color: inherit;\n text-decoration: none;\n}\n.Overview-readmeContent blockquote,\n.Overview-readmeContent details,\n.Overview-readmeContent dl,\n.Overview-readmeContent ol,\n.Overview-readmeContent p,\n.Overview-readmeContent pre,\n.Overview-readmeContent table,\n.Overview-readmeContent ul {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n.Overview-readmeContent hr {\n height: 0.25em;\n padding: 0;\n margin: 1.5rem 0;\n background-color: var(--color-border);\n border: 0;\n}\n.Overview-readmeContent blockquote {\n padding: 0 1em;\n color: var(--color-text-subtle);\n border-left: 0.25em solid var(--color-border);\n}\n.Overview-readmeContent blockquote > :first-child {\n margin-top: 0;\n}\n.Overview-readmeContent blockquote > :last-child {\n margin-bottom: 0;\n}\n.Overview-readmeContent h3,\n.Overview-readmeContent h4,\n.Overview-readmeContent h5,\n.Overview-readmeContent h6,\n.Overview-readmeContent div[aria-level='7'],\n.Overview-readmeContent div[aria-level='8'] {\n margin-top: 1.5rem;\n margin-bottom: 1rem;\n font-weight: 600;\n line-height: 1.25;\n}\n.Overview-readmeContent h3 {\n font-size: 2em;\n}\n.Overview-readmeContent h3,\n.Overview-readmeContent h4 {\n padding-bottom: 0.3em;\n border-bottom: var(--border);\n}\n.Overview-readmeContent h4 {\n font-size: 1.5em;\n}\n.Overview-readmeContent h5 {\n font-size: 1.25em;\n}\n.Overview-readmeContent h6 {\n font-size: 1em;\n}\n.Overview-readmeContent div[aria-level='7'] {\n font-size: 0.875em;\n}\n.Overview-readmeContent div[aria-level='8'] {\n font-size: 0.85em;\n color: var(--color-text-subtle);\n}\n.Overview-readmeContent ol,\n.Overview-readmeContent ul {\n padding-left: 2em;\n}\n.Overview-readmeContent ol ol,\n.Overview-readmeContent ol ul,\n.Overview-readmeContent ul ol,\n.Overview-readmeContent ul ul {\n margin-top: 0;\n margin-bottom: 0;\n}\n.Overview-readmeContent li {\n word-wrap: break-all;\n}\n.Overview-readmeContent li > p {\n margin-top: 1rem;\n}\n.Overview-readmeContent li + li {\n margin-top: 0.25em;\n}\n.Overview-readmeContent dl {\n padding: 0;\n}\n.Overview-readmeContent dl dt {\n padding: 0;\n margin-top: 1rem;\n font-size: 1em;\n font-style: italic;\n font-weight: 600;\n}\n.Overview-readmeContent dl dd {\n padding: 0 1rem;\n margin-bottom: 1rem;\n}\n.Overview-readmeContent table {\n display: block;\n width: 100%;\n overflow: auto;\n}\n.Overview-readmeContent table th {\n font-weight: 600;\n}\n.Overview-readmeContent table td,\n.Overview-readmeContent table th {\n padding: 0.375rem 0.8125rem;\n border: var(--border);\n}\n.Overview-readmeContent table tr {\n background-color: var(--color-background);\n border-top: var(--border);\n}\n.Overview-readmeContent table tr:nth-child(2n) {\n background-color: var(--color-background-accented);\n}\n.Overview-readmeContent img {\n max-width: 100%;\n box-sizing: initial;\n background-color: var(--color-background);\n}\n.Overview-readmeContent img[align='right'] {\n padding-left: 1.25rem;\n}\n.Overview-readmeContent img[align='left'] {\n padding-right: 1.25rem;\n}\n.Overview-readmeContent code {\n padding: 0.2em 0.4em;\n margin: 0;\n font-size: 85%;\n background-color: var(--color-background-accented);\n border-radius: 0.1875rem;\n}\n.Overview-readmeContent pre {\n word-wrap: normal;\n}\n.Overview-readmeContent pre > code {\n padding: 0;\n margin: 0;\n font-size: 100%;\n word-break: normal;\n white-space: pre;\n background: transparent;\n border: 0;\n}\n.Overview-readmeContent pre {\n padding: 1rem;\n overflow: auto;\n font-size: 85%;\n line-height: 1.45;\n background-color: var(--color-background-accented);\n border-radius: 0.1875rem;\n}\n.Overview-readmeContent pre code {\n display: inline;\n max-width: auto;\n padding: 0;\n margin: 0;\n overflow: visible;\n line-height: inherit;\n word-wrap: normal;\n background-color: initial;\n border: 0;\n}\n\n/* ---------- */\n/*\n/* End output from devtools/cmd/css/main.go\n/*\n/* ---------- */\n", "/*!\n * Copyright 2020 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.UnitReadme {\n margin-bottom: 2rem;\n}\n.UnitReadme ul,\n.UnitReadme ol {\n list-style: circle;\n}\n.UnitReadme h2 a.UnitReadme-idLink,\n.UnitReadme summary a {\n opacity: 0;\n}\n.UnitReadme h2:hover a,\n.UnitReadme summary:focus a {\n opacity: 1;\n}\n.UnitReadme-title {\n border-bottom: var(--border);\n font-size: 1.375rem;\n padding-bottom: 1rem;\n}\n.UnitReadme-title img {\n margin: auto 1rem auto 0;\n}\n.UnitReadme-content {\n -webkit-mask-image: linear-gradient(to bottom, black 75%, transparent 100%);\n mask-image: linear-gradient(to bottom, black 75%, transparent 100%);\n max-height: 20rem;\n overflow: hidden;\n position: relative;\n}\n.UnitReadme-content ul {\n line-height: 1.5rem;\n}\n.UnitReadme-expandLink {\n background: none;\n border: none;\n color: var(--color-brand-primary);\n cursor: pointer;\n padding: 0;\n}\n.UnitReadme-collapseLink {\n background: none;\n border: none;\n color: var(--color-brand-primary);\n cursor: pointer;\n display: none;\n padding: 0;\n}\n.UnitReadme--expanded .UnitReadme-content {\n -webkit-mask-image: none;\n mask-image: none;\n max-height: initial;\n overflow: initial;\n}\n.UnitReadme--expanded .UnitReadme-expandLink {\n display: none;\n}\n.UnitReadme--expanded .UnitReadme-collapseLink {\n display: block;\n}\n\n.Overview-readmeContent {\n overflow-wrap: break-word;\n}\n", "/*!\n * Copyright 2020 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@import url('./_build-context.css');\n@import url('./_directories.css');\n@import url('./_doc.css');\n@import url('./_files.css');\n@import url('./_meta.css');\n@import url('./_outline.css');\n@import url('./_readme_gen.css');\n@import url('./_readme.css');\n\n.UnitDetails {\n column-gap: 2rem;\n display: grid;\n grid-template-columns: minmax(0, auto);\n margin: auto;\n min-height: 32rem;\n}\n@media only screen and (min-width: 64rem) {\n .UnitDetails {\n grid-template-columns: 15.5rem minmax(30.5rem, 43.125rem) minmax(10rem, 15.5rem);\n }\n}\n@media only screen and (min-width: 80rem) {\n .UnitDetails {\n grid-template-columns: 15.5rem minmax(43.125rem, 60rem) 15.5rem;\n justify-content: center;\n }\n}\n.UnitDetails :target {\n scroll-margin-top: calc(var(--js-sticky-header-height, 3.5rem) * 2.15);\n}\n@media only screen and (min-width: 64rem) {\n .UnitDetails :target {\n scroll-margin-top: calc(var(--js-sticky-header-height, 3.5rem) * 1.25);\n }\n}\n\n.UnitDetails :target:not(details, h2) {\n background-color: var(--color-background-highlighted);\n padding: 0.25rem;\n}\n.UnitDetails-meta {\n order: -1;\n}\n@media only screen and (min-width: 64rem) {\n .UnitDetails-meta {\n display: block;\n margin-top: 2rem;\n order: initial;\n }\n}\n.UnitDetails-contentEmpty {\n align-items: center;\n background-color: var(--color-background-accented);\n color: var(--color-text-subtle);\n display: flex;\n flex-direction: column;\n height: 15rem;\n padding-top: 1rem;\n text-align: center;\n}\n.UnitDetails-contentEmpty img {\n height: 7.8125rem;\n width: auto;\n}\n"],
- "mappings": ";;;;;AAMA,qEAEE,+BACA,kBAEF,gCAXA,iBAcA,sCACE,iCACA,+BACA,mBACA,eAEF,sCACE,+BAEF,uBACE,aAEF,0CACE,uBACE,iBAIJ,wCACE,kBAEF,uFAEE,eACA,kBACA,QCjCF,iBACE,mBAEF,wEAEE,UAEF,6DAEE,UAEF,uBACE,4BACA,mBAnBF,iBAqBE,oBAEF,2BAvBA,wBA0BA,uBACE,yBACA,SACA,kBACA,WAEF,6BACE,iBAEF,6BACE,kDAEF,mCACE,kBAEF,oBACE,4BACA,gBACA,gBA5CF,oBA8CE,sBACA,sBAEF,oBAjDA,mBAmDE,gBAEF,2BACE,aAEF,mCACE,eAEF,yCACE,kDAEF,+CACE,YACA,kBAhEF,UAkEE,cAEF,6EAEE,mCACA,oBACA,kBAxEF,UA0EE,cAEF,8BACE,kBACA,aA9EF,oCAiFE,kBACA,mBAEF,2BACE,2BACA,eACA,qBACA,eAEF,sDACE,wBAEF,0BACE,uBACA,aACA,sBACA,oBACA,qBAEF,8BACE,kBAEF,8BACE,0BACA,aACA,sBACA,oBA3GF,mBA8GA,gCACE,aACA,oBACA,kBACA,oBAEF,0CACE,gCACE,gBAEF,oHAEE,cAGJ,8BACE,kBAEF,qCACE,6BACA,YACA,YACA,iCACA,eACA,aACA,kBACA,kBACA,QACA,qBAEF,uBACE,+CA7IF,sBA+IE,mBACA,gBACA,iBACA,kBACA,mBAnJF,iBAqJE,kBC9IF,SACE,mBACA,sBAEF,gDAEE,UAEF,6CAEE,UAEF,eACE,4BACA,oBAEF,mBAvBA,wBA0BA,sBACE,kDACA,oBACA,gBACA,kBACA,kBAEF,0BACE,iBACA,WAEF,wBArCA,iBAwCA,2BACE,kBAEF,eACE,cAEF,iBA9CA,cAiDA,oCAEE,kBAEF,iBACE,qBAEF,uBACE,0BAEF,0GAIE,UAEF,uBACE,UAEF,yCACE,UAEF,4IAKE,UAEF,kBACE,mBACA,gBACA,eAEF,qBACE,iBAGF,uBACE,mBAGF,kDA3FA,4BA6FE,yBACA,aAEF,4BACE,gCAGF,wFAIE,iBAEF,qBACE,+BACA,kBAEF,0CACE,mBACE,iBACA,mBAEF,2BACE,WAGJ,yBACE,aAEF,uBACE,gBACA,uBAGF,wMAME,aAGF,sSAUE,oBAGF,0GAIE,qBACA,aACA,8BAEF,4BACE,+BACA,mBACA,gBAGF,kFAEE,aAGF,qBACE,+BACA,mBACA,iBAEF,+BACE,0EAEF,0CACE,+BACE,0EAGJ,sDACE,mBAEF,+BACE,kDACA,qBACA,mBA3LF,4BA6LE,cACA,iBACA,kBA/LF,gBAiME,iBAEF,uCACE,mBACA,aACA,yBACA,iBAEF,iCACE,8BACA,oCACA,sBACA,eACA,cACA,cACA,eAEF,qGAGE,uCArNF,qBAuNE,eACA,YACA,kBAzNF,eA4NA,gCACE,kCACA,mBAEF,qEAEE,8BACA,uBAEF,8BACE,gBAEF,sCAxOA,8BA0OE,mBACA,mBAEF,2CACE,YACA,aACA,gBACA,YACA,gBACA,WAQF,6DACE,4BACA,6BA7PF,SAgQA,+DACE,yBACA,0BAlQF,iBAqQA,oCACE,iCACA,eACA,mBACA,aACA,qBAEF,kCACE,+BAEF,4BACE,kBACA,mBACA,oBAIF,sFAGE,qBACA,qBACA,qBAGF,+BACE,kBAEF,8BACE,+BACA,iBACA,gBACA,mBACA,mBAEF,6BACE,qCAzSF,sBA2SE,iCACA,iBACA,gBACA,kBA9SF,uBAgTE,yBACA,sBAEF,+BACE,mBACA,aACA,UAEF,oEACE,+BAKF,uCACE,wBAEF,yCACE,iCAEF,qEACE,iCACA,eAEF,2EACE,iCACA,eAEF,yCACE,gBACA,UAEF,uDACE,UAEF,kCAnVA,wBAsVA,iCACE,mBACA,aACA,UACA,mBCpVF,WACE,mBAEF,qBACE,kBAEF,uBACE,YACA,kBACA,kBACA,QAEF,6BACE,kEACA,4BACA,gCACA,WACA,qBACA,YACA,cACA,kBACA,YACA,WAEF,sDAEE,UAEF,iDAEE,UAEF,iBACE,4BACA,mBAxCF,iBA0CE,oBAEF,qBA5CA,wBA+CA,oBACE,eACA,qBACA,mBACA,gBACA,gBACA,eACA,qBChDF,UACE,aACA,cACA,uCACA,mBAEF,kCAEE,aACA,eACA,mBACA,cAEF,eACE,mBACA,aAEF,iBACE,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",
+ "sourcesContent": ["/*!\n * Copyright 2020 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.UnitBuildContext-titleContext label,\n.UnitBuildContext-singleContext {\n color: var(--color-text-subtle);\n font-size: 0.875rem;\n}\n.UnitBuildContext-singleContext {\n padding: 0.35rem 0;\n}\n.UnitBuildContext-titleContext select {\n border-color: var(--color-border);\n color: var(--color-text-subtle);\n margin-left: 0.25rem;\n min-width: 6rem;\n}\n.UnitBuildContext-titleContext option {\n color: var(--color-text-subtle);\n}\n.UnitBuildContext-link {\n display: none;\n}\n@media only screen and (min-width: 30rem) {\n .UnitBuildContext-link {\n display: initial;\n }\n}\n\n.UnitDoc .UnitBuildContext-titleContext {\n position: relative;\n}\n.UnitDoc .UnitBuildContext-titleContext label,\n.UnitDoc .UnitBuildContext-singleContext {\n bottom: 0.875rem;\n position: absolute;\n right: 0;\n}\n", "/*!\n * Copyright 2020 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.UnitDirectories {\n margin-bottom: 2rem;\n}\n.UnitDirectories h2 a.UnitDirectories-idLink,\n.UnitDirectories summary a {\n opacity: 0;\n}\n.UnitDirectories h2:hover a,\n.UnitDirectories summary:focus a {\n opacity: 1;\n}\n.UnitDirectories-title {\n border-bottom: var(--border);\n font-size: 1.375rem;\n margin: 0.5rem 0 0 0;\n padding-bottom: 1rem;\n}\n.UnitDirectories-title img {\n margin: auto 1rem auto 0;\n}\n.UnitDirectories-table {\n border-collapse: collapse;\n height: 0;\n table-layout: auto;\n width: 100%;\n}\n.UnitDirectories-table--tree {\n margin-top: -2rem;\n}\n.UnitDirectories-tableHeader {\n background-color: var(--color-background-accented);\n}\n.UnitDirectories-tableHeader--tree {\n visibility: hidden;\n}\n.UnitDirectories td {\n border-bottom: var(--border);\n max-width: 32rem;\n min-width: 12rem;\n padding: 0.25rem 1rem;\n vertical-align: middle;\n word-break: break-word;\n}\n.UnitDirectories th {\n padding: 0.5rem 1rem;\n text-align: left;\n}\n.UnitDirectories tr.hidden {\n display: none;\n}\n.UnitDirectories tr[aria-controls] {\n cursor: pointer;\n}\n.UnitDirectories tr[aria-controls]:hover {\n background-color: var(--color-background-accented);\n}\n.UnitDirectories th.UnitDirectories-toggleHead {\n font-size: 0;\n max-width: 0.625rem;\n padding: 0;\n width: 0.625rem;\n}\n.UnitDirectories td.UnitDirectories-toggleCell,\nth.UnitDirectories-toggleCell {\n background-color: var(--background);\n border: var(--white);\n max-width: 0.625rem;\n padding: 0;\n width: 0.625rem;\n}\n.UnitDirectories-toggleButton {\n font-size: 1.25rem;\n left: -0.75rem;\n margin: 0 0 -1rem -0.875rem;\n padding: 0;\n position: absolute;\n vertical-align: top;\n}\n.UnitDirectories-subSpacer {\n border-right: var(--border);\n display: inline;\n margin-right: 0.875rem;\n width: 0.0625rem;\n}\n.UnitDirectories-toggleButton[aria-expanded='true'] img {\n transform: rotate(90deg);\n}\n.UnitDirectories-pathCell {\n align-items: flex-start;\n display: flex;\n flex-direction: column;\n line-height: 1.75rem;\n word-break: break-all;\n}\n.UnitDirectories-pathCell > div {\n position: relative;\n}\n.UnitDirectories-subdirectory {\n border-left: var(--border);\n display: flex;\n flex-direction: column;\n margin-left: 0.375rem;\n padding: 0.5rem 1rem;\n}\n.UnitDirectories-mobileSynopsis {\n display: none;\n line-height: 1.25rem;\n margin-top: 0.25rem;\n word-break: keep-all;\n}\n@media only screen and (max-width: 52rem) {\n .UnitDirectories-mobileSynopsis {\n display: initial;\n }\n .UnitDirectories-table th.UnitDirectories-desktopSynopsis,\n .UnitDirectories-table td.UnitDirectories-desktopSynopsis {\n display: none;\n }\n}\n.UnitDirectories-expandButton {\n position: relative;\n}\n.UnitDirectories-expandButton button {\n background-color: transparent;\n border: none;\n bottom: 1rem;\n color: var(--color-brand-primary);\n cursor: pointer;\n display: none;\n font-size: 0.875rem;\n position: absolute;\n right: 0;\n text-decoration: none;\n}\n.UnitDirectories-badge {\n border: 0.0625rem solid var(--color-text-subtle);\n border-radius: 0.125rem;\n font-size: 0.6875rem;\n font-weight: 500;\n line-height: 1rem;\n margin-left: 0.5rem;\n margin-top: 0.125rem;\n padding: 0 0.35rem;\n text-align: center;\n}\n", "/*!\n * Copyright 2020 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/* stylelint-disable no-descending-specificity */\n.UnitDoc {\n margin-bottom: 2rem;\n word-break: break-word;\n}\n.UnitDoc h2 a.UnitDoc-idLink,\n.UnitDoc summary a {\n opacity: 0;\n}\n.UnitDoc h2:hover a,\n.UnitDoc summary:focus a {\n opacity: 1;\n}\n.UnitDoc-title {\n border-bottom: var(--border);\n padding-bottom: 1rem;\n}\n.UnitDoc-title img {\n margin: auto 1rem auto 0;\n}\n.UnitDoc-emptySection {\n background-color: var(--color-background-accented);\n color: var(--gray-2);\n height: 12.25rem;\n margin-top: 1.5rem;\n text-align: center;\n}\n.UnitDoc-emptySection img {\n height: 7.8125rem;\n width: auto;\n}\n.UnitDoc-emptySection p {\n margin: 1rem auto;\n}\n.UnitDoc .Documentation h4 {\n margin-top: 1.5rem;\n}\n.Documentation {\n display: block;\n}\n.Documentation p {\n margin: 1rem 0;\n}\n.Documentation h2,\n.Documentation h3 {\n margin-top: 1.5rem;\n}\n.Documentation a {\n text-decoration: none;\n}\n.Documentation a:hover {\n text-decoration: underline;\n}\n.Documentation h2 a,\n.Documentation h3 a,\n.Documentation h4 a.Documentation-idLink,\n.Documentation summary a {\n opacity: 0;\n}\n.Documentation a:focus {\n opacity: 1;\n}\n.Documentation h3 a.Documentation-source {\n opacity: 1;\n}\n.Documentation h2:hover a,\n.Documentation h3:hover a,\n.Documentation h4:hover a,\n.Documentation summary:hover a,\n.Documentation summary:focus a {\n opacity: 1;\n}\n.Documentation ul {\n line-height: 1.5rem;\n list-style: none;\n padding-left: 0;\n}\n.Documentation ul ul {\n padding-left: 2em;\n}\n\n.Documentation pre + pre {\n margin-top: 0.625rem;\n}\n\n.Documentation .Documentation-declarationLink + pre {\n border-radius: 0 0 0.3em 0.3em;\n border-top: var(--border);\n margin-top: 0;\n}\n.Documentation pre .comment {\n color: var(--color-code-comment);\n}\n\n.Documentation-toc,\n.Documentation-overview,\n.Documentation-index,\n.Documentation-examples {\n padding-bottom: 0;\n}\n.Documentation-empty {\n color: var(--color-text-subtle);\n margin-top: -0.5rem;\n}\n@media only screen and (min-width: 64rem) {\n .Documentation-toc {\n margin-left: 2rem;\n white-space: nowrap;\n }\n .Documentation-toc-columns {\n columns: 2;\n }\n}\n.Documentation-toc:empty {\n display: none;\n}\n.Documentation-tocItem {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.Documentation-tocItem--constants,\n.Documentation-tocItem--funcsAndTypes,\n.Documentation-tocItem--functions,\n.Documentation-tocItem--types,\n.Documentation-tocItem--variables,\n.Documentation-tocItem--notes {\n display: none;\n}\n\n.Documentation-overviewHeader,\n.Documentation-indexHeader,\n.Documentation-constantsHeader,\n.Documentation-variablesHeader,\n.Documentation-examplesHeader,\n.Documentation-filesHeader,\n.Documentation-functionHeader,\n.Documentation-typeHeader,\n.Documentation-typeMethodHeader,\n.Documentation-typeFuncHeader {\n margin-bottom: 0.5rem;\n}\n\n.Documentation-function h4,\n.Documentation-type h4,\n.Documentation-typeFunc h4,\n.Documentation-typeMethod h4 {\n align-items: baseline;\n display: flex;\n justify-content: space-between;\n}\n.Documentation-sinceVersion {\n color: var(--color-text-subtle);\n font-size: 0.9375rem;\n font-weight: 400;\n}\n\n.Documentation-constants br:last-of-type,\n.Documentation-variables br:last-of-type {\n display: none;\n}\n\n.Documentation-build {\n color: var(--color-text-subtle);\n padding-top: 1.5rem;\n text-align: right;\n}\n.Documentation-declaration pre {\n scroll-padding-top: calc(var(--js-sticky-header-height, 3.5rem) + 3.75rem);\n}\n@media only screen and (min-width: 64rem) {\n .Documentation-declaration pre {\n scroll-padding-top: calc(var(--js-sticky-header-height, 3.5rem) + 0.75rem);\n }\n}\n.Documentation-declaration + .Documentation-declaration {\n margin-top: 0.625rem;\n}\n.Documentation-declarationLink {\n background-color: var(--color-background-accented);\n border: var(--border);\n border-bottom: none;\n border-radius: 0.3em 0.3em 0 0;\n display: block;\n font-size: 0.75rem;\n line-height: 0.5rem;\n padding: 0.375rem;\n text-align: right;\n}\n.Documentation-exampleButtonsContainer {\n align-items: center;\n display: flex;\n justify-content: flex-end;\n margin-top: 0.5rem;\n}\n.Documentation-examplePlayButton {\n background-color: var(--white);\n border: 0.15rem solid var(--turq-med);\n color: var(--turq-med);\n cursor: pointer;\n flex-shrink: 0;\n height: 2.5rem;\n width: 4.125rem;\n}\n.Documentation-exampleRunButton,\n.Documentation-exampleShareButton,\n.Documentation-exampleFormatButton {\n border: 0.0625rem solid var(--turq-dark);\n border-radius: 0.25rem;\n cursor: pointer;\n height: 2rem;\n margin-left: 0.5rem;\n padding: 0 1rem;\n}\n.Documentation-exampleRunButton {\n background-color: var(--turq-dark);\n color: var(--white);\n}\n.Documentation-exampleShareButton,\n.Documentation-exampleFormatButton {\n background-color: var(--white);\n color: var(--turq-dark);\n}\n.Documentation-exampleDetails {\n margin-top: 1rem;\n}\n.Documentation-exampleDetailsBody pre {\n border-radius: 0 0 0.3rem 0.3rem;\n margin-bottom: 1rem;\n margin-top: -0.25rem;\n}\n.Documentation-exampleDetailsBody textarea {\n height: 100%;\n outline: none;\n overflow-x: auto;\n resize: none;\n white-space: pre;\n width: 100%;\n}\n\n/**\n * We add another selector here to these two classes to increase CSS specificity,\n * the selector .Documentation pre + pre overrides .Documentation-exampleCode\n * and .Documentation-exampleOutput by itself and would replace the styles.\n */\n.Documentation-exampleDetailsBody .Documentation-exampleCode {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n margin: 0;\n}\n.Documentation-exampleDetailsBody .Documentation-exampleOutput {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n margin: 0 0 0.5rem;\n}\n.Documentation-exampleDetailsHeader {\n color: var(--color-brand-primary);\n cursor: pointer;\n margin-bottom: 2rem;\n outline: none;\n text-decoration: none;\n}\n.Documentation-exampleOutputLabel {\n color: var(--color-text-subtle);\n}\n.Documentation-exampleError {\n color: var(--pink);\n margin-right: 0.4rem;\n padding-right: 0.5rem;\n}\n\n/* See https://golang.org/issue/43368 for context. */\n.Documentation-function pre,\n.Documentation-typeFunc pre,\n.Documentation-typeMethod pre {\n white-space: pre-wrap;\n word-break: break-all;\n word-wrap: break-word;\n}\n\n.Documentation-indexDeprecated {\n margin-left: 0.5rem;\n}\n.Documentation-deprecatedBody {\n color: var(--color-text-subtle);\n font-size: 0.87rem;\n font-weight: 400;\n margin-left: 0.25rem;\n margin-right: 0.5rem;\n}\n.Documentation-deprecatedTag {\n background-color: var(--color-border);\n border-radius: 0.125rem;\n color: var(--color-text-inverted);\n font-size: 0.75rem;\n font-weight: normal;\n line-height: 1.375;\n padding: 0.125rem 0.25rem;\n text-transform: uppercase;\n vertical-align: middle;\n}\n.Documentation-deprecatedTitle {\n align-items: center;\n display: flex;\n gap: 0.5rem;\n}\n.Documentation-deprecatedDetails {\n color: var(--color-text-subtle);\n}\n.Documentation-deprecatedDetails a {\n color: var(--color-text-subtle);\n}\n.Documentation-deprecatedDetails[open] {\n color: var(--color-text);\n}\n.Documentation-deprecatedDetails[open] a {\n color: var(--color-brand-primary);\n}\n.Documentation-deprecatedDetails .Documentation-deprecatedBody::after {\n color: var(--color-brand-primary);\n content: 'Show';\n}\n.Documentation-deprecatedDetails[open] .Documentation-deprecatedBody::after {\n color: var(--color-brand-primary);\n content: 'Hide';\n}\n.Documentation-deprecatedDetails > summary {\n list-style: none;\n opacity: 1;\n}\n.Documentation-deprecatedDetails .Documentation-source {\n opacity: 1;\n}\n.Documentation-deprecatedItemBody {\n padding: 1rem 1rem 0.5rem 1rem;\n}\n.Documentation-deprecatedMessage {\n align-items: center;\n display: flex;\n gap: 0.5rem;\n margin-bottom: 1rem;\n}\n", "/*!\n * Copyright 2020 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.UnitFiles {\n margin-bottom: 2rem;\n}\n.UnitFiles-titleLink {\n position: relative;\n}\n.UnitFiles-titleLink a {\n bottom: 1rem;\n font-size: 0.875rem;\n position: absolute;\n right: 0;\n}\n.UnitFiles-titleLink a::after {\n background-image: url(/static/shared/icon/launch_gm_grey_24dp.svg);\n background-repeat: no-repeat;\n background-size: 0.875rem 1.25rem;\n content: '';\n display: inline-block;\n height: 1rem;\n left: 0.3125rem;\n position: relative;\n top: 0.125rem;\n width: 1rem;\n}\n.UnitFiles h2 a.UnitFiles-idLink,\n.UnitFiles summary a {\n opacity: 0;\n}\n.UnitFiles h2:hover a,\n.UnitFiles summary:focus a {\n opacity: 1;\n}\n.UnitFiles-title {\n border-bottom: var(--border);\n font-size: 1.375rem;\n margin: 0.5rem 0 0 0;\n padding-bottom: 1rem;\n}\n.UnitFiles-title img {\n margin: auto 1rem auto 0;\n}\n.UnitFiles-fileList {\n column-count: 5;\n column-width: 12.5rem;\n line-height: 1.5rem;\n list-style: none;\n margin-top: 1rem;\n padding-left: 0;\n word-break: break-all;\n}\n", "/*!\n* Copyright 2019-2020 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.UnitMeta {\n display: grid;\n gap: 1rem 2rem;\n grid-template-columns: max-content auto;\n white-space: nowrap;\n}\n.UnitMeta-details,\n.UnitMeta-links {\n display: flex;\n flex-flow: wrap;\n flex-direction: row;\n gap: 1rem 2rem;\n}\n.UnitMeta-repo {\n align-items: center;\n display: flex;\n}\n.UnitMeta-repo a {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n@media (min-width: 50rem) {\n .UnitMeta {\n grid-template-columns: max-content auto;\n }\n .UnitMeta-details,\n .UnitMeta-links {\n flex-direction: row;\n }\n}\n@media (min-width: 112rem) {\n :root[data-layout='responsive'] .UnitMeta {\n grid-template-columns: 100%;\n }\n :root[data-layout='responsive'] .UnitMeta-details,\n :root[data-layout='responsive'] .UnitMeta-links {\n flex-direction: column;\n white-space: nowrap;\n }\n}\n.UnitMeta-detailsLearn {\n width: 100%;\n}\n@media (min-width: 50rem) {\n .UnitMeta-detailsLearn {\n width: initial;\n }\n}\n", "/*!\n * Copyright 2020 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.UnitOutline-jumpTo {\n display: flex;\n margin-bottom: 1rem;\n}\n.UnitOutline-jumpTo button {\n align-items: center;\n background-color: var(--color-background);\n border: var(--border);\n border-radius: 0.25rem;\n color: var(--color-text-subtle);\n cursor: pointer;\n height: 2rem;\n padding-left: 1rem;\n text-align: left;\n width: 100%;\n}\n.UnitOutline-jumpTo button:hover:not([disabled]) {\n border-color: var(--color-border);\n}\n.UnitOutline-jumpToInput:disabled {\n background-color: var(--gray-9);\n}\n", "/*!\n* Copyright 2019-2020 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/*\n/* The CSS classes below are generated using devtools/cmd/css/main.go\n/* If the generated CSS already exists, the file is overwritten\n/*\n/* ---------- */\n\n.Overview-readmeContent details {\n display: block;\n}\n.Overview-readmeContent summary {\n display: list-item;\n}\n.Overview-readmeContent a {\n background-color: initial;\n}\n.Overview-readmeContent a:active,\n.Overview-readmeContent a:hover {\n outline-width: 0;\n}\n.Overview-readmeContent strong {\n font-weight: inherit;\n font-weight: bolder;\n}\n.Overview-readmeContent h3 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n.Overview-readmeContent img {\n border-style: none;\n}\n.Overview-readmeContent code,\n.Overview-readmeContent kbd,\n.Overview-readmeContent pre {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n.Overview-readmeContent hr {\n box-sizing: initial;\n height: 0;\n overflow: visible;\n}\n.Overview-readmeContent input {\n font: inherit;\n margin: 0;\n}\n.Overview-readmeContent input {\n overflow: visible;\n}\n.Overview-readmeContent [type='checkbox'] {\n box-sizing: border-box;\n padding: 0;\n}\n.Overview-readmeContent * {\n box-sizing: border-box;\n}\n.Overview-readmeContent input {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n.Overview-readmeContent a {\n color: var(--color-brand-primary);\n text-decoration: none;\n}\n.Overview-readmeContent a:hover {\n text-decoration: underline;\n}\n.Overview-readmeContent strong {\n font-weight: 600;\n}\n.Overview-readmeContent hr {\n height: 0;\n margin: 0.9375rem 0;\n overflow: hidden;\n background: transparent;\n border: 0;\n border-bottom: var(--border);\n}\n.Overview-readmeContent hr:after,\n.Overview-readmeContent hr:before {\n display: table;\n content: '';\n}\n.Overview-readmeContent hr:after {\n clear: both;\n}\n.Overview-readmeContent table {\n border-spacing: 0;\n border-collapse: collapse;\n}\n.Overview-readmeContent td,\n.Overview-readmeContent th {\n padding: 0;\n}\n.Overview-readmeContent details summary {\n cursor: pointer;\n}\n.Overview-readmeContent kbd {\n display: inline-block;\n padding: 0.1875rem 0.3125rem;\n font: 0.6875rem SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;\n line-height: 0.625rem;\n color: #444d56;\n vertical-align: middle;\n background-color: var(--color-background-accented);\n border: var(--border);\n border-radius: 0.1875rem;\n box-shadow: inset 0 -0.0625rem 0 var(--border);\n}\n.Overview-readmeContent h3,\n.Overview-readmeContent h4,\n.Overview-readmeContent h5,\n.Overview-readmeContent h6,\n.Overview-readmeContent div[aria-level='7'],\n.Overview-readmeContent div[aria-level='8'] {\n margin-top: 0;\n margin-bottom: 0;\n}\n.Overview-readmeContent h3 {\n font-size: 2rem;\n}\n.Overview-readmeContent h3,\n.Overview-readmeContent h4 {\n font-weight: 600;\n}\n.Overview-readmeContent h4 {\n font-size: 1.5rem;\n}\n.Overview-readmeContent h5 {\n font-size: 1.25rem;\n}\n.Overview-readmeContent h5,\n.Overview-readmeContent h6 {\n font-weight: 600;\n}\n.Overview-readmeContent h6 {\n font-size: 1rem;\n}\n.Overview-readmeContent div[aria-level='7'] {\n font-size: 0.875rem;\n}\n.Overview-readmeContent div[aria-level='7'],\n.Overview-readmeContent div[aria-level='8'] {\n font-weight: 600;\n}\n.Overview-readmeContent div[aria-level='8'] {\n font-size: 0.75rem;\n}\n.Overview-readmeContent p {\n margin-top: 0;\n margin-bottom: 0.625rem;\n}\n.Overview-readmeContent blockquote {\n margin: 0;\n}\n.Overview-readmeContent ol,\n.Overview-readmeContent ul {\n padding-left: 0;\n margin-top: 0;\n margin-bottom: 0;\n}\n.Overview-readmeContent ol ol,\n.Overview-readmeContent ul ol {\n list-style-type: lower-roman;\n}\n.Overview-readmeContent ol ol ol,\n.Overview-readmeContent ol ul ol,\n.Overview-readmeContent ul ol ol,\n.Overview-readmeContent ul ul ol {\n list-style-type: lower-alpha;\n}\n.Overview-readmeContent dd {\n margin-left: 0;\n}\n.Overview-readmeContent code,\n.Overview-readmeContent pre {\n font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;\n font-size: 0.75rem;\n}\n.Overview-readmeContent pre {\n margin-top: 0;\n margin-bottom: 0;\n}\n.Overview-readmeContent input::-webkit-inner-spin-button,\n.Overview-readmeContent input::-webkit-outer-spin-button {\n margin: 0;\n -webkit-appearance: none;\n appearance: none;\n}\n.Overview-readmeContent :checked + .radio-label {\n position: relative;\n z-index: 1;\n border-color: var(--color-brand-primary);\n}\n.Overview-readmeContent hr {\n border-bottom-color: var(--color-border);\n}\n.Overview-readmeContent kbd {\n display: inline-block;\n padding: 0.1875rem 0.3125rem;\n font: 0.6875rem SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;\n line-height: 0.625rem;\n color: #444d56;\n vertical-align: middle;\n background-color: var(--color-background-accented);\n border: var(--border);\n border-radius: 0.1875rem;\n box-shadow: inset 0 -0.0625rem 0 var(--color-border);\n}\n.Overview-readmeContent a:not([href]) {\n color: inherit;\n text-decoration: none;\n}\n.Overview-readmeContent blockquote,\n.Overview-readmeContent details,\n.Overview-readmeContent dl,\n.Overview-readmeContent ol,\n.Overview-readmeContent p,\n.Overview-readmeContent pre,\n.Overview-readmeContent table,\n.Overview-readmeContent ul {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n.Overview-readmeContent hr {\n height: 0.25em;\n padding: 0;\n margin: 1.5rem 0;\n background-color: var(--color-border);\n border: 0;\n}\n.Overview-readmeContent blockquote {\n padding: 0 1em;\n color: var(--color-text-subtle);\n border-left: 0.25em solid var(--color-border);\n}\n.Overview-readmeContent blockquote > :first-child {\n margin-top: 0;\n}\n.Overview-readmeContent blockquote > :last-child {\n margin-bottom: 0;\n}\n.Overview-readmeContent h3,\n.Overview-readmeContent h4,\n.Overview-readmeContent h5,\n.Overview-readmeContent h6,\n.Overview-readmeContent div[aria-level='7'],\n.Overview-readmeContent div[aria-level='8'] {\n margin-top: 1.5rem;\n margin-bottom: 1rem;\n font-weight: 600;\n line-height: 1.25;\n}\n.Overview-readmeContent h3 {\n font-size: 2em;\n}\n.Overview-readmeContent h3,\n.Overview-readmeContent h4 {\n padding-bottom: 0.3em;\n border-bottom: var(--border);\n}\n.Overview-readmeContent h4 {\n font-size: 1.5em;\n}\n.Overview-readmeContent h5 {\n font-size: 1.25em;\n}\n.Overview-readmeContent h6 {\n font-size: 1em;\n}\n.Overview-readmeContent div[aria-level='7'] {\n font-size: 0.875em;\n}\n.Overview-readmeContent div[aria-level='8'] {\n font-size: 0.85em;\n color: var(--color-text-subtle);\n}\n.Overview-readmeContent ol,\n.Overview-readmeContent ul {\n padding-left: 2em;\n}\n.Overview-readmeContent ol ol,\n.Overview-readmeContent ol ul,\n.Overview-readmeContent ul ol,\n.Overview-readmeContent ul ul {\n margin-top: 0;\n margin-bottom: 0;\n}\n.Overview-readmeContent li {\n word-wrap: break-all;\n}\n.Overview-readmeContent li > p {\n margin-top: 1rem;\n}\n.Overview-readmeContent li + li {\n margin-top: 0.25em;\n}\n.Overview-readmeContent dl {\n padding: 0;\n}\n.Overview-readmeContent dl dt {\n padding: 0;\n margin-top: 1rem;\n font-size: 1em;\n font-style: italic;\n font-weight: 600;\n}\n.Overview-readmeContent dl dd {\n padding: 0 1rem;\n margin-bottom: 1rem;\n}\n.Overview-readmeContent table {\n display: block;\n width: 100%;\n overflow: auto;\n}\n.Overview-readmeContent table th {\n font-weight: 600;\n}\n.Overview-readmeContent table td,\n.Overview-readmeContent table th {\n padding: 0.375rem 0.8125rem;\n border: var(--border);\n}\n.Overview-readmeContent table tr {\n background-color: var(--color-background);\n border-top: var(--border);\n}\n.Overview-readmeContent table tr:nth-child(2n) {\n background-color: var(--color-background-accented);\n}\n.Overview-readmeContent img {\n max-width: 100%;\n box-sizing: initial;\n background-color: var(--color-background);\n}\n.Overview-readmeContent img[align='right'] {\n padding-left: 1.25rem;\n}\n.Overview-readmeContent img[align='left'] {\n padding-right: 1.25rem;\n}\n.Overview-readmeContent code {\n padding: 0.2em 0.4em;\n margin: 0;\n font-size: 85%;\n background-color: var(--color-background-accented);\n border-radius: 0.1875rem;\n}\n.Overview-readmeContent pre {\n word-wrap: normal;\n}\n.Overview-readmeContent pre > code {\n padding: 0;\n margin: 0;\n font-size: 100%;\n word-break: normal;\n white-space: pre;\n background: transparent;\n border: 0;\n}\n.Overview-readmeContent pre {\n padding: 1rem;\n overflow: auto;\n font-size: 85%;\n line-height: 1.45;\n background-color: var(--color-background-accented);\n border-radius: 0.1875rem;\n}\n.Overview-readmeContent pre code {\n display: inline;\n max-width: auto;\n padding: 0;\n margin: 0;\n overflow: visible;\n line-height: inherit;\n word-wrap: normal;\n background-color: initial;\n border: 0;\n}\n\n/* ---------- */\n/*\n/* End output from devtools/cmd/css/main.go\n/*\n/* ---------- */\n", "/*!\n * Copyright 2020 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.UnitReadme {\n margin-bottom: 2rem;\n}\n.UnitReadme ul,\n.UnitReadme ol {\n list-style: circle;\n}\n.UnitReadme h2 a.UnitReadme-idLink,\n.UnitReadme summary a {\n opacity: 0;\n}\n.UnitReadme h2:hover a,\n.UnitReadme summary:focus a {\n opacity: 1;\n}\n.UnitReadme-title {\n border-bottom: var(--border);\n font-size: 1.375rem;\n padding-bottom: 1rem;\n}\n.UnitReadme-title img {\n margin: auto 1rem auto 0;\n}\n.UnitReadme-content {\n -webkit-mask-image: linear-gradient(to bottom, black 75%, transparent 100%);\n mask-image: linear-gradient(to bottom, black 75%, transparent 100%);\n max-height: 20rem;\n overflow: hidden;\n position: relative;\n}\n.UnitReadme-content ul {\n line-height: 1.5rem;\n}\n.UnitReadme-expandLink {\n background: none;\n border: none;\n color: var(--color-brand-primary);\n cursor: pointer;\n padding: 0;\n}\n.UnitReadme-collapseLink {\n background: none;\n border: none;\n color: var(--color-brand-primary);\n cursor: pointer;\n display: none;\n padding: 0;\n}\n.UnitReadme--expanded .UnitReadme-content {\n -webkit-mask-image: none;\n mask-image: none;\n max-height: initial;\n overflow: initial;\n}\n.UnitReadme--toggle .UnitReadme-expandLink {\n display: block;\n}\n.UnitReadme--expanded .UnitReadme-expandLink {\n display: none;\n}\n.UnitReadme--expanded.UnitReadme--toggle .UnitReadme-collapseLink {\n display: block;\n}\n\n.Overview-readmeContent {\n overflow-wrap: break-word;\n}\n", "/*!\n * Copyright 2020 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@import url('./_build-context.css');\n@import url('./_directories.css');\n@import url('./_doc.css');\n@import url('./_files.css');\n@import url('./_meta.css');\n@import url('./_outline.css');\n@import url('./_readme_gen.css');\n@import url('./_readme.css');\n\n.UnitDetails {\n column-gap: 2rem;\n display: grid;\n grid-template-columns: minmax(0, auto);\n margin: auto;\n min-height: 32rem;\n}\n@media only screen and (min-width: 64rem) {\n .UnitDetails {\n grid-template-columns: 15.5rem minmax(30.5rem, 43.125rem) minmax(10rem, 15.5rem);\n }\n}\n@media only screen and (min-width: 80rem) {\n .UnitDetails {\n grid-template-columns: 15.5rem minmax(43.125rem, 60rem) 15.5rem;\n justify-content: center;\n }\n}\n.UnitDetails :target {\n scroll-margin-top: calc(var(--js-sticky-header-height, 3.5rem) * 2.15);\n}\n@media only screen and (min-width: 64rem) {\n .UnitDetails :target {\n scroll-margin-top: calc(var(--js-sticky-header-height, 3.5rem) * 1.25);\n }\n}\n\n.UnitDetails :target:not(details, h2) {\n background-color: var(--color-background-highlighted);\n padding: 0.25rem;\n}\n.UnitDetails-meta {\n order: -1;\n}\n@media only screen and (min-width: 64rem) {\n .UnitDetails-meta {\n display: block;\n margin-top: 2rem;\n order: initial;\n }\n}\n.UnitDetails-contentEmpty {\n align-items: center;\n background-color: var(--color-background-accented);\n color: var(--color-text-subtle);\n display: flex;\n flex-direction: column;\n height: 15rem;\n padding-top: 1rem;\n text-align: center;\n}\n.UnitDetails-contentEmpty img {\n height: 7.8125rem;\n width: auto;\n}\n"],
+ "mappings": ";;;;;AAMA,qEAEE,+BACA,kBAEF,gCAXA,iBAcA,sCACE,iCACA,+BACA,mBACA,eAEF,sCACE,+BAEF,uBACE,aAEF,0CACE,uBACE,iBAIJ,wCACE,kBAEF,uFAEE,eACA,kBACA,QCjCF,iBACE,mBAEF,wEAEE,UAEF,6DAEE,UAEF,uBACE,4BACA,mBAnBF,iBAqBE,oBAEF,2BAvBA,wBA0BA,uBACE,yBACA,SACA,kBACA,WAEF,6BACE,iBAEF,6BACE,kDAEF,mCACE,kBAEF,oBACE,4BACA,gBACA,gBA5CF,oBA8CE,sBACA,sBAEF,oBAjDA,mBAmDE,gBAEF,2BACE,aAEF,mCACE,eAEF,yCACE,kDAEF,+CACE,YACA,kBAhEF,UAkEE,cAEF,6EAEE,mCACA,oBACA,kBAxEF,UA0EE,cAEF,8BACE,kBACA,aA9EF,oCAiFE,kBACA,mBAEF,2BACE,2BACA,eACA,qBACA,eAEF,sDACE,wBAEF,0BACE,uBACA,aACA,sBACA,oBACA,qBAEF,8BACE,kBAEF,8BACE,0BACA,aACA,sBACA,oBA3GF,mBA8GA,gCACE,aACA,oBACA,kBACA,oBAEF,0CACE,gCACE,gBAEF,oHAEE,cAGJ,8BACE,kBAEF,qCACE,6BACA,YACA,YACA,iCACA,eACA,aACA,kBACA,kBACA,QACA,qBAEF,uBACE,+CA7IF,sBA+IE,mBACA,gBACA,iBACA,kBACA,mBAnJF,iBAqJE,kBC9IF,SACE,mBACA,sBAEF,gDAEE,UAEF,6CAEE,UAEF,eACE,4BACA,oBAEF,mBAvBA,wBA0BA,sBACE,kDACA,oBACA,gBACA,kBACA,kBAEF,0BACE,iBACA,WAEF,wBArCA,iBAwCA,2BACE,kBAEF,eACE,cAEF,iBA9CA,cAiDA,oCAEE,kBAEF,iBACE,qBAEF,uBACE,0BAEF,0GAIE,UAEF,uBACE,UAEF,yCACE,UAEF,4IAKE,UAEF,kBACE,mBACA,gBACA,eAEF,qBACE,iBAGF,uBACE,mBAGF,kDA3FA,4BA6FE,yBACA,aAEF,4BACE,gCAGF,wFAIE,iBAEF,qBACE,+BACA,kBAEF,0CACE,mBACE,iBACA,mBAEF,2BACE,WAGJ,yBACE,aAEF,uBACE,gBACA,uBAGF,wMAME,aAGF,sSAUE,oBAGF,0GAIE,qBACA,aACA,8BAEF,4BACE,+BACA,mBACA,gBAGF,kFAEE,aAGF,qBACE,+BACA,mBACA,iBAEF,+BACE,0EAEF,0CACE,+BACE,0EAGJ,sDACE,mBAEF,+BACE,kDACA,qBACA,mBA3LF,4BA6LE,cACA,iBACA,kBA/LF,gBAiME,iBAEF,uCACE,mBACA,aACA,yBACA,iBAEF,iCACE,8BACA,oCACA,sBACA,eACA,cACA,cACA,eAEF,qGAGE,uCArNF,qBAuNE,eACA,YACA,kBAzNF,eA4NA,gCACE,kCACA,mBAEF,qEAEE,8BACA,uBAEF,8BACE,gBAEF,sCAxOA,8BA0OE,mBACA,mBAEF,2CACE,YACA,aACA,gBACA,YACA,gBACA,WAQF,6DACE,4BACA,6BA7PF,SAgQA,+DACE,yBACA,0BAlQF,iBAqQA,oCACE,iCACA,eACA,mBACA,aACA,qBAEF,kCACE,+BAEF,4BACE,kBACA,mBACA,oBAIF,sFAGE,qBACA,qBACA,qBAGF,+BACE,kBAEF,8BACE,+BACA,iBACA,gBACA,mBACA,mBAEF,6BACE,qCAzSF,sBA2SE,iCACA,iBACA,gBACA,kBA9SF,uBAgTE,yBACA,sBAEF,+BACE,mBACA,aACA,UAEF,oEACE,+BAKF,uCACE,wBAEF,yCACE,iCAEF,qEACE,iCACA,eAEF,2EACE,iCACA,eAEF,yCACE,gBACA,UAEF,uDACE,UAEF,kCAnVA,wBAsVA,iCACE,mBACA,aACA,UACA,mBCpVF,WACE,mBAEF,qBACE,kBAEF,uBACE,YACA,kBACA,kBACA,QAEF,6BACE,kEACA,4BACA,gCACA,WACA,qBACA,YACA,cACA,kBACA,YACA,WAEF,sDAEE,UAEF,iDAEE,UAEF,iBACE,4BACA,mBAxCF,iBA0CE,oBAEF,qBA5CA,wBA+CA,oBACE,eACA,qBACA,mBACA,gBACA,gBACA,eACA,qBChDF,UACE,aACA,cACA,uCACA,mBAEF,kCAEE,aACA,eACA,mBACA,cAEF,eACE,mBACA,aAEF,iBACE,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",
"names": []
}
diff --git a/static/frontend/unit/main/main.ts b/static/frontend/unit/main/main.ts
index d23dfb3..8c11915 100644
--- a/static/frontend/unit/main/main.ts
+++ b/static/frontend/unit/main/main.ts
@@ -40,6 +40,10 @@
const readmeCollapse = document.querySelector('.js-readmeCollapse');
const mobileNavSelect = document.querySelector<HTMLSelectElement>('.DocNavMobile-select');
if (readme && readmeContent && readmeOutline && readmeExpand.length && readmeCollapse) {
+ if (readme.clientHeight > 320) {
+ readme?.classList.remove('UnitReadme--expanded');
+ readme?.classList.add('UnitReadme--toggle');
+ }
if (window.location.hash.includes('readme')) {
expandReadme();
}
diff --git "a/tests/e2e/__image_snapshots__/ci/unit-desktop--github.com-jba-bit\043section-readme-snap.png" "b/tests/e2e/__image_snapshots__/ci/unit-desktop--github.com-jba-bit\043section-readme-snap.png"
index 6abad4d..0d9bf0d 100644
--- "a/tests/e2e/__image_snapshots__/ci/unit-desktop--github.com-jba-bit\043section-readme-snap.png"
+++ "b/tests/e2e/__image_snapshots__/ci/unit-desktop--github.com-jba-bit\043section-readme-snap.png"
Binary files differ
diff --git a/tests/e2e/__image_snapshots__/ci/unit-desktop--github.com-jba-bit-snap.png b/tests/e2e/__image_snapshots__/ci/unit-desktop--github.com-jba-bit-snap.png
index c28dd4b..f58788f 100644
--- a/tests/e2e/__image_snapshots__/ci/unit-desktop--github.com-jba-bit-snap.png
+++ b/tests/e2e/__image_snapshots__/ci/unit-desktop--github.com-jba-bit-snap.png
Binary files differ
diff --git a/tests/e2e/__image_snapshots__/ci/unit-desktop--rsc.io-quote-snap.png b/tests/e2e/__image_snapshots__/ci/unit-desktop--rsc.io-quote-snap.png
index dcd5a5e..ccf9955 100644
--- a/tests/e2e/__image_snapshots__/ci/unit-desktop--rsc.io-quote-snap.png
+++ b/tests/e2e/__image_snapshots__/ci/unit-desktop--rsc.io-quote-snap.png
Binary files differ
diff --git "a/tests/e2e/__image_snapshots__/ci/unit-mobile--github.com-jba-bit\043section-readme-snap.png" "b/tests/e2e/__image_snapshots__/ci/unit-mobile--github.com-jba-bit\043section-readme-snap.png"
index f977e97..0decaa4 100644
--- "a/tests/e2e/__image_snapshots__/ci/unit-mobile--github.com-jba-bit\043section-readme-snap.png"
+++ "b/tests/e2e/__image_snapshots__/ci/unit-mobile--github.com-jba-bit\043section-readme-snap.png"
Binary files differ
diff --git a/tests/e2e/__image_snapshots__/ci/unit-mobile--github.com-jba-bit-snap.png b/tests/e2e/__image_snapshots__/ci/unit-mobile--github.com-jba-bit-snap.png
index dfafef4..3a69031 100644
--- a/tests/e2e/__image_snapshots__/ci/unit-mobile--github.com-jba-bit-snap.png
+++ b/tests/e2e/__image_snapshots__/ci/unit-mobile--github.com-jba-bit-snap.png
Binary files differ
diff --git a/tests/e2e/__image_snapshots__/ci/unit-mobile--rsc.io-quote-snap.png b/tests/e2e/__image_snapshots__/ci/unit-mobile--rsc.io-quote-snap.png
index 747270c..01287af 100644
--- a/tests/e2e/__image_snapshots__/ci/unit-mobile--rsc.io-quote-snap.png
+++ b/tests/e2e/__image_snapshots__/ci/unit-mobile--rsc.io-quote-snap.png
Binary files differ