From fe6e1c5ed6d401e3d1d943381afd70fd4aef5231 Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Fri, 22 Jul 2022 18:45:02 +0100 Subject: [PATCH] initial dialog implementation --- .../javascripts/primer_view_components.js | 2 +- .../javascripts/primer_view_components.js.map | 2 +- app/components/primer/alpha/dialog.html.erb | 8 + app/components/primer/alpha/dialog.rb | 127 +++++++++++++++ app/components/primer/alpha/dialog/body.rb | 22 +++ app/components/primer/alpha/dialog/footer.rb | 25 +++ .../primer/alpha/dialog/header.html.erb | 13 ++ app/components/primer/alpha/dialog/header.rb | 32 ++++ .../primer/alpha/modal-dialog-element.ts | 150 ++++++++++++++++++ app/components/primer/primer.ts | 1 + .../src/@primer/gatsby-theme-doctocat/nav.yml | 2 + lib/tasks/docs.rake | 1 + static/arguments.yml | 30 ++++ static/audited_at.json | 4 + static/classes.yml | 17 ++ static/constants.json | 29 +++- static/statuses.json | 4 + stories/primer/alpha/dialog_stories.rb | 20 +++ test/components/component_test.rb | 8 + test/components/primer/alpha/dialog_test.rb | 75 +++++++++ 20 files changed, 569 insertions(+), 3 deletions(-) create mode 100644 app/components/primer/alpha/dialog.html.erb create mode 100644 app/components/primer/alpha/dialog.rb create mode 100644 app/components/primer/alpha/dialog/body.rb create mode 100644 app/components/primer/alpha/dialog/footer.rb create mode 100644 app/components/primer/alpha/dialog/header.html.erb create mode 100644 app/components/primer/alpha/dialog/header.rb create mode 100644 app/components/primer/alpha/modal-dialog-element.ts create mode 100644 stories/primer/alpha/dialog_stories.rb create mode 100644 test/components/primer/alpha/dialog_test.rb diff --git a/app/assets/javascripts/primer_view_components.js b/app/assets/javascripts/primer_view_components.js index 8a1ca473ee..4c9a5d10eb 100644 --- a/app/assets/javascripts/primer_view_components.js +++ b/app/assets/javascripts/primer_view_components.js @@ -1,2 +1,2 @@ -const t=!!navigator.userAgent.match(/Macintosh/);class e{constructor(e,n){this.input=e,this.list=n,this.isComposing=!1,n.id||(n.id=`combobox-${Math.random().toString().slice(2,6)}`),this.keyboardEventHandler=e=>function(e,n){if(e.shiftKey||e.metaKey||e.altKey)return;if(!t&&e.ctrlKey)return;if(n.isComposing)return;switch(e.key){case"Enter":case"Tab":(function(t,e){const n=e.querySelector('[aria-selected="true"]');return!!n&&("true"===n.getAttribute("aria-disabled")||n.click(),!0)})(n.input,n.list)&&e.preventDefault();break;case"Escape":n.clearSelection();break;case"ArrowDown":n.navigate(1),e.preventDefault();break;case"ArrowUp":n.navigate(-1),e.preventDefault();break;case"n":t&&e.ctrlKey&&(n.navigate(1),e.preventDefault());break;case"p":t&&e.ctrlKey&&(n.navigate(-1),e.preventDefault());break;default:if(e.ctrlKey)break;n.clearSelection()}}(e,this),this.compositionEventHandler=t=>function(t,e){e.isComposing="compositionstart"===t.type;if(!document.getElementById(e.input.getAttribute("aria-controls")||""))return;e.clearSelection()}(t,this),this.inputHandler=this.clearSelection.bind(this),e.setAttribute("role","combobox"),e.setAttribute("aria-controls",n.id),e.setAttribute("aria-expanded","false"),e.setAttribute("aria-autocomplete","list"),e.setAttribute("aria-haspopup","listbox")}destroy(){this.clearSelection(),this.stop(),this.input.removeAttribute("role"),this.input.removeAttribute("aria-controls"),this.input.removeAttribute("aria-expanded"),this.input.removeAttribute("aria-autocomplete"),this.input.removeAttribute("aria-haspopup")}start(){this.input.setAttribute("aria-expanded","true"),this.input.addEventListener("compositionstart",this.compositionEventHandler),this.input.addEventListener("compositionend",this.compositionEventHandler),this.input.addEventListener("input",this.inputHandler),this.input.addEventListener("keydown",this.keyboardEventHandler),this.list.addEventListener("click",n)}stop(){this.clearSelection(),this.input.setAttribute("aria-expanded","false"),this.input.removeEventListener("compositionstart",this.compositionEventHandler),this.input.removeEventListener("compositionend",this.compositionEventHandler),this.input.removeEventListener("input",this.inputHandler),this.input.removeEventListener("keydown",this.keyboardEventHandler),this.list.removeEventListener("click",n)}navigate(t=1){const e=Array.from(this.list.querySelectorAll('[aria-selected="true"]')).filter(i)[0],n=Array.from(this.list.querySelectorAll('[role="option"]')).filter(i),s=n.indexOf(e);if(s===n.length-1&&1===t||0===s&&-1===t)return this.clearSelection(),void this.input.focus();let r=1===t?0:n.length-1;if(e&&s>=0){const e=s+t;e>=0&&e0||t.offsetHeight>0)}function o(t,e){(function(t,e){const n=t.scrollTop,i=n+t.clientHeight,o=e.offsetTop,s=o+e.clientHeight;return o>=n&&s<=i})(t,e)||(t.scrollTop=e.offsetTop)}const s=window.testScreenReaderDelay||100;class r{constructor(t,n,i,o=!1){var s;if(this.container=t,this.input=n,this.results=i,this.combobox=new e(n,i),this.feedback=document.getElementById(`${this.results.id}-feedback`),this.autoselectEnabled=o,this.clearButton=document.getElementById(`${this.input.id||this.input.name}-clear`),this.clientOptions=i.querySelectorAll("[role=option]"),this.feedback&&(this.feedback.setAttribute("aria-live","polite"),this.feedback.setAttribute("aria-atomic","true")),this.clearButton&&!this.clearButton.getAttribute("aria-label")){const t=document.querySelector(`label[for="${this.input.name}"]`);this.clearButton.setAttribute("aria-label","clear:"),this.clearButton.setAttribute("aria-labelledby",`${this.clearButton.id} ${(null==t?void 0:t.id)||""}`)}this.input.getAttribute("aria-expanded")||this.input.setAttribute("aria-expanded","false"),this.results.hidden=!0,this.results.setAttribute("aria-label","results"),this.input.setAttribute("autocomplete","off"),this.input.setAttribute("spellcheck","false"),this.interactingWithList=!1,this.onInputChange=function(t,e=0){let n;return function(...i){clearTimeout(n),n=window.setTimeout((()=>{clearTimeout(n),t(...i)}),e)}}(this.onInputChange.bind(this),300),this.onResultsMouseDown=this.onResultsMouseDown.bind(this),this.onInputBlur=this.onInputBlur.bind(this),this.onInputFocus=this.onInputFocus.bind(this),this.onKeydown=this.onKeydown.bind(this),this.onCommit=this.onCommit.bind(this),this.handleClear=this.handleClear.bind(this),this.input.addEventListener("keydown",this.onKeydown),this.input.addEventListener("focus",this.onInputFocus),this.input.addEventListener("blur",this.onInputBlur),this.input.addEventListener("input",this.onInputChange),this.results.addEventListener("mousedown",this.onResultsMouseDown),this.results.addEventListener("combobox-commit",this.onCommit),null===(s=this.clearButton)||void 0===s||s.addEventListener("click",this.handleClear)}destroy(){this.input.removeEventListener("keydown",this.onKeydown),this.input.removeEventListener("focus",this.onInputFocus),this.input.removeEventListener("blur",this.onInputBlur),this.input.removeEventListener("input",this.onInputChange),this.results.removeEventListener("mousedown",this.onResultsMouseDown),this.results.removeEventListener("combobox-commit",this.onCommit)}handleClear(t){t.preventDefault(),"true"===this.input.getAttribute("aria-expanded")&&(this.input.setAttribute("aria-expanded","false"),this.updateFeedbackForScreenReaders("Results hidden.")),this.input.value="",this.container.value="",this.input.focus(),this.input.dispatchEvent(new Event("change")),this.container.open=!1}onKeydown(t){if("Enter"===t.key&&this.container.open&&this.autoselectEnabled){const e=this.results.children[0];e&&(t.stopPropagation(),t.preventDefault(),this.onCommit({target:e}))}if("Escape"===t.key&&this.container.open)this.container.open=!1,t.stopPropagation(),t.preventDefault();else if(t.altKey&&"ArrowUp"===t.key&&this.container.open)this.container.open=!1,t.stopPropagation(),t.preventDefault();else if(t.altKey&&"ArrowDown"===t.key&&!this.container.open){if(!this.input.value.trim())return;this.container.open=!0,t.stopPropagation(),t.preventDefault()}}onInputFocus(){this.fetchResults()}onInputBlur(){this.interactingWithList?this.interactingWithList=!1:this.container.open=!1}onCommit({target:t}){const e=t;if(!(e instanceof HTMLElement))return;if(this.container.open=!1,e instanceof HTMLAnchorElement)return;const n=e.getAttribute("data-autocomplete-value")||e.textContent;this.updateFeedbackForScreenReaders(`${e.textContent||""} selected.`),this.container.value=n,n||this.updateFeedbackForScreenReaders("Results hidden.")}onResultsMouseDown(){this.interactingWithList=!0}onInputChange(){this.feedback&&this.feedback.textContent&&(this.feedback.textContent=""),this.container.removeAttribute("value"),this.fetchResults()}identifyOptions(){let t=0;for(const e of this.results.querySelectorAll('[role="option"]:not([id])'))e.id=`${this.results.id}-option-${t++}`}updateFeedbackForScreenReaders(t){setTimeout((()=>{this.feedback&&(this.feedback.textContent=t)}),s)}fetchResults(){const t=this.input.value.trim();if(!t)return void(this.container.open=!1);const e=this.container.src;if(!e)return;const n=new URL(e,window.location.href),i=new URLSearchParams(n.search.slice(1));i.append("q",t),n.search=i.toString(),this.container.dispatchEvent(new CustomEvent("loadstart")),this.container.fetchResult(this.input,n.toString()).then((t=>{this.results.innerHTML=t,this.identifyOptions();const e=this.results.querySelectorAll('[role="option"]'),n=!!e.length,i=e.length,[o]=e,s=null==o?void 0:o.textContent;this.autoselectEnabled&&s?this.updateFeedbackForScreenReaders(`${i} results. ${s} is the top result: Press Enter to activate.`):this.updateFeedbackForScreenReaders(`${i||"No"} results.`),this.container.open=n,this.container.dispatchEvent(new CustomEvent("load")),this.container.dispatchEvent(new CustomEvent("loadend"))})).catch((()=>{this.container.dispatchEvent(new CustomEvent("error")),this.container.dispatchEvent(new CustomEvent("loadend"))}))}open(){this.results.hidden&&(this.combobox.start(),this.results.hidden=!1)}close(){this.results.hidden||(this.combobox.stop(),this.results.hidden=!0)}}class a extends CustomEvent{constructor(t,e){super(t,e),this.relatedTarget=e.relatedTarget}}const c=new WeakMap;function l(t,e){const n=new XMLHttpRequest;return n.open("GET",e,!0),n.setRequestHeader("Accept","text/fragment+html"),function(t,e){const n=c.get(t);n&&n.abort();c.set(t,e);const i=()=>c.delete(t),o=function(t){return new Promise(((e,n)=>{t.onload=function(){t.status>=200&&t.status<300?e(t.responseText):n(new Error(t.responseText))},t.onerror=n,t.send()}))}(e);return o.then(i,i),o}(t,n)}const u=new WeakMap;class d extends HTMLElement{constructor(){super(...arguments),this.fetchResult=l}connectedCallback(){const t=this.getAttribute("for");if(!t)return;const e=this.querySelector("input"),n=document.getElementById(t);if(!(e instanceof HTMLInputElement&&n))return;const i="true"===this.getAttribute("data-autoselect");u.set(this,new r(this,e,n,i)),n.setAttribute("role","listbox")}disconnectedCallback(){const t=u.get(this);t&&(t.destroy(),u.delete(this))}get src(){return this.getAttribute("src")||""}set src(t){this.setAttribute("src",t)}get value(){return this.getAttribute("value")||""}set value(t){this.setAttribute("value",t)}get open(){return this.hasAttribute("open")}set open(t){t?this.setAttribute("open",""):this.removeAttribute("open")}static get observedAttributes(){return["open","value"]}attributeChangedCallback(t,e,n){if(e===n)return;const i=u.get(this);if(i)switch(t){case"open":null===n?i.close():i.open();break;case"value":null!==n&&(i.input.value=n),this.dispatchEvent(new a("auto-complete-change",{bubbles:!0,relatedTarget:i.input}))}}}function h(t){if("clipboard"in navigator)return navigator.clipboard.writeText(t.textContent);const e=getSelection();if(null==e)return Promise.reject(new Error);e.removeAllRanges();const n=document.createRange();return n.selectNodeContents(t),e.addRange(n),document.execCommand("copy"),e.removeAllRanges(),Promise.resolve()}function f(t){if("clipboard"in navigator)return navigator.clipboard.writeText(t);const e=document.body;if(!e)return Promise.reject(new Error);const n=function(t){const e=document.createElement("pre");return e.style.width="1px",e.style.height="1px",e.style.position="fixed",e.style.top="5px",e.textContent=t,e}(t);return e.appendChild(n),h(n),e.removeChild(n),Promise.resolve()}function m(t){const e=t.getAttribute("for"),n=t.getAttribute("value");function i(){t.dispatchEvent(new CustomEvent("clipboard-copy",{bubbles:!0}))}if(n)f(n).then(i);else if(e){const n="getRootNode"in Element.prototype?t.getRootNode():t.ownerDocument;if(!(n instanceof Document||"ShadowRoot"in window&&n instanceof ShadowRoot))return;const s=n.getElementById(e);s&&(o=s,o instanceof HTMLInputElement||o instanceof HTMLTextAreaElement?f(o.value):o instanceof HTMLAnchorElement&&o.hasAttribute("href")?f(o.href):h(o)).then(i)}var o}function p(t){const e=t.currentTarget;e instanceof HTMLElement&&m(e)}function b(t){if(" "===t.key||"Enter"===t.key){const e=t.currentTarget;e instanceof HTMLElement&&(t.preventDefault(),m(e))}}function g(t){t.currentTarget.addEventListener("keydown",b)}function w(t){t.currentTarget.removeEventListener("keydown",b)}window.customElements.get("auto-complete")||(window.AutocompleteElement=d,window.customElements.define("auto-complete",d));class v extends HTMLElement{constructor(){super(),this.addEventListener("click",p),this.addEventListener("focus",g),this.addEventListener("blur",w)}connectedCallback(){this.hasAttribute("tabindex")||this.setAttribute("tabindex","0"),this.hasAttribute("role")||this.setAttribute("role","button")}get value(){return this.getAttribute("value")||""}set value(t){this.setAttribute("value",t)}}window.customElements.get("clipboard-copy")||(window.ClipboardCopyElement=v,window.customElements.define("clipboard-copy",v));function y(t){t.style.display="inline-block"}function E(t){t.style.display="none"}const A=new WeakMap;function x(t){return Array.from(t.querySelectorAll('[role="tablist"] [role="tab"]')).filter((e=>e instanceof HTMLElement&&e.closest(t.tagName)===t))}document.addEventListener("clipboard-copy",(function({target:t}){if(!(t instanceof HTMLElement))return;if(!t.hasAttribute("data-view-component"))return;const e=A.get(t);e?(clearTimeout(e),A.delete(t)):function(t){const[e,n]=t.querySelectorAll(".octicon");e&&n&&(E(e),y(n))}(t),A.set(t,setTimeout((()=>{!function(t){const[e,n]=t.querySelectorAll(".octicon");e&&n&&(y(e),E(n))}(t),A.delete(t)}),2e3))}));class k extends HTMLElement{constructor(){super(),this.addEventListener("keydown",(t=>{const e=t.target;if(!(e instanceof HTMLElement))return;if(e.closest(this.tagName)!==this)return;if("tab"!==e.getAttribute("role")&&!e.closest('[role="tablist"]'))return;const n=x(this),i=n.indexOf(n.find((t=>t.matches('[aria-selected="true"]'))));if("ArrowRight"===t.code){let t=i+1;t>=n.length&&(t=0),M(this,t)}else if("ArrowLeft"===t.code){let t=i-1;t<0&&(t=n.length-1),M(this,t)}else"Home"===t.code?(M(this,0),t.preventDefault()):"End"===t.code&&(M(this,n.length-1),t.preventDefault())})),this.addEventListener("click",(t=>{const e=x(this);if(!(t.target instanceof Element))return;if(t.target.closest(this.tagName)!==this)return;const n=t.target.closest('[role="tab"]');if(!(n instanceof HTMLElement&&n.closest('[role="tablist"]')))return;M(this,e.indexOf(n))}))}connectedCallback(){for(const t of x(this))t.hasAttribute("aria-selected")||t.setAttribute("aria-selected","false"),t.hasAttribute("tabindex")||("true"===t.getAttribute("aria-selected")?t.setAttribute("tabindex","0"):t.setAttribute("tabindex","-1"))}}function M(t,e){const n=x(t),i=Array.from(t.querySelectorAll('[role="tabpanel"]')).filter((e=>e.closest(t.tagName)===t)),o=n[e],s=i[e];if(!!t.dispatchEvent(new CustomEvent("tab-container-change",{bubbles:!0,cancelable:!0,detail:{relatedTarget:s}}))){for(const t of n)t.setAttribute("aria-selected","false"),t.setAttribute("tabindex","-1");for(const t of i)t.hidden=!0,t.hasAttribute("tabindex")||t.hasAttribute("data-tab-container-no-tabstop")||t.setAttribute("tabindex","0");o.setAttribute("aria-selected","true"),o.setAttribute("tabindex","0"),o.focus(),s.hidden=!1,t.dispatchEvent(new CustomEvent("tab-container-changed",{bubbles:!0,detail:{relatedTarget:s}}))}}window.customElements.get("tab-container")||(window.TabContainerElement=k,window.customElements.define("tab-container",k));const T=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],L=["January","February","March","April","May","June","July","August","September","October","November","December"];function C(t){return`0${t}`.slice(-2)}function S(t,e){const n=t.getDay(),i=t.getDate(),o=t.getMonth(),s=t.getFullYear(),r=t.getHours(),a=t.getMinutes(),c=t.getSeconds();return e.replace(/%([%aAbBcdeHIlmMpPSwyYZz])/g,(function(e){let l;switch(e[1]){case"%":return"%";case"a":return T[n].slice(0,3);case"A":return T[n];case"b":return L[o].slice(0,3);case"B":return L[o];case"c":return t.toString();case"d":return C(i);case"e":return String(i);case"H":return C(r);case"I":return C(S(t,"%l"));case"l":return String(0===r||12===r?12:(r+12)%12);case"m":return C(o+1);case"M":return C(a);case"p":return r>11?"PM":"AM";case"P":return r>11?"pm":"am";case"S":return C(c);case"w":return String(n);case"y":return C(s%100);case"Y":return String(s);case"Z":return l=t.toString().match(/\((\w+)\)$/),l?l[1]:"";case"z":return l=t.toString().match(/\w([+-]\d\d\d\d) /),l?l[1]:""}return""}))}function H(t){let e;return function(){if(e)return e;if("Intl"in window)try{return e=new Intl.DateTimeFormat(void 0,t),e}catch(t){if(!(t instanceof RangeError))throw t}}}let D=null;const $=H({day:"numeric",month:"short"});function R(){if(null!==D)return D;const t=$();if(t){const e=t.format(new Date(0));return D=!!e.match(/^\d/),D}return!1}let F=null;const I=H({day:"numeric",month:"short",year:"numeric"});function q(t){const e=t.closest("[lang]");return e instanceof HTMLElement&&e.lang?e.lang:"default"}const W=new WeakMap;class B extends HTMLElement{static get observedAttributes(){return["datetime","day","format","lang","hour","minute","month","second","title","weekday","year","time-zone-name"]}connectedCallback(){const t=this.getFormattedTitle();t&&!this.hasAttribute("title")&&this.setAttribute("title",t);const e=this.getFormattedDate();e&&(this.textContent=e)}attributeChangedCallback(t,e,n){const i=this.getFormattedTitle();if("datetime"===t){const t=Date.parse(n);isNaN(t)?W.delete(this):W.set(this,new Date(t))}const o=this.getFormattedTitle(),s=this.getAttribute("title");"title"===t||!o||s&&s!==i||this.setAttribute("title",o);const r=this.getFormattedDate();r&&(this.textContent=r)}get date(){return W.get(this)}getFormattedTitle(){const t=this.date;if(!t)return;const e=O();if(e)return e.format(t);try{return t.toLocaleString()}catch(e){if(e instanceof RangeError)return t.toString();throw e}}getFormattedDate(){}}const O=H({day:"numeric",month:"short",year:"numeric",hour:"numeric",minute:"2-digit",timeZoneName:"short"}),Y=new WeakMap;class X extends B{attributeChangedCallback(t,e,n){"hour"!==t&&"minute"!==t&&"second"!==t&&"time-zone-name"!==t||Y.delete(this),super.attributeChangedCallback(t,e,n)}getFormattedDate(){const t=this.date;if(!t)return;return`${function(t,e){const n={weekday:{short:"%a",long:"%A"},day:{numeric:"%e","2-digit":"%d"},month:{short:"%b",long:"%B"},year:{numeric:"%Y","2-digit":"%y"}};let i=R()?"weekday day month year":"weekday month day, year";for(const e in n){const o=n[e][t.getAttribute(e)||""];i=i.replace(e,o||"")}return i=i.replace(/(\s,)|(,\s$)/,""),S(e,i).replace(/\s+/," ").trim()}(this,t)||""} ${function(t,e){const n={},i=t.getAttribute("hour");"numeric"!==i&&"2-digit"!==i||(n.hour=i);const o=t.getAttribute("minute");"numeric"!==o&&"2-digit"!==o||(n.minute=o);const s=t.getAttribute("second");"numeric"!==s&&"2-digit"!==s||(n.second=s);const r=t.getAttribute("time-zone-name");"short"!==r&&"long"!==r||(n.timeZoneName=r);if(0===Object.keys(n).length)return;let a=Y.get(t);a||(a=H(n),Y.set(t,a));const c=a();if(c)return c.format(e);return S(e,n.second?"%H:%M:%S":"%H:%M")}(this,t)||""}`.trim()}}window.customElements.get("local-time")||(window.LocalTimeElement=X,window.customElements.define("local-time",X));class N{constructor(t,e){this.date=t,this.locale=e}toString(){const t=this.timeElapsed();if(t)return t;{const t=this.timeAhead();return t||`on ${this.formatDate()}`}}timeElapsed(){const t=(new Date).getTime()-this.date.getTime(),e=Math.round(t/1e3),n=Math.round(e/60),i=Math.round(n/60),o=Math.round(i/24);return t>=0&&o<30?this.timeAgoFromMs(t):null}timeAhead(){const t=this.date.getTime()-(new Date).getTime(),e=Math.round(t/1e3),n=Math.round(e/60),i=Math.round(n/60),o=Math.round(i/24);return t>=0&&o<30?this.timeUntil():null}timeAgo(){const t=(new Date).getTime()-this.date.getTime();return this.timeAgoFromMs(t)}timeAgoFromMs(t){const e=Math.round(t/1e3),n=Math.round(e/60),i=Math.round(n/60),o=Math.round(i/24),s=Math.round(o/30),r=Math.round(s/12);return t<0||e<10?K(this.locale,0,"second"):e<45?K(this.locale,-e,"second"):e<90||n<45?K(this.locale,-n,"minute"):n<90||i<24?K(this.locale,-i,"hour"):i<36||o<30?K(this.locale,-o,"day"):s<18?K(this.locale,-s,"month"):K(this.locale,-r,"year")}microTimeAgo(){const t=(new Date).getTime()-this.date.getTime(),e=Math.round(t/1e3),n=Math.round(e/60),i=Math.round(n/60),o=Math.round(i/24),s=Math.round(o/30),r=Math.round(s/12);return n<1?"1m":n<60?`${n}m`:i<24?`${i}h`:o<365?`${o}d`:`${r}y`}timeUntil(){const t=this.date.getTime()-(new Date).getTime();return this.timeUntilFromMs(t)}timeUntilFromMs(t){const e=Math.round(t/1e3),n=Math.round(e/60),i=Math.round(n/60),o=Math.round(i/24),s=Math.round(o/30),r=Math.round(s/12);return s>=18||s>=12?K(this.locale,r,"year"):o>=45||o>=30?K(this.locale,s,"month"):i>=36||i>=24?K(this.locale,o,"day"):n>=90||n>=45?K(this.locale,i,"hour"):e>=90||e>=45?K(this.locale,n,"minute"):K(this.locale,e>=10?e:0,"second")}microTimeUntil(){const t=this.date.getTime()-(new Date).getTime(),e=Math.round(t/1e3),n=Math.round(e/60),i=Math.round(n/60),o=Math.round(i/24),s=Math.round(o/30),r=Math.round(s/12);return o>=365?`${r}y`:i>=24?`${o}d`:n>=60?`${i}h`:n>1?`${n}m`:"1m"}formatDate(){let t=R()?"%e %b":"%b %e";var e;return e=this.date,(new Date).getUTCFullYear()!==e.getUTCFullYear()&&(t+=function(){if(null!==F)return F;const t=I();if(t){const e=t.format(new Date(0));return F=!!e.match(/\d,/),F}return!0}()?", %Y":" %Y"),S(this.date,t)}formatTime(){const t=P();return t?t.format(this.date):S(this.date,"%l:%M%P")}}function K(t,e,n){const i=function(t,e){if("Intl"in window&&"RelativeTimeFormat"in window.Intl)try{return new Intl.RelativeTimeFormat(t,e)}catch(t){if(!(t instanceof RangeError))throw t}}(t,{numeric:"auto"});return i?i.format(e,n):function(t,e){if(0===t)switch(e){case"year":case"quarter":case"month":case"week":return`this ${e}`;case"day":return"today";case"hour":case"minute":return`in 0 ${e}s`;case"second":return"now"}else if(1===t)switch(e){case"year":case"quarter":case"month":case"week":return`next ${e}`;case"day":return"tomorrow";case"hour":case"minute":case"second":return`in 1 ${e}`}else if(-1===t)switch(e){case"year":case"quarter":case"month":case"week":return`last ${e}`;case"day":return"yesterday";case"hour":case"minute":case"second":return`1 ${e} ago`}else if(t>1)switch(e){case"year":case"quarter":case"month":case"week":case"day":case"hour":case"minute":case"second":return`in ${t} ${e}s`}else if(t<-1)switch(e){case"year":case"quarter":case"month":case"week":case"day":case"hour":case"minute":case"second":return`${-t} ${e}s ago`}throw new RangeError(`Invalid unit argument for format() '${e}'`)}(e,n)}const P=H({hour:"numeric",minute:"2-digit"});class U extends B{getFormattedDate(){const t=this.date;if(t)return new N(t,q(this)).toString()}connectedCallback(){z.push(this),j||(Z(),j=window.setInterval(Z,6e4)),super.connectedCallback()}disconnectedCallback(){const t=z.indexOf(this);-1!==t&&z.splice(t,1),z.length||j&&(clearInterval(j),j=null)}}const z=[];let j;function Z(){let t,e,n;for(e=0,n=z.length;e=0&&n.classList.add("nwse"),["ne","sw"].indexOf(e)>=0&&n.classList.add("nesw"),Q.set(n,{startX:i.offsetLeft+(["se","ne"].indexOf(e)>=0?0:i.offsetWidth),startY:i.offsetTop+(["se","sw"].indexOf(e)>=0?0:i.offsetHeight)}),et(t)}else n.addEventListener("mousemove",tt),n.addEventListener("touchmove",tt,{passive:!0})}function ot(t,e,n,i=!0){let o=Math.max(Math.abs(e),Math.abs(n),10);const s=Q.get(t);if(!s)return;const{box:r,image:a}=_.get(t)||{};if(!r||!a)return;o=Math.min(o,n>0?a.height-s.startY:s.startY,e>0?a.width-s.startX:s.startX);const c=i?Math.round(Math.max(0,e>0?s.startX:s.startX-o)):r.offsetLeft,l=i?Math.round(Math.max(0,n>0?s.startY:s.startY-o)):r.offsetTop;r.style.left=`${c}px`,r.style.top=`${l}px`,r.style.width=`${o}px`,r.style.height=`${o}px`,at(t,{x:c,y:l,width:o,height:o})}function st(t){const{image:e}=_.get(t)||{};if(!e)return;const n=Math.round(e.clientWidth>e.clientHeight?e.clientHeight:e.clientWidth);Q.set(t,{startX:(e.clientWidth-n)/2,startY:(e.clientHeight-n)/2}),ot(t,n,n)}function rt(t){const e=t.currentTarget;e instanceof ct&&(V.delete(e),e.classList.remove("nwse","nesw"),e.removeEventListener("mousemove",et),e.removeEventListener("mousemove",tt),e.removeEventListener("touchmove",et),e.removeEventListener("touchmove",tt))}function at(t,e){const{image:n}=_.get(t)||{};if(!n)return;const i=n.naturalWidth/n.width;for(const n in e){const o=Math.round(e[n]*i);e[n]=o;const s=t.querySelector(`[data-image-crop-input='${n}']`);s instanceof HTMLInputElement&&(s.value=o.toString())}t.dispatchEvent(new CustomEvent("image-crop-change",{bubbles:!0,detail:e}))}class ct extends HTMLElement{connectedCallback(){if(_.has(this))return;const t=this.attachShadow({mode:"open"});t.innerHTML='\n\n\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n';const e=t.querySelector("[data-crop-box]");if(!(e instanceof HTMLElement))return;const n=t.querySelector("img");n instanceof HTMLImageElement&&(_.set(this,{box:e,image:n}),n.addEventListener("load",(()=>{this.loaded=!0,st(this)})),this.addEventListener("mouseleave",rt),this.addEventListener("touchend",rt),this.addEventListener("mouseup",rt),e.addEventListener("mousedown",it),e.addEventListener("touchstart",it,{passive:!0}),this.addEventListener("keydown",tt),this.addEventListener("keydown",et),this.src&&(n.src=this.src))}static get observedAttributes(){return["src"]}get src(){return this.getAttribute("src")}set src(t){t?this.setAttribute("src",t):this.removeAttribute("src")}get loaded(){return this.hasAttribute("loaded")}set loaded(t){t?this.setAttribute("loaded",""):this.removeAttribute("loaded")}attributeChangedCallback(t,e,n){const{image:i}=_.get(this)||{};"src"===t&&(this.loaded=!1,i&&(i.src=n))}}window.customElements.get("image-crop")||(window.ImageCropElement=ct,window.customElements.define("image-crop",ct));class lt extends HTMLElement{get preload(){return this.hasAttribute("preload")}set preload(t){t?this.setAttribute("preload",""):this.removeAttribute("preload")}get src(){return this.getAttribute("src")||""}set src(t){this.setAttribute("src",t)}connectedCallback(){this.hasAttribute("role")||this.setAttribute("role","menu");const t=this.parentElement;if(!t)return;const e=t.querySelector("summary");e&&(e.setAttribute("aria-haspopup","menu"),e.hasAttribute("role")||e.setAttribute("role","button"));const n=[ht(t,"compositionstart",(t=>At(this,t))),ht(t,"compositionend",(t=>At(this,t))),ht(t,"click",(e=>wt(t,e))),ht(t,"change",(e=>wt(t,e))),ht(t,"keydown",(e=>function(t,e,n){if(!(n instanceof KeyboardEvent))return;if(t.querySelector("details[open]"))return;const i=ut.get(e);if(!i||i.isComposing)return;const o=n.target instanceof Element&&"SUMMARY"===n.target.tagName;switch(n.key){case"Escape":t.hasAttribute("open")&&(Et(t),n.preventDefault(),n.stopPropagation());break;case"ArrowDown":{o&&!t.hasAttribute("open")&&t.setAttribute("open","");const e=bt(t,!0);e&&e.focus(),n.preventDefault()}break;case"ArrowUp":{o&&!t.hasAttribute("open")&&t.setAttribute("open","");const e=bt(t,!1);e&&e.focus(),n.preventDefault()}break;case"n":if(gt&&n.ctrlKey){const e=bt(t,!0);e&&e.focus(),n.preventDefault()}break;case"p":if(gt&&n.ctrlKey){const e=bt(t,!1);e&&e.focus(),n.preventDefault()}break;case" ":case"Enter":{const e=document.activeElement;e instanceof HTMLElement&&yt(e)&&e.closest("details")===t&&(n.preventDefault(),n.stopPropagation(),e.click())}}}(t,this,e))),ht(t,"toggle",(()=>ft(t,this)),{once:!0}),ht(t,"toggle",(()=>function(t){if(!t.hasAttribute("open"))return;for(const e of document.querySelectorAll("details[open] > details-menu")){const n=e.closest("details");n&&n!==t&&!n.contains(t)&&n.removeAttribute("open")}}(t))),this.preload?ht(t,"mouseover",(()=>ft(t,this)),{once:!0}):dt,...mt(t)];ut.set(this,{subscriptions:n,loaded:!1,isComposing:!1})}disconnectedCallback(){const t=ut.get(this);if(t){ut.delete(this);for(const e of t.subscriptions)e.unsubscribe()}}}const ut=new WeakMap,dt={unsubscribe(){}};function ht(t,e,n,i=!1){return t.addEventListener(e,n,i),{unsubscribe:()=>{t.removeEventListener(e,n,i)}}}function ft(t,e){const n=e.getAttribute("src");if(!n)return;const i=ut.get(e);if(!i)return;if(i.loaded)return;i.loaded=!0;const o=e.querySelector("include-fragment");o&&!o.hasAttribute("src")&&(o.addEventListener("loadend",(()=>pt(t))),o.setAttribute("src",n))}function mt(t){let e=!1;return[ht(t,"mousedown",(()=>e=!0)),ht(t,"keydown",(()=>e=!1)),ht(t,"toggle",(()=>{t.hasAttribute("open")&&(pt(t)||e||function(t){const e=document.activeElement;if(e&&yt(e)&&t.contains(e))return;const n=bt(t,!0);n&&n.focus()}(t))}))]}function pt(t){if(!t.hasAttribute("open"))return!1;const e=t.querySelector("details-menu [autofocus]");return!!e&&(e.focus(),!0)}function bt(t,e){const n=Array.from(t.querySelectorAll('[role^="menuitem"]:not([hidden]):not([disabled]):not([aria-disabled="true"])')),i=document.activeElement,o=i instanceof HTMLElement?n.indexOf(i):-1,s=e?n[o+1]:n[o-1],r=e?n[0]:n[n.length-1];return s||r}const gt=navigator.userAgent.match(/Macintosh/);function wt(t,e){const n=e.target;if(n instanceof Element&&n.closest("details")===t)if("click"===e.type){const e=n.closest('[role="menuitem"], [role="menuitemradio"]');if(!e)return;const i=e.querySelector("input");if("LABEL"===e.tagName&&n===i)return;"LABEL"===e.tagName&&i&&!i.checked||vt(e,t)}else if("change"===e.type){const e=n.closest('[role="menuitemradio"], [role="menuitemcheckbox"]');e&&vt(e,t)}}function vt(t,e){if(t.hasAttribute("disabled")||"true"===t.getAttribute("aria-disabled"))return;const n=t.closest("details-menu");if(!n)return;n.dispatchEvent(new CustomEvent("details-menu-select",{cancelable:!0,detail:{relatedTarget:t}}))&&(!function(t,e){const n=e.querySelector("[data-menu-button]");if(!n)return;const i=function(t){if(!t)return null;const e=t.hasAttribute("data-menu-button-text")?t:t.querySelector("[data-menu-button-text]");return e?e.getAttribute("data-menu-button-text")||e.textContent:null}(t);if(i)n.textContent=i;else{const e=function(t){if(!t)return null;const e=t.hasAttribute("data-menu-button-contents")?t:t.querySelector("[data-menu-button-contents]");return e?e.innerHTML:null}(t);e&&(n.innerHTML=e)}}(t,e),function(t,e){for(const n of e.querySelectorAll('[role="menuitemradio"], [role="menuitemcheckbox"]')){const e=n.querySelector('input[type="radio"], input[type="checkbox"]');let i=(n===t).toString();e instanceof HTMLInputElement&&(i=e.indeterminate?"mixed":e.checked.toString()),n.setAttribute("aria-checked",i)}}(t,e),"menuitemcheckbox"!==t.getAttribute("role")&&Et(e),n.dispatchEvent(new CustomEvent("details-menu-selected",{detail:{relatedTarget:t}})))}function yt(t){const e=t.getAttribute("role");return"menuitem"===e||"menuitemcheckbox"===e||"menuitemradio"===e}function Et(t){if(!t.hasAttribute("open"))return;t.removeAttribute("open");const e=t.querySelector("summary");e&&e.focus()}function At(t,e){const n=ut.get(t);n&&(n.isComposing="compositionstart"===e.type)}function xt(t,e,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(t):i?i.value:e.get(t)}function kt(t,e,n,i,o){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?o.call(t,n):o?o.value=n:e.set(t,n),n}window.customElements.get("details-menu")||(window.DetailsMenuElement=lt,window.customElements.define("details-menu",lt));const Mt={"outside-top":["outside-bottom","outside-right","outside-left","outside-bottom"],"outside-bottom":["outside-top","outside-right","outside-left","outside-bottom"],"outside-left":["outside-right","outside-bottom","outside-top","outside-bottom"],"outside-right":["outside-left","outside-bottom","outside-top","outside-bottom"]},Tt={start:["end","center"],end:["start","center"],center:["end","start"]};function Lt(t,e,n={}){const i=function(t){let e=t.parentNode;for(;null!==e;){if(e instanceof HTMLElement&&"static"!==getComputedStyle(e).position)return e;e=e.parentNode}return document.body}(t),o=function(t){let e=t;for(;null!==e&&e!==document.body;){if("visible"!==getComputedStyle(e).overflow)break;e=e.parentNode}const n=e!==document.body&&e instanceof HTMLElement?e:document.body,i=n.getBoundingClientRect(),o=getComputedStyle(n),[s,r,a,c]=[o.borderTopWidth,o.borderLeftWidth,o.borderRightWidth,o.borderBottomWidth].map((t=>parseInt(t,10)||0));return{top:i.top+s,left:i.left+r,width:i.width-a-r,height:Math.max(i.height-s-c,n===document.body?window.innerHeight:-1/0)}}(i),s=getComputedStyle(i),r=i.getBoundingClientRect(),[a,c]=[s.borderTopWidth,s.borderLeftWidth].map((t=>parseInt(t,10)||0));return function(t,e,n,i,{side:o,align:s,allowOutOfBounds:r,anchorOffset:a,alignmentOffset:c}){const l={top:t.top-e.top,left:t.left-e.left,width:t.width,height:t.height};let u=Rt(n,i,o,s,a,c),d=o,h=s;if(u.top-=e.top,u.left-=e.left,!r){const r=Mt[o];let f=0;if(r){let t=o;for(;ft.width+l.left&&(u.left=t.width+l.left-n.width),r&&ft.height+l.top&&(u.top=t.height+l.top-n.height)}return Object.assign(Object.assign({},u),{anchorSide:d,anchorAlign:h})}(o,{top:r.top+a,left:r.left+c},t.getBoundingClientRect(),e instanceof Element?e.getBoundingClientRect():e,function(t={}){var e,n,i,o,s;const r=null!==(e=t.side)&&void 0!==e?e:Ct,a=null!==(n=t.align)&&void 0!==n?n:St;return{side:r,align:a,anchorOffset:null!==(i=t.anchorOffset)&&void 0!==i?i:"inside-center"===r?0:Ht,alignmentOffset:null!==(o=t.alignmentOffset)&&void 0!==o?o:"center"!==a&&r.startsWith("inside")?Dt:0,allowOutOfBounds:null!==(s=t.allowOutOfBounds)&&void 0!==s?s:$t}}(n))}const Ct="outside-bottom",St="start",Ht=4,Dt=4,$t=!1;function Rt(t,e,n,i,o,s){const r=e.left+e.width,a=e.top+e.height;let c=-1,l=-1;return"outside-top"===n?c=e.top-o-t.height:"outside-bottom"===n?c=a+o:"outside-left"===n?l=e.left-o-t.width:"outside-right"===n&&(l=r+o),"outside-top"!==n&&"outside-bottom"!==n||(l="start"===i?e.left+s:"center"===i?e.left-(t.width-e.width)/2+s:r-t.width-s),"outside-left"!==n&&"outside-right"!==n||(c="start"===i?e.top+s:"center"===i?e.top-(t.height-e.height)/2+s:a-t.height-s),"inside-top"===n?c=e.top+o:"inside-bottom"===n?c=a-o-t.height:"inside-left"===n?l=e.left+o:"inside-right"===n?l=r-o-t.width:"inside-center"===n&&(l=(r+e.left)/2-t.width/2+o),"inside-top"===n||"inside-bottom"===n?l="start"===i?e.left+s:"center"===i?e.left-(t.width-e.width)/2+s:r-t.width-s:"inside-left"!==n&&"inside-right"!==n&&"inside-center"!==n||(c="start"===i?e.top+s:"center"===i?e.top-(t.height-e.height)/2+s:a-t.height-s),{top:c,left:l}}function Ft(t,e,n,i){return"outside-top"===t||"outside-bottom"===t?e.topn.height+n.top:e.leftn.width+n.left}function It(t,e,n,i){return"end"===t?e.leftn.left+n.width||e.left\n ${this.styles()}\n \n \n `}if(this.hidden=!0,kt(this,Yt,!0,"f"),this.id||(this.id=`tooltip-${Date.now()}-${(1e4*Math.random()).toFixed(0)}`),!this.control)return;this.setAttribute("role","tooltip"),null===(t=xt(this,Wt,"f"))||void 0===t||t.abort(),kt(this,Wt,new AbortController,"f");const{signal:e}=xt(this,Wt,"f");this.addEventListener("mouseleave",this,{signal:e}),this.control.addEventListener("mouseenter",this,{signal:e}),this.control.addEventListener("mouseleave",this,{signal:e}),this.control.addEventListener("focus",this,{signal:e}),this.control.addEventListener("blur",this,{signal:e}),this.ownerDocument.addEventListener("keydown",this,{signal:e}),xt(this,qt,"m",Xt).call(this)}disconnectedCallback(){var t;null===(t=xt(this,Wt,"f"))||void 0===t||t.abort()}handleEvent(t){this.control&&("mouseenter"!==t.type&&"focus"!==t.type||!this.hidden?"blur"===t.type||"mouseleave"===t.type&&t.relatedTarget!==this.control&&t.relatedTarget!==this?this.hidden=!0:"keydown"!==t.type||"Escape"!==t.key||this.hidden||(this.hidden=!0):this.hidden=!1)}attributeChangedCallback(t){if("id"===t||"data-type"===t){if(!this.id||!this.control)return;if("label"===this.type)this.control.setAttribute("aria-labelledby",this.id);else{let t=this.control.getAttribute("aria-describedby");t=t?`${t} ${this.id}`:this.id,this.control.setAttribute("aria-describedby",t)}}else if(this.isConnected&&"hidden"===t)xt(this,qt,"m",Xt).call(this);else if("data-direction"===t){this.classList.remove(...Kt);const t=this.direction;"n"===t?(kt(this,Bt,"center","f"),kt(this,Ot,"outside-top","f")):"ne"===t?(kt(this,Bt,"start","f"),kt(this,Ot,"outside-top","f")):"e"===t?(kt(this,Bt,"center","f"),kt(this,Ot,"outside-right","f")):"se"===t?(kt(this,Bt,"start","f"),kt(this,Ot,"outside-bottom","f")):"s"===t?(kt(this,Bt,"center","f"),kt(this,Ot,"outside-bottom","f")):"sw"===t?(kt(this,Bt,"end","f"),kt(this,Ot,"outside-bottom","f")):"w"===t?(kt(this,Bt,"center","f"),kt(this,Ot,"outside-left","f")):"nw"===t&&(kt(this,Bt,"end","f"),kt(this,Ot,"outside-top","f"))}}}Wt=new WeakMap,Bt=new WeakMap,Ot=new WeakMap,Yt=new WeakMap,qt=new WeakSet,Xt=function(){if(this.hidden)this.classList.remove("tooltip-open",...Kt);else{this.classList.add("tooltip-open");for(const t of this.ownerDocument.querySelectorAll(this.tagName))t!==this&&(t.hidden=!0);xt(this,qt,"m",Nt).call(this)}},Nt=function(){if(!this.control)return;if(!xt(this,Yt,"f")||this.hidden)return;this.style.left="0px";const t=Lt(this,this.control,{side:xt(this,Ot,"f"),align:xt(this,Bt,"f"),anchorOffset:10}),e=t.anchorSide,n=t.anchorAlign;this.style.top=`${t.top}px`,this.style.left=`${t.left}px`;let i="s";i="outside-left"===e?"w":"outside-right"===e?"e":"outside-top"===e?"center"===n?"n":"start"===n?"ne":"nw":"center"===n?"s":"start"===n?"se":"sw",this.classList.add(`tooltip-${i}`)},Pt.observedAttributes=["data-type","data-direction","id","hidden"],window.customElements.get("tool-tip")||(window.ToolTipElement=Pt,window.customElements.define("tool-tip",Pt)); +const t=!!navigator.userAgent.match(/Macintosh/);class e{constructor(e,n){this.input=e,this.list=n,this.isComposing=!1,n.id||(n.id=`combobox-${Math.random().toString().slice(2,6)}`),this.keyboardEventHandler=e=>function(e,n){if(e.shiftKey||e.metaKey||e.altKey)return;if(!t&&e.ctrlKey)return;if(n.isComposing)return;switch(e.key){case"Enter":case"Tab":(function(t,e){const n=e.querySelector('[aria-selected="true"]');return!!n&&("true"===n.getAttribute("aria-disabled")||n.click(),!0)})(n.input,n.list)&&e.preventDefault();break;case"Escape":n.clearSelection();break;case"ArrowDown":n.navigate(1),e.preventDefault();break;case"ArrowUp":n.navigate(-1),e.preventDefault();break;case"n":t&&e.ctrlKey&&(n.navigate(1),e.preventDefault());break;case"p":t&&e.ctrlKey&&(n.navigate(-1),e.preventDefault());break;default:if(e.ctrlKey)break;n.clearSelection()}}(e,this),this.compositionEventHandler=t=>function(t,e){e.isComposing="compositionstart"===t.type;if(!document.getElementById(e.input.getAttribute("aria-controls")||""))return;e.clearSelection()}(t,this),this.inputHandler=this.clearSelection.bind(this),e.setAttribute("role","combobox"),e.setAttribute("aria-controls",n.id),e.setAttribute("aria-expanded","false"),e.setAttribute("aria-autocomplete","list"),e.setAttribute("aria-haspopup","listbox")}destroy(){this.clearSelection(),this.stop(),this.input.removeAttribute("role"),this.input.removeAttribute("aria-controls"),this.input.removeAttribute("aria-expanded"),this.input.removeAttribute("aria-autocomplete"),this.input.removeAttribute("aria-haspopup")}start(){this.input.setAttribute("aria-expanded","true"),this.input.addEventListener("compositionstart",this.compositionEventHandler),this.input.addEventListener("compositionend",this.compositionEventHandler),this.input.addEventListener("input",this.inputHandler),this.input.addEventListener("keydown",this.keyboardEventHandler),this.list.addEventListener("click",n)}stop(){this.clearSelection(),this.input.setAttribute("aria-expanded","false"),this.input.removeEventListener("compositionstart",this.compositionEventHandler),this.input.removeEventListener("compositionend",this.compositionEventHandler),this.input.removeEventListener("input",this.inputHandler),this.input.removeEventListener("keydown",this.keyboardEventHandler),this.list.removeEventListener("click",n)}navigate(t=1){const e=Array.from(this.list.querySelectorAll('[aria-selected="true"]')).filter(i)[0],n=Array.from(this.list.querySelectorAll('[role="option"]')).filter(i),s=n.indexOf(e);if(s===n.length-1&&1===t||0===s&&-1===t)return this.clearSelection(),void this.input.focus();let r=1===t?0:n.length-1;if(e&&s>=0){const e=s+t;e>=0&&e0||t.offsetHeight>0)}function o(t,e){(function(t,e){const n=t.scrollTop,i=n+t.clientHeight,o=e.offsetTop,s=o+e.clientHeight;return o>=n&&s<=i})(t,e)||(t.scrollTop=e.offsetTop)}const s=window.testScreenReaderDelay||100;class r{constructor(t,n,i,o=!1){var s;if(this.container=t,this.input=n,this.results=i,this.combobox=new e(n,i),this.feedback=document.getElementById(`${this.results.id}-feedback`),this.autoselectEnabled=o,this.clearButton=document.getElementById(`${this.input.id||this.input.name}-clear`),this.clientOptions=i.querySelectorAll("[role=option]"),this.feedback&&(this.feedback.setAttribute("aria-live","polite"),this.feedback.setAttribute("aria-atomic","true")),this.clearButton&&!this.clearButton.getAttribute("aria-label")){const t=document.querySelector(`label[for="${this.input.name}"]`);this.clearButton.setAttribute("aria-label","clear:"),this.clearButton.setAttribute("aria-labelledby",`${this.clearButton.id} ${(null==t?void 0:t.id)||""}`)}this.input.getAttribute("aria-expanded")||this.input.setAttribute("aria-expanded","false"),this.results.hidden=!0,this.results.setAttribute("aria-label","results"),this.input.setAttribute("autocomplete","off"),this.input.setAttribute("spellcheck","false"),this.interactingWithList=!1,this.onInputChange=function(t,e=0){let n;return function(...i){clearTimeout(n),n=window.setTimeout((()=>{clearTimeout(n),t(...i)}),e)}}(this.onInputChange.bind(this),300),this.onResultsMouseDown=this.onResultsMouseDown.bind(this),this.onInputBlur=this.onInputBlur.bind(this),this.onInputFocus=this.onInputFocus.bind(this),this.onKeydown=this.onKeydown.bind(this),this.onCommit=this.onCommit.bind(this),this.handleClear=this.handleClear.bind(this),this.input.addEventListener("keydown",this.onKeydown),this.input.addEventListener("focus",this.onInputFocus),this.input.addEventListener("blur",this.onInputBlur),this.input.addEventListener("input",this.onInputChange),this.results.addEventListener("mousedown",this.onResultsMouseDown),this.results.addEventListener("combobox-commit",this.onCommit),null===(s=this.clearButton)||void 0===s||s.addEventListener("click",this.handleClear)}destroy(){this.input.removeEventListener("keydown",this.onKeydown),this.input.removeEventListener("focus",this.onInputFocus),this.input.removeEventListener("blur",this.onInputBlur),this.input.removeEventListener("input",this.onInputChange),this.results.removeEventListener("mousedown",this.onResultsMouseDown),this.results.removeEventListener("combobox-commit",this.onCommit)}handleClear(t){t.preventDefault(),"true"===this.input.getAttribute("aria-expanded")&&(this.input.setAttribute("aria-expanded","false"),this.updateFeedbackForScreenReaders("Results hidden.")),this.input.value="",this.container.value="",this.input.focus(),this.input.dispatchEvent(new Event("change")),this.container.open=!1}onKeydown(t){if("Enter"===t.key&&this.container.open&&this.autoselectEnabled){const e=this.results.children[0];e&&(t.stopPropagation(),t.preventDefault(),this.onCommit({target:e}))}if("Escape"===t.key&&this.container.open)this.container.open=!1,t.stopPropagation(),t.preventDefault();else if(t.altKey&&"ArrowUp"===t.key&&this.container.open)this.container.open=!1,t.stopPropagation(),t.preventDefault();else if(t.altKey&&"ArrowDown"===t.key&&!this.container.open){if(!this.input.value.trim())return;this.container.open=!0,t.stopPropagation(),t.preventDefault()}}onInputFocus(){this.fetchResults()}onInputBlur(){this.interactingWithList?this.interactingWithList=!1:this.container.open=!1}onCommit({target:t}){const e=t;if(!(e instanceof HTMLElement))return;if(this.container.open=!1,e instanceof HTMLAnchorElement)return;const n=e.getAttribute("data-autocomplete-value")||e.textContent;this.updateFeedbackForScreenReaders(`${e.textContent||""} selected.`),this.container.value=n,n||this.updateFeedbackForScreenReaders("Results hidden.")}onResultsMouseDown(){this.interactingWithList=!0}onInputChange(){this.feedback&&this.feedback.textContent&&(this.feedback.textContent=""),this.container.removeAttribute("value"),this.fetchResults()}identifyOptions(){let t=0;for(const e of this.results.querySelectorAll('[role="option"]:not([id])'))e.id=`${this.results.id}-option-${t++}`}updateFeedbackForScreenReaders(t){setTimeout((()=>{this.feedback&&(this.feedback.textContent=t)}),s)}fetchResults(){const t=this.input.value.trim();if(!t)return void(this.container.open=!1);const e=this.container.src;if(!e)return;const n=new URL(e,window.location.href),i=new URLSearchParams(n.search.slice(1));i.append("q",t),n.search=i.toString(),this.container.dispatchEvent(new CustomEvent("loadstart")),this.container.fetchResult(this.input,n.toString()).then((t=>{this.results.innerHTML=t,this.identifyOptions();const e=this.results.querySelectorAll('[role="option"]'),n=!!e.length,i=e.length,[o]=e,s=null==o?void 0:o.textContent;this.autoselectEnabled&&s?this.updateFeedbackForScreenReaders(`${i} results. ${s} is the top result: Press Enter to activate.`):this.updateFeedbackForScreenReaders(`${i||"No"} results.`),this.container.open=n,this.container.dispatchEvent(new CustomEvent("load")),this.container.dispatchEvent(new CustomEvent("loadend"))})).catch((()=>{this.container.dispatchEvent(new CustomEvent("error")),this.container.dispatchEvent(new CustomEvent("loadend"))}))}open(){this.results.hidden&&(this.combobox.start(),this.results.hidden=!1)}close(){this.results.hidden||(this.combobox.stop(),this.results.hidden=!0)}}class a extends CustomEvent{constructor(t,e){super(t,e),this.relatedTarget=e.relatedTarget}}const c=new WeakMap;function l(t,e){const n=new XMLHttpRequest;return n.open("GET",e,!0),n.setRequestHeader("Accept","text/fragment+html"),function(t,e){const n=c.get(t);n&&n.abort();c.set(t,e);const i=()=>c.delete(t),o=function(t){return new Promise(((e,n)=>{t.onload=function(){t.status>=200&&t.status<300?e(t.responseText):n(new Error(t.responseText))},t.onerror=n,t.send()}))}(e);return o.then(i,i),o}(t,n)}const u=new WeakMap;class d extends HTMLElement{constructor(){super(...arguments),this.fetchResult=l}connectedCallback(){const t=this.getAttribute("for");if(!t)return;const e=this.querySelector("input"),n=document.getElementById(t);if(!(e instanceof HTMLInputElement&&n))return;const i="true"===this.getAttribute("data-autoselect");u.set(this,new r(this,e,n,i)),n.setAttribute("role","listbox")}disconnectedCallback(){const t=u.get(this);t&&(t.destroy(),u.delete(this))}get src(){return this.getAttribute("src")||""}set src(t){this.setAttribute("src",t)}get value(){return this.getAttribute("value")||""}set value(t){this.setAttribute("value",t)}get open(){return this.hasAttribute("open")}set open(t){t?this.setAttribute("open",""):this.removeAttribute("open")}static get observedAttributes(){return["open","value"]}attributeChangedCallback(t,e,n){if(e===n)return;const i=u.get(this);if(i)switch(t){case"open":null===n?i.close():i.open();break;case"value":null!==n&&(i.input.value=n),this.dispatchEvent(new a("auto-complete-change",{bubbles:!0,relatedTarget:i.input}))}}}function h(t){if("clipboard"in navigator)return navigator.clipboard.writeText(t.textContent);const e=getSelection();if(null==e)return Promise.reject(new Error);e.removeAllRanges();const n=document.createRange();return n.selectNodeContents(t),e.addRange(n),document.execCommand("copy"),e.removeAllRanges(),Promise.resolve()}function f(t){if("clipboard"in navigator)return navigator.clipboard.writeText(t);const e=document.body;if(!e)return Promise.reject(new Error);const n=function(t){const e=document.createElement("pre");return e.style.width="1px",e.style.height="1px",e.style.position="fixed",e.style.top="5px",e.textContent=t,e}(t);return e.appendChild(n),h(n),e.removeChild(n),Promise.resolve()}function m(t){const e=t.getAttribute("for"),n=t.getAttribute("value");function i(){t.dispatchEvent(new CustomEvent("clipboard-copy",{bubbles:!0}))}if(n)f(n).then(i);else if(e){const n="getRootNode"in Element.prototype?t.getRootNode():t.ownerDocument;if(!(n instanceof Document||"ShadowRoot"in window&&n instanceof ShadowRoot))return;const s=n.getElementById(e);s&&(o=s,o instanceof HTMLInputElement||o instanceof HTMLTextAreaElement?f(o.value):o instanceof HTMLAnchorElement&&o.hasAttribute("href")?f(o.href):h(o)).then(i)}var o}function p(t){const e=t.currentTarget;e instanceof HTMLElement&&m(e)}function b(t){if(" "===t.key||"Enter"===t.key){const e=t.currentTarget;e instanceof HTMLElement&&(t.preventDefault(),m(e))}}function g(t){t.currentTarget.addEventListener("keydown",b)}function w(t){t.currentTarget.removeEventListener("keydown",b)}window.customElements.get("auto-complete")||(window.AutocompleteElement=d,window.customElements.define("auto-complete",d));class v extends HTMLElement{constructor(){super(),this.addEventListener("click",p),this.addEventListener("focus",g),this.addEventListener("blur",w)}connectedCallback(){this.hasAttribute("tabindex")||this.setAttribute("tabindex","0"),this.hasAttribute("role")||this.setAttribute("role","button")}get value(){return this.getAttribute("value")||""}set value(t){this.setAttribute("value",t)}}window.customElements.get("clipboard-copy")||(window.ClipboardCopyElement=v,window.customElements.define("clipboard-copy",v));function y(t){t.style.display="inline-block"}function E(t){t.style.display="none"}const A=new WeakMap;function x(t){return Array.from(t.querySelectorAll('[role="tablist"] [role="tab"]')).filter((e=>e instanceof HTMLElement&&e.closest(t.tagName)===t))}document.addEventListener("clipboard-copy",(function({target:t}){if(!(t instanceof HTMLElement))return;if(!t.hasAttribute("data-view-component"))return;const e=A.get(t);e?(clearTimeout(e),A.delete(t)):function(t){const[e,n]=t.querySelectorAll(".octicon");e&&n&&(E(e),y(n))}(t),A.set(t,setTimeout((()=>{!function(t){const[e,n]=t.querySelectorAll(".octicon");e&&n&&(y(e),E(n))}(t),A.delete(t)}),2e3))}));class k extends HTMLElement{constructor(){super(),this.addEventListener("keydown",(t=>{const e=t.target;if(!(e instanceof HTMLElement))return;if(e.closest(this.tagName)!==this)return;if("tab"!==e.getAttribute("role")&&!e.closest('[role="tablist"]'))return;const n=x(this),i=n.indexOf(n.find((t=>t.matches('[aria-selected="true"]'))));if("ArrowRight"===t.code){let t=i+1;t>=n.length&&(t=0),T(this,t)}else if("ArrowLeft"===t.code){let t=i-1;t<0&&(t=n.length-1),T(this,t)}else"Home"===t.code?(T(this,0),t.preventDefault()):"End"===t.code&&(T(this,n.length-1),t.preventDefault())})),this.addEventListener("click",(t=>{const e=x(this);if(!(t.target instanceof Element))return;if(t.target.closest(this.tagName)!==this)return;const n=t.target.closest('[role="tab"]');if(!(n instanceof HTMLElement&&n.closest('[role="tablist"]')))return;T(this,e.indexOf(n))}))}connectedCallback(){for(const t of x(this))t.hasAttribute("aria-selected")||t.setAttribute("aria-selected","false"),t.hasAttribute("tabindex")||("true"===t.getAttribute("aria-selected")?t.setAttribute("tabindex","0"):t.setAttribute("tabindex","-1"))}}function T(t,e){const n=x(t),i=Array.from(t.querySelectorAll('[role="tabpanel"]')).filter((e=>e.closest(t.tagName)===t)),o=n[e],s=i[e];if(!!t.dispatchEvent(new CustomEvent("tab-container-change",{bubbles:!0,cancelable:!0,detail:{relatedTarget:s}}))){for(const t of n)t.setAttribute("aria-selected","false"),t.setAttribute("tabindex","-1");for(const t of i)t.hidden=!0,t.hasAttribute("tabindex")||t.hasAttribute("data-tab-container-no-tabstop")||t.setAttribute("tabindex","0");o.setAttribute("aria-selected","true"),o.setAttribute("tabindex","0"),o.focus(),s.hidden=!1,t.dispatchEvent(new CustomEvent("tab-container-changed",{bubbles:!0,detail:{relatedTarget:s}}))}}window.customElements.get("tab-container")||(window.TabContainerElement=k,window.customElements.define("tab-container",k));const L=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],M=["January","February","March","April","May","June","July","August","September","October","November","December"];function C(t){return`0${t}`.slice(-2)}function S(t,e){const n=t.getDay(),i=t.getDate(),o=t.getMonth(),s=t.getFullYear(),r=t.getHours(),a=t.getMinutes(),c=t.getSeconds();return e.replace(/%([%aAbBcdeHIlmMpPSwyYZz])/g,(function(e){let l;switch(e[1]){case"%":return"%";case"a":return L[n].slice(0,3);case"A":return L[n];case"b":return M[o].slice(0,3);case"B":return M[o];case"c":return t.toString();case"d":return C(i);case"e":return String(i);case"H":return C(r);case"I":return C(S(t,"%l"));case"l":return String(0===r||12===r?12:(r+12)%12);case"m":return C(o+1);case"M":return C(a);case"p":return r>11?"PM":"AM";case"P":return r>11?"pm":"am";case"S":return C(c);case"w":return String(n);case"y":return C(s%100);case"Y":return String(s);case"Z":return l=t.toString().match(/\((\w+)\)$/),l?l[1]:"";case"z":return l=t.toString().match(/\w([+-]\d\d\d\d) /),l?l[1]:""}return""}))}function H(t){let e;return function(){if(e)return e;if("Intl"in window)try{return e=new Intl.DateTimeFormat(void 0,t),e}catch(t){if(!(t instanceof RangeError))throw t}}}let D=null;const F=H({day:"numeric",month:"short"});function R(){if(null!==D)return D;const t=F();if(t){const e=t.format(new Date(0));return D=!!e.match(/^\d/),D}return!1}let $=null;const I=H({day:"numeric",month:"short",year:"numeric"});function W(t){const e=t.closest("[lang]");return e instanceof HTMLElement&&e.lang?e.lang:"default"}const O=new WeakMap;class q extends HTMLElement{static get observedAttributes(){return["datetime","day","format","lang","hour","minute","month","second","title","weekday","year","time-zone-name"]}connectedCallback(){const t=this.getFormattedTitle();t&&!this.hasAttribute("title")&&this.setAttribute("title",t);const e=this.getFormattedDate();e&&(this.textContent=e)}attributeChangedCallback(t,e,n){const i=this.getFormattedTitle();if("datetime"===t){const t=Date.parse(n);isNaN(t)?O.delete(this):O.set(this,new Date(t))}const o=this.getFormattedTitle(),s=this.getAttribute("title");"title"===t||!o||s&&s!==i||this.setAttribute("title",o);const r=this.getFormattedDate();r&&(this.textContent=r)}get date(){return O.get(this)}getFormattedTitle(){const t=this.date;if(!t)return;const e=B();if(e)return e.format(t);try{return t.toLocaleString()}catch(e){if(e instanceof RangeError)return t.toString();throw e}}getFormattedDate(){}}const B=H({day:"numeric",month:"short",year:"numeric",hour:"numeric",minute:"2-digit",timeZoneName:"short"}),N=new WeakMap;class Y extends q{attributeChangedCallback(t,e,n){"hour"!==t&&"minute"!==t&&"second"!==t&&"time-zone-name"!==t||N.delete(this),super.attributeChangedCallback(t,e,n)}getFormattedDate(){const t=this.date;if(!t)return;return`${function(t,e){const n={weekday:{short:"%a",long:"%A"},day:{numeric:"%e","2-digit":"%d"},month:{short:"%b",long:"%B"},year:{numeric:"%Y","2-digit":"%y"}};let i=R()?"weekday day month year":"weekday month day, year";for(const e in n){const o=n[e][t.getAttribute(e)||""];i=i.replace(e,o||"")}return i=i.replace(/(\s,)|(,\s$)/,""),S(e,i).replace(/\s+/," ").trim()}(this,t)||""} ${function(t,e){const n={},i=t.getAttribute("hour");"numeric"!==i&&"2-digit"!==i||(n.hour=i);const o=t.getAttribute("minute");"numeric"!==o&&"2-digit"!==o||(n.minute=o);const s=t.getAttribute("second");"numeric"!==s&&"2-digit"!==s||(n.second=s);const r=t.getAttribute("time-zone-name");"short"!==r&&"long"!==r||(n.timeZoneName=r);if(0===Object.keys(n).length)return;let a=N.get(t);a||(a=H(n),N.set(t,a));const c=a();if(c)return c.format(e);return S(e,n.second?"%H:%M:%S":"%H:%M")}(this,t)||""}`.trim()}}window.customElements.get("local-time")||(window.LocalTimeElement=Y,window.customElements.define("local-time",Y));class P{constructor(t,e){this.date=t,this.locale=e}toString(){const t=this.timeElapsed();if(t)return t;{const t=this.timeAhead();return t||`on ${this.formatDate()}`}}timeElapsed(){const t=(new Date).getTime()-this.date.getTime(),e=Math.round(t/1e3),n=Math.round(e/60),i=Math.round(n/60),o=Math.round(i/24);return t>=0&&o<30?this.timeAgoFromMs(t):null}timeAhead(){const t=this.date.getTime()-(new Date).getTime(),e=Math.round(t/1e3),n=Math.round(e/60),i=Math.round(n/60),o=Math.round(i/24);return t>=0&&o<30?this.timeUntil():null}timeAgo(){const t=(new Date).getTime()-this.date.getTime();return this.timeAgoFromMs(t)}timeAgoFromMs(t){const e=Math.round(t/1e3),n=Math.round(e/60),i=Math.round(n/60),o=Math.round(i/24),s=Math.round(o/30),r=Math.round(s/12);return t<0||e<10?X(this.locale,0,"second"):e<45?X(this.locale,-e,"second"):e<90||n<45?X(this.locale,-n,"minute"):n<90||i<24?X(this.locale,-i,"hour"):i<36||o<30?X(this.locale,-o,"day"):s<18?X(this.locale,-s,"month"):X(this.locale,-r,"year")}microTimeAgo(){const t=(new Date).getTime()-this.date.getTime(),e=Math.round(t/1e3),n=Math.round(e/60),i=Math.round(n/60),o=Math.round(i/24),s=Math.round(o/30),r=Math.round(s/12);return n<1?"1m":n<60?`${n}m`:i<24?`${i}h`:o<365?`${o}d`:`${r}y`}timeUntil(){const t=this.date.getTime()-(new Date).getTime();return this.timeUntilFromMs(t)}timeUntilFromMs(t){const e=Math.round(t/1e3),n=Math.round(e/60),i=Math.round(n/60),o=Math.round(i/24),s=Math.round(o/30),r=Math.round(s/12);return s>=18||s>=12?X(this.locale,r,"year"):o>=45||o>=30?X(this.locale,s,"month"):i>=36||i>=24?X(this.locale,o,"day"):n>=90||n>=45?X(this.locale,i,"hour"):e>=90||e>=45?X(this.locale,n,"minute"):X(this.locale,e>=10?e:0,"second")}microTimeUntil(){const t=this.date.getTime()-(new Date).getTime(),e=Math.round(t/1e3),n=Math.round(e/60),i=Math.round(n/60),o=Math.round(i/24),s=Math.round(o/30),r=Math.round(s/12);return o>=365?`${r}y`:i>=24?`${o}d`:n>=60?`${i}h`:n>1?`${n}m`:"1m"}formatDate(){let t=R()?"%e %b":"%b %e";var e;return e=this.date,(new Date).getUTCFullYear()!==e.getUTCFullYear()&&(t+=function(){if(null!==$)return $;const t=I();if(t){const e=t.format(new Date(0));return $=!!e.match(/\d,/),$}return!0}()?", %Y":" %Y"),S(this.date,t)}formatTime(){const t=K();return t?t.format(this.date):S(this.date,"%l:%M%P")}}function X(t,e,n){const i=function(t,e){if("Intl"in window&&"RelativeTimeFormat"in window.Intl)try{return new Intl.RelativeTimeFormat(t,e)}catch(t){if(!(t instanceof RangeError))throw t}}(t,{numeric:"auto"});return i?i.format(e,n):function(t,e){if(0===t)switch(e){case"year":case"quarter":case"month":case"week":return`this ${e}`;case"day":return"today";case"hour":case"minute":return`in 0 ${e}s`;case"second":return"now"}else if(1===t)switch(e){case"year":case"quarter":case"month":case"week":return`next ${e}`;case"day":return"tomorrow";case"hour":case"minute":case"second":return`in 1 ${e}`}else if(-1===t)switch(e){case"year":case"quarter":case"month":case"week":return`last ${e}`;case"day":return"yesterday";case"hour":case"minute":case"second":return`1 ${e} ago`}else if(t>1)switch(e){case"year":case"quarter":case"month":case"week":case"day":case"hour":case"minute":case"second":return`in ${t} ${e}s`}else if(t<-1)switch(e){case"year":case"quarter":case"month":case"week":case"day":case"hour":case"minute":case"second":return`${-t} ${e}s ago`}throw new RangeError(`Invalid unit argument for format() '${e}'`)}(e,n)}const K=H({hour:"numeric",minute:"2-digit"});class U extends q{getFormattedDate(){const t=this.date;if(t)return new P(t,W(this)).toString()}connectedCallback(){z.push(this),j||(Z(),j=window.setInterval(Z,6e4)),super.connectedCallback()}disconnectedCallback(){const t=z.indexOf(this);-1!==t&&z.splice(t,1),z.length||j&&(clearInterval(j),j=null)}}const z=[];let j;function Z(){let t,e,n;for(e=0,n=z.length;e=0&&n.classList.add("nwse"),["ne","sw"].indexOf(e)>=0&&n.classList.add("nesw"),G.set(n,{startX:i.offsetLeft+(["se","ne"].indexOf(e)>=0?0:i.offsetWidth),startY:i.offsetTop+(["se","sw"].indexOf(e)>=0?0:i.offsetHeight)}),et(t)}else n.addEventListener("mousemove",tt),n.addEventListener("touchmove",tt,{passive:!0})}function ot(t,e,n,i=!0){let o=Math.max(Math.abs(e),Math.abs(n),10);const s=G.get(t);if(!s)return;const{box:r,image:a}=V.get(t)||{};if(!r||!a)return;o=Math.min(o,n>0?a.height-s.startY:s.startY,e>0?a.width-s.startX:s.startX);const c=i?Math.round(Math.max(0,e>0?s.startX:s.startX-o)):r.offsetLeft,l=i?Math.round(Math.max(0,n>0?s.startY:s.startY-o)):r.offsetTop;r.style.left=`${c}px`,r.style.top=`${l}px`,r.style.width=`${o}px`,r.style.height=`${o}px`,at(t,{x:c,y:l,width:o,height:o})}function st(t){const{image:e}=V.get(t)||{};if(!e)return;const n=Math.round(e.clientWidth>e.clientHeight?e.clientHeight:e.clientWidth);G.set(t,{startX:(e.clientWidth-n)/2,startY:(e.clientHeight-n)/2}),ot(t,n,n)}function rt(t){const e=t.currentTarget;e instanceof ct&&(Q.delete(e),e.classList.remove("nwse","nesw"),e.removeEventListener("mousemove",et),e.removeEventListener("mousemove",tt),e.removeEventListener("touchmove",et),e.removeEventListener("touchmove",tt))}function at(t,e){const{image:n}=V.get(t)||{};if(!n)return;const i=n.naturalWidth/n.width;for(const n in e){const o=Math.round(e[n]*i);e[n]=o;const s=t.querySelector(`[data-image-crop-input='${n}']`);s instanceof HTMLInputElement&&(s.value=o.toString())}t.dispatchEvent(new CustomEvent("image-crop-change",{bubbles:!0,detail:e}))}class ct extends HTMLElement{connectedCallback(){if(V.has(this))return;const t=this.attachShadow({mode:"open"});t.innerHTML='\n\n\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n';const e=t.querySelector("[data-crop-box]");if(!(e instanceof HTMLElement))return;const n=t.querySelector("img");n instanceof HTMLImageElement&&(V.set(this,{box:e,image:n}),n.addEventListener("load",(()=>{this.loaded=!0,st(this)})),this.addEventListener("mouseleave",rt),this.addEventListener("touchend",rt),this.addEventListener("mouseup",rt),e.addEventListener("mousedown",it),e.addEventListener("touchstart",it,{passive:!0}),this.addEventListener("keydown",tt),this.addEventListener("keydown",et),this.src&&(n.src=this.src))}static get observedAttributes(){return["src"]}get src(){return this.getAttribute("src")}set src(t){t?this.setAttribute("src",t):this.removeAttribute("src")}get loaded(){return this.hasAttribute("loaded")}set loaded(t){t?this.setAttribute("loaded",""):this.removeAttribute("loaded")}attributeChangedCallback(t,e,n){const{image:i}=V.get(this)||{};"src"===t&&(this.loaded=!1,i&&(i.src=n))}}window.customElements.get("image-crop")||(window.ImageCropElement=ct,window.customElements.define("image-crop",ct));class lt extends HTMLElement{get preload(){return this.hasAttribute("preload")}set preload(t){t?this.setAttribute("preload",""):this.removeAttribute("preload")}get src(){return this.getAttribute("src")||""}set src(t){this.setAttribute("src",t)}connectedCallback(){this.hasAttribute("role")||this.setAttribute("role","menu");const t=this.parentElement;if(!t)return;const e=t.querySelector("summary");e&&(e.setAttribute("aria-haspopup","menu"),e.hasAttribute("role")||e.setAttribute("role","button"));const n=[ht(t,"compositionstart",(t=>At(this,t))),ht(t,"compositionend",(t=>At(this,t))),ht(t,"click",(e=>wt(t,e))),ht(t,"change",(e=>wt(t,e))),ht(t,"keydown",(e=>function(t,e,n){if(!(n instanceof KeyboardEvent))return;if(t.querySelector("details[open]"))return;const i=ut.get(e);if(!i||i.isComposing)return;const o=n.target instanceof Element&&"SUMMARY"===n.target.tagName;switch(n.key){case"Escape":t.hasAttribute("open")&&(Et(t),n.preventDefault(),n.stopPropagation());break;case"ArrowDown":{o&&!t.hasAttribute("open")&&t.setAttribute("open","");const e=bt(t,!0);e&&e.focus(),n.preventDefault()}break;case"ArrowUp":{o&&!t.hasAttribute("open")&&t.setAttribute("open","");const e=bt(t,!1);e&&e.focus(),n.preventDefault()}break;case"n":if(gt&&n.ctrlKey){const e=bt(t,!0);e&&e.focus(),n.preventDefault()}break;case"p":if(gt&&n.ctrlKey){const e=bt(t,!1);e&&e.focus(),n.preventDefault()}break;case" ":case"Enter":{const e=document.activeElement;e instanceof HTMLElement&&yt(e)&&e.closest("details")===t&&(n.preventDefault(),n.stopPropagation(),e.click())}}}(t,this,e))),ht(t,"toggle",(()=>ft(t,this)),{once:!0}),ht(t,"toggle",(()=>function(t){if(!t.hasAttribute("open"))return;for(const e of document.querySelectorAll("details[open] > details-menu")){const n=e.closest("details");n&&n!==t&&!n.contains(t)&&n.removeAttribute("open")}}(t))),this.preload?ht(t,"mouseover",(()=>ft(t,this)),{once:!0}):dt,...mt(t)];ut.set(this,{subscriptions:n,loaded:!1,isComposing:!1})}disconnectedCallback(){const t=ut.get(this);if(t){ut.delete(this);for(const e of t.subscriptions)e.unsubscribe()}}}const ut=new WeakMap,dt={unsubscribe(){}};function ht(t,e,n,i=!1){return t.addEventListener(e,n,i),{unsubscribe:()=>{t.removeEventListener(e,n,i)}}}function ft(t,e){const n=e.getAttribute("src");if(!n)return;const i=ut.get(e);if(!i)return;if(i.loaded)return;i.loaded=!0;const o=e.querySelector("include-fragment");o&&!o.hasAttribute("src")&&(o.addEventListener("loadend",(()=>pt(t))),o.setAttribute("src",n))}function mt(t){let e=!1;return[ht(t,"mousedown",(()=>e=!0)),ht(t,"keydown",(()=>e=!1)),ht(t,"toggle",(()=>{t.hasAttribute("open")&&(pt(t)||e||function(t){const e=document.activeElement;if(e&&yt(e)&&t.contains(e))return;const n=bt(t,!0);n&&n.focus()}(t))}))]}function pt(t){if(!t.hasAttribute("open"))return!1;const e=t.querySelector("details-menu [autofocus]");return!!e&&(e.focus(),!0)}function bt(t,e){const n=Array.from(t.querySelectorAll('[role^="menuitem"]:not([hidden]):not([disabled]):not([aria-disabled="true"])')),i=document.activeElement,o=i instanceof HTMLElement?n.indexOf(i):-1,s=e?n[o+1]:n[o-1],r=e?n[0]:n[n.length-1];return s||r}const gt=navigator.userAgent.match(/Macintosh/);function wt(t,e){const n=e.target;if(n instanceof Element&&n.closest("details")===t)if("click"===e.type){const e=n.closest('[role="menuitem"], [role="menuitemradio"]');if(!e)return;const i=e.querySelector("input");if("LABEL"===e.tagName&&n===i)return;"LABEL"===e.tagName&&i&&!i.checked||vt(e,t)}else if("change"===e.type){const e=n.closest('[role="menuitemradio"], [role="menuitemcheckbox"]');e&&vt(e,t)}}function vt(t,e){if(t.hasAttribute("disabled")||"true"===t.getAttribute("aria-disabled"))return;const n=t.closest("details-menu");if(!n)return;n.dispatchEvent(new CustomEvent("details-menu-select",{cancelable:!0,detail:{relatedTarget:t}}))&&(!function(t,e){const n=e.querySelector("[data-menu-button]");if(!n)return;const i=function(t){if(!t)return null;const e=t.hasAttribute("data-menu-button-text")?t:t.querySelector("[data-menu-button-text]");return e?e.getAttribute("data-menu-button-text")||e.textContent:null}(t);if(i)n.textContent=i;else{const e=function(t){if(!t)return null;const e=t.hasAttribute("data-menu-button-contents")?t:t.querySelector("[data-menu-button-contents]");return e?e.innerHTML:null}(t);e&&(n.innerHTML=e)}}(t,e),function(t,e){for(const n of e.querySelectorAll('[role="menuitemradio"], [role="menuitemcheckbox"]')){const e=n.querySelector('input[type="radio"], input[type="checkbox"]');let i=(n===t).toString();e instanceof HTMLInputElement&&(i=e.indeterminate?"mixed":e.checked.toString()),n.setAttribute("aria-checked",i)}}(t,e),"menuitemcheckbox"!==t.getAttribute("role")&&Et(e),n.dispatchEvent(new CustomEvent("details-menu-selected",{detail:{relatedTarget:t}})))}function yt(t){const e=t.getAttribute("role");return"menuitem"===e||"menuitemcheckbox"===e||"menuitemradio"===e}function Et(t){if(!t.hasAttribute("open"))return;t.removeAttribute("open");const e=t.querySelector("summary");e&&e.focus()}function At(t,e){const n=ut.get(t);n&&(n.isComposing="compositionstart"===e.type)}function xt(t,e,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(t):i?i.value:e.get(t)}function kt(t,e,n,i,o){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?o.call(t,n):o?o.value=n:e.set(t,n),n}window.customElements.get("details-menu")||(window.DetailsMenuElement=lt,window.customElements.define("details-menu",lt));const Tt={"outside-top":["outside-bottom","outside-right","outside-left","outside-bottom"],"outside-bottom":["outside-top","outside-right","outside-left","outside-bottom"],"outside-left":["outside-right","outside-bottom","outside-top","outside-bottom"],"outside-right":["outside-left","outside-bottom","outside-top","outside-bottom"]},Lt={start:["end","center"],end:["start","center"],center:["end","start"]};function Mt(t,e,n={}){const i=function(t){let e=t.parentNode;for(;null!==e;){if(e instanceof HTMLElement&&"static"!==getComputedStyle(e).position)return e;e=e.parentNode}return document.body}(t),o=function(t){let e=t;for(;null!==e&&e!==document.body;){if("visible"!==getComputedStyle(e).overflow)break;e=e.parentNode}const n=e!==document.body&&e instanceof HTMLElement?e:document.body,i=n.getBoundingClientRect(),o=getComputedStyle(n),[s,r,a,c]=[o.borderTopWidth,o.borderLeftWidth,o.borderRightWidth,o.borderBottomWidth].map((t=>parseInt(t,10)||0));return{top:i.top+s,left:i.left+r,width:i.width-a-r,height:Math.max(i.height-s-c,n===document.body?window.innerHeight:-1/0)}}(i),s=getComputedStyle(i),r=i.getBoundingClientRect(),[a,c]=[s.borderTopWidth,s.borderLeftWidth].map((t=>parseInt(t,10)||0));return function(t,e,n,i,{side:o,align:s,allowOutOfBounds:r,anchorOffset:a,alignmentOffset:c}){const l={top:t.top-e.top,left:t.left-e.left,width:t.width,height:t.height};let u=Rt(n,i,o,s,a,c),d=o,h=s;if(u.top-=e.top,u.left-=e.left,!r){const r=Tt[o];let f=0;if(r){let t=o;for(;ft.width+l.left&&(u.left=t.width+l.left-n.width),r&&ft.height+l.top&&(u.top=t.height+l.top-n.height)}return Object.assign(Object.assign({},u),{anchorSide:d,anchorAlign:h})}(o,{top:r.top+a,left:r.left+c},t.getBoundingClientRect(),e instanceof Element?e.getBoundingClientRect():e,function(t={}){var e,n,i,o,s;const r=null!==(e=t.side)&&void 0!==e?e:Ct,a=null!==(n=t.align)&&void 0!==n?n:St;return{side:r,align:a,anchorOffset:null!==(i=t.anchorOffset)&&void 0!==i?i:"inside-center"===r?0:Ht,alignmentOffset:null!==(o=t.alignmentOffset)&&void 0!==o?o:"center"!==a&&r.startsWith("inside")?Dt:0,allowOutOfBounds:null!==(s=t.allowOutOfBounds)&&void 0!==s?s:Ft}}(n))}const Ct="outside-bottom",St="start",Ht=4,Dt=4,Ft=!1;function Rt(t,e,n,i,o,s){const r=e.left+e.width,a=e.top+e.height;let c=-1,l=-1;return"outside-top"===n?c=e.top-o-t.height:"outside-bottom"===n?c=a+o:"outside-left"===n?l=e.left-o-t.width:"outside-right"===n&&(l=r+o),"outside-top"!==n&&"outside-bottom"!==n||(l="start"===i?e.left+s:"center"===i?e.left-(t.width-e.width)/2+s:r-t.width-s),"outside-left"!==n&&"outside-right"!==n||(c="start"===i?e.top+s:"center"===i?e.top-(t.height-e.height)/2+s:a-t.height-s),"inside-top"===n?c=e.top+o:"inside-bottom"===n?c=a-o-t.height:"inside-left"===n?l=e.left+o:"inside-right"===n?l=r-o-t.width:"inside-center"===n&&(l=(r+e.left)/2-t.width/2+o),"inside-top"===n||"inside-bottom"===n?l="start"===i?e.left+s:"center"===i?e.left-(t.width-e.width)/2+s:r-t.width-s:"inside-left"!==n&&"inside-right"!==n&&"inside-center"!==n||(c="start"===i?e.top+s:"center"===i?e.top-(t.height-e.height)/2+s:a-t.height-s),{top:c,left:l}}function $t(t,e,n,i){return"outside-top"===t||"outside-bottom"===t?e.topn.height+n.top:e.leftn.width+n.left}function It(t,e,n,i){return"end"===t?e.leftn.left+n.width||e.leftt instanceof HTMLElement&&s(t,o)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP});let a=null;if(!e.reverse&&s(t,o)&&(yield t),e.reverse){let t=r.lastChild();for(;t;)a=t,t=r.lastChild()}else a=r.firstChild();for(;a instanceof HTMLElement;)yield a,a=e.reverse?r.previousNode():r.nextNode();e.reverse&&s(t,o)&&(yield t)}(t,{reverse:e,strict:!0,onlyTabbable:!0}).next().value}function Ot(t,e=!1){const n=["BUTTON","INPUT","SELECT","TEXTAREA","OPTGROUP","OPTION","FIELDSET"].includes(t.tagName)&&t.disabled,i=t.hidden,o=t instanceof HTMLInputElement&&"hidden"===t.type,s=t.classList.contains("sentinel");if(n||i||o||s)return!1;if(e){const e=0===t.offsetWidth||0===t.offsetHeight,n=["hidden","collapse"].includes(getComputedStyle(t).visibility),i=0===t.getClientRects().length;if(e||n||i)return!1}return null!=t.getAttribute("tabindex")||!(t instanceof HTMLAnchorElement&&null==t.getAttribute("href"))&&-1!==t.tabIndex}function qt(t,e=!1){return Ot(t,e)&&"-1"!==t.getAttribute("tabindex")}let Bt=!1;function Nt(){}try{const t=Object.create({},{signal:{get(){Bt=!0}}});window.addEventListener("test",Nt,t),window.removeEventListener("test",Nt,t)}catch(t){}Bt||(function(){if("undefined"==typeof window)return;const t=EventTarget.prototype.addEventListener;EventTarget.prototype.addEventListener=function(e,n,i){return"object"==typeof i&&"signal"in i&&i.signal instanceof AbortSignal&&t.call(i.signal,"abort",(()=>{this.removeEventListener(e,n,i)})),t.call(this,e,n,i)}}(),Bt=!0);const Yt=[];let Pt;function Xt(t,e,n){const i=new AbortController,o=null!=n?n:i.signal;t.setAttribute("data-focus-trap","active");const s=document.createElement("span");s.setAttribute("class","sentinel"),s.setAttribute("tabindex","0"),s.setAttribute("aria-hidden","true"),s.onfocus=()=>{const e=Wt(t,!0);null==e||e.focus()};const r=document.createElement("span");let a;function c(n){if(n instanceof HTMLElement&&document.contains(t)){if(t.contains(n))return void(a=n);if(a&&qt(a)&&t.contains(a))return void a.focus();if(e&&t.contains(e))return void e.focus();{const e=Wt(t);return void(null==e||e.focus())}}}r.setAttribute("class","sentinel"),r.setAttribute("tabindex","0"),r.setAttribute("aria-hidden","true"),r.onfocus=()=>{const e=Wt(t);null==e||e.focus()},t.prepend(s),t.append(r);const l=function(t){const e=new AbortController;return t.addEventListener("abort",(()=>{e.abort()})),e}(o);if(Pt){const t=Pt;Pt.container.setAttribute("data-focus-trap","suspended"),Pt.controller.abort(),Yt.push(t)}l.signal.addEventListener("abort",(()=>{Pt=void 0})),o.addEventListener("abort",(()=>{t.removeAttribute("data-focus-trap");const e=t.getElementsByClassName("sentinel");for(;e.length>0;)e[0].remove();const n=Yt.findIndex((e=>e.container===t));n>=0&&Yt.splice(n,1),function(){const t=Yt.pop();t&&Xt(t.container,t.initialFocus,t.originalSignal)}()})),document.addEventListener("focus",(t=>{c(t.target)}),{signal:l.signal,capture:!0}),c(document.activeElement),Pt={container:t,controller:l,initialFocus:e,originalSignal:o};const u=Yt.findIndex((e=>e.container===t));if(u>=0&&Yt.splice(u,1),!n)return i}var Kt,Ut,zt,jt,Zt,Jt,_t;const Gt=["tooltip-n","tooltip-s","tooltip-e","tooltip-w","tooltip-ne","tooltip-se","tooltip-nw","tooltip-sw"];class Qt extends HTMLElement{constructor(){super(...arguments),Kt.add(this),Ut.set(this,void 0),zt.set(this,"center"),jt.set(this,"outside-bottom"),Zt.set(this,!1)}styles(){return'\n :host {\n position: absolute;\n z-index: 1000000;\n padding: .5em .75em;\n font: normal normal 11px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";\n -webkit-font-smoothing: subpixel-antialiased;\n color: var(--color-fg-on-emphasis);\n text-align: center;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: break-word;\n white-space: pre;\n background: var(--color-neutral-emphasis-plus);\n border-radius: 6px;\n opacity: 0;\n max-width: 250px;\n word-wrap: break-word;\n white-space: normal;\n width: max-content;\n }\n\n :host:before{\n position: absolute;\n z-index: 1000001;\n color: var(--color-neutral-emphasis-plus);\n content: "";\n border: 6px solid transparent;\n opacity: 0\n }\n\n @keyframes tooltip-appear {\n from {\n opacity: 0\n }\n to {\n opacity: 1\n }\n }\n\n :host:after{\n position: absolute;\n display: block;\n right: 0;\n left: 0;\n height: 12px;\n content: ""\n }\n\n :host(.tooltip-open),\n :host(.tooltip-open):before {\n animation-name: tooltip-appear;\n animation-duration: .1s;\n animation-fill-mode: forwards;\n animation-timing-function: ease-in;\n animation-delay: .4s\n }\n\n :host(.tooltip-s):before,\n :host(.tooltip-n):before {\n right: 50%;\n margin-right: -6px;\n }\n\n :host(.tooltip-s):before,\n :host(.tooltip-se):before,\n :host(.tooltip-sw):before {\n bottom: 100%;\n border-bottom-color: var(--color-neutral-emphasis-plus)\n }\n\n :host(.tooltip-s):after,\n :host(.tooltip-se):after,\n :host(.tooltip-sw):after {\n bottom: 100%\n }\n\n :host(.tooltip-n):before,\n :host(.tooltip-ne):before,\n :host(.tooltip-nw):before {\n top: 100%;\n border-top-color: var(--color-neutral-emphasis-plus)\n }\n\n :host(.tooltip-n):after,\n :host(.tooltip-ne):after,\n :host(.tooltip-nw):after {\n top: 100%\n }\n\n :host(.tooltip-se):before,\n :host(.tooltip-ne):before {\n left: 0;\n margin-left: 6px;\n }\n\n :host(.tooltip-sw):before,\n :host(.tooltip-nw):before {\n right: 0;\n margin-right: 6px;\n }\n\n :host(.tooltip-w):before {\n top: 50%;\n bottom: 50%;\n left: 100%;\n margin-top: -6px;\n border-left-color: var(--color-neutral-emphasis-plus)\n }\n\n :host(.tooltip-e):before {\n top: 50%;\n right: 100%;\n bottom: 50%;\n margin-top: -6px;\n border-right-color: var(--color-neutral-emphasis-plus)\n }\n '}get htmlFor(){return this.getAttribute("for")||""}set htmlFor(t){this.setAttribute("for",t)}get type(){return"label"===this.getAttribute("data-type")?"label":"description"}set type(t){this.setAttribute("data-type",t)}get direction(){return this.getAttribute("data-direction")||"s"}set direction(t){this.setAttribute("data-direction",t)}get control(){return this.ownerDocument.getElementById(this.htmlFor)}connectedCallback(){var t;if(!this.shadowRoot){this.attachShadow({mode:"open"}).innerHTML=`\n \n \n `}if(this.hidden=!0,kt(this,Zt,!0,"f"),this.id||(this.id=`tooltip-${Date.now()}-${(1e4*Math.random()).toFixed(0)}`),!this.control)return;this.setAttribute("role","tooltip"),null===(t=xt(this,Ut,"f"))||void 0===t||t.abort(),kt(this,Ut,new AbortController,"f");const{signal:e}=xt(this,Ut,"f");this.addEventListener("mouseleave",this,{signal:e}),this.control.addEventListener("mouseenter",this,{signal:e}),this.control.addEventListener("mouseleave",this,{signal:e}),this.control.addEventListener("focus",this,{signal:e}),this.control.addEventListener("blur",this,{signal:e}),this.ownerDocument.addEventListener("keydown",this,{signal:e}),xt(this,Kt,"m",Jt).call(this)}disconnectedCallback(){var t;null===(t=xt(this,Ut,"f"))||void 0===t||t.abort()}handleEvent(t){this.control&&("mouseenter"!==t.type&&"focus"!==t.type||!this.hidden?"blur"===t.type||"mouseleave"===t.type&&t.relatedTarget!==this.control&&t.relatedTarget!==this?this.hidden=!0:"keydown"!==t.type||"Escape"!==t.key||this.hidden||(this.hidden=!0):this.hidden=!1)}attributeChangedCallback(t){if("id"===t||"data-type"===t){if(!this.id||!this.control)return;if("label"===this.type)this.control.setAttribute("aria-labelledby",this.id);else{let t=this.control.getAttribute("aria-describedby");t=t?`${t} ${this.id}`:this.id,this.control.setAttribute("aria-describedby",t)}}else if(this.isConnected&&"hidden"===t)xt(this,Kt,"m",Jt).call(this);else if("data-direction"===t){this.classList.remove(...Gt);const t=this.direction;"n"===t?(kt(this,zt,"center","f"),kt(this,jt,"outside-top","f")):"ne"===t?(kt(this,zt,"start","f"),kt(this,jt,"outside-top","f")):"e"===t?(kt(this,zt,"center","f"),kt(this,jt,"outside-right","f")):"se"===t?(kt(this,zt,"start","f"),kt(this,jt,"outside-bottom","f")):"s"===t?(kt(this,zt,"center","f"),kt(this,jt,"outside-bottom","f")):"sw"===t?(kt(this,zt,"end","f"),kt(this,jt,"outside-bottom","f")):"w"===t?(kt(this,zt,"center","f"),kt(this,jt,"outside-left","f")):"nw"===t&&(kt(this,zt,"end","f"),kt(this,jt,"outside-top","f"))}}}var Vt,te,ee,ne,ie,oe,se;function re(t){document.activeElement!==t&&(null==t||t.focus())}Ut=new WeakMap,zt=new WeakMap,jt=new WeakMap,Zt=new WeakMap,Kt=new WeakSet,Jt=function(){if(this.hidden)this.classList.remove("tooltip-open",...Gt);else{this.classList.add("tooltip-open");for(const t of this.ownerDocument.querySelectorAll(this.tagName))t!==this&&(t.hidden=!0);xt(this,Kt,"m",_t).call(this)}},_t=function(){if(!this.control)return;if(!xt(this,Zt,"f")||this.hidden)return;this.style.left="0px";const t=Mt(this,this.control,{side:xt(this,jt,"f"),align:xt(this,zt,"f"),anchorOffset:10}),e=t.anchorSide,n=t.anchorAlign;this.style.top=`${t.top}px`,this.style.left=`${t.left}px`;let i="s";i="outside-left"===e?"w":"outside-right"===e?"e":"outside-top"===e?"center"===n?"n":"start"===n?"ne":"nw":"center"===n?"s":"start"===n?"se":"sw",this.classList.add(`tooltip-${i}`)},Qt.observedAttributes=["data-type","data-direction","id","hidden"],window.customElements.get("tool-tip")||(window.ToolTipElement=Qt,window.customElements.define("tool-tip",Qt));class ae extends HTMLElement{constructor(){super(...arguments),Vt.add(this),te.set(this,new AbortController),ee.set(this,null),ne.set(this,void 0),ie.set(this,!0)}get open(){return this.hasAttribute("open")}set open(t){var e,n,i,o;if(t){if(this.open)return;this.setAttribute("open",""),null===(e=xt(this,Vt,"a",oe))||void 0===e||e.classList.remove("Overlay--hidden"),document.body.style.overflow="hidden",xt(this,te,"f").signal.aborted&&kt(this,te,new AbortController,"f"),Xt(this,void 0,xt(this,te,"f").signal)}else{if(!this.open)return;this.removeAttribute("open"),null===(n=xt(this,Vt,"a",oe))||void 0===n||n.classList.add("Overlay--hidden"),document.body.style.overflow="initial",xt(this,te,"f").abort();const t=(null===(i=xt(this,ne,"f"))||void 0===i?void 0:i.closest("details"))||(null===(o=xt(this,ne,"f"))||void 0===o?void 0:o.closest("action-menu"));re(t?Wt(t):xt(this,ne,"f")),kt(this,ne,void 0,"f")}}get showButtons(){return document.querySelectorAll(`button[data-show-dialog-id='${this.id}']`)}connectedCallback(){this.hasAttribute("role")||this.setAttribute("role","dialog");const{signal:t}=kt(this,ee,new AbortController,"f");this.ownerDocument.addEventListener("click",(t=>{const e=t.target,n=e.closest(this.tagName)!==this,i=null==e?void 0:e.closest("button");if(!i)return void(n&&this.close());let o=i.getAttribute("data-close-dialog-id");o===this.id&&this.close(),o=i.getAttribute("data-submit-dialog-id"),o===this.id&&this.close(!0),o=i.getAttribute("data-show-dialog-id"),o===this.id&&(t.stopPropagation(),kt(this,ne,i,"f"),this.show())}),{signal:t}),this.addEventListener("keydown",(t=>xt(this,Vt,"m",se).call(this,t)))}disconnectedCallback(){var t;null===(t=xt(this,ee,"f"))||void 0===t||t.abort()}show(){this.open=!0}close(t=!1){if(!1===this.open)return;const e=new Event(t?"close":"cancel");this.dispatchEvent(e),this.open=!1}}te=new WeakMap,ee=new WeakMap,ne=new WeakMap,ie=new WeakMap,Vt=new WeakSet,oe=function(){var t;return(null===(t=this.parentElement)||void 0===t?void 0:t.hasAttribute("data-modal-dialog-overlay"))?this.parentElement:null},se=function(t){if(t instanceof KeyboardEvent&&!t.isComposing)switch(t.key){case"Escape":this.open&&(this.close(),t.preventDefault(),t.stopPropagation())}},window.customElements.get("modal-dialog")||(window.ModalDialogElement=ae,window.customElements.define("modal-dialog",ae)); //# sourceMappingURL=primer_view_components.js.map diff --git a/app/assets/javascripts/primer_view_components.js.map b/app/assets/javascripts/primer_view_components.js.map index aab8686220..072b525ccf 100644 --- a/app/assets/javascripts/primer_view_components.js.map +++ b/app/assets/javascripts/primer_view_components.js.map @@ -1 +1 @@ -{"version":3,"file":"primer_view_components.js","sources":["../../../node_modules/@github/combobox-nav/dist/index.js","../../../node_modules/@github/auto-complete-element/dist/index.js","../../../node_modules/@github/clipboard-copy-element/dist/index.esm.js","../../components/primer/clipboard_copy_component.ts","../../../node_modules/@github/tab-container-element/dist/index.js","../../../node_modules/@github/time-elements/dist/index.js","../../../node_modules/@github/image-crop-element/dist/index.js","../../../node_modules/@github/details-menu-element/dist/index.js","../../../node_modules/tslib/tslib.es6.js","../../../node_modules/@primer/behaviors/dist/esm/anchored-position.js","../../components/primer/alpha/tool-tip-element.ts"],"sourcesContent":["const ctrlBindings = !!navigator.userAgent.match(/Macintosh/);\nexport default class Combobox {\n constructor(input, list) {\n this.input = input;\n this.list = list;\n this.isComposing = false;\n if (!list.id) {\n list.id = `combobox-${Math.random()\n .toString()\n .slice(2, 6)}`;\n }\n this.keyboardEventHandler = event => keyboardBindings(event, this);\n this.compositionEventHandler = event => trackComposition(event, this);\n this.inputHandler = this.clearSelection.bind(this);\n input.setAttribute('role', 'combobox');\n input.setAttribute('aria-controls', list.id);\n input.setAttribute('aria-expanded', 'false');\n input.setAttribute('aria-autocomplete', 'list');\n input.setAttribute('aria-haspopup', 'listbox');\n }\n destroy() {\n this.clearSelection();\n this.stop();\n this.input.removeAttribute('role');\n this.input.removeAttribute('aria-controls');\n this.input.removeAttribute('aria-expanded');\n this.input.removeAttribute('aria-autocomplete');\n this.input.removeAttribute('aria-haspopup');\n }\n start() {\n this.input.setAttribute('aria-expanded', 'true');\n this.input.addEventListener('compositionstart', this.compositionEventHandler);\n this.input.addEventListener('compositionend', this.compositionEventHandler);\n this.input.addEventListener('input', this.inputHandler);\n this.input.addEventListener('keydown', this.keyboardEventHandler);\n this.list.addEventListener('click', commitWithElement);\n }\n stop() {\n this.clearSelection();\n this.input.setAttribute('aria-expanded', 'false');\n this.input.removeEventListener('compositionstart', this.compositionEventHandler);\n this.input.removeEventListener('compositionend', this.compositionEventHandler);\n this.input.removeEventListener('input', this.inputHandler);\n this.input.removeEventListener('keydown', this.keyboardEventHandler);\n this.list.removeEventListener('click', commitWithElement);\n }\n navigate(indexDiff = 1) {\n const focusEl = Array.from(this.list.querySelectorAll('[aria-selected=\"true\"]')).filter(visible)[0];\n const els = Array.from(this.list.querySelectorAll('[role=\"option\"]')).filter(visible);\n const focusIndex = els.indexOf(focusEl);\n if ((focusIndex === els.length - 1 && indexDiff === 1) || (focusIndex === 0 && indexDiff === -1)) {\n this.clearSelection();\n this.input.focus();\n return;\n }\n let indexOfItem = indexDiff === 1 ? 0 : els.length - 1;\n if (focusEl && focusIndex >= 0) {\n const newIndex = focusIndex + indexDiff;\n if (newIndex >= 0 && newIndex < els.length)\n indexOfItem = newIndex;\n }\n const target = els[indexOfItem];\n if (!target)\n return;\n for (const el of els) {\n if (target === el) {\n this.input.setAttribute('aria-activedescendant', target.id);\n target.setAttribute('aria-selected', 'true');\n scrollTo(this.list, target);\n }\n else {\n el.setAttribute('aria-selected', 'false');\n }\n }\n }\n clearSelection() {\n this.input.removeAttribute('aria-activedescendant');\n for (const el of this.list.querySelectorAll('[aria-selected=\"true\"]')) {\n el.setAttribute('aria-selected', 'false');\n }\n }\n}\nfunction keyboardBindings(event, combobox) {\n if (event.shiftKey || event.metaKey || event.altKey)\n return;\n if (!ctrlBindings && event.ctrlKey)\n return;\n if (combobox.isComposing)\n return;\n switch (event.key) {\n case 'Enter':\n case 'Tab':\n if (commit(combobox.input, combobox.list)) {\n event.preventDefault();\n }\n break;\n case 'Escape':\n combobox.clearSelection();\n break;\n case 'ArrowDown':\n combobox.navigate(1);\n event.preventDefault();\n break;\n case 'ArrowUp':\n combobox.navigate(-1);\n event.preventDefault();\n break;\n case 'n':\n if (ctrlBindings && event.ctrlKey) {\n combobox.navigate(1);\n event.preventDefault();\n }\n break;\n case 'p':\n if (ctrlBindings && event.ctrlKey) {\n combobox.navigate(-1);\n event.preventDefault();\n }\n break;\n default:\n if (event.ctrlKey)\n break;\n combobox.clearSelection();\n }\n}\nfunction commitWithElement(event) {\n if (!(event.target instanceof Element))\n return;\n const target = event.target.closest('[role=\"option\"]');\n if (!target)\n return;\n if (target.getAttribute('aria-disabled') === 'true')\n return;\n fireCommitEvent(target);\n}\nfunction commit(input, list) {\n const target = list.querySelector('[aria-selected=\"true\"]');\n if (!target)\n return false;\n if (target.getAttribute('aria-disabled') === 'true')\n return true;\n target.click();\n return true;\n}\nfunction fireCommitEvent(target) {\n target.dispatchEvent(new CustomEvent('combobox-commit', { bubbles: true }));\n}\nfunction visible(el) {\n return (!el.hidden &&\n !(el instanceof HTMLInputElement && el.type === 'hidden') &&\n (el.offsetWidth > 0 || el.offsetHeight > 0));\n}\nfunction trackComposition(event, combobox) {\n combobox.isComposing = event.type === 'compositionstart';\n const list = document.getElementById(combobox.input.getAttribute('aria-controls') || '');\n if (!list)\n return;\n combobox.clearSelection();\n}\nfunction scrollTo(container, target) {\n if (!inViewport(container, target)) {\n container.scrollTop = target.offsetTop;\n }\n}\nfunction inViewport(container, element) {\n const scrollTop = container.scrollTop;\n const containerBottom = scrollTop + container.clientHeight;\n const top = element.offsetTop;\n const bottom = top + element.clientHeight;\n return top >= scrollTop && bottom <= containerBottom;\n}\n","import Combobox from '@github/combobox-nav';\n\nfunction debounce(callback, wait = 0) {\n let timeout;\n return function (...Rest) {\n clearTimeout(timeout);\n timeout = window.setTimeout(() => {\n clearTimeout(timeout);\n callback(...Rest);\n }, wait);\n };\n}\n\nconst SCREEN_READER_DELAY = window.testScreenReaderDelay || 100;\nclass Autocomplete {\n constructor(container, input, results, autoselectEnabled = false) {\n var _a;\n this.container = container;\n this.input = input;\n this.results = results;\n this.combobox = new Combobox(input, results);\n this.feedback = document.getElementById(`${this.results.id}-feedback`);\n this.autoselectEnabled = autoselectEnabled;\n this.clearButton = document.getElementById(`${this.input.id || this.input.name}-clear`);\n this.clientOptions = results.querySelectorAll('[role=option]');\n if (this.feedback) {\n this.feedback.setAttribute('aria-live', 'polite');\n this.feedback.setAttribute('aria-atomic', 'true');\n }\n if (this.clearButton && !this.clearButton.getAttribute('aria-label')) {\n const labelElem = document.querySelector(`label[for=\"${this.input.name}\"]`);\n this.clearButton.setAttribute('aria-label', `clear:`);\n this.clearButton.setAttribute('aria-labelledby', `${this.clearButton.id} ${(labelElem === null || labelElem === void 0 ? void 0 : labelElem.id) || ''}`);\n }\n if (!this.input.getAttribute('aria-expanded')) {\n this.input.setAttribute('aria-expanded', 'false');\n }\n this.results.hidden = true;\n this.results.setAttribute('aria-label', 'results');\n this.input.setAttribute('autocomplete', 'off');\n this.input.setAttribute('spellcheck', 'false');\n this.interactingWithList = false;\n this.onInputChange = debounce(this.onInputChange.bind(this), 300);\n this.onResultsMouseDown = this.onResultsMouseDown.bind(this);\n this.onInputBlur = this.onInputBlur.bind(this);\n this.onInputFocus = this.onInputFocus.bind(this);\n this.onKeydown = this.onKeydown.bind(this);\n this.onCommit = this.onCommit.bind(this);\n this.handleClear = this.handleClear.bind(this);\n this.input.addEventListener('keydown', this.onKeydown);\n this.input.addEventListener('focus', this.onInputFocus);\n this.input.addEventListener('blur', this.onInputBlur);\n this.input.addEventListener('input', this.onInputChange);\n this.results.addEventListener('mousedown', this.onResultsMouseDown);\n this.results.addEventListener('combobox-commit', this.onCommit);\n (_a = this.clearButton) === null || _a === void 0 ? void 0 : _a.addEventListener('click', this.handleClear);\n }\n destroy() {\n this.input.removeEventListener('keydown', this.onKeydown);\n this.input.removeEventListener('focus', this.onInputFocus);\n this.input.removeEventListener('blur', this.onInputBlur);\n this.input.removeEventListener('input', this.onInputChange);\n this.results.removeEventListener('mousedown', this.onResultsMouseDown);\n this.results.removeEventListener('combobox-commit', this.onCommit);\n }\n handleClear(event) {\n event.preventDefault();\n if (this.input.getAttribute('aria-expanded') === 'true') {\n this.input.setAttribute('aria-expanded', 'false');\n this.updateFeedbackForScreenReaders('Results hidden.');\n }\n this.input.value = '';\n this.container.value = '';\n this.input.focus();\n this.input.dispatchEvent(new Event('change'));\n this.container.open = false;\n }\n onKeydown(event) {\n if (event.key === 'Enter' && this.container.open && this.autoselectEnabled) {\n const firstOption = this.results.children[0];\n if (firstOption) {\n event.stopPropagation();\n event.preventDefault();\n this.onCommit({ target: firstOption });\n }\n }\n if (event.key === 'Escape' && this.container.open) {\n this.container.open = false;\n event.stopPropagation();\n event.preventDefault();\n }\n else if (event.altKey && event.key === 'ArrowUp' && this.container.open) {\n this.container.open = false;\n event.stopPropagation();\n event.preventDefault();\n }\n else if (event.altKey && event.key === 'ArrowDown' && !this.container.open) {\n if (!this.input.value.trim())\n return;\n this.container.open = true;\n event.stopPropagation();\n event.preventDefault();\n }\n }\n onInputFocus() {\n this.fetchResults();\n }\n onInputBlur() {\n if (this.interactingWithList) {\n this.interactingWithList = false;\n return;\n }\n this.container.open = false;\n }\n onCommit({ target }) {\n const selected = target;\n if (!(selected instanceof HTMLElement))\n return;\n this.container.open = false;\n if (selected instanceof HTMLAnchorElement)\n return;\n const value = selected.getAttribute('data-autocomplete-value') || selected.textContent;\n this.updateFeedbackForScreenReaders(`${selected.textContent || ''} selected.`);\n this.container.value = value;\n if (!value) {\n this.updateFeedbackForScreenReaders(`Results hidden.`);\n }\n }\n onResultsMouseDown() {\n this.interactingWithList = true;\n }\n onInputChange() {\n if (this.feedback && this.feedback.textContent) {\n this.feedback.textContent = '';\n }\n this.container.removeAttribute('value');\n this.fetchResults();\n }\n identifyOptions() {\n let id = 0;\n for (const el of this.results.querySelectorAll('[role=\"option\"]:not([id])')) {\n el.id = `${this.results.id}-option-${id++}`;\n }\n }\n updateFeedbackForScreenReaders(inputString) {\n setTimeout(() => {\n if (this.feedback) {\n this.feedback.textContent = inputString;\n }\n }, SCREEN_READER_DELAY);\n }\n fetchResults() {\n const query = this.input.value.trim();\n if (!query) {\n this.container.open = false;\n return;\n }\n const src = this.container.src;\n if (!src)\n return;\n const url = new URL(src, window.location.href);\n const params = new URLSearchParams(url.search.slice(1));\n params.append('q', query);\n url.search = params.toString();\n this.container.dispatchEvent(new CustomEvent('loadstart'));\n this.container\n .fetchResult(this.input, url.toString())\n .then(html => {\n this.results.innerHTML = html;\n this.identifyOptions();\n const allNewOptions = this.results.querySelectorAll('[role=\"option\"]');\n const hasResults = !!allNewOptions.length;\n const numOptions = allNewOptions.length;\n const [firstOption] = allNewOptions;\n const firstOptionValue = firstOption === null || firstOption === void 0 ? void 0 : firstOption.textContent;\n if (this.autoselectEnabled && firstOptionValue) {\n this.updateFeedbackForScreenReaders(`${numOptions} results. ${firstOptionValue} is the top result: Press Enter to activate.`);\n }\n else {\n this.updateFeedbackForScreenReaders(`${numOptions || 'No'} results.`);\n }\n this.container.open = hasResults;\n this.container.dispatchEvent(new CustomEvent('load'));\n this.container.dispatchEvent(new CustomEvent('loadend'));\n })\n .catch(() => {\n this.container.dispatchEvent(new CustomEvent('error'));\n this.container.dispatchEvent(new CustomEvent('loadend'));\n });\n }\n open() {\n if (!this.results.hidden)\n return;\n this.combobox.start();\n this.results.hidden = false;\n }\n close() {\n if (this.results.hidden)\n return;\n this.combobox.stop();\n this.results.hidden = true;\n }\n}\n\nclass AutocompleteEvent extends CustomEvent {\n constructor(type, init) {\n super(type, init);\n this.relatedTarget = init.relatedTarget;\n }\n}\n\nconst requests = new WeakMap();\nfunction fragment(el, url) {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.setRequestHeader('Accept', 'text/fragment+html');\n return request(el, xhr);\n}\nfunction request(el, xhr) {\n const pending = requests.get(el);\n if (pending)\n pending.abort();\n requests.set(el, xhr);\n const clear = () => requests.delete(el);\n const result = send(xhr);\n result.then(clear, clear);\n return result;\n}\nfunction send(xhr) {\n return new Promise((resolve, reject) => {\n xhr.onload = function () {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText);\n }\n else {\n reject(new Error(xhr.responseText));\n }\n };\n xhr.onerror = reject;\n xhr.send();\n });\n}\n\nconst state = new WeakMap();\nclass AutocompleteElement extends HTMLElement {\n constructor() {\n super(...arguments);\n this.fetchResult = fragment;\n }\n connectedCallback() {\n const listId = this.getAttribute('for');\n if (!listId)\n return;\n const input = this.querySelector('input');\n const results = document.getElementById(listId);\n if (!(input instanceof HTMLInputElement) || !results)\n return;\n const autoselectEnabled = this.getAttribute('data-autoselect') === 'true';\n state.set(this, new Autocomplete(this, input, results, autoselectEnabled));\n results.setAttribute('role', 'listbox');\n }\n disconnectedCallback() {\n const autocomplete = state.get(this);\n if (autocomplete) {\n autocomplete.destroy();\n state.delete(this);\n }\n }\n get src() {\n return this.getAttribute('src') || '';\n }\n set src(url) {\n this.setAttribute('src', url);\n }\n get value() {\n return this.getAttribute('value') || '';\n }\n set value(value) {\n this.setAttribute('value', value);\n }\n get open() {\n return this.hasAttribute('open');\n }\n set open(value) {\n if (value) {\n this.setAttribute('open', '');\n }\n else {\n this.removeAttribute('open');\n }\n }\n static get observedAttributes() {\n return ['open', 'value'];\n }\n attributeChangedCallback(name, oldValue, newValue) {\n if (oldValue === newValue)\n return;\n const autocomplete = state.get(this);\n if (!autocomplete)\n return;\n switch (name) {\n case 'open':\n newValue === null ? autocomplete.close() : autocomplete.open();\n break;\n case 'value':\n if (newValue !== null) {\n autocomplete.input.value = newValue;\n }\n this.dispatchEvent(new AutocompleteEvent('auto-complete-change', {\n bubbles: true,\n relatedTarget: autocomplete.input\n }));\n break;\n }\n }\n}\nif (!window.customElements.get('auto-complete')) {\n window.AutocompleteElement = AutocompleteElement;\n window.customElements.define('auto-complete', AutocompleteElement);\n}\n\nexport { AutocompleteEvent, AutocompleteElement as default };\n","function createNode(text) {\n const node = document.createElement('pre');\n node.style.width = '1px';\n node.style.height = '1px';\n node.style.position = 'fixed';\n node.style.top = '5px';\n node.textContent = text;\n return node;\n}\n\nfunction copyNode(node) {\n if ('clipboard' in navigator) {\n // eslint-disable-next-line flowtype/no-flow-fix-me-comments\n // $FlowFixMe Clipboard is not defined in Flow yet.\n return navigator.clipboard.writeText(node.textContent);\n }\n\n const selection = getSelection();\n\n if (selection == null) {\n return Promise.reject(new Error());\n }\n\n selection.removeAllRanges();\n const range = document.createRange();\n range.selectNodeContents(node);\n selection.addRange(range);\n document.execCommand('copy');\n selection.removeAllRanges();\n return Promise.resolve();\n}\nfunction copyText(text) {\n if ('clipboard' in navigator) {\n // eslint-disable-next-line flowtype/no-flow-fix-me-comments\n // $FlowFixMe Clipboard is not defined in Flow yet.\n return navigator.clipboard.writeText(text);\n }\n\n const body = document.body;\n\n if (!body) {\n return Promise.reject(new Error());\n }\n\n const node = createNode(text);\n body.appendChild(node);\n copyNode(node);\n body.removeChild(node);\n return Promise.resolve();\n}\n\nfunction copy(button) {\n const id = button.getAttribute('for');\n const text = button.getAttribute('value');\n\n function trigger() {\n button.dispatchEvent(new CustomEvent('clipboard-copy', {\n bubbles: true\n }));\n }\n\n if (text) {\n copyText(text).then(trigger);\n } else if (id) {\n const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument;\n if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return;\n const node = root.getElementById(id);\n if (node) copyTarget(node).then(trigger);\n }\n}\n\nfunction copyTarget(content) {\n if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) {\n return copyText(content.value);\n } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) {\n return copyText(content.href);\n } else {\n return copyNode(content);\n }\n}\n\nfunction clicked(event) {\n const button = event.currentTarget;\n\n if (button instanceof HTMLElement) {\n copy(button);\n }\n}\n\nfunction keydown(event) {\n if (event.key === ' ' || event.key === 'Enter') {\n const button = event.currentTarget;\n\n if (button instanceof HTMLElement) {\n event.preventDefault();\n copy(button);\n }\n }\n}\n\nfunction focused(event) {\n event.currentTarget.addEventListener('keydown', keydown);\n}\n\nfunction blurred(event) {\n event.currentTarget.removeEventListener('keydown', keydown);\n}\n\nclass ClipboardCopyElement extends HTMLElement {\n constructor() {\n super();\n this.addEventListener('click', clicked);\n this.addEventListener('focus', focused);\n this.addEventListener('blur', blurred);\n }\n\n connectedCallback() {\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0');\n }\n\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'button');\n }\n }\n\n get value() {\n return this.getAttribute('value') || '';\n }\n\n set value(text) {\n this.setAttribute('value', text);\n }\n\n}\n\nif (!window.customElements.get('clipboard-copy')) {\n window.ClipboardCopyElement = ClipboardCopyElement;\n window.customElements.define('clipboard-copy', ClipboardCopyElement);\n}\n\nexport default ClipboardCopyElement;\n","import '@github/clipboard-copy-element'\n\nconst CLIPBOARD_COPY_TIMER_DURATION = 2000\n\nfunction showSVG(svg: SVGElement) {\n svg.style.display = 'inline-block'\n}\n\nfunction hideSVG(svg: SVGElement) {\n svg.style.display = 'none'\n}\n\n// Toggle a copy button.\nfunction showCopy(button: HTMLElement) {\n const [copyIcon, checkIcon] = button.querySelectorAll('.octicon')\n\n if (!copyIcon || !checkIcon) return\n\n showSVG(copyIcon)\n hideSVG(checkIcon)\n}\n\n// Toggle a copy button.\nfunction showCheck(button: HTMLElement) {\n const [copyIcon, checkIcon] = button.querySelectorAll('.octicon')\n\n if (!copyIcon || !checkIcon) return\n\n hideSVG(copyIcon)\n showSVG(checkIcon)\n}\n\nconst clipboardCopyElementTimers = new WeakMap()\n\ndocument.addEventListener('clipboard-copy', function({target}) {\n if (!(target instanceof HTMLElement)) return\n if (!target.hasAttribute('data-view-component')) return\n\n const currentTimeout = clipboardCopyElementTimers.get(target)\n\n if (currentTimeout) {\n clearTimeout(currentTimeout)\n clipboardCopyElementTimers.delete(target)\n } else {\n showCheck(target)\n }\n\n clipboardCopyElementTimers.set(\n target,\n setTimeout(() => {\n showCopy(target)\n clipboardCopyElementTimers.delete(target)\n }, CLIPBOARD_COPY_TIMER_DURATION)\n )\n})\n","function getTabs(el) {\n return Array.from(el.querySelectorAll('[role=\"tablist\"] [role=\"tab\"]')).filter(tab => tab instanceof HTMLElement && tab.closest(el.tagName) === el);\n}\nexport default class TabContainerElement extends HTMLElement {\n constructor() {\n super();\n this.addEventListener('keydown', (event) => {\n const target = event.target;\n if (!(target instanceof HTMLElement))\n return;\n if (target.closest(this.tagName) !== this)\n return;\n if (target.getAttribute('role') !== 'tab' && !target.closest('[role=\"tablist\"]'))\n return;\n const tabs = getTabs(this);\n const currentIndex = tabs.indexOf(tabs.find(tab => tab.matches('[aria-selected=\"true\"]')));\n if (event.code === 'ArrowRight') {\n let index = currentIndex + 1;\n if (index >= tabs.length)\n index = 0;\n selectTab(this, index);\n }\n else if (event.code === 'ArrowLeft') {\n let index = currentIndex - 1;\n if (index < 0)\n index = tabs.length - 1;\n selectTab(this, index);\n }\n else if (event.code === 'Home') {\n selectTab(this, 0);\n event.preventDefault();\n }\n else if (event.code === 'End') {\n selectTab(this, tabs.length - 1);\n event.preventDefault();\n }\n });\n this.addEventListener('click', (event) => {\n const tabs = getTabs(this);\n if (!(event.target instanceof Element))\n return;\n if (event.target.closest(this.tagName) !== this)\n return;\n const tab = event.target.closest('[role=\"tab\"]');\n if (!(tab instanceof HTMLElement) || !tab.closest('[role=\"tablist\"]'))\n return;\n const index = tabs.indexOf(tab);\n selectTab(this, index);\n });\n }\n connectedCallback() {\n for (const tab of getTabs(this)) {\n if (!tab.hasAttribute('aria-selected')) {\n tab.setAttribute('aria-selected', 'false');\n }\n if (!tab.hasAttribute('tabindex')) {\n if (tab.getAttribute('aria-selected') === 'true') {\n tab.setAttribute('tabindex', '0');\n }\n else {\n tab.setAttribute('tabindex', '-1');\n }\n }\n }\n }\n}\nfunction selectTab(tabContainer, index) {\n const tabs = getTabs(tabContainer);\n const panels = Array.from(tabContainer.querySelectorAll('[role=\"tabpanel\"]')).filter(panel => panel.closest(tabContainer.tagName) === tabContainer);\n const selectedTab = tabs[index];\n const selectedPanel = panels[index];\n const cancelled = !tabContainer.dispatchEvent(new CustomEvent('tab-container-change', {\n bubbles: true,\n cancelable: true,\n detail: { relatedTarget: selectedPanel }\n }));\n if (cancelled)\n return;\n for (const tab of tabs) {\n tab.setAttribute('aria-selected', 'false');\n tab.setAttribute('tabindex', '-1');\n }\n for (const panel of panels) {\n panel.hidden = true;\n if (!panel.hasAttribute('tabindex') && !panel.hasAttribute('data-tab-container-no-tabstop')) {\n panel.setAttribute('tabindex', '0');\n }\n }\n selectedTab.setAttribute('aria-selected', 'true');\n selectedTab.setAttribute('tabindex', '0');\n selectedTab.focus();\n selectedPanel.hidden = false;\n tabContainer.dispatchEvent(new CustomEvent('tab-container-changed', {\n bubbles: true,\n detail: { relatedTarget: selectedPanel }\n }));\n}\nif (!window.customElements.get('tab-container')) {\n window.TabContainerElement = TabContainerElement;\n window.customElements.define('tab-container', TabContainerElement);\n}\n//# sourceMappingURL=index.js.map","const weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\nconst months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n];\nfunction pad(num) {\n return `0${num}`.slice(-2);\n}\nfunction strftime(time, formatString) {\n const day = time.getDay();\n const date = time.getDate();\n const month = time.getMonth();\n const year = time.getFullYear();\n const hour = time.getHours();\n const minute = time.getMinutes();\n const second = time.getSeconds();\n return formatString.replace(/%([%aAbBcdeHIlmMpPSwyYZz])/g, function (_arg) {\n let match;\n const modifier = _arg[1];\n switch (modifier) {\n case '%':\n return '%';\n case 'a':\n return weekdays[day].slice(0, 3);\n case 'A':\n return weekdays[day];\n case 'b':\n return months[month].slice(0, 3);\n case 'B':\n return months[month];\n case 'c':\n return time.toString();\n case 'd':\n return pad(date);\n case 'e':\n return String(date);\n case 'H':\n return pad(hour);\n case 'I':\n return pad(strftime(time, '%l'));\n case 'l':\n if (hour === 0 || hour === 12) {\n return String(12);\n }\n else {\n return String((hour + 12) % 12);\n }\n case 'm':\n return pad(month + 1);\n case 'M':\n return pad(minute);\n case 'p':\n if (hour > 11) {\n return 'PM';\n }\n else {\n return 'AM';\n }\n case 'P':\n if (hour > 11) {\n return 'pm';\n }\n else {\n return 'am';\n }\n case 'S':\n return pad(second);\n case 'w':\n return String(day);\n case 'y':\n return pad(year % 100);\n case 'Y':\n return String(year);\n case 'Z':\n match = time.toString().match(/\\((\\w+)\\)$/);\n return match ? match[1] : '';\n case 'z':\n match = time.toString().match(/\\w([+-]\\d\\d\\d\\d) /);\n return match ? match[1] : '';\n }\n return '';\n });\n}\nfunction makeFormatter(options) {\n let format;\n return function () {\n if (format)\n return format;\n if ('Intl' in window) {\n try {\n format = new Intl.DateTimeFormat(undefined, options);\n return format;\n }\n catch (e) {\n if (!(e instanceof RangeError)) {\n throw e;\n }\n }\n }\n };\n}\nlet dayFirst = null;\nconst dayFirstFormatter = makeFormatter({ day: 'numeric', month: 'short' });\nfunction isDayFirst() {\n if (dayFirst !== null) {\n return dayFirst;\n }\n const formatter = dayFirstFormatter();\n if (formatter) {\n const output = formatter.format(new Date(0));\n dayFirst = !!output.match(/^\\d/);\n return dayFirst;\n }\n else {\n return false;\n }\n}\nlet yearSeparator = null;\nconst yearFormatter = makeFormatter({ day: 'numeric', month: 'short', year: 'numeric' });\nfunction isYearSeparator() {\n if (yearSeparator !== null) {\n return yearSeparator;\n }\n const formatter = yearFormatter();\n if (formatter) {\n const output = formatter.format(new Date(0));\n yearSeparator = !!output.match(/\\d,/);\n return yearSeparator;\n }\n else {\n return true;\n }\n}\nfunction isThisYear(date) {\n const now = new Date();\n return now.getUTCFullYear() === date.getUTCFullYear();\n}\nfunction makeRelativeFormat(locale, options) {\n if ('Intl' in window && 'RelativeTimeFormat' in window.Intl) {\n try {\n return new Intl.RelativeTimeFormat(locale, options);\n }\n catch (e) {\n if (!(e instanceof RangeError)) {\n throw e;\n }\n }\n }\n}\nfunction localeFromElement(el) {\n const container = el.closest('[lang]');\n if (container instanceof HTMLElement && container.lang) {\n return container.lang;\n }\n return 'default';\n}\n\nconst datetimes = new WeakMap();\nclass ExtendedTimeElement extends HTMLElement {\n static get observedAttributes() {\n return [\n 'datetime',\n 'day',\n 'format',\n 'lang',\n 'hour',\n 'minute',\n 'month',\n 'second',\n 'title',\n 'weekday',\n 'year',\n 'time-zone-name'\n ];\n }\n connectedCallback() {\n const title = this.getFormattedTitle();\n if (title && !this.hasAttribute('title')) {\n this.setAttribute('title', title);\n }\n const text = this.getFormattedDate();\n if (text) {\n this.textContent = text;\n }\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n const oldTitle = this.getFormattedTitle();\n if (attrName === 'datetime') {\n const millis = Date.parse(newValue);\n if (isNaN(millis)) {\n datetimes.delete(this);\n }\n else {\n datetimes.set(this, new Date(millis));\n }\n }\n const title = this.getFormattedTitle();\n const currentTitle = this.getAttribute('title');\n if (attrName !== 'title' && title && (!currentTitle || currentTitle === oldTitle)) {\n this.setAttribute('title', title);\n }\n const text = this.getFormattedDate();\n if (text) {\n this.textContent = text;\n }\n }\n get date() {\n return datetimes.get(this);\n }\n getFormattedTitle() {\n const date = this.date;\n if (!date)\n return;\n const formatter = titleFormatter();\n if (formatter) {\n return formatter.format(date);\n }\n else {\n try {\n return date.toLocaleString();\n }\n catch (e) {\n if (e instanceof RangeError) {\n return date.toString();\n }\n else {\n throw e;\n }\n }\n }\n }\n getFormattedDate() {\n return;\n }\n}\nconst titleFormatter = makeFormatter({\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n timeZoneName: 'short'\n});\n\nconst formatters = new WeakMap();\nclass LocalTimeElement extends ExtendedTimeElement {\n attributeChangedCallback(attrName, oldValue, newValue) {\n if (attrName === 'hour' || attrName === 'minute' || attrName === 'second' || attrName === 'time-zone-name') {\n formatters.delete(this);\n }\n super.attributeChangedCallback(attrName, oldValue, newValue);\n }\n getFormattedDate() {\n const d = this.date;\n if (!d)\n return;\n const date = formatDate(this, d) || '';\n const time = formatTime(this, d) || '';\n return `${date} ${time}`.trim();\n }\n}\nfunction formatDate(el, date) {\n const props = {\n weekday: {\n short: '%a',\n long: '%A'\n },\n day: {\n numeric: '%e',\n '2-digit': '%d'\n },\n month: {\n short: '%b',\n long: '%B'\n },\n year: {\n numeric: '%Y',\n '2-digit': '%y'\n }\n };\n let format = isDayFirst() ? 'weekday day month year' : 'weekday month day, year';\n for (const prop in props) {\n const value = props[prop][el.getAttribute(prop) || ''];\n format = format.replace(prop, value || '');\n }\n format = format.replace(/(\\s,)|(,\\s$)/, '');\n return strftime(date, format).replace(/\\s+/, ' ').trim();\n}\nfunction formatTime(el, date) {\n const options = {};\n const hour = el.getAttribute('hour');\n if (hour === 'numeric' || hour === '2-digit')\n options.hour = hour;\n const minute = el.getAttribute('minute');\n if (minute === 'numeric' || minute === '2-digit')\n options.minute = minute;\n const second = el.getAttribute('second');\n if (second === 'numeric' || second === '2-digit')\n options.second = second;\n const tz = el.getAttribute('time-zone-name');\n if (tz === 'short' || tz === 'long')\n options.timeZoneName = tz;\n if (Object.keys(options).length === 0) {\n return;\n }\n let factory = formatters.get(el);\n if (!factory) {\n factory = makeFormatter(options);\n formatters.set(el, factory);\n }\n const formatter = factory();\n if (formatter) {\n return formatter.format(date);\n }\n else {\n const timef = options.second ? '%H:%M:%S' : '%H:%M';\n return strftime(date, timef);\n }\n}\nif (!window.customElements.get('local-time')) {\n window.LocalTimeElement = LocalTimeElement;\n window.customElements.define('local-time', LocalTimeElement);\n}\n\nclass RelativeTime {\n constructor(date, locale) {\n this.date = date;\n this.locale = locale;\n }\n toString() {\n const ago = this.timeElapsed();\n if (ago) {\n return ago;\n }\n else {\n const ahead = this.timeAhead();\n if (ahead) {\n return ahead;\n }\n else {\n return `on ${this.formatDate()}`;\n }\n }\n }\n timeElapsed() {\n const ms = new Date().getTime() - this.date.getTime();\n const sec = Math.round(ms / 1000);\n const min = Math.round(sec / 60);\n const hr = Math.round(min / 60);\n const day = Math.round(hr / 24);\n if (ms >= 0 && day < 30) {\n return this.timeAgoFromMs(ms);\n }\n else {\n return null;\n }\n }\n timeAhead() {\n const ms = this.date.getTime() - new Date().getTime();\n const sec = Math.round(ms / 1000);\n const min = Math.round(sec / 60);\n const hr = Math.round(min / 60);\n const day = Math.round(hr / 24);\n if (ms >= 0 && day < 30) {\n return this.timeUntil();\n }\n else {\n return null;\n }\n }\n timeAgo() {\n const ms = new Date().getTime() - this.date.getTime();\n return this.timeAgoFromMs(ms);\n }\n timeAgoFromMs(ms) {\n const sec = Math.round(ms / 1000);\n const min = Math.round(sec / 60);\n const hr = Math.round(min / 60);\n const day = Math.round(hr / 24);\n const month = Math.round(day / 30);\n const year = Math.round(month / 12);\n if (ms < 0) {\n return formatRelativeTime(this.locale, 0, 'second');\n }\n else if (sec < 10) {\n return formatRelativeTime(this.locale, 0, 'second');\n }\n else if (sec < 45) {\n return formatRelativeTime(this.locale, -sec, 'second');\n }\n else if (sec < 90) {\n return formatRelativeTime(this.locale, -min, 'minute');\n }\n else if (min < 45) {\n return formatRelativeTime(this.locale, -min, 'minute');\n }\n else if (min < 90) {\n return formatRelativeTime(this.locale, -hr, 'hour');\n }\n else if (hr < 24) {\n return formatRelativeTime(this.locale, -hr, 'hour');\n }\n else if (hr < 36) {\n return formatRelativeTime(this.locale, -day, 'day');\n }\n else if (day < 30) {\n return formatRelativeTime(this.locale, -day, 'day');\n }\n else if (month < 18) {\n return formatRelativeTime(this.locale, -month, 'month');\n }\n else {\n return formatRelativeTime(this.locale, -year, 'year');\n }\n }\n microTimeAgo() {\n const ms = new Date().getTime() - this.date.getTime();\n const sec = Math.round(ms / 1000);\n const min = Math.round(sec / 60);\n const hr = Math.round(min / 60);\n const day = Math.round(hr / 24);\n const month = Math.round(day / 30);\n const year = Math.round(month / 12);\n if (min < 1) {\n return '1m';\n }\n else if (min < 60) {\n return `${min}m`;\n }\n else if (hr < 24) {\n return `${hr}h`;\n }\n else if (day < 365) {\n return `${day}d`;\n }\n else {\n return `${year}y`;\n }\n }\n timeUntil() {\n const ms = this.date.getTime() - new Date().getTime();\n return this.timeUntilFromMs(ms);\n }\n timeUntilFromMs(ms) {\n const sec = Math.round(ms / 1000);\n const min = Math.round(sec / 60);\n const hr = Math.round(min / 60);\n const day = Math.round(hr / 24);\n const month = Math.round(day / 30);\n const year = Math.round(month / 12);\n if (month >= 18) {\n return formatRelativeTime(this.locale, year, 'year');\n }\n else if (month >= 12) {\n return formatRelativeTime(this.locale, year, 'year');\n }\n else if (day >= 45) {\n return formatRelativeTime(this.locale, month, 'month');\n }\n else if (day >= 30) {\n return formatRelativeTime(this.locale, month, 'month');\n }\n else if (hr >= 36) {\n return formatRelativeTime(this.locale, day, 'day');\n }\n else if (hr >= 24) {\n return formatRelativeTime(this.locale, day, 'day');\n }\n else if (min >= 90) {\n return formatRelativeTime(this.locale, hr, 'hour');\n }\n else if (min >= 45) {\n return formatRelativeTime(this.locale, hr, 'hour');\n }\n else if (sec >= 90) {\n return formatRelativeTime(this.locale, min, 'minute');\n }\n else if (sec >= 45) {\n return formatRelativeTime(this.locale, min, 'minute');\n }\n else if (sec >= 10) {\n return formatRelativeTime(this.locale, sec, 'second');\n }\n else {\n return formatRelativeTime(this.locale, 0, 'second');\n }\n }\n microTimeUntil() {\n const ms = this.date.getTime() - new Date().getTime();\n const sec = Math.round(ms / 1000);\n const min = Math.round(sec / 60);\n const hr = Math.round(min / 60);\n const day = Math.round(hr / 24);\n const month = Math.round(day / 30);\n const year = Math.round(month / 12);\n if (day >= 365) {\n return `${year}y`;\n }\n else if (hr >= 24) {\n return `${day}d`;\n }\n else if (min >= 60) {\n return `${hr}h`;\n }\n else if (min > 1) {\n return `${min}m`;\n }\n else {\n return '1m';\n }\n }\n formatDate() {\n let format = isDayFirst() ? '%e %b' : '%b %e';\n if (!isThisYear(this.date)) {\n format += isYearSeparator() ? ', %Y' : ' %Y';\n }\n return strftime(this.date, format);\n }\n formatTime() {\n const formatter = timeFormatter();\n if (formatter) {\n return formatter.format(this.date);\n }\n else {\n return strftime(this.date, '%l:%M%P');\n }\n }\n}\nfunction formatRelativeTime(locale, value, unit) {\n const formatter = makeRelativeFormat(locale, { numeric: 'auto' });\n if (formatter) {\n return formatter.format(value, unit);\n }\n else {\n return formatEnRelativeTime(value, unit);\n }\n}\nfunction formatEnRelativeTime(value, unit) {\n if (value === 0) {\n switch (unit) {\n case 'year':\n case 'quarter':\n case 'month':\n case 'week':\n return `this ${unit}`;\n case 'day':\n return 'today';\n case 'hour':\n case 'minute':\n return `in 0 ${unit}s`;\n case 'second':\n return 'now';\n }\n }\n else if (value === 1) {\n switch (unit) {\n case 'year':\n case 'quarter':\n case 'month':\n case 'week':\n return `next ${unit}`;\n case 'day':\n return 'tomorrow';\n case 'hour':\n case 'minute':\n case 'second':\n return `in 1 ${unit}`;\n }\n }\n else if (value === -1) {\n switch (unit) {\n case 'year':\n case 'quarter':\n case 'month':\n case 'week':\n return `last ${unit}`;\n case 'day':\n return 'yesterday';\n case 'hour':\n case 'minute':\n case 'second':\n return `1 ${unit} ago`;\n }\n }\n else if (value > 1) {\n switch (unit) {\n case 'year':\n case 'quarter':\n case 'month':\n case 'week':\n case 'day':\n case 'hour':\n case 'minute':\n case 'second':\n return `in ${value} ${unit}s`;\n }\n }\n else if (value < -1) {\n switch (unit) {\n case 'year':\n case 'quarter':\n case 'month':\n case 'week':\n case 'day':\n case 'hour':\n case 'minute':\n case 'second':\n return `${-value} ${unit}s ago`;\n }\n }\n throw new RangeError(`Invalid unit argument for format() '${unit}'`);\n}\nconst timeFormatter = makeFormatter({ hour: 'numeric', minute: '2-digit' });\n\nclass RelativeTimeElement extends ExtendedTimeElement {\n getFormattedDate() {\n const date = this.date;\n if (!date)\n return;\n return new RelativeTime(date, localeFromElement(this)).toString();\n }\n connectedCallback() {\n nowElements.push(this);\n if (!updateNowElementsId) {\n updateNowElements();\n updateNowElementsId = window.setInterval(updateNowElements, 60 * 1000);\n }\n super.connectedCallback();\n }\n disconnectedCallback() {\n const ix = nowElements.indexOf(this);\n if (ix !== -1) {\n nowElements.splice(ix, 1);\n }\n if (!nowElements.length) {\n if (updateNowElementsId) {\n clearInterval(updateNowElementsId);\n updateNowElementsId = null;\n }\n }\n }\n}\nconst nowElements = [];\nlet updateNowElementsId;\nfunction updateNowElements() {\n let time, i, len;\n for (i = 0, len = nowElements.length; i < len; i++) {\n time = nowElements[i];\n time.textContent = time.getFormattedDate() || '';\n }\n}\nif (!window.customElements.get('relative-time')) {\n window.RelativeTimeElement = RelativeTimeElement;\n window.customElements.define('relative-time', RelativeTimeElement);\n}\n\nclass TimeAgoElement extends RelativeTimeElement {\n getFormattedDate() {\n const format = this.getAttribute('format');\n const date = this.date;\n if (!date)\n return;\n if (format === 'micro') {\n return new RelativeTime(date, localeFromElement(this)).microTimeAgo();\n }\n else {\n return new RelativeTime(date, localeFromElement(this)).timeAgo();\n }\n }\n}\nif (!window.customElements.get('time-ago')) {\n window.TimeAgoElement = TimeAgoElement;\n window.customElements.define('time-ago', TimeAgoElement);\n}\n\nclass TimeUntilElement extends RelativeTimeElement {\n getFormattedDate() {\n const format = this.getAttribute('format');\n const date = this.date;\n if (!date)\n return;\n if (format === 'micro') {\n return new RelativeTime(date, localeFromElement(this)).microTimeUntil();\n }\n else {\n return new RelativeTime(date, localeFromElement(this)).timeUntil();\n }\n }\n}\nif (!window.customElements.get('time-until')) {\n window.TimeUntilElement = TimeUntilElement;\n window.customElements.define('time-until', TimeUntilElement);\n}\n\nexport { LocalTimeElement, RelativeTimeElement, TimeAgoElement, TimeUntilElement };\n","const startPositions = new WeakMap();\nconst dragStartPositions = new WeakMap();\nconst constructedElements = new WeakMap();\nfunction moveCropArea(event) {\n const el = event.currentTarget;\n if (!(el instanceof ImageCropElement))\n return;\n const { box, image } = constructedElements.get(el) || {};\n if (!box || !image)\n return;\n let deltaX = 0;\n let deltaY = 0;\n if (event instanceof KeyboardEvent) {\n if (event.key === 'ArrowUp') {\n deltaY = -1;\n }\n else if (event.key === 'ArrowDown') {\n deltaY = 1;\n }\n else if (event.key === 'ArrowLeft') {\n deltaX = -1;\n }\n else if (event.key === 'ArrowRight') {\n deltaX = 1;\n }\n }\n else if (dragStartPositions.has(el) && event instanceof MouseEvent) {\n const pos = dragStartPositions.get(el);\n deltaX = event.pageX - pos.dragStartX;\n deltaY = event.pageY - pos.dragStartY;\n }\n else if (dragStartPositions.has(el) && event instanceof TouchEvent) {\n const { pageX, pageY } = event.changedTouches[0];\n const { dragStartX, dragStartY } = dragStartPositions.get(el);\n deltaX = pageX - dragStartX;\n deltaY = pageY - dragStartY;\n }\n if (deltaX !== 0 || deltaY !== 0) {\n const x = Math.min(Math.max(0, box.offsetLeft + deltaX), image.width - box.offsetWidth);\n const y = Math.min(Math.max(0, box.offsetTop + deltaY), image.height - box.offsetHeight);\n box.style.left = `${x}px`;\n box.style.top = `${y}px`;\n fireChangeEvent(el, { x, y, width: box.offsetWidth, height: box.offsetHeight });\n }\n if (event instanceof MouseEvent) {\n dragStartPositions.set(el, {\n dragStartX: event.pageX,\n dragStartY: event.pageY\n });\n }\n else if (event instanceof TouchEvent) {\n const { pageX, pageY } = event.changedTouches[0];\n dragStartPositions.set(el, {\n dragStartX: pageX,\n dragStartY: pageY\n });\n }\n}\nfunction updateCropArea(event) {\n const target = event.target;\n if (!(target instanceof HTMLElement))\n return;\n const el = getShadowHost(target);\n if (!(el instanceof ImageCropElement))\n return;\n const { box } = constructedElements.get(el) || {};\n if (!box)\n return;\n const rect = el.getBoundingClientRect();\n let deltaX, deltaY, delta;\n if (event instanceof KeyboardEvent) {\n if (event.key === 'Escape')\n return setInitialPosition(el);\n if (event.key === '-')\n delta = -10;\n if (event.key === '=')\n delta = +10;\n if (!delta)\n return;\n deltaX = box.offsetWidth + delta;\n deltaY = box.offsetHeight + delta;\n startPositions.set(el, { startX: box.offsetLeft, startY: box.offsetTop });\n }\n else if (event instanceof MouseEvent) {\n const pos = startPositions.get(el);\n if (!pos)\n return;\n deltaX = event.pageX - pos.startX - rect.left - window.pageXOffset;\n deltaY = event.pageY - pos.startY - rect.top - window.pageYOffset;\n }\n else if (event instanceof TouchEvent) {\n const pos = startPositions.get(el);\n if (!pos)\n return;\n deltaX = event.changedTouches[0].pageX - pos.startX - rect.left - window.pageXOffset;\n deltaY = event.changedTouches[0].pageY - pos.startY - rect.top - window.pageYOffset;\n }\n if (deltaX && deltaY)\n updateDimensions(el, deltaX, deltaY, !(event instanceof KeyboardEvent));\n}\nfunction getShadowHost(el) {\n const rootNode = el.getRootNode();\n if (!(rootNode instanceof ShadowRoot))\n return el;\n return rootNode.host;\n}\nfunction startUpdate(event) {\n const currentTarget = event.currentTarget;\n if (!(currentTarget instanceof HTMLElement))\n return;\n const el = getShadowHost(currentTarget);\n if (!(el instanceof ImageCropElement))\n return;\n const { box } = constructedElements.get(el) || {};\n if (!box)\n return;\n const target = event.target;\n if (!(target instanceof HTMLElement))\n return;\n if (target.hasAttribute('data-direction')) {\n const direction = target.getAttribute('data-direction') || '';\n el.addEventListener('mousemove', updateCropArea);\n el.addEventListener('touchmove', updateCropArea, { passive: true });\n if (['nw', 'se'].indexOf(direction) >= 0)\n el.classList.add('nwse');\n if (['ne', 'sw'].indexOf(direction) >= 0)\n el.classList.add('nesw');\n startPositions.set(el, {\n startX: box.offsetLeft + (['se', 'ne'].indexOf(direction) >= 0 ? 0 : box.offsetWidth),\n startY: box.offsetTop + (['se', 'sw'].indexOf(direction) >= 0 ? 0 : box.offsetHeight)\n });\n updateCropArea(event);\n }\n else {\n el.addEventListener('mousemove', moveCropArea);\n el.addEventListener('touchmove', moveCropArea, { passive: true });\n }\n}\nfunction updateDimensions(target, deltaX, deltaY, reposition = true) {\n let newSide = Math.max(Math.abs(deltaX), Math.abs(deltaY), 10);\n const pos = startPositions.get(target);\n if (!pos)\n return;\n const { box, image } = constructedElements.get(target) || {};\n if (!box || !image)\n return;\n newSide = Math.min(newSide, deltaY > 0 ? image.height - pos.startY : pos.startY, deltaX > 0 ? image.width - pos.startX : pos.startX);\n const x = reposition ? Math.round(Math.max(0, deltaX > 0 ? pos.startX : pos.startX - newSide)) : box.offsetLeft;\n const y = reposition ? Math.round(Math.max(0, deltaY > 0 ? pos.startY : pos.startY - newSide)) : box.offsetTop;\n box.style.left = `${x}px`;\n box.style.top = `${y}px`;\n box.style.width = `${newSide}px`;\n box.style.height = `${newSide}px`;\n fireChangeEvent(target, { x, y, width: newSide, height: newSide });\n}\nfunction setInitialPosition(el) {\n const { image } = constructedElements.get(el) || {};\n if (!image)\n return;\n const side = Math.round(image.clientWidth > image.clientHeight ? image.clientHeight : image.clientWidth);\n startPositions.set(el, {\n startX: (image.clientWidth - side) / 2,\n startY: (image.clientHeight - side) / 2\n });\n updateDimensions(el, side, side);\n}\nfunction stopUpdate(event) {\n const el = event.currentTarget;\n if (!(el instanceof ImageCropElement))\n return;\n dragStartPositions.delete(el);\n el.classList.remove('nwse', 'nesw');\n el.removeEventListener('mousemove', updateCropArea);\n el.removeEventListener('mousemove', moveCropArea);\n el.removeEventListener('touchmove', updateCropArea);\n el.removeEventListener('touchmove', moveCropArea);\n}\nfunction fireChangeEvent(target, result) {\n const { image } = constructedElements.get(target) || {};\n if (!image)\n return;\n const ratio = image.naturalWidth / image.width;\n for (const key in result) {\n const value = Math.round(result[key] * ratio);\n result[key] = value;\n const slottedInput = target.querySelector(`[data-image-crop-input='${key}']`);\n if (slottedInput instanceof HTMLInputElement)\n slottedInput.value = value.toString();\n }\n target.dispatchEvent(new CustomEvent('image-crop-change', { bubbles: true, detail: result }));\n}\nclass ImageCropElement extends HTMLElement {\n connectedCallback() {\n if (constructedElements.has(this))\n return;\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.innerHTML = `\n\n\n
\n \"\"\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n`;\n const box = shadowRoot.querySelector('[data-crop-box]');\n if (!(box instanceof HTMLElement))\n return;\n const image = shadowRoot.querySelector('img');\n if (!(image instanceof HTMLImageElement))\n return;\n constructedElements.set(this, { box, image });\n image.addEventListener('load', () => {\n this.loaded = true;\n setInitialPosition(this);\n });\n this.addEventListener('mouseleave', stopUpdate);\n this.addEventListener('touchend', stopUpdate);\n this.addEventListener('mouseup', stopUpdate);\n box.addEventListener('mousedown', startUpdate);\n box.addEventListener('touchstart', startUpdate, { passive: true });\n this.addEventListener('keydown', moveCropArea);\n this.addEventListener('keydown', updateCropArea);\n if (this.src)\n image.src = this.src;\n }\n static get observedAttributes() {\n return ['src'];\n }\n get src() {\n return this.getAttribute('src');\n }\n set src(val) {\n if (val) {\n this.setAttribute('src', val);\n }\n else {\n this.removeAttribute('src');\n }\n }\n get loaded() {\n return this.hasAttribute('loaded');\n }\n set loaded(val) {\n if (val) {\n this.setAttribute('loaded', '');\n }\n else {\n this.removeAttribute('loaded');\n }\n }\n attributeChangedCallback(attribute, oldValue, newValue) {\n const { image } = constructedElements.get(this) || {};\n if (attribute === 'src') {\n this.loaded = false;\n if (image)\n image.src = newValue;\n }\n }\n}\nexport default ImageCropElement;\nif (!window.customElements.get('image-crop')) {\n window.ImageCropElement = ImageCropElement;\n window.customElements.define('image-crop', ImageCropElement);\n}\n","class DetailsMenuElement extends HTMLElement {\n get preload() {\n return this.hasAttribute('preload');\n }\n set preload(value) {\n if (value) {\n this.setAttribute('preload', '');\n }\n else {\n this.removeAttribute('preload');\n }\n }\n get src() {\n return this.getAttribute('src') || '';\n }\n set src(value) {\n this.setAttribute('src', value);\n }\n connectedCallback() {\n if (!this.hasAttribute('role'))\n this.setAttribute('role', 'menu');\n const details = this.parentElement;\n if (!details)\n return;\n const summary = details.querySelector('summary');\n if (summary) {\n summary.setAttribute('aria-haspopup', 'menu');\n if (!summary.hasAttribute('role'))\n summary.setAttribute('role', 'button');\n }\n const subscriptions = [\n fromEvent(details, 'compositionstart', e => trackComposition(this, e)),\n fromEvent(details, 'compositionend', e => trackComposition(this, e)),\n fromEvent(details, 'click', e => shouldCommit(details, e)),\n fromEvent(details, 'change', e => shouldCommit(details, e)),\n fromEvent(details, 'keydown', e => keydown(details, this, e)),\n fromEvent(details, 'toggle', () => loadFragment(details, this), { once: true }),\n fromEvent(details, 'toggle', () => closeCurrentMenu(details)),\n this.preload\n ? fromEvent(details, 'mouseover', () => loadFragment(details, this), { once: true })\n : NullSubscription,\n ...focusOnOpen(details)\n ];\n states.set(this, { subscriptions, loaded: false, isComposing: false });\n }\n disconnectedCallback() {\n const state = states.get(this);\n if (!state)\n return;\n states.delete(this);\n for (const sub of state.subscriptions) {\n sub.unsubscribe();\n }\n }\n}\nconst states = new WeakMap();\nconst NullSubscription = {\n unsubscribe() {\n }\n};\nfunction fromEvent(target, eventName, onNext, options = false) {\n target.addEventListener(eventName, onNext, options);\n return {\n unsubscribe: () => {\n target.removeEventListener(eventName, onNext, options);\n }\n };\n}\nfunction loadFragment(details, menu) {\n const src = menu.getAttribute('src');\n if (!src)\n return;\n const state = states.get(menu);\n if (!state)\n return;\n if (state.loaded)\n return;\n state.loaded = true;\n const loader = menu.querySelector('include-fragment');\n if (loader && !loader.hasAttribute('src')) {\n loader.addEventListener('loadend', () => autofocus(details));\n loader.setAttribute('src', src);\n }\n}\nfunction focusOnOpen(details) {\n let isMouse = false;\n const onmousedown = () => (isMouse = true);\n const onkeydown = () => (isMouse = false);\n const ontoggle = () => {\n if (!details.hasAttribute('open'))\n return;\n if (autofocus(details))\n return;\n if (!isMouse)\n focusFirstItem(details);\n };\n return [\n fromEvent(details, 'mousedown', onmousedown),\n fromEvent(details, 'keydown', onkeydown),\n fromEvent(details, 'toggle', ontoggle)\n ];\n}\nfunction closeCurrentMenu(details) {\n if (!details.hasAttribute('open'))\n return;\n for (const menu of document.querySelectorAll('details[open] > details-menu')) {\n const opened = menu.closest('details');\n if (opened && opened !== details && !opened.contains(details)) {\n opened.removeAttribute('open');\n }\n }\n}\nfunction autofocus(details) {\n if (!details.hasAttribute('open'))\n return false;\n const input = details.querySelector('details-menu [autofocus]');\n if (input) {\n input.focus();\n return true;\n }\n else {\n return false;\n }\n}\nfunction focusFirstItem(details) {\n const selected = document.activeElement;\n if (selected && isMenuItem(selected) && details.contains(selected))\n return;\n const target = sibling(details, true);\n if (target)\n target.focus();\n}\nfunction sibling(details, next) {\n const options = Array.from(details.querySelectorAll('[role^=\"menuitem\"]:not([hidden]):not([disabled]):not([aria-disabled=\"true\"])'));\n const selected = document.activeElement;\n const index = selected instanceof HTMLElement ? options.indexOf(selected) : -1;\n const found = next ? options[index + 1] : options[index - 1];\n const def = next ? options[0] : options[options.length - 1];\n return found || def;\n}\nconst ctrlBindings = navigator.userAgent.match(/Macintosh/);\nfunction shouldCommit(details, event) {\n const target = event.target;\n if (!(target instanceof Element))\n return;\n if (target.closest('details') !== details)\n return;\n if (event.type === 'click') {\n const menuitem = target.closest('[role=\"menuitem\"], [role=\"menuitemradio\"]');\n if (!menuitem)\n return;\n const input = menuitem.querySelector('input');\n if (menuitem.tagName === 'LABEL' && target === input)\n return;\n const onlyCommitOnChangeEvent = menuitem.tagName === 'LABEL' && input && !input.checked;\n if (!onlyCommitOnChangeEvent) {\n commit(menuitem, details);\n }\n }\n else if (event.type === 'change') {\n const menuitem = target.closest('[role=\"menuitemradio\"], [role=\"menuitemcheckbox\"]');\n if (menuitem)\n commit(menuitem, details);\n }\n}\nfunction updateChecked(selected, details) {\n for (const el of details.querySelectorAll('[role=\"menuitemradio\"], [role=\"menuitemcheckbox\"]')) {\n const input = el.querySelector('input[type=\"radio\"], input[type=\"checkbox\"]');\n let checkState = (el === selected).toString();\n if (input instanceof HTMLInputElement) {\n checkState = input.indeterminate ? 'mixed' : input.checked.toString();\n }\n el.setAttribute('aria-checked', checkState);\n }\n}\nfunction commit(selected, details) {\n if (selected.hasAttribute('disabled') || selected.getAttribute('aria-disabled') === 'true')\n return;\n const menu = selected.closest('details-menu');\n if (!menu)\n return;\n const dispatched = menu.dispatchEvent(new CustomEvent('details-menu-select', {\n cancelable: true,\n detail: { relatedTarget: selected }\n }));\n if (!dispatched)\n return;\n updateLabel(selected, details);\n updateChecked(selected, details);\n if (selected.getAttribute('role') !== 'menuitemcheckbox')\n close(details);\n menu.dispatchEvent(new CustomEvent('details-menu-selected', {\n detail: { relatedTarget: selected }\n }));\n}\nfunction keydown(details, menu, event) {\n if (!(event instanceof KeyboardEvent))\n return;\n if (details.querySelector('details[open]'))\n return;\n const state = states.get(menu);\n if (!state || state.isComposing)\n return;\n const isSummaryFocused = event.target instanceof Element && event.target.tagName === 'SUMMARY';\n switch (event.key) {\n case 'Escape':\n if (details.hasAttribute('open')) {\n close(details);\n event.preventDefault();\n event.stopPropagation();\n }\n break;\n case 'ArrowDown':\n {\n if (isSummaryFocused && !details.hasAttribute('open')) {\n details.setAttribute('open', '');\n }\n const target = sibling(details, true);\n if (target)\n target.focus();\n event.preventDefault();\n }\n break;\n case 'ArrowUp':\n {\n if (isSummaryFocused && !details.hasAttribute('open')) {\n details.setAttribute('open', '');\n }\n const target = sibling(details, false);\n if (target)\n target.focus();\n event.preventDefault();\n }\n break;\n case 'n':\n {\n if (ctrlBindings && event.ctrlKey) {\n const target = sibling(details, true);\n if (target)\n target.focus();\n event.preventDefault();\n }\n }\n break;\n case 'p':\n {\n if (ctrlBindings && event.ctrlKey) {\n const target = sibling(details, false);\n if (target)\n target.focus();\n event.preventDefault();\n }\n }\n break;\n case ' ':\n case 'Enter':\n {\n const selected = document.activeElement;\n if (selected instanceof HTMLElement && isMenuItem(selected) && selected.closest('details') === details) {\n event.preventDefault();\n event.stopPropagation();\n selected.click();\n }\n }\n break;\n }\n}\nfunction isMenuItem(el) {\n const role = el.getAttribute('role');\n return role === 'menuitem' || role === 'menuitemcheckbox' || role === 'menuitemradio';\n}\nfunction close(details) {\n const wasOpen = details.hasAttribute('open');\n if (!wasOpen)\n return;\n details.removeAttribute('open');\n const summary = details.querySelector('summary');\n if (summary)\n summary.focus();\n}\nfunction updateLabel(item, details) {\n const button = details.querySelector('[data-menu-button]');\n if (!button)\n return;\n const text = labelText(item);\n if (text) {\n button.textContent = text;\n }\n else {\n const html = labelHTML(item);\n if (html)\n button.innerHTML = html;\n }\n}\nfunction labelText(el) {\n if (!el)\n return null;\n const textEl = el.hasAttribute('data-menu-button-text') ? el : el.querySelector('[data-menu-button-text]');\n if (!textEl)\n return null;\n return textEl.getAttribute('data-menu-button-text') || textEl.textContent;\n}\nfunction labelHTML(el) {\n if (!el)\n return null;\n const contentsEl = el.hasAttribute('data-menu-button-contents') ? el : el.querySelector('[data-menu-button-contents]');\n return contentsEl ? contentsEl.innerHTML : null;\n}\nfunction trackComposition(menu, event) {\n const state = states.get(menu);\n if (!state)\n return;\n state.isComposing = event.type === 'compositionstart';\n}\nexport default DetailsMenuElement;\nif (!window.customElements.get('details-menu')) {\n window.DetailsMenuElement = DetailsMenuElement;\n window.customElements.define('details-menu', DetailsMenuElement);\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","const alternateOrders = {\n 'outside-top': ['outside-bottom', 'outside-right', 'outside-left', 'outside-bottom'],\n 'outside-bottom': ['outside-top', 'outside-right', 'outside-left', 'outside-bottom'],\n 'outside-left': ['outside-right', 'outside-bottom', 'outside-top', 'outside-bottom'],\n 'outside-right': ['outside-left', 'outside-bottom', 'outside-top', 'outside-bottom']\n};\nconst alternateAlignments = {\n start: ['end', 'center'],\n end: ['start', 'center'],\n center: ['end', 'start']\n};\nexport function getAnchoredPosition(floatingElement, anchorElement, settings = {}) {\n const parentElement = getPositionedParent(floatingElement);\n const clippingRect = getClippingRect(parentElement);\n const parentElementStyle = getComputedStyle(parentElement);\n const parentElementRect = parentElement.getBoundingClientRect();\n const [borderTop, borderLeft] = [parentElementStyle.borderTopWidth, parentElementStyle.borderLeftWidth].map(v => parseInt(v, 10) || 0);\n const relativeRect = {\n top: parentElementRect.top + borderTop,\n left: parentElementRect.left + borderLeft\n };\n return pureCalculateAnchoredPosition(clippingRect, relativeRect, floatingElement.getBoundingClientRect(), anchorElement instanceof Element ? anchorElement.getBoundingClientRect() : anchorElement, getDefaultSettings(settings));\n}\nfunction getPositionedParent(element) {\n let parentNode = element.parentNode;\n while (parentNode !== null) {\n if (parentNode instanceof HTMLElement && getComputedStyle(parentNode).position !== 'static') {\n return parentNode;\n }\n parentNode = parentNode.parentNode;\n }\n return document.body;\n}\nfunction getClippingRect(element) {\n let parentNode = element;\n while (parentNode !== null) {\n if (parentNode === document.body) {\n break;\n }\n const parentNodeStyle = getComputedStyle(parentNode);\n if (parentNodeStyle.overflow !== 'visible') {\n break;\n }\n parentNode = parentNode.parentNode;\n }\n const clippingNode = parentNode === document.body || !(parentNode instanceof HTMLElement) ? document.body : parentNode;\n const elemRect = clippingNode.getBoundingClientRect();\n const elemStyle = getComputedStyle(clippingNode);\n const [borderTop, borderLeft, borderRight, borderBottom] = [\n elemStyle.borderTopWidth,\n elemStyle.borderLeftWidth,\n elemStyle.borderRightWidth,\n elemStyle.borderBottomWidth\n ].map(v => parseInt(v, 10) || 0);\n return {\n top: elemRect.top + borderTop,\n left: elemRect.left + borderLeft,\n width: elemRect.width - borderRight - borderLeft,\n height: Math.max(elemRect.height - borderTop - borderBottom, clippingNode === document.body ? window.innerHeight : -Infinity)\n };\n}\nconst positionDefaults = {\n side: 'outside-bottom',\n align: 'start',\n anchorOffset: 4,\n alignmentOffset: 4,\n allowOutOfBounds: false\n};\nfunction getDefaultSettings(settings = {}) {\n var _a, _b, _c, _d, _e;\n const side = (_a = settings.side) !== null && _a !== void 0 ? _a : positionDefaults.side;\n const align = (_b = settings.align) !== null && _b !== void 0 ? _b : positionDefaults.align;\n return {\n side,\n align,\n anchorOffset: (_c = settings.anchorOffset) !== null && _c !== void 0 ? _c : (side === 'inside-center' ? 0 : positionDefaults.anchorOffset),\n alignmentOffset: (_d = settings.alignmentOffset) !== null && _d !== void 0 ? _d : (align !== 'center' && side.startsWith('inside') ? positionDefaults.alignmentOffset : 0),\n allowOutOfBounds: (_e = settings.allowOutOfBounds) !== null && _e !== void 0 ? _e : positionDefaults.allowOutOfBounds\n };\n}\nfunction pureCalculateAnchoredPosition(viewportRect, relativePosition, floatingRect, anchorRect, { side, align, allowOutOfBounds, anchorOffset, alignmentOffset }) {\n const relativeViewportRect = {\n top: viewportRect.top - relativePosition.top,\n left: viewportRect.left - relativePosition.left,\n width: viewportRect.width,\n height: viewportRect.height\n };\n let pos = calculatePosition(floatingRect, anchorRect, side, align, anchorOffset, alignmentOffset);\n let anchorSide = side;\n let anchorAlign = align;\n pos.top -= relativePosition.top;\n pos.left -= relativePosition.left;\n if (!allowOutOfBounds) {\n const alternateOrder = alternateOrders[side];\n let positionAttempt = 0;\n if (alternateOrder) {\n let prevSide = side;\n while (positionAttempt < alternateOrder.length &&\n shouldRecalculatePosition(prevSide, pos, relativeViewportRect, floatingRect)) {\n const nextSide = alternateOrder[positionAttempt++];\n prevSide = nextSide;\n pos = calculatePosition(floatingRect, anchorRect, nextSide, align, anchorOffset, alignmentOffset);\n pos.top -= relativePosition.top;\n pos.left -= relativePosition.left;\n anchorSide = nextSide;\n }\n }\n const alternateAlignment = alternateAlignments[align];\n let alignmentAttempt = 0;\n if (alternateAlignment) {\n let prevAlign = align;\n while (alignmentAttempt < alternateAlignment.length &&\n shouldRecalculateAlignment(prevAlign, pos, relativeViewportRect, floatingRect)) {\n const nextAlign = alternateAlignment[alignmentAttempt++];\n prevAlign = nextAlign;\n pos = calculatePosition(floatingRect, anchorRect, anchorSide, nextAlign, anchorOffset, alignmentOffset);\n pos.top -= relativePosition.top;\n pos.left -= relativePosition.left;\n anchorAlign = nextAlign;\n }\n }\n if (pos.top < relativeViewportRect.top) {\n pos.top = relativeViewportRect.top;\n }\n if (pos.left < relativeViewportRect.left) {\n pos.left = relativeViewportRect.left;\n }\n if (pos.left + floatingRect.width > viewportRect.width + relativeViewportRect.left) {\n pos.left = viewportRect.width + relativeViewportRect.left - floatingRect.width;\n }\n if (alternateOrder && positionAttempt < alternateOrder.length) {\n if (pos.top + floatingRect.height > viewportRect.height + relativeViewportRect.top) {\n pos.top = viewportRect.height + relativeViewportRect.top - floatingRect.height;\n }\n }\n }\n return Object.assign(Object.assign({}, pos), { anchorSide, anchorAlign });\n}\nfunction calculatePosition(elementDimensions, anchorPosition, side, align, anchorOffset, alignmentOffset) {\n const anchorRight = anchorPosition.left + anchorPosition.width;\n const anchorBottom = anchorPosition.top + anchorPosition.height;\n let top = -1;\n let left = -1;\n if (side === 'outside-top') {\n top = anchorPosition.top - anchorOffset - elementDimensions.height;\n }\n else if (side === 'outside-bottom') {\n top = anchorBottom + anchorOffset;\n }\n else if (side === 'outside-left') {\n left = anchorPosition.left - anchorOffset - elementDimensions.width;\n }\n else if (side === 'outside-right') {\n left = anchorRight + anchorOffset;\n }\n if (side === 'outside-top' || side === 'outside-bottom') {\n if (align === 'start') {\n left = anchorPosition.left + alignmentOffset;\n }\n else if (align === 'center') {\n left = anchorPosition.left - (elementDimensions.width - anchorPosition.width) / 2 + alignmentOffset;\n }\n else {\n left = anchorRight - elementDimensions.width - alignmentOffset;\n }\n }\n if (side === 'outside-left' || side === 'outside-right') {\n if (align === 'start') {\n top = anchorPosition.top + alignmentOffset;\n }\n else if (align === 'center') {\n top = anchorPosition.top - (elementDimensions.height - anchorPosition.height) / 2 + alignmentOffset;\n }\n else {\n top = anchorBottom - elementDimensions.height - alignmentOffset;\n }\n }\n if (side === 'inside-top') {\n top = anchorPosition.top + anchorOffset;\n }\n else if (side === 'inside-bottom') {\n top = anchorBottom - anchorOffset - elementDimensions.height;\n }\n else if (side === 'inside-left') {\n left = anchorPosition.left + anchorOffset;\n }\n else if (side === 'inside-right') {\n left = anchorRight - anchorOffset - elementDimensions.width;\n }\n else if (side === 'inside-center') {\n left = (anchorRight + anchorPosition.left) / 2 - elementDimensions.width / 2 + anchorOffset;\n }\n if (side === 'inside-top' || side === 'inside-bottom') {\n if (align === 'start') {\n left = anchorPosition.left + alignmentOffset;\n }\n else if (align === 'center') {\n left = anchorPosition.left - (elementDimensions.width - anchorPosition.width) / 2 + alignmentOffset;\n }\n else {\n left = anchorRight - elementDimensions.width - alignmentOffset;\n }\n }\n else if (side === 'inside-left' || side === 'inside-right' || side === 'inside-center') {\n if (align === 'start') {\n top = anchorPosition.top + alignmentOffset;\n }\n else if (align === 'center') {\n top = anchorPosition.top - (elementDimensions.height - anchorPosition.height) / 2 + alignmentOffset;\n }\n else {\n top = anchorBottom - elementDimensions.height - alignmentOffset;\n }\n }\n return { top, left };\n}\nfunction shouldRecalculatePosition(side, currentPos, containerDimensions, elementDimensions) {\n if (side === 'outside-top' || side === 'outside-bottom') {\n return (currentPos.top < containerDimensions.top ||\n currentPos.top + elementDimensions.height > containerDimensions.height + containerDimensions.top);\n }\n else {\n return (currentPos.left < containerDimensions.left ||\n currentPos.left + elementDimensions.width > containerDimensions.width + containerDimensions.left);\n }\n}\nfunction shouldRecalculateAlignment(align, currentPos, containerDimensions, elementDimensions) {\n if (align === 'end') {\n return currentPos.left < containerDimensions.left;\n }\n else if (align === 'start' || align === 'center') {\n return (currentPos.left + elementDimensions.width > containerDimensions.left + containerDimensions.width ||\n currentPos.left < containerDimensions.left);\n }\n}\n","// eslint-disable-next-line prettier/prettier\nimport type {AnchorAlignment, AnchorSide} from '@primer/behaviors'\nimport {getAnchoredPosition} from '@primer/behaviors'\n\nconst TOOLTIP_OPEN_CLASS = 'tooltip-open'\nconst TOOLTIP_ARROW_EDGE_OFFSET = 6\n\ntype Direction = 'n' | 's' | 'e' | 'w' | 'ne' | 'se' | 'nw' | 'sw'\n\nconst DIRECTION_CLASSES = [\n 'tooltip-n',\n 'tooltip-s',\n 'tooltip-e',\n 'tooltip-w',\n 'tooltip-ne',\n 'tooltip-se',\n 'tooltip-nw',\n 'tooltip-sw'\n]\n\nclass ToolTipElement extends HTMLElement {\n styles() {\n return `\n :host {\n position: absolute;\n z-index: 1000000;\n padding: .5em .75em;\n font: normal normal 11px/1.5 -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\";\n -webkit-font-smoothing: subpixel-antialiased;\n color: var(--color-fg-on-emphasis);\n text-align: center;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: break-word;\n white-space: pre;\n background: var(--color-neutral-emphasis-plus);\n border-radius: 6px;\n opacity: 0;\n max-width: 250px;\n word-wrap: break-word;\n white-space: normal;\n width: max-content;\n }\n\n :host:before{\n position: absolute;\n z-index: 1000001;\n color: var(--color-neutral-emphasis-plus);\n content: \"\";\n border: 6px solid transparent;\n opacity: 0\n }\n\n @keyframes tooltip-appear {\n from {\n opacity: 0\n }\n to {\n opacity: 1\n }\n }\n\n :host:after{\n position: absolute;\n display: block;\n right: 0;\n left: 0;\n height: 12px;\n content: \"\"\n }\n\n :host(.${TOOLTIP_OPEN_CLASS}),\n :host(.${TOOLTIP_OPEN_CLASS}):before {\n animation-name: tooltip-appear;\n animation-duration: .1s;\n animation-fill-mode: forwards;\n animation-timing-function: ease-in;\n animation-delay: .4s\n }\n\n :host(.tooltip-s):before,\n :host(.tooltip-n):before {\n right: 50%;\n margin-right: -${TOOLTIP_ARROW_EDGE_OFFSET}px;\n }\n\n :host(.tooltip-s):before,\n :host(.tooltip-se):before,\n :host(.tooltip-sw):before {\n bottom: 100%;\n border-bottom-color: var(--color-neutral-emphasis-plus)\n }\n\n :host(.tooltip-s):after,\n :host(.tooltip-se):after,\n :host(.tooltip-sw):after {\n bottom: 100%\n }\n\n :host(.tooltip-n):before,\n :host(.tooltip-ne):before,\n :host(.tooltip-nw):before {\n top: 100%;\n border-top-color: var(--color-neutral-emphasis-plus)\n }\n\n :host(.tooltip-n):after,\n :host(.tooltip-ne):after,\n :host(.tooltip-nw):after {\n top: 100%\n }\n\n :host(.tooltip-se):before,\n :host(.tooltip-ne):before {\n left: 0;\n margin-left: ${TOOLTIP_ARROW_EDGE_OFFSET}px;\n }\n\n :host(.tooltip-sw):before,\n :host(.tooltip-nw):before {\n right: 0;\n margin-right: ${TOOLTIP_ARROW_EDGE_OFFSET}px;\n }\n\n :host(.tooltip-w):before {\n top: 50%;\n bottom: 50%;\n left: 100%;\n margin-top: -6px;\n border-left-color: var(--color-neutral-emphasis-plus)\n }\n\n :host(.tooltip-e):before {\n top: 50%;\n right: 100%;\n bottom: 50%;\n margin-top: -6px;\n border-right-color: var(--color-neutral-emphasis-plus)\n }\n `\n }\n\n #abortController: AbortController | undefined\n #align: AnchorAlignment = 'center'\n #side: AnchorSide = 'outside-bottom'\n #allowUpdatePosition = false\n\n get htmlFor(): string {\n return this.getAttribute('for') || ''\n }\n\n set htmlFor(value: string) {\n this.setAttribute('for', value)\n }\n\n get type(): 'description' | 'label' {\n const type = this.getAttribute('data-type')\n return type === 'label' ? 'label' : 'description'\n }\n\n set type(value: 'description' | 'label') {\n this.setAttribute('data-type', value)\n }\n\n get direction(): Direction {\n return (this.getAttribute('data-direction') || 's') as Direction\n }\n\n set direction(value: Direction) {\n this.setAttribute('data-direction', value)\n }\n\n get control(): HTMLElement | null {\n return this.ownerDocument.getElementById(this.htmlFor)\n }\n\n connectedCallback() {\n if (!this.shadowRoot) {\n const shadow = this.attachShadow({mode: 'open'})\n shadow.innerHTML = `\n \n \n `\n }\n this.hidden = true\n this.#allowUpdatePosition = true\n\n if (!this.id) {\n this.id = `tooltip-${Date.now()}-${(Math.random() * 10000).toFixed(0)}`\n }\n\n if (!this.control) return\n\n this.setAttribute('role', 'tooltip')\n\n this.#abortController?.abort()\n this.#abortController = new AbortController()\n const {signal} = this.#abortController\n\n this.addEventListener('mouseleave', this, {signal})\n this.control.addEventListener('mouseenter', this, {signal})\n this.control.addEventListener('mouseleave', this, {signal})\n this.control.addEventListener('focus', this, {signal})\n this.control.addEventListener('blur', this, {signal})\n this.ownerDocument.addEventListener('keydown', this, {signal})\n this.#update()\n }\n\n disconnectedCallback() {\n this.#abortController?.abort()\n }\n\n handleEvent(event: Event) {\n if (!this.control) return\n\n // Ensures that tooltip stays open when hovering between tooltip and element\n // WCAG Success Criterion 1.4.13 Hoverable\n if ((event.type === 'mouseenter' || event.type === 'focus') && this.hidden) {\n this.hidden = false\n } else if (event.type === 'blur') {\n this.hidden = true\n } else if (\n event.type === 'mouseleave' &&\n (event as MouseEvent).relatedTarget !== this.control &&\n (event as MouseEvent).relatedTarget !== this\n ) {\n this.hidden = true\n } else if (event.type === 'keydown' && (event as KeyboardEvent).key === 'Escape' && !this.hidden) {\n this.hidden = true\n }\n }\n\n static observedAttributes = ['data-type', 'data-direction', 'id', 'hidden']\n\n #update() {\n if (this.hidden) {\n this.classList.remove(TOOLTIP_OPEN_CLASS, ...DIRECTION_CLASSES)\n } else {\n this.classList.add(TOOLTIP_OPEN_CLASS)\n for (const tooltip of this.ownerDocument.querySelectorAll(this.tagName)) {\n if (tooltip !== this) tooltip.hidden = true\n }\n this.#updatePosition()\n }\n }\n\n attributeChangedCallback(name: string) {\n if (name === 'id' || name === 'data-type') {\n if (!this.id || !this.control) return\n if (this.type === 'label') {\n this.control.setAttribute('aria-labelledby', this.id)\n } else {\n let describedBy = this.control.getAttribute('aria-describedby')\n describedBy ? (describedBy = `${describedBy} ${this.id}`) : (describedBy = this.id)\n this.control.setAttribute('aria-describedby', describedBy)\n }\n } else if (this.isConnected && name === 'hidden') {\n this.#update()\n } else if (name === 'data-direction') {\n this.classList.remove(...DIRECTION_CLASSES)\n const direction = this.direction\n if (direction === 'n') {\n this.#align = 'center'\n this.#side = 'outside-top'\n } else if (direction === 'ne') {\n this.#align = 'start'\n this.#side = 'outside-top'\n } else if (direction === 'e') {\n this.#align = 'center'\n this.#side = 'outside-right'\n } else if (direction === 'se') {\n this.#align = 'start'\n this.#side = 'outside-bottom'\n } else if (direction === 's') {\n this.#align = 'center'\n this.#side = 'outside-bottom'\n } else if (direction === 'sw') {\n this.#align = 'end'\n this.#side = 'outside-bottom'\n } else if (direction === 'w') {\n this.#align = 'center'\n this.#side = 'outside-left'\n } else if (direction === 'nw') {\n this.#align = 'end'\n this.#side = 'outside-top'\n }\n }\n }\n\n #updatePosition() {\n if (!this.control) return\n if (!this.#allowUpdatePosition || this.hidden) return\n\n const TOOLTIP_OFFSET = 10\n\n this.style.left = `0px` // Ensures we have reliable tooltip width in `getAnchoredPosition`\n\n const position = getAnchoredPosition(this, this.control, {\n side: this.#side,\n align: this.#align,\n anchorOffset: TOOLTIP_OFFSET\n })\n const anchorSide = position.anchorSide\n const align = position.anchorAlign\n\n this.style.top = `${position.top}px`\n this.style.left = `${position.left}px`\n\n let direction: Direction = 's'\n\n if (anchorSide === 'outside-left') {\n direction = 'w'\n } else if (anchorSide === 'outside-right') {\n direction = 'e'\n } else if (anchorSide === 'outside-top') {\n if (align === 'center') {\n direction = 'n'\n } else if (align === 'start') {\n direction = 'ne'\n } else {\n direction = 'nw'\n }\n } else {\n if (align === 'center') {\n direction = 's'\n } else if (align === 'start') {\n direction = 'se'\n } else {\n direction = 'sw'\n }\n }\n\n this.classList.add(`tooltip-${direction}`)\n }\n}\n\nif (!window.customElements.get('tool-tip')) {\n window.ToolTipElement = ToolTipElement\n window.customElements.define('tool-tip', ToolTipElement)\n}\n\ndeclare global {\n interface Window {\n ToolTipElement: typeof ToolTipElement\n }\n}\n"],"names":["ctrlBindings","navigator","userAgent","match","Combobox","[object Object]","input","list","this","isComposing","id","Math","random","toString","slice","keyboardEventHandler","event","combobox","shiftKey","metaKey","altKey","ctrlKey","key","target","querySelector","getAttribute","click","commit","preventDefault","clearSelection","navigate","keyboardBindings","compositionEventHandler","type","document","getElementById","trackComposition","inputHandler","bind","setAttribute","stop","removeAttribute","addEventListener","commitWithElement","removeEventListener","indexDiff","focusEl","Array","from","querySelectorAll","filter","visible","els","focusIndex","indexOf","length","focus","indexOfItem","newIndex","el","scrollTo","Element","closest","dispatchEvent","CustomEvent","bubbles","fireCommitEvent","hidden","HTMLInputElement","offsetWidth","offsetHeight","container","element","scrollTop","containerBottom","clientHeight","top","offsetTop","bottom","inViewport","SCREEN_READER_DELAY","window","testScreenReaderDelay","Autocomplete","results","autoselectEnabled","_a","feedback","clearButton","name","clientOptions","labelElem","interactingWithList","onInputChange","callback","wait","timeout","Rest","clearTimeout","setTimeout","debounce","onResultsMouseDown","onInputBlur","onInputFocus","onKeydown","onCommit","handleClear","updateFeedbackForScreenReaders","value","Event","open","firstOption","children","stopPropagation","trim","fetchResults","selected","HTMLElement","HTMLAnchorElement","textContent","inputString","query","src","url","URL","location","href","params","URLSearchParams","search","append","fetchResult","then","html","innerHTML","identifyOptions","allNewOptions","hasResults","numOptions","firstOptionValue","catch","start","AutocompleteEvent","init","super","relatedTarget","requests","WeakMap","fragment","xhr","XMLHttpRequest","setRequestHeader","pending","get","abort","set","clear","delete","result","Promise","resolve","reject","onload","status","responseText","Error","onerror","send","request","state","AutocompleteElement","arguments","listId","autocomplete","destroy","hasAttribute","observedAttributes","oldValue","newValue","close","copyNode","node","clipboard","writeText","selection","getSelection","removeAllRanges","range","createRange","selectNodeContents","addRange","execCommand","copyText","text","body","createElement","style","width","height","position","createNode","appendChild","removeChild","copy","button","trigger","root","prototype","getRootNode","ownerDocument","Document","ShadowRoot","content","HTMLTextAreaElement","clicked","currentTarget","keydown","focused","blurred","customElements","define","ClipboardCopyElement","showSVG","svg","display","hideSVG","clipboardCopyElementTimers","getTabs","tab","tagName","currentTimeout","copyIcon","checkIcon","showCheck","showCopy","TabContainerElement","tabs","currentIndex","find","matches","code","index","selectTab","tabContainer","panels","panel","selectedTab","selectedPanel","cancelable","detail","weekdays","months","pad","num","strftime","time","formatString","day","getDay","date","getDate","month","getMonth","year","getFullYear","hour","getHours","minute","getMinutes","second","getSeconds","replace","_arg","String","makeFormatter","options","format","Intl","DateTimeFormat","undefined","e","RangeError","dayFirst","dayFirstFormatter","isDayFirst","formatter","output","Date","yearSeparator","yearFormatter","localeFromElement","lang","datetimes","ExtendedTimeElement","title","getFormattedTitle","getFormattedDate","attrName","oldTitle","millis","parse","isNaN","currentTitle","titleFormatter","toLocaleString","timeZoneName","formatters","LocalTimeElement","attributeChangedCallback","d","props","weekday","short","long","numeric","2-digit","prop","formatDate","tz","Object","keys","factory","formatTime","RelativeTime","locale","ago","timeElapsed","ahead","timeAhead","ms","getTime","sec","round","min","hr","timeAgoFromMs","timeUntil","formatRelativeTime","timeUntilFromMs","getUTCFullYear","isYearSeparator","timeFormatter","unit","RelativeTimeFormat","makeRelativeFormat","formatEnRelativeTime","RelativeTimeElement","nowElements","push","updateNowElementsId","updateNowElements","setInterval","connectedCallback","ix","splice","clearInterval","i","len","TimeAgoElement","microTimeAgo","timeAgo","TimeUntilElement","microTimeUntil","startPositions","dragStartPositions","constructedElements","moveCropArea","ImageCropElement","box","image","deltaX","deltaY","KeyboardEvent","has","MouseEvent","pos","pageX","dragStartX","pageY","dragStartY","TouchEvent","changedTouches","x","max","offsetLeft","y","left","fireChangeEvent","updateCropArea","getShadowHost","rect","getBoundingClientRect","delta","setInitialPosition","startX","startY","pageXOffset","pageYOffset","updateDimensions","rootNode","host","startUpdate","direction","passive","classList","add","reposition","newSide","abs","side","clientWidth","stopUpdate","remove","ratio","naturalWidth","slottedInput","shadowRoot","attachShadow","mode","HTMLImageElement","loaded","val","attribute","DetailsMenuElement","preload","details","parentElement","summary","subscriptions","fromEvent","shouldCommit","menu","states","isSummaryFocused","sibling","activeElement","isMenuItem","loadFragment","once","opened","contains","closeCurrentMenu","NullSubscription","focusOnOpen","sub","unsubscribe","eventName","onNext","loader","autofocus","isMouse","focusFirstItem","next","found","def","menuitem","checked","item","textEl","labelText","contentsEl","labelHTML","updateLabel","checkState","indeterminate","updateChecked","role","__classPrivateFieldGet","receiver","kind","f","TypeError","call","__classPrivateFieldSet","alternateOrders","outside-top","outside-bottom","outside-left","outside-right","alternateAlignments","end","center","getAnchoredPosition","floatingElement","anchorElement","settings","parentNode","getComputedStyle","getPositionedParent","clippingRect","overflow","clippingNode","elemRect","elemStyle","borderTop","borderLeft","borderRight","borderBottom","borderTopWidth","borderLeftWidth","borderRightWidth","borderBottomWidth","map","v","parseInt","innerHeight","Infinity","getClippingRect","parentElementStyle","parentElementRect","viewportRect","relativePosition","floatingRect","anchorRect","align","allowOutOfBounds","anchorOffset","alignmentOffset","relativeViewportRect","calculatePosition","anchorSide","anchorAlign","alternateOrder","positionAttempt","prevSide","shouldRecalculatePosition","nextSide","alternateAlignment","alignmentAttempt","prevAlign","shouldRecalculateAlignment","nextAlign","assign","pureCalculateAnchoredPosition","_b","_c","_d","_e","positionDefaults","startsWith","getDefaultSettings","elementDimensions","anchorPosition","anchorRight","anchorBottom","currentPos","containerDimensions","DIRECTION_CLASSES","ToolTipElement","_ToolTipElement_abortController","_ToolTipElement_align","_ToolTipElement_side","_ToolTipElement_allowUpdatePosition","htmlFor","control","styles","now","toFixed","AbortController","signal","_ToolTipElement_instances","_ToolTipElement_update","describedBy","isConnected","tooltip","_ToolTipElement_updatePosition"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"primer_view_components.js","sources":["../../../node_modules/@github/combobox-nav/dist/index.js","../../../node_modules/@github/auto-complete-element/dist/index.js","../../../node_modules/@github/clipboard-copy-element/dist/index.esm.js","../../components/primer/clipboard_copy_component.ts","../../../node_modules/@github/tab-container-element/dist/index.js","../../../node_modules/@github/time-elements/dist/index.js","../../../node_modules/@github/image-crop-element/dist/index.js","../../../node_modules/@github/details-menu-element/dist/index.js","../../../node_modules/tslib/tslib.es6.js","../../../node_modules/@primer/behaviors/dist/esm/anchored-position.js","../../../node_modules/@primer/behaviors/dist/esm/utils/iterate-focusable-elements.js","../../../node_modules/@primer/behaviors/dist/esm/polyfills/event-listener-signal.js","../../../node_modules/@primer/behaviors/dist/esm/focus-trap.js","../../components/primer/alpha/tool-tip-element.ts","../../components/primer/alpha/modal-dialog-element.ts"],"sourcesContent":["const ctrlBindings = !!navigator.userAgent.match(/Macintosh/);\nexport default class Combobox {\n constructor(input, list) {\n this.input = input;\n this.list = list;\n this.isComposing = false;\n if (!list.id) {\n list.id = `combobox-${Math.random()\n .toString()\n .slice(2, 6)}`;\n }\n this.keyboardEventHandler = event => keyboardBindings(event, this);\n this.compositionEventHandler = event => trackComposition(event, this);\n this.inputHandler = this.clearSelection.bind(this);\n input.setAttribute('role', 'combobox');\n input.setAttribute('aria-controls', list.id);\n input.setAttribute('aria-expanded', 'false');\n input.setAttribute('aria-autocomplete', 'list');\n input.setAttribute('aria-haspopup', 'listbox');\n }\n destroy() {\n this.clearSelection();\n this.stop();\n this.input.removeAttribute('role');\n this.input.removeAttribute('aria-controls');\n this.input.removeAttribute('aria-expanded');\n this.input.removeAttribute('aria-autocomplete');\n this.input.removeAttribute('aria-haspopup');\n }\n start() {\n this.input.setAttribute('aria-expanded', 'true');\n this.input.addEventListener('compositionstart', this.compositionEventHandler);\n this.input.addEventListener('compositionend', this.compositionEventHandler);\n this.input.addEventListener('input', this.inputHandler);\n this.input.addEventListener('keydown', this.keyboardEventHandler);\n this.list.addEventListener('click', commitWithElement);\n }\n stop() {\n this.clearSelection();\n this.input.setAttribute('aria-expanded', 'false');\n this.input.removeEventListener('compositionstart', this.compositionEventHandler);\n this.input.removeEventListener('compositionend', this.compositionEventHandler);\n this.input.removeEventListener('input', this.inputHandler);\n this.input.removeEventListener('keydown', this.keyboardEventHandler);\n this.list.removeEventListener('click', commitWithElement);\n }\n navigate(indexDiff = 1) {\n const focusEl = Array.from(this.list.querySelectorAll('[aria-selected=\"true\"]')).filter(visible)[0];\n const els = Array.from(this.list.querySelectorAll('[role=\"option\"]')).filter(visible);\n const focusIndex = els.indexOf(focusEl);\n if ((focusIndex === els.length - 1 && indexDiff === 1) || (focusIndex === 0 && indexDiff === -1)) {\n this.clearSelection();\n this.input.focus();\n return;\n }\n let indexOfItem = indexDiff === 1 ? 0 : els.length - 1;\n if (focusEl && focusIndex >= 0) {\n const newIndex = focusIndex + indexDiff;\n if (newIndex >= 0 && newIndex < els.length)\n indexOfItem = newIndex;\n }\n const target = els[indexOfItem];\n if (!target)\n return;\n for (const el of els) {\n if (target === el) {\n this.input.setAttribute('aria-activedescendant', target.id);\n target.setAttribute('aria-selected', 'true');\n scrollTo(this.list, target);\n }\n else {\n el.setAttribute('aria-selected', 'false');\n }\n }\n }\n clearSelection() {\n this.input.removeAttribute('aria-activedescendant');\n for (const el of this.list.querySelectorAll('[aria-selected=\"true\"]')) {\n el.setAttribute('aria-selected', 'false');\n }\n }\n}\nfunction keyboardBindings(event, combobox) {\n if (event.shiftKey || event.metaKey || event.altKey)\n return;\n if (!ctrlBindings && event.ctrlKey)\n return;\n if (combobox.isComposing)\n return;\n switch (event.key) {\n case 'Enter':\n case 'Tab':\n if (commit(combobox.input, combobox.list)) {\n event.preventDefault();\n }\n break;\n case 'Escape':\n combobox.clearSelection();\n break;\n case 'ArrowDown':\n combobox.navigate(1);\n event.preventDefault();\n break;\n case 'ArrowUp':\n combobox.navigate(-1);\n event.preventDefault();\n break;\n case 'n':\n if (ctrlBindings && event.ctrlKey) {\n combobox.navigate(1);\n event.preventDefault();\n }\n break;\n case 'p':\n if (ctrlBindings && event.ctrlKey) {\n combobox.navigate(-1);\n event.preventDefault();\n }\n break;\n default:\n if (event.ctrlKey)\n break;\n combobox.clearSelection();\n }\n}\nfunction commitWithElement(event) {\n if (!(event.target instanceof Element))\n return;\n const target = event.target.closest('[role=\"option\"]');\n if (!target)\n return;\n if (target.getAttribute('aria-disabled') === 'true')\n return;\n fireCommitEvent(target);\n}\nfunction commit(input, list) {\n const target = list.querySelector('[aria-selected=\"true\"]');\n if (!target)\n return false;\n if (target.getAttribute('aria-disabled') === 'true')\n return true;\n target.click();\n return true;\n}\nfunction fireCommitEvent(target) {\n target.dispatchEvent(new CustomEvent('combobox-commit', { bubbles: true }));\n}\nfunction visible(el) {\n return (!el.hidden &&\n !(el instanceof HTMLInputElement && el.type === 'hidden') &&\n (el.offsetWidth > 0 || el.offsetHeight > 0));\n}\nfunction trackComposition(event, combobox) {\n combobox.isComposing = event.type === 'compositionstart';\n const list = document.getElementById(combobox.input.getAttribute('aria-controls') || '');\n if (!list)\n return;\n combobox.clearSelection();\n}\nfunction scrollTo(container, target) {\n if (!inViewport(container, target)) {\n container.scrollTop = target.offsetTop;\n }\n}\nfunction inViewport(container, element) {\n const scrollTop = container.scrollTop;\n const containerBottom = scrollTop + container.clientHeight;\n const top = element.offsetTop;\n const bottom = top + element.clientHeight;\n return top >= scrollTop && bottom <= containerBottom;\n}\n","import Combobox from '@github/combobox-nav';\n\nfunction debounce(callback, wait = 0) {\n let timeout;\n return function (...Rest) {\n clearTimeout(timeout);\n timeout = window.setTimeout(() => {\n clearTimeout(timeout);\n callback(...Rest);\n }, wait);\n };\n}\n\nconst SCREEN_READER_DELAY = window.testScreenReaderDelay || 100;\nclass Autocomplete {\n constructor(container, input, results, autoselectEnabled = false) {\n var _a;\n this.container = container;\n this.input = input;\n this.results = results;\n this.combobox = new Combobox(input, results);\n this.feedback = document.getElementById(`${this.results.id}-feedback`);\n this.autoselectEnabled = autoselectEnabled;\n this.clearButton = document.getElementById(`${this.input.id || this.input.name}-clear`);\n this.clientOptions = results.querySelectorAll('[role=option]');\n if (this.feedback) {\n this.feedback.setAttribute('aria-live', 'polite');\n this.feedback.setAttribute('aria-atomic', 'true');\n }\n if (this.clearButton && !this.clearButton.getAttribute('aria-label')) {\n const labelElem = document.querySelector(`label[for=\"${this.input.name}\"]`);\n this.clearButton.setAttribute('aria-label', `clear:`);\n this.clearButton.setAttribute('aria-labelledby', `${this.clearButton.id} ${(labelElem === null || labelElem === void 0 ? void 0 : labelElem.id) || ''}`);\n }\n if (!this.input.getAttribute('aria-expanded')) {\n this.input.setAttribute('aria-expanded', 'false');\n }\n this.results.hidden = true;\n this.results.setAttribute('aria-label', 'results');\n this.input.setAttribute('autocomplete', 'off');\n this.input.setAttribute('spellcheck', 'false');\n this.interactingWithList = false;\n this.onInputChange = debounce(this.onInputChange.bind(this), 300);\n this.onResultsMouseDown = this.onResultsMouseDown.bind(this);\n this.onInputBlur = this.onInputBlur.bind(this);\n this.onInputFocus = this.onInputFocus.bind(this);\n this.onKeydown = this.onKeydown.bind(this);\n this.onCommit = this.onCommit.bind(this);\n this.handleClear = this.handleClear.bind(this);\n this.input.addEventListener('keydown', this.onKeydown);\n this.input.addEventListener('focus', this.onInputFocus);\n this.input.addEventListener('blur', this.onInputBlur);\n this.input.addEventListener('input', this.onInputChange);\n this.results.addEventListener('mousedown', this.onResultsMouseDown);\n this.results.addEventListener('combobox-commit', this.onCommit);\n (_a = this.clearButton) === null || _a === void 0 ? void 0 : _a.addEventListener('click', this.handleClear);\n }\n destroy() {\n this.input.removeEventListener('keydown', this.onKeydown);\n this.input.removeEventListener('focus', this.onInputFocus);\n this.input.removeEventListener('blur', this.onInputBlur);\n this.input.removeEventListener('input', this.onInputChange);\n this.results.removeEventListener('mousedown', this.onResultsMouseDown);\n this.results.removeEventListener('combobox-commit', this.onCommit);\n }\n handleClear(event) {\n event.preventDefault();\n if (this.input.getAttribute('aria-expanded') === 'true') {\n this.input.setAttribute('aria-expanded', 'false');\n this.updateFeedbackForScreenReaders('Results hidden.');\n }\n this.input.value = '';\n this.container.value = '';\n this.input.focus();\n this.input.dispatchEvent(new Event('change'));\n this.container.open = false;\n }\n onKeydown(event) {\n if (event.key === 'Enter' && this.container.open && this.autoselectEnabled) {\n const firstOption = this.results.children[0];\n if (firstOption) {\n event.stopPropagation();\n event.preventDefault();\n this.onCommit({ target: firstOption });\n }\n }\n if (event.key === 'Escape' && this.container.open) {\n this.container.open = false;\n event.stopPropagation();\n event.preventDefault();\n }\n else if (event.altKey && event.key === 'ArrowUp' && this.container.open) {\n this.container.open = false;\n event.stopPropagation();\n event.preventDefault();\n }\n else if (event.altKey && event.key === 'ArrowDown' && !this.container.open) {\n if (!this.input.value.trim())\n return;\n this.container.open = true;\n event.stopPropagation();\n event.preventDefault();\n }\n }\n onInputFocus() {\n this.fetchResults();\n }\n onInputBlur() {\n if (this.interactingWithList) {\n this.interactingWithList = false;\n return;\n }\n this.container.open = false;\n }\n onCommit({ target }) {\n const selected = target;\n if (!(selected instanceof HTMLElement))\n return;\n this.container.open = false;\n if (selected instanceof HTMLAnchorElement)\n return;\n const value = selected.getAttribute('data-autocomplete-value') || selected.textContent;\n this.updateFeedbackForScreenReaders(`${selected.textContent || ''} selected.`);\n this.container.value = value;\n if (!value) {\n this.updateFeedbackForScreenReaders(`Results hidden.`);\n }\n }\n onResultsMouseDown() {\n this.interactingWithList = true;\n }\n onInputChange() {\n if (this.feedback && this.feedback.textContent) {\n this.feedback.textContent = '';\n }\n this.container.removeAttribute('value');\n this.fetchResults();\n }\n identifyOptions() {\n let id = 0;\n for (const el of this.results.querySelectorAll('[role=\"option\"]:not([id])')) {\n el.id = `${this.results.id}-option-${id++}`;\n }\n }\n updateFeedbackForScreenReaders(inputString) {\n setTimeout(() => {\n if (this.feedback) {\n this.feedback.textContent = inputString;\n }\n }, SCREEN_READER_DELAY);\n }\n fetchResults() {\n const query = this.input.value.trim();\n if (!query) {\n this.container.open = false;\n return;\n }\n const src = this.container.src;\n if (!src)\n return;\n const url = new URL(src, window.location.href);\n const params = new URLSearchParams(url.search.slice(1));\n params.append('q', query);\n url.search = params.toString();\n this.container.dispatchEvent(new CustomEvent('loadstart'));\n this.container\n .fetchResult(this.input, url.toString())\n .then(html => {\n this.results.innerHTML = html;\n this.identifyOptions();\n const allNewOptions = this.results.querySelectorAll('[role=\"option\"]');\n const hasResults = !!allNewOptions.length;\n const numOptions = allNewOptions.length;\n const [firstOption] = allNewOptions;\n const firstOptionValue = firstOption === null || firstOption === void 0 ? void 0 : firstOption.textContent;\n if (this.autoselectEnabled && firstOptionValue) {\n this.updateFeedbackForScreenReaders(`${numOptions} results. ${firstOptionValue} is the top result: Press Enter to activate.`);\n }\n else {\n this.updateFeedbackForScreenReaders(`${numOptions || 'No'} results.`);\n }\n this.container.open = hasResults;\n this.container.dispatchEvent(new CustomEvent('load'));\n this.container.dispatchEvent(new CustomEvent('loadend'));\n })\n .catch(() => {\n this.container.dispatchEvent(new CustomEvent('error'));\n this.container.dispatchEvent(new CustomEvent('loadend'));\n });\n }\n open() {\n if (!this.results.hidden)\n return;\n this.combobox.start();\n this.results.hidden = false;\n }\n close() {\n if (this.results.hidden)\n return;\n this.combobox.stop();\n this.results.hidden = true;\n }\n}\n\nclass AutocompleteEvent extends CustomEvent {\n constructor(type, init) {\n super(type, init);\n this.relatedTarget = init.relatedTarget;\n }\n}\n\nconst requests = new WeakMap();\nfunction fragment(el, url) {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.setRequestHeader('Accept', 'text/fragment+html');\n return request(el, xhr);\n}\nfunction request(el, xhr) {\n const pending = requests.get(el);\n if (pending)\n pending.abort();\n requests.set(el, xhr);\n const clear = () => requests.delete(el);\n const result = send(xhr);\n result.then(clear, clear);\n return result;\n}\nfunction send(xhr) {\n return new Promise((resolve, reject) => {\n xhr.onload = function () {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.responseText);\n }\n else {\n reject(new Error(xhr.responseText));\n }\n };\n xhr.onerror = reject;\n xhr.send();\n });\n}\n\nconst state = new WeakMap();\nclass AutocompleteElement extends HTMLElement {\n constructor() {\n super(...arguments);\n this.fetchResult = fragment;\n }\n connectedCallback() {\n const listId = this.getAttribute('for');\n if (!listId)\n return;\n const input = this.querySelector('input');\n const results = document.getElementById(listId);\n if (!(input instanceof HTMLInputElement) || !results)\n return;\n const autoselectEnabled = this.getAttribute('data-autoselect') === 'true';\n state.set(this, new Autocomplete(this, input, results, autoselectEnabled));\n results.setAttribute('role', 'listbox');\n }\n disconnectedCallback() {\n const autocomplete = state.get(this);\n if (autocomplete) {\n autocomplete.destroy();\n state.delete(this);\n }\n }\n get src() {\n return this.getAttribute('src') || '';\n }\n set src(url) {\n this.setAttribute('src', url);\n }\n get value() {\n return this.getAttribute('value') || '';\n }\n set value(value) {\n this.setAttribute('value', value);\n }\n get open() {\n return this.hasAttribute('open');\n }\n set open(value) {\n if (value) {\n this.setAttribute('open', '');\n }\n else {\n this.removeAttribute('open');\n }\n }\n static get observedAttributes() {\n return ['open', 'value'];\n }\n attributeChangedCallback(name, oldValue, newValue) {\n if (oldValue === newValue)\n return;\n const autocomplete = state.get(this);\n if (!autocomplete)\n return;\n switch (name) {\n case 'open':\n newValue === null ? autocomplete.close() : autocomplete.open();\n break;\n case 'value':\n if (newValue !== null) {\n autocomplete.input.value = newValue;\n }\n this.dispatchEvent(new AutocompleteEvent('auto-complete-change', {\n bubbles: true,\n relatedTarget: autocomplete.input\n }));\n break;\n }\n }\n}\nif (!window.customElements.get('auto-complete')) {\n window.AutocompleteElement = AutocompleteElement;\n window.customElements.define('auto-complete', AutocompleteElement);\n}\n\nexport { AutocompleteEvent, AutocompleteElement as default };\n","function createNode(text) {\n const node = document.createElement('pre');\n node.style.width = '1px';\n node.style.height = '1px';\n node.style.position = 'fixed';\n node.style.top = '5px';\n node.textContent = text;\n return node;\n}\n\nfunction copyNode(node) {\n if ('clipboard' in navigator) {\n // eslint-disable-next-line flowtype/no-flow-fix-me-comments\n // $FlowFixMe Clipboard is not defined in Flow yet.\n return navigator.clipboard.writeText(node.textContent);\n }\n\n const selection = getSelection();\n\n if (selection == null) {\n return Promise.reject(new Error());\n }\n\n selection.removeAllRanges();\n const range = document.createRange();\n range.selectNodeContents(node);\n selection.addRange(range);\n document.execCommand('copy');\n selection.removeAllRanges();\n return Promise.resolve();\n}\nfunction copyText(text) {\n if ('clipboard' in navigator) {\n // eslint-disable-next-line flowtype/no-flow-fix-me-comments\n // $FlowFixMe Clipboard is not defined in Flow yet.\n return navigator.clipboard.writeText(text);\n }\n\n const body = document.body;\n\n if (!body) {\n return Promise.reject(new Error());\n }\n\n const node = createNode(text);\n body.appendChild(node);\n copyNode(node);\n body.removeChild(node);\n return Promise.resolve();\n}\n\nfunction copy(button) {\n const id = button.getAttribute('for');\n const text = button.getAttribute('value');\n\n function trigger() {\n button.dispatchEvent(new CustomEvent('clipboard-copy', {\n bubbles: true\n }));\n }\n\n if (text) {\n copyText(text).then(trigger);\n } else if (id) {\n const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument;\n if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return;\n const node = root.getElementById(id);\n if (node) copyTarget(node).then(trigger);\n }\n}\n\nfunction copyTarget(content) {\n if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) {\n return copyText(content.value);\n } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) {\n return copyText(content.href);\n } else {\n return copyNode(content);\n }\n}\n\nfunction clicked(event) {\n const button = event.currentTarget;\n\n if (button instanceof HTMLElement) {\n copy(button);\n }\n}\n\nfunction keydown(event) {\n if (event.key === ' ' || event.key === 'Enter') {\n const button = event.currentTarget;\n\n if (button instanceof HTMLElement) {\n event.preventDefault();\n copy(button);\n }\n }\n}\n\nfunction focused(event) {\n event.currentTarget.addEventListener('keydown', keydown);\n}\n\nfunction blurred(event) {\n event.currentTarget.removeEventListener('keydown', keydown);\n}\n\nclass ClipboardCopyElement extends HTMLElement {\n constructor() {\n super();\n this.addEventListener('click', clicked);\n this.addEventListener('focus', focused);\n this.addEventListener('blur', blurred);\n }\n\n connectedCallback() {\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0');\n }\n\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'button');\n }\n }\n\n get value() {\n return this.getAttribute('value') || '';\n }\n\n set value(text) {\n this.setAttribute('value', text);\n }\n\n}\n\nif (!window.customElements.get('clipboard-copy')) {\n window.ClipboardCopyElement = ClipboardCopyElement;\n window.customElements.define('clipboard-copy', ClipboardCopyElement);\n}\n\nexport default ClipboardCopyElement;\n","import '@github/clipboard-copy-element'\n\nconst CLIPBOARD_COPY_TIMER_DURATION = 2000\n\nfunction showSVG(svg: SVGElement) {\n svg.style.display = 'inline-block'\n}\n\nfunction hideSVG(svg: SVGElement) {\n svg.style.display = 'none'\n}\n\n// Toggle a copy button.\nfunction showCopy(button: HTMLElement) {\n const [copyIcon, checkIcon] = button.querySelectorAll('.octicon')\n\n if (!copyIcon || !checkIcon) return\n\n showSVG(copyIcon)\n hideSVG(checkIcon)\n}\n\n// Toggle a copy button.\nfunction showCheck(button: HTMLElement) {\n const [copyIcon, checkIcon] = button.querySelectorAll('.octicon')\n\n if (!copyIcon || !checkIcon) return\n\n hideSVG(copyIcon)\n showSVG(checkIcon)\n}\n\nconst clipboardCopyElementTimers = new WeakMap()\n\ndocument.addEventListener('clipboard-copy', function({target}) {\n if (!(target instanceof HTMLElement)) return\n if (!target.hasAttribute('data-view-component')) return\n\n const currentTimeout = clipboardCopyElementTimers.get(target)\n\n if (currentTimeout) {\n clearTimeout(currentTimeout)\n clipboardCopyElementTimers.delete(target)\n } else {\n showCheck(target)\n }\n\n clipboardCopyElementTimers.set(\n target,\n setTimeout(() => {\n showCopy(target)\n clipboardCopyElementTimers.delete(target)\n }, CLIPBOARD_COPY_TIMER_DURATION)\n )\n})\n","function getTabs(el) {\n return Array.from(el.querySelectorAll('[role=\"tablist\"] [role=\"tab\"]')).filter(tab => tab instanceof HTMLElement && tab.closest(el.tagName) === el);\n}\nexport default class TabContainerElement extends HTMLElement {\n constructor() {\n super();\n this.addEventListener('keydown', (event) => {\n const target = event.target;\n if (!(target instanceof HTMLElement))\n return;\n if (target.closest(this.tagName) !== this)\n return;\n if (target.getAttribute('role') !== 'tab' && !target.closest('[role=\"tablist\"]'))\n return;\n const tabs = getTabs(this);\n const currentIndex = tabs.indexOf(tabs.find(tab => tab.matches('[aria-selected=\"true\"]')));\n if (event.code === 'ArrowRight') {\n let index = currentIndex + 1;\n if (index >= tabs.length)\n index = 0;\n selectTab(this, index);\n }\n else if (event.code === 'ArrowLeft') {\n let index = currentIndex - 1;\n if (index < 0)\n index = tabs.length - 1;\n selectTab(this, index);\n }\n else if (event.code === 'Home') {\n selectTab(this, 0);\n event.preventDefault();\n }\n else if (event.code === 'End') {\n selectTab(this, tabs.length - 1);\n event.preventDefault();\n }\n });\n this.addEventListener('click', (event) => {\n const tabs = getTabs(this);\n if (!(event.target instanceof Element))\n return;\n if (event.target.closest(this.tagName) !== this)\n return;\n const tab = event.target.closest('[role=\"tab\"]');\n if (!(tab instanceof HTMLElement) || !tab.closest('[role=\"tablist\"]'))\n return;\n const index = tabs.indexOf(tab);\n selectTab(this, index);\n });\n }\n connectedCallback() {\n for (const tab of getTabs(this)) {\n if (!tab.hasAttribute('aria-selected')) {\n tab.setAttribute('aria-selected', 'false');\n }\n if (!tab.hasAttribute('tabindex')) {\n if (tab.getAttribute('aria-selected') === 'true') {\n tab.setAttribute('tabindex', '0');\n }\n else {\n tab.setAttribute('tabindex', '-1');\n }\n }\n }\n }\n}\nfunction selectTab(tabContainer, index) {\n const tabs = getTabs(tabContainer);\n const panels = Array.from(tabContainer.querySelectorAll('[role=\"tabpanel\"]')).filter(panel => panel.closest(tabContainer.tagName) === tabContainer);\n const selectedTab = tabs[index];\n const selectedPanel = panels[index];\n const cancelled = !tabContainer.dispatchEvent(new CustomEvent('tab-container-change', {\n bubbles: true,\n cancelable: true,\n detail: { relatedTarget: selectedPanel }\n }));\n if (cancelled)\n return;\n for (const tab of tabs) {\n tab.setAttribute('aria-selected', 'false');\n tab.setAttribute('tabindex', '-1');\n }\n for (const panel of panels) {\n panel.hidden = true;\n if (!panel.hasAttribute('tabindex') && !panel.hasAttribute('data-tab-container-no-tabstop')) {\n panel.setAttribute('tabindex', '0');\n }\n }\n selectedTab.setAttribute('aria-selected', 'true');\n selectedTab.setAttribute('tabindex', '0');\n selectedTab.focus();\n selectedPanel.hidden = false;\n tabContainer.dispatchEvent(new CustomEvent('tab-container-changed', {\n bubbles: true,\n detail: { relatedTarget: selectedPanel }\n }));\n}\nif (!window.customElements.get('tab-container')) {\n window.TabContainerElement = TabContainerElement;\n window.customElements.define('tab-container', TabContainerElement);\n}\n//# sourceMappingURL=index.js.map","const weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\nconst months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n];\nfunction pad(num) {\n return `0${num}`.slice(-2);\n}\nfunction strftime(time, formatString) {\n const day = time.getDay();\n const date = time.getDate();\n const month = time.getMonth();\n const year = time.getFullYear();\n const hour = time.getHours();\n const minute = time.getMinutes();\n const second = time.getSeconds();\n return formatString.replace(/%([%aAbBcdeHIlmMpPSwyYZz])/g, function (_arg) {\n let match;\n const modifier = _arg[1];\n switch (modifier) {\n case '%':\n return '%';\n case 'a':\n return weekdays[day].slice(0, 3);\n case 'A':\n return weekdays[day];\n case 'b':\n return months[month].slice(0, 3);\n case 'B':\n return months[month];\n case 'c':\n return time.toString();\n case 'd':\n return pad(date);\n case 'e':\n return String(date);\n case 'H':\n return pad(hour);\n case 'I':\n return pad(strftime(time, '%l'));\n case 'l':\n if (hour === 0 || hour === 12) {\n return String(12);\n }\n else {\n return String((hour + 12) % 12);\n }\n case 'm':\n return pad(month + 1);\n case 'M':\n return pad(minute);\n case 'p':\n if (hour > 11) {\n return 'PM';\n }\n else {\n return 'AM';\n }\n case 'P':\n if (hour > 11) {\n return 'pm';\n }\n else {\n return 'am';\n }\n case 'S':\n return pad(second);\n case 'w':\n return String(day);\n case 'y':\n return pad(year % 100);\n case 'Y':\n return String(year);\n case 'Z':\n match = time.toString().match(/\\((\\w+)\\)$/);\n return match ? match[1] : '';\n case 'z':\n match = time.toString().match(/\\w([+-]\\d\\d\\d\\d) /);\n return match ? match[1] : '';\n }\n return '';\n });\n}\nfunction makeFormatter(options) {\n let format;\n return function () {\n if (format)\n return format;\n if ('Intl' in window) {\n try {\n format = new Intl.DateTimeFormat(undefined, options);\n return format;\n }\n catch (e) {\n if (!(e instanceof RangeError)) {\n throw e;\n }\n }\n }\n };\n}\nlet dayFirst = null;\nconst dayFirstFormatter = makeFormatter({ day: 'numeric', month: 'short' });\nfunction isDayFirst() {\n if (dayFirst !== null) {\n return dayFirst;\n }\n const formatter = dayFirstFormatter();\n if (formatter) {\n const output = formatter.format(new Date(0));\n dayFirst = !!output.match(/^\\d/);\n return dayFirst;\n }\n else {\n return false;\n }\n}\nlet yearSeparator = null;\nconst yearFormatter = makeFormatter({ day: 'numeric', month: 'short', year: 'numeric' });\nfunction isYearSeparator() {\n if (yearSeparator !== null) {\n return yearSeparator;\n }\n const formatter = yearFormatter();\n if (formatter) {\n const output = formatter.format(new Date(0));\n yearSeparator = !!output.match(/\\d,/);\n return yearSeparator;\n }\n else {\n return true;\n }\n}\nfunction isThisYear(date) {\n const now = new Date();\n return now.getUTCFullYear() === date.getUTCFullYear();\n}\nfunction makeRelativeFormat(locale, options) {\n if ('Intl' in window && 'RelativeTimeFormat' in window.Intl) {\n try {\n return new Intl.RelativeTimeFormat(locale, options);\n }\n catch (e) {\n if (!(e instanceof RangeError)) {\n throw e;\n }\n }\n }\n}\nfunction localeFromElement(el) {\n const container = el.closest('[lang]');\n if (container instanceof HTMLElement && container.lang) {\n return container.lang;\n }\n return 'default';\n}\n\nconst datetimes = new WeakMap();\nclass ExtendedTimeElement extends HTMLElement {\n static get observedAttributes() {\n return [\n 'datetime',\n 'day',\n 'format',\n 'lang',\n 'hour',\n 'minute',\n 'month',\n 'second',\n 'title',\n 'weekday',\n 'year',\n 'time-zone-name'\n ];\n }\n connectedCallback() {\n const title = this.getFormattedTitle();\n if (title && !this.hasAttribute('title')) {\n this.setAttribute('title', title);\n }\n const text = this.getFormattedDate();\n if (text) {\n this.textContent = text;\n }\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n const oldTitle = this.getFormattedTitle();\n if (attrName === 'datetime') {\n const millis = Date.parse(newValue);\n if (isNaN(millis)) {\n datetimes.delete(this);\n }\n else {\n datetimes.set(this, new Date(millis));\n }\n }\n const title = this.getFormattedTitle();\n const currentTitle = this.getAttribute('title');\n if (attrName !== 'title' && title && (!currentTitle || currentTitle === oldTitle)) {\n this.setAttribute('title', title);\n }\n const text = this.getFormattedDate();\n if (text) {\n this.textContent = text;\n }\n }\n get date() {\n return datetimes.get(this);\n }\n getFormattedTitle() {\n const date = this.date;\n if (!date)\n return;\n const formatter = titleFormatter();\n if (formatter) {\n return formatter.format(date);\n }\n else {\n try {\n return date.toLocaleString();\n }\n catch (e) {\n if (e instanceof RangeError) {\n return date.toString();\n }\n else {\n throw e;\n }\n }\n }\n }\n getFormattedDate() {\n return;\n }\n}\nconst titleFormatter = makeFormatter({\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n timeZoneName: 'short'\n});\n\nconst formatters = new WeakMap();\nclass LocalTimeElement extends ExtendedTimeElement {\n attributeChangedCallback(attrName, oldValue, newValue) {\n if (attrName === 'hour' || attrName === 'minute' || attrName === 'second' || attrName === 'time-zone-name') {\n formatters.delete(this);\n }\n super.attributeChangedCallback(attrName, oldValue, newValue);\n }\n getFormattedDate() {\n const d = this.date;\n if (!d)\n return;\n const date = formatDate(this, d) || '';\n const time = formatTime(this, d) || '';\n return `${date} ${time}`.trim();\n }\n}\nfunction formatDate(el, date) {\n const props = {\n weekday: {\n short: '%a',\n long: '%A'\n },\n day: {\n numeric: '%e',\n '2-digit': '%d'\n },\n month: {\n short: '%b',\n long: '%B'\n },\n year: {\n numeric: '%Y',\n '2-digit': '%y'\n }\n };\n let format = isDayFirst() ? 'weekday day month year' : 'weekday month day, year';\n for (const prop in props) {\n const value = props[prop][el.getAttribute(prop) || ''];\n format = format.replace(prop, value || '');\n }\n format = format.replace(/(\\s,)|(,\\s$)/, '');\n return strftime(date, format).replace(/\\s+/, ' ').trim();\n}\nfunction formatTime(el, date) {\n const options = {};\n const hour = el.getAttribute('hour');\n if (hour === 'numeric' || hour === '2-digit')\n options.hour = hour;\n const minute = el.getAttribute('minute');\n if (minute === 'numeric' || minute === '2-digit')\n options.minute = minute;\n const second = el.getAttribute('second');\n if (second === 'numeric' || second === '2-digit')\n options.second = second;\n const tz = el.getAttribute('time-zone-name');\n if (tz === 'short' || tz === 'long')\n options.timeZoneName = tz;\n if (Object.keys(options).length === 0) {\n return;\n }\n let factory = formatters.get(el);\n if (!factory) {\n factory = makeFormatter(options);\n formatters.set(el, factory);\n }\n const formatter = factory();\n if (formatter) {\n return formatter.format(date);\n }\n else {\n const timef = options.second ? '%H:%M:%S' : '%H:%M';\n return strftime(date, timef);\n }\n}\nif (!window.customElements.get('local-time')) {\n window.LocalTimeElement = LocalTimeElement;\n window.customElements.define('local-time', LocalTimeElement);\n}\n\nclass RelativeTime {\n constructor(date, locale) {\n this.date = date;\n this.locale = locale;\n }\n toString() {\n const ago = this.timeElapsed();\n if (ago) {\n return ago;\n }\n else {\n const ahead = this.timeAhead();\n if (ahead) {\n return ahead;\n }\n else {\n return `on ${this.formatDate()}`;\n }\n }\n }\n timeElapsed() {\n const ms = new Date().getTime() - this.date.getTime();\n const sec = Math.round(ms / 1000);\n const min = Math.round(sec / 60);\n const hr = Math.round(min / 60);\n const day = Math.round(hr / 24);\n if (ms >= 0 && day < 30) {\n return this.timeAgoFromMs(ms);\n }\n else {\n return null;\n }\n }\n timeAhead() {\n const ms = this.date.getTime() - new Date().getTime();\n const sec = Math.round(ms / 1000);\n const min = Math.round(sec / 60);\n const hr = Math.round(min / 60);\n const day = Math.round(hr / 24);\n if (ms >= 0 && day < 30) {\n return this.timeUntil();\n }\n else {\n return null;\n }\n }\n timeAgo() {\n const ms = new Date().getTime() - this.date.getTime();\n return this.timeAgoFromMs(ms);\n }\n timeAgoFromMs(ms) {\n const sec = Math.round(ms / 1000);\n const min = Math.round(sec / 60);\n const hr = Math.round(min / 60);\n const day = Math.round(hr / 24);\n const month = Math.round(day / 30);\n const year = Math.round(month / 12);\n if (ms < 0) {\n return formatRelativeTime(this.locale, 0, 'second');\n }\n else if (sec < 10) {\n return formatRelativeTime(this.locale, 0, 'second');\n }\n else if (sec < 45) {\n return formatRelativeTime(this.locale, -sec, 'second');\n }\n else if (sec < 90) {\n return formatRelativeTime(this.locale, -min, 'minute');\n }\n else if (min < 45) {\n return formatRelativeTime(this.locale, -min, 'minute');\n }\n else if (min < 90) {\n return formatRelativeTime(this.locale, -hr, 'hour');\n }\n else if (hr < 24) {\n return formatRelativeTime(this.locale, -hr, 'hour');\n }\n else if (hr < 36) {\n return formatRelativeTime(this.locale, -day, 'day');\n }\n else if (day < 30) {\n return formatRelativeTime(this.locale, -day, 'day');\n }\n else if (month < 18) {\n return formatRelativeTime(this.locale, -month, 'month');\n }\n else {\n return formatRelativeTime(this.locale, -year, 'year');\n }\n }\n microTimeAgo() {\n const ms = new Date().getTime() - this.date.getTime();\n const sec = Math.round(ms / 1000);\n const min = Math.round(sec / 60);\n const hr = Math.round(min / 60);\n const day = Math.round(hr / 24);\n const month = Math.round(day / 30);\n const year = Math.round(month / 12);\n if (min < 1) {\n return '1m';\n }\n else if (min < 60) {\n return `${min}m`;\n }\n else if (hr < 24) {\n return `${hr}h`;\n }\n else if (day < 365) {\n return `${day}d`;\n }\n else {\n return `${year}y`;\n }\n }\n timeUntil() {\n const ms = this.date.getTime() - new Date().getTime();\n return this.timeUntilFromMs(ms);\n }\n timeUntilFromMs(ms) {\n const sec = Math.round(ms / 1000);\n const min = Math.round(sec / 60);\n const hr = Math.round(min / 60);\n const day = Math.round(hr / 24);\n const month = Math.round(day / 30);\n const year = Math.round(month / 12);\n if (month >= 18) {\n return formatRelativeTime(this.locale, year, 'year');\n }\n else if (month >= 12) {\n return formatRelativeTime(this.locale, year, 'year');\n }\n else if (day >= 45) {\n return formatRelativeTime(this.locale, month, 'month');\n }\n else if (day >= 30) {\n return formatRelativeTime(this.locale, month, 'month');\n }\n else if (hr >= 36) {\n return formatRelativeTime(this.locale, day, 'day');\n }\n else if (hr >= 24) {\n return formatRelativeTime(this.locale, day, 'day');\n }\n else if (min >= 90) {\n return formatRelativeTime(this.locale, hr, 'hour');\n }\n else if (min >= 45) {\n return formatRelativeTime(this.locale, hr, 'hour');\n }\n else if (sec >= 90) {\n return formatRelativeTime(this.locale, min, 'minute');\n }\n else if (sec >= 45) {\n return formatRelativeTime(this.locale, min, 'minute');\n }\n else if (sec >= 10) {\n return formatRelativeTime(this.locale, sec, 'second');\n }\n else {\n return formatRelativeTime(this.locale, 0, 'second');\n }\n }\n microTimeUntil() {\n const ms = this.date.getTime() - new Date().getTime();\n const sec = Math.round(ms / 1000);\n const min = Math.round(sec / 60);\n const hr = Math.round(min / 60);\n const day = Math.round(hr / 24);\n const month = Math.round(day / 30);\n const year = Math.round(month / 12);\n if (day >= 365) {\n return `${year}y`;\n }\n else if (hr >= 24) {\n return `${day}d`;\n }\n else if (min >= 60) {\n return `${hr}h`;\n }\n else if (min > 1) {\n return `${min}m`;\n }\n else {\n return '1m';\n }\n }\n formatDate() {\n let format = isDayFirst() ? '%e %b' : '%b %e';\n if (!isThisYear(this.date)) {\n format += isYearSeparator() ? ', %Y' : ' %Y';\n }\n return strftime(this.date, format);\n }\n formatTime() {\n const formatter = timeFormatter();\n if (formatter) {\n return formatter.format(this.date);\n }\n else {\n return strftime(this.date, '%l:%M%P');\n }\n }\n}\nfunction formatRelativeTime(locale, value, unit) {\n const formatter = makeRelativeFormat(locale, { numeric: 'auto' });\n if (formatter) {\n return formatter.format(value, unit);\n }\n else {\n return formatEnRelativeTime(value, unit);\n }\n}\nfunction formatEnRelativeTime(value, unit) {\n if (value === 0) {\n switch (unit) {\n case 'year':\n case 'quarter':\n case 'month':\n case 'week':\n return `this ${unit}`;\n case 'day':\n return 'today';\n case 'hour':\n case 'minute':\n return `in 0 ${unit}s`;\n case 'second':\n return 'now';\n }\n }\n else if (value === 1) {\n switch (unit) {\n case 'year':\n case 'quarter':\n case 'month':\n case 'week':\n return `next ${unit}`;\n case 'day':\n return 'tomorrow';\n case 'hour':\n case 'minute':\n case 'second':\n return `in 1 ${unit}`;\n }\n }\n else if (value === -1) {\n switch (unit) {\n case 'year':\n case 'quarter':\n case 'month':\n case 'week':\n return `last ${unit}`;\n case 'day':\n return 'yesterday';\n case 'hour':\n case 'minute':\n case 'second':\n return `1 ${unit} ago`;\n }\n }\n else if (value > 1) {\n switch (unit) {\n case 'year':\n case 'quarter':\n case 'month':\n case 'week':\n case 'day':\n case 'hour':\n case 'minute':\n case 'second':\n return `in ${value} ${unit}s`;\n }\n }\n else if (value < -1) {\n switch (unit) {\n case 'year':\n case 'quarter':\n case 'month':\n case 'week':\n case 'day':\n case 'hour':\n case 'minute':\n case 'second':\n return `${-value} ${unit}s ago`;\n }\n }\n throw new RangeError(`Invalid unit argument for format() '${unit}'`);\n}\nconst timeFormatter = makeFormatter({ hour: 'numeric', minute: '2-digit' });\n\nclass RelativeTimeElement extends ExtendedTimeElement {\n getFormattedDate() {\n const date = this.date;\n if (!date)\n return;\n return new RelativeTime(date, localeFromElement(this)).toString();\n }\n connectedCallback() {\n nowElements.push(this);\n if (!updateNowElementsId) {\n updateNowElements();\n updateNowElementsId = window.setInterval(updateNowElements, 60 * 1000);\n }\n super.connectedCallback();\n }\n disconnectedCallback() {\n const ix = nowElements.indexOf(this);\n if (ix !== -1) {\n nowElements.splice(ix, 1);\n }\n if (!nowElements.length) {\n if (updateNowElementsId) {\n clearInterval(updateNowElementsId);\n updateNowElementsId = null;\n }\n }\n }\n}\nconst nowElements = [];\nlet updateNowElementsId;\nfunction updateNowElements() {\n let time, i, len;\n for (i = 0, len = nowElements.length; i < len; i++) {\n time = nowElements[i];\n time.textContent = time.getFormattedDate() || '';\n }\n}\nif (!window.customElements.get('relative-time')) {\n window.RelativeTimeElement = RelativeTimeElement;\n window.customElements.define('relative-time', RelativeTimeElement);\n}\n\nclass TimeAgoElement extends RelativeTimeElement {\n getFormattedDate() {\n const format = this.getAttribute('format');\n const date = this.date;\n if (!date)\n return;\n if (format === 'micro') {\n return new RelativeTime(date, localeFromElement(this)).microTimeAgo();\n }\n else {\n return new RelativeTime(date, localeFromElement(this)).timeAgo();\n }\n }\n}\nif (!window.customElements.get('time-ago')) {\n window.TimeAgoElement = TimeAgoElement;\n window.customElements.define('time-ago', TimeAgoElement);\n}\n\nclass TimeUntilElement extends RelativeTimeElement {\n getFormattedDate() {\n const format = this.getAttribute('format');\n const date = this.date;\n if (!date)\n return;\n if (format === 'micro') {\n return new RelativeTime(date, localeFromElement(this)).microTimeUntil();\n }\n else {\n return new RelativeTime(date, localeFromElement(this)).timeUntil();\n }\n }\n}\nif (!window.customElements.get('time-until')) {\n window.TimeUntilElement = TimeUntilElement;\n window.customElements.define('time-until', TimeUntilElement);\n}\n\nexport { LocalTimeElement, RelativeTimeElement, TimeAgoElement, TimeUntilElement };\n","const startPositions = new WeakMap();\nconst dragStartPositions = new WeakMap();\nconst constructedElements = new WeakMap();\nfunction moveCropArea(event) {\n const el = event.currentTarget;\n if (!(el instanceof ImageCropElement))\n return;\n const { box, image } = constructedElements.get(el) || {};\n if (!box || !image)\n return;\n let deltaX = 0;\n let deltaY = 0;\n if (event instanceof KeyboardEvent) {\n if (event.key === 'ArrowUp') {\n deltaY = -1;\n }\n else if (event.key === 'ArrowDown') {\n deltaY = 1;\n }\n else if (event.key === 'ArrowLeft') {\n deltaX = -1;\n }\n else if (event.key === 'ArrowRight') {\n deltaX = 1;\n }\n }\n else if (dragStartPositions.has(el) && event instanceof MouseEvent) {\n const pos = dragStartPositions.get(el);\n deltaX = event.pageX - pos.dragStartX;\n deltaY = event.pageY - pos.dragStartY;\n }\n else if (dragStartPositions.has(el) && event instanceof TouchEvent) {\n const { pageX, pageY } = event.changedTouches[0];\n const { dragStartX, dragStartY } = dragStartPositions.get(el);\n deltaX = pageX - dragStartX;\n deltaY = pageY - dragStartY;\n }\n if (deltaX !== 0 || deltaY !== 0) {\n const x = Math.min(Math.max(0, box.offsetLeft + deltaX), image.width - box.offsetWidth);\n const y = Math.min(Math.max(0, box.offsetTop + deltaY), image.height - box.offsetHeight);\n box.style.left = `${x}px`;\n box.style.top = `${y}px`;\n fireChangeEvent(el, { x, y, width: box.offsetWidth, height: box.offsetHeight });\n }\n if (event instanceof MouseEvent) {\n dragStartPositions.set(el, {\n dragStartX: event.pageX,\n dragStartY: event.pageY\n });\n }\n else if (event instanceof TouchEvent) {\n const { pageX, pageY } = event.changedTouches[0];\n dragStartPositions.set(el, {\n dragStartX: pageX,\n dragStartY: pageY\n });\n }\n}\nfunction updateCropArea(event) {\n const target = event.target;\n if (!(target instanceof HTMLElement))\n return;\n const el = getShadowHost(target);\n if (!(el instanceof ImageCropElement))\n return;\n const { box } = constructedElements.get(el) || {};\n if (!box)\n return;\n const rect = el.getBoundingClientRect();\n let deltaX, deltaY, delta;\n if (event instanceof KeyboardEvent) {\n if (event.key === 'Escape')\n return setInitialPosition(el);\n if (event.key === '-')\n delta = -10;\n if (event.key === '=')\n delta = +10;\n if (!delta)\n return;\n deltaX = box.offsetWidth + delta;\n deltaY = box.offsetHeight + delta;\n startPositions.set(el, { startX: box.offsetLeft, startY: box.offsetTop });\n }\n else if (event instanceof MouseEvent) {\n const pos = startPositions.get(el);\n if (!pos)\n return;\n deltaX = event.pageX - pos.startX - rect.left - window.pageXOffset;\n deltaY = event.pageY - pos.startY - rect.top - window.pageYOffset;\n }\n else if (event instanceof TouchEvent) {\n const pos = startPositions.get(el);\n if (!pos)\n return;\n deltaX = event.changedTouches[0].pageX - pos.startX - rect.left - window.pageXOffset;\n deltaY = event.changedTouches[0].pageY - pos.startY - rect.top - window.pageYOffset;\n }\n if (deltaX && deltaY)\n updateDimensions(el, deltaX, deltaY, !(event instanceof KeyboardEvent));\n}\nfunction getShadowHost(el) {\n const rootNode = el.getRootNode();\n if (!(rootNode instanceof ShadowRoot))\n return el;\n return rootNode.host;\n}\nfunction startUpdate(event) {\n const currentTarget = event.currentTarget;\n if (!(currentTarget instanceof HTMLElement))\n return;\n const el = getShadowHost(currentTarget);\n if (!(el instanceof ImageCropElement))\n return;\n const { box } = constructedElements.get(el) || {};\n if (!box)\n return;\n const target = event.target;\n if (!(target instanceof HTMLElement))\n return;\n if (target.hasAttribute('data-direction')) {\n const direction = target.getAttribute('data-direction') || '';\n el.addEventListener('mousemove', updateCropArea);\n el.addEventListener('touchmove', updateCropArea, { passive: true });\n if (['nw', 'se'].indexOf(direction) >= 0)\n el.classList.add('nwse');\n if (['ne', 'sw'].indexOf(direction) >= 0)\n el.classList.add('nesw');\n startPositions.set(el, {\n startX: box.offsetLeft + (['se', 'ne'].indexOf(direction) >= 0 ? 0 : box.offsetWidth),\n startY: box.offsetTop + (['se', 'sw'].indexOf(direction) >= 0 ? 0 : box.offsetHeight)\n });\n updateCropArea(event);\n }\n else {\n el.addEventListener('mousemove', moveCropArea);\n el.addEventListener('touchmove', moveCropArea, { passive: true });\n }\n}\nfunction updateDimensions(target, deltaX, deltaY, reposition = true) {\n let newSide = Math.max(Math.abs(deltaX), Math.abs(deltaY), 10);\n const pos = startPositions.get(target);\n if (!pos)\n return;\n const { box, image } = constructedElements.get(target) || {};\n if (!box || !image)\n return;\n newSide = Math.min(newSide, deltaY > 0 ? image.height - pos.startY : pos.startY, deltaX > 0 ? image.width - pos.startX : pos.startX);\n const x = reposition ? Math.round(Math.max(0, deltaX > 0 ? pos.startX : pos.startX - newSide)) : box.offsetLeft;\n const y = reposition ? Math.round(Math.max(0, deltaY > 0 ? pos.startY : pos.startY - newSide)) : box.offsetTop;\n box.style.left = `${x}px`;\n box.style.top = `${y}px`;\n box.style.width = `${newSide}px`;\n box.style.height = `${newSide}px`;\n fireChangeEvent(target, { x, y, width: newSide, height: newSide });\n}\nfunction setInitialPosition(el) {\n const { image } = constructedElements.get(el) || {};\n if (!image)\n return;\n const side = Math.round(image.clientWidth > image.clientHeight ? image.clientHeight : image.clientWidth);\n startPositions.set(el, {\n startX: (image.clientWidth - side) / 2,\n startY: (image.clientHeight - side) / 2\n });\n updateDimensions(el, side, side);\n}\nfunction stopUpdate(event) {\n const el = event.currentTarget;\n if (!(el instanceof ImageCropElement))\n return;\n dragStartPositions.delete(el);\n el.classList.remove('nwse', 'nesw');\n el.removeEventListener('mousemove', updateCropArea);\n el.removeEventListener('mousemove', moveCropArea);\n el.removeEventListener('touchmove', updateCropArea);\n el.removeEventListener('touchmove', moveCropArea);\n}\nfunction fireChangeEvent(target, result) {\n const { image } = constructedElements.get(target) || {};\n if (!image)\n return;\n const ratio = image.naturalWidth / image.width;\n for (const key in result) {\n const value = Math.round(result[key] * ratio);\n result[key] = value;\n const slottedInput = target.querySelector(`[data-image-crop-input='${key}']`);\n if (slottedInput instanceof HTMLInputElement)\n slottedInput.value = value.toString();\n }\n target.dispatchEvent(new CustomEvent('image-crop-change', { bubbles: true, detail: result }));\n}\nclass ImageCropElement extends HTMLElement {\n connectedCallback() {\n if (constructedElements.has(this))\n return;\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.innerHTML = `\n\n\n
\n \"\"\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n`;\n const box = shadowRoot.querySelector('[data-crop-box]');\n if (!(box instanceof HTMLElement))\n return;\n const image = shadowRoot.querySelector('img');\n if (!(image instanceof HTMLImageElement))\n return;\n constructedElements.set(this, { box, image });\n image.addEventListener('load', () => {\n this.loaded = true;\n setInitialPosition(this);\n });\n this.addEventListener('mouseleave', stopUpdate);\n this.addEventListener('touchend', stopUpdate);\n this.addEventListener('mouseup', stopUpdate);\n box.addEventListener('mousedown', startUpdate);\n box.addEventListener('touchstart', startUpdate, { passive: true });\n this.addEventListener('keydown', moveCropArea);\n this.addEventListener('keydown', updateCropArea);\n if (this.src)\n image.src = this.src;\n }\n static get observedAttributes() {\n return ['src'];\n }\n get src() {\n return this.getAttribute('src');\n }\n set src(val) {\n if (val) {\n this.setAttribute('src', val);\n }\n else {\n this.removeAttribute('src');\n }\n }\n get loaded() {\n return this.hasAttribute('loaded');\n }\n set loaded(val) {\n if (val) {\n this.setAttribute('loaded', '');\n }\n else {\n this.removeAttribute('loaded');\n }\n }\n attributeChangedCallback(attribute, oldValue, newValue) {\n const { image } = constructedElements.get(this) || {};\n if (attribute === 'src') {\n this.loaded = false;\n if (image)\n image.src = newValue;\n }\n }\n}\nexport default ImageCropElement;\nif (!window.customElements.get('image-crop')) {\n window.ImageCropElement = ImageCropElement;\n window.customElements.define('image-crop', ImageCropElement);\n}\n","class DetailsMenuElement extends HTMLElement {\n get preload() {\n return this.hasAttribute('preload');\n }\n set preload(value) {\n if (value) {\n this.setAttribute('preload', '');\n }\n else {\n this.removeAttribute('preload');\n }\n }\n get src() {\n return this.getAttribute('src') || '';\n }\n set src(value) {\n this.setAttribute('src', value);\n }\n connectedCallback() {\n if (!this.hasAttribute('role'))\n this.setAttribute('role', 'menu');\n const details = this.parentElement;\n if (!details)\n return;\n const summary = details.querySelector('summary');\n if (summary) {\n summary.setAttribute('aria-haspopup', 'menu');\n if (!summary.hasAttribute('role'))\n summary.setAttribute('role', 'button');\n }\n const subscriptions = [\n fromEvent(details, 'compositionstart', e => trackComposition(this, e)),\n fromEvent(details, 'compositionend', e => trackComposition(this, e)),\n fromEvent(details, 'click', e => shouldCommit(details, e)),\n fromEvent(details, 'change', e => shouldCommit(details, e)),\n fromEvent(details, 'keydown', e => keydown(details, this, e)),\n fromEvent(details, 'toggle', () => loadFragment(details, this), { once: true }),\n fromEvent(details, 'toggle', () => closeCurrentMenu(details)),\n this.preload\n ? fromEvent(details, 'mouseover', () => loadFragment(details, this), { once: true })\n : NullSubscription,\n ...focusOnOpen(details)\n ];\n states.set(this, { subscriptions, loaded: false, isComposing: false });\n }\n disconnectedCallback() {\n const state = states.get(this);\n if (!state)\n return;\n states.delete(this);\n for (const sub of state.subscriptions) {\n sub.unsubscribe();\n }\n }\n}\nconst states = new WeakMap();\nconst NullSubscription = {\n unsubscribe() {\n }\n};\nfunction fromEvent(target, eventName, onNext, options = false) {\n target.addEventListener(eventName, onNext, options);\n return {\n unsubscribe: () => {\n target.removeEventListener(eventName, onNext, options);\n }\n };\n}\nfunction loadFragment(details, menu) {\n const src = menu.getAttribute('src');\n if (!src)\n return;\n const state = states.get(menu);\n if (!state)\n return;\n if (state.loaded)\n return;\n state.loaded = true;\n const loader = menu.querySelector('include-fragment');\n if (loader && !loader.hasAttribute('src')) {\n loader.addEventListener('loadend', () => autofocus(details));\n loader.setAttribute('src', src);\n }\n}\nfunction focusOnOpen(details) {\n let isMouse = false;\n const onmousedown = () => (isMouse = true);\n const onkeydown = () => (isMouse = false);\n const ontoggle = () => {\n if (!details.hasAttribute('open'))\n return;\n if (autofocus(details))\n return;\n if (!isMouse)\n focusFirstItem(details);\n };\n return [\n fromEvent(details, 'mousedown', onmousedown),\n fromEvent(details, 'keydown', onkeydown),\n fromEvent(details, 'toggle', ontoggle)\n ];\n}\nfunction closeCurrentMenu(details) {\n if (!details.hasAttribute('open'))\n return;\n for (const menu of document.querySelectorAll('details[open] > details-menu')) {\n const opened = menu.closest('details');\n if (opened && opened !== details && !opened.contains(details)) {\n opened.removeAttribute('open');\n }\n }\n}\nfunction autofocus(details) {\n if (!details.hasAttribute('open'))\n return false;\n const input = details.querySelector('details-menu [autofocus]');\n if (input) {\n input.focus();\n return true;\n }\n else {\n return false;\n }\n}\nfunction focusFirstItem(details) {\n const selected = document.activeElement;\n if (selected && isMenuItem(selected) && details.contains(selected))\n return;\n const target = sibling(details, true);\n if (target)\n target.focus();\n}\nfunction sibling(details, next) {\n const options = Array.from(details.querySelectorAll('[role^=\"menuitem\"]:not([hidden]):not([disabled]):not([aria-disabled=\"true\"])'));\n const selected = document.activeElement;\n const index = selected instanceof HTMLElement ? options.indexOf(selected) : -1;\n const found = next ? options[index + 1] : options[index - 1];\n const def = next ? options[0] : options[options.length - 1];\n return found || def;\n}\nconst ctrlBindings = navigator.userAgent.match(/Macintosh/);\nfunction shouldCommit(details, event) {\n const target = event.target;\n if (!(target instanceof Element))\n return;\n if (target.closest('details') !== details)\n return;\n if (event.type === 'click') {\n const menuitem = target.closest('[role=\"menuitem\"], [role=\"menuitemradio\"]');\n if (!menuitem)\n return;\n const input = menuitem.querySelector('input');\n if (menuitem.tagName === 'LABEL' && target === input)\n return;\n const onlyCommitOnChangeEvent = menuitem.tagName === 'LABEL' && input && !input.checked;\n if (!onlyCommitOnChangeEvent) {\n commit(menuitem, details);\n }\n }\n else if (event.type === 'change') {\n const menuitem = target.closest('[role=\"menuitemradio\"], [role=\"menuitemcheckbox\"]');\n if (menuitem)\n commit(menuitem, details);\n }\n}\nfunction updateChecked(selected, details) {\n for (const el of details.querySelectorAll('[role=\"menuitemradio\"], [role=\"menuitemcheckbox\"]')) {\n const input = el.querySelector('input[type=\"radio\"], input[type=\"checkbox\"]');\n let checkState = (el === selected).toString();\n if (input instanceof HTMLInputElement) {\n checkState = input.indeterminate ? 'mixed' : input.checked.toString();\n }\n el.setAttribute('aria-checked', checkState);\n }\n}\nfunction commit(selected, details) {\n if (selected.hasAttribute('disabled') || selected.getAttribute('aria-disabled') === 'true')\n return;\n const menu = selected.closest('details-menu');\n if (!menu)\n return;\n const dispatched = menu.dispatchEvent(new CustomEvent('details-menu-select', {\n cancelable: true,\n detail: { relatedTarget: selected }\n }));\n if (!dispatched)\n return;\n updateLabel(selected, details);\n updateChecked(selected, details);\n if (selected.getAttribute('role') !== 'menuitemcheckbox')\n close(details);\n menu.dispatchEvent(new CustomEvent('details-menu-selected', {\n detail: { relatedTarget: selected }\n }));\n}\nfunction keydown(details, menu, event) {\n if (!(event instanceof KeyboardEvent))\n return;\n if (details.querySelector('details[open]'))\n return;\n const state = states.get(menu);\n if (!state || state.isComposing)\n return;\n const isSummaryFocused = event.target instanceof Element && event.target.tagName === 'SUMMARY';\n switch (event.key) {\n case 'Escape':\n if (details.hasAttribute('open')) {\n close(details);\n event.preventDefault();\n event.stopPropagation();\n }\n break;\n case 'ArrowDown':\n {\n if (isSummaryFocused && !details.hasAttribute('open')) {\n details.setAttribute('open', '');\n }\n const target = sibling(details, true);\n if (target)\n target.focus();\n event.preventDefault();\n }\n break;\n case 'ArrowUp':\n {\n if (isSummaryFocused && !details.hasAttribute('open')) {\n details.setAttribute('open', '');\n }\n const target = sibling(details, false);\n if (target)\n target.focus();\n event.preventDefault();\n }\n break;\n case 'n':\n {\n if (ctrlBindings && event.ctrlKey) {\n const target = sibling(details, true);\n if (target)\n target.focus();\n event.preventDefault();\n }\n }\n break;\n case 'p':\n {\n if (ctrlBindings && event.ctrlKey) {\n const target = sibling(details, false);\n if (target)\n target.focus();\n event.preventDefault();\n }\n }\n break;\n case ' ':\n case 'Enter':\n {\n const selected = document.activeElement;\n if (selected instanceof HTMLElement && isMenuItem(selected) && selected.closest('details') === details) {\n event.preventDefault();\n event.stopPropagation();\n selected.click();\n }\n }\n break;\n }\n}\nfunction isMenuItem(el) {\n const role = el.getAttribute('role');\n return role === 'menuitem' || role === 'menuitemcheckbox' || role === 'menuitemradio';\n}\nfunction close(details) {\n const wasOpen = details.hasAttribute('open');\n if (!wasOpen)\n return;\n details.removeAttribute('open');\n const summary = details.querySelector('summary');\n if (summary)\n summary.focus();\n}\nfunction updateLabel(item, details) {\n const button = details.querySelector('[data-menu-button]');\n if (!button)\n return;\n const text = labelText(item);\n if (text) {\n button.textContent = text;\n }\n else {\n const html = labelHTML(item);\n if (html)\n button.innerHTML = html;\n }\n}\nfunction labelText(el) {\n if (!el)\n return null;\n const textEl = el.hasAttribute('data-menu-button-text') ? el : el.querySelector('[data-menu-button-text]');\n if (!textEl)\n return null;\n return textEl.getAttribute('data-menu-button-text') || textEl.textContent;\n}\nfunction labelHTML(el) {\n if (!el)\n return null;\n const contentsEl = el.hasAttribute('data-menu-button-contents') ? el : el.querySelector('[data-menu-button-contents]');\n return contentsEl ? contentsEl.innerHTML : null;\n}\nfunction trackComposition(menu, event) {\n const state = states.get(menu);\n if (!state)\n return;\n state.isComposing = event.type === 'compositionstart';\n}\nexport default DetailsMenuElement;\nif (!window.customElements.get('details-menu')) {\n window.DetailsMenuElement = DetailsMenuElement;\n window.customElements.define('details-menu', DetailsMenuElement);\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","const alternateOrders = {\n 'outside-top': ['outside-bottom', 'outside-right', 'outside-left', 'outside-bottom'],\n 'outside-bottom': ['outside-top', 'outside-right', 'outside-left', 'outside-bottom'],\n 'outside-left': ['outside-right', 'outside-bottom', 'outside-top', 'outside-bottom'],\n 'outside-right': ['outside-left', 'outside-bottom', 'outside-top', 'outside-bottom']\n};\nconst alternateAlignments = {\n start: ['end', 'center'],\n end: ['start', 'center'],\n center: ['end', 'start']\n};\nexport function getAnchoredPosition(floatingElement, anchorElement, settings = {}) {\n const parentElement = getPositionedParent(floatingElement);\n const clippingRect = getClippingRect(parentElement);\n const parentElementStyle = getComputedStyle(parentElement);\n const parentElementRect = parentElement.getBoundingClientRect();\n const [borderTop, borderLeft] = [parentElementStyle.borderTopWidth, parentElementStyle.borderLeftWidth].map(v => parseInt(v, 10) || 0);\n const relativeRect = {\n top: parentElementRect.top + borderTop,\n left: parentElementRect.left + borderLeft\n };\n return pureCalculateAnchoredPosition(clippingRect, relativeRect, floatingElement.getBoundingClientRect(), anchorElement instanceof Element ? anchorElement.getBoundingClientRect() : anchorElement, getDefaultSettings(settings));\n}\nfunction getPositionedParent(element) {\n let parentNode = element.parentNode;\n while (parentNode !== null) {\n if (parentNode instanceof HTMLElement && getComputedStyle(parentNode).position !== 'static') {\n return parentNode;\n }\n parentNode = parentNode.parentNode;\n }\n return document.body;\n}\nfunction getClippingRect(element) {\n let parentNode = element;\n while (parentNode !== null) {\n if (parentNode === document.body) {\n break;\n }\n const parentNodeStyle = getComputedStyle(parentNode);\n if (parentNodeStyle.overflow !== 'visible') {\n break;\n }\n parentNode = parentNode.parentNode;\n }\n const clippingNode = parentNode === document.body || !(parentNode instanceof HTMLElement) ? document.body : parentNode;\n const elemRect = clippingNode.getBoundingClientRect();\n const elemStyle = getComputedStyle(clippingNode);\n const [borderTop, borderLeft, borderRight, borderBottom] = [\n elemStyle.borderTopWidth,\n elemStyle.borderLeftWidth,\n elemStyle.borderRightWidth,\n elemStyle.borderBottomWidth\n ].map(v => parseInt(v, 10) || 0);\n return {\n top: elemRect.top + borderTop,\n left: elemRect.left + borderLeft,\n width: elemRect.width - borderRight - borderLeft,\n height: Math.max(elemRect.height - borderTop - borderBottom, clippingNode === document.body ? window.innerHeight : -Infinity)\n };\n}\nconst positionDefaults = {\n side: 'outside-bottom',\n align: 'start',\n anchorOffset: 4,\n alignmentOffset: 4,\n allowOutOfBounds: false\n};\nfunction getDefaultSettings(settings = {}) {\n var _a, _b, _c, _d, _e;\n const side = (_a = settings.side) !== null && _a !== void 0 ? _a : positionDefaults.side;\n const align = (_b = settings.align) !== null && _b !== void 0 ? _b : positionDefaults.align;\n return {\n side,\n align,\n anchorOffset: (_c = settings.anchorOffset) !== null && _c !== void 0 ? _c : (side === 'inside-center' ? 0 : positionDefaults.anchorOffset),\n alignmentOffset: (_d = settings.alignmentOffset) !== null && _d !== void 0 ? _d : (align !== 'center' && side.startsWith('inside') ? positionDefaults.alignmentOffset : 0),\n allowOutOfBounds: (_e = settings.allowOutOfBounds) !== null && _e !== void 0 ? _e : positionDefaults.allowOutOfBounds\n };\n}\nfunction pureCalculateAnchoredPosition(viewportRect, relativePosition, floatingRect, anchorRect, { side, align, allowOutOfBounds, anchorOffset, alignmentOffset }) {\n const relativeViewportRect = {\n top: viewportRect.top - relativePosition.top,\n left: viewportRect.left - relativePosition.left,\n width: viewportRect.width,\n height: viewportRect.height\n };\n let pos = calculatePosition(floatingRect, anchorRect, side, align, anchorOffset, alignmentOffset);\n let anchorSide = side;\n let anchorAlign = align;\n pos.top -= relativePosition.top;\n pos.left -= relativePosition.left;\n if (!allowOutOfBounds) {\n const alternateOrder = alternateOrders[side];\n let positionAttempt = 0;\n if (alternateOrder) {\n let prevSide = side;\n while (positionAttempt < alternateOrder.length &&\n shouldRecalculatePosition(prevSide, pos, relativeViewportRect, floatingRect)) {\n const nextSide = alternateOrder[positionAttempt++];\n prevSide = nextSide;\n pos = calculatePosition(floatingRect, anchorRect, nextSide, align, anchorOffset, alignmentOffset);\n pos.top -= relativePosition.top;\n pos.left -= relativePosition.left;\n anchorSide = nextSide;\n }\n }\n const alternateAlignment = alternateAlignments[align];\n let alignmentAttempt = 0;\n if (alternateAlignment) {\n let prevAlign = align;\n while (alignmentAttempt < alternateAlignment.length &&\n shouldRecalculateAlignment(prevAlign, pos, relativeViewportRect, floatingRect)) {\n const nextAlign = alternateAlignment[alignmentAttempt++];\n prevAlign = nextAlign;\n pos = calculatePosition(floatingRect, anchorRect, anchorSide, nextAlign, anchorOffset, alignmentOffset);\n pos.top -= relativePosition.top;\n pos.left -= relativePosition.left;\n anchorAlign = nextAlign;\n }\n }\n if (pos.top < relativeViewportRect.top) {\n pos.top = relativeViewportRect.top;\n }\n if (pos.left < relativeViewportRect.left) {\n pos.left = relativeViewportRect.left;\n }\n if (pos.left + floatingRect.width > viewportRect.width + relativeViewportRect.left) {\n pos.left = viewportRect.width + relativeViewportRect.left - floatingRect.width;\n }\n if (alternateOrder && positionAttempt < alternateOrder.length) {\n if (pos.top + floatingRect.height > viewportRect.height + relativeViewportRect.top) {\n pos.top = viewportRect.height + relativeViewportRect.top - floatingRect.height;\n }\n }\n }\n return Object.assign(Object.assign({}, pos), { anchorSide, anchorAlign });\n}\nfunction calculatePosition(elementDimensions, anchorPosition, side, align, anchorOffset, alignmentOffset) {\n const anchorRight = anchorPosition.left + anchorPosition.width;\n const anchorBottom = anchorPosition.top + anchorPosition.height;\n let top = -1;\n let left = -1;\n if (side === 'outside-top') {\n top = anchorPosition.top - anchorOffset - elementDimensions.height;\n }\n else if (side === 'outside-bottom') {\n top = anchorBottom + anchorOffset;\n }\n else if (side === 'outside-left') {\n left = anchorPosition.left - anchorOffset - elementDimensions.width;\n }\n else if (side === 'outside-right') {\n left = anchorRight + anchorOffset;\n }\n if (side === 'outside-top' || side === 'outside-bottom') {\n if (align === 'start') {\n left = anchorPosition.left + alignmentOffset;\n }\n else if (align === 'center') {\n left = anchorPosition.left - (elementDimensions.width - anchorPosition.width) / 2 + alignmentOffset;\n }\n else {\n left = anchorRight - elementDimensions.width - alignmentOffset;\n }\n }\n if (side === 'outside-left' || side === 'outside-right') {\n if (align === 'start') {\n top = anchorPosition.top + alignmentOffset;\n }\n else if (align === 'center') {\n top = anchorPosition.top - (elementDimensions.height - anchorPosition.height) / 2 + alignmentOffset;\n }\n else {\n top = anchorBottom - elementDimensions.height - alignmentOffset;\n }\n }\n if (side === 'inside-top') {\n top = anchorPosition.top + anchorOffset;\n }\n else if (side === 'inside-bottom') {\n top = anchorBottom - anchorOffset - elementDimensions.height;\n }\n else if (side === 'inside-left') {\n left = anchorPosition.left + anchorOffset;\n }\n else if (side === 'inside-right') {\n left = anchorRight - anchorOffset - elementDimensions.width;\n }\n else if (side === 'inside-center') {\n left = (anchorRight + anchorPosition.left) / 2 - elementDimensions.width / 2 + anchorOffset;\n }\n if (side === 'inside-top' || side === 'inside-bottom') {\n if (align === 'start') {\n left = anchorPosition.left + alignmentOffset;\n }\n else if (align === 'center') {\n left = anchorPosition.left - (elementDimensions.width - anchorPosition.width) / 2 + alignmentOffset;\n }\n else {\n left = anchorRight - elementDimensions.width - alignmentOffset;\n }\n }\n else if (side === 'inside-left' || side === 'inside-right' || side === 'inside-center') {\n if (align === 'start') {\n top = anchorPosition.top + alignmentOffset;\n }\n else if (align === 'center') {\n top = anchorPosition.top - (elementDimensions.height - anchorPosition.height) / 2 + alignmentOffset;\n }\n else {\n top = anchorBottom - elementDimensions.height - alignmentOffset;\n }\n }\n return { top, left };\n}\nfunction shouldRecalculatePosition(side, currentPos, containerDimensions, elementDimensions) {\n if (side === 'outside-top' || side === 'outside-bottom') {\n return (currentPos.top < containerDimensions.top ||\n currentPos.top + elementDimensions.height > containerDimensions.height + containerDimensions.top);\n }\n else {\n return (currentPos.left < containerDimensions.left ||\n currentPos.left + elementDimensions.width > containerDimensions.width + containerDimensions.left);\n }\n}\nfunction shouldRecalculateAlignment(align, currentPos, containerDimensions, elementDimensions) {\n if (align === 'end') {\n return currentPos.left < containerDimensions.left;\n }\n else if (align === 'start' || align === 'center') {\n return (currentPos.left + elementDimensions.width > containerDimensions.left + containerDimensions.width ||\n currentPos.left < containerDimensions.left);\n }\n}\n","export function* iterateFocusableElements(container, options = {}) {\n var _a, _b;\n const strict = (_a = options.strict) !== null && _a !== void 0 ? _a : false;\n const acceptFn = ((_b = options.onlyTabbable) !== null && _b !== void 0 ? _b : false) ? isTabbable : isFocusable;\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: node => node instanceof HTMLElement && acceptFn(node, strict) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP\n });\n let nextNode = null;\n if (!options.reverse && acceptFn(container, strict)) {\n yield container;\n }\n if (options.reverse) {\n let lastChild = walker.lastChild();\n while (lastChild) {\n nextNode = lastChild;\n lastChild = walker.lastChild();\n }\n }\n else {\n nextNode = walker.firstChild();\n }\n while (nextNode instanceof HTMLElement) {\n yield nextNode;\n nextNode = options.reverse ? walker.previousNode() : walker.nextNode();\n }\n if (options.reverse && acceptFn(container, strict)) {\n yield container;\n }\n return undefined;\n}\nexport function getFocusableChild(container, lastChild = false) {\n return iterateFocusableElements(container, { reverse: lastChild, strict: true, onlyTabbable: true }).next().value;\n}\nexport function isFocusable(elem, strict = false) {\n const disabledAttrInert = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA', 'OPTGROUP', 'OPTION', 'FIELDSET'].includes(elem.tagName) &&\n elem.disabled;\n const hiddenInert = elem.hidden;\n const hiddenInputInert = elem instanceof HTMLInputElement && elem.type === 'hidden';\n const sentinelInert = elem.classList.contains('sentinel');\n if (disabledAttrInert || hiddenInert || hiddenInputInert || sentinelInert) {\n return false;\n }\n if (strict) {\n const sizeInert = elem.offsetWidth === 0 || elem.offsetHeight === 0;\n const visibilityInert = ['hidden', 'collapse'].includes(getComputedStyle(elem).visibility);\n const clientRectsInert = elem.getClientRects().length === 0;\n if (sizeInert || visibilityInert || clientRectsInert) {\n return false;\n }\n }\n if (elem.getAttribute('tabindex') != null) {\n return true;\n }\n if (elem instanceof HTMLAnchorElement && elem.getAttribute('href') == null) {\n return false;\n }\n return elem.tabIndex !== -1;\n}\nexport function isTabbable(elem, strict = false) {\n return isFocusable(elem, strict) && elem.getAttribute('tabindex') !== '-1';\n}\n","let signalSupported = false;\nfunction noop() { }\ntry {\n const options = Object.create({}, {\n signal: {\n get() {\n signalSupported = true;\n }\n }\n });\n window.addEventListener('test', noop, options);\n window.removeEventListener('test', noop, options);\n}\ncatch (e) {\n}\nfunction featureSupported() {\n return signalSupported;\n}\nfunction monkeyPatch() {\n if (typeof window === 'undefined') {\n return;\n }\n const originalAddEventListener = EventTarget.prototype.addEventListener;\n EventTarget.prototype.addEventListener = function (name, originalCallback, optionsOrCapture) {\n if (typeof optionsOrCapture === 'object' &&\n 'signal' in optionsOrCapture &&\n optionsOrCapture.signal instanceof AbortSignal) {\n originalAddEventListener.call(optionsOrCapture.signal, 'abort', () => {\n this.removeEventListener(name, originalCallback, optionsOrCapture);\n });\n }\n return originalAddEventListener.call(this, name, originalCallback, optionsOrCapture);\n };\n}\nexport function polyfill() {\n if (!featureSupported()) {\n monkeyPatch();\n signalSupported = true;\n }\n}\n","import { getFocusableChild, isTabbable } from './utils/iterate-focusable-elements.js';\nimport { polyfill as eventListenerSignalPolyfill } from './polyfills/event-listener-signal.js';\neventListenerSignalPolyfill();\nconst suspendedTrapStack = [];\nlet activeTrap = undefined;\nfunction tryReactivate() {\n const trapToReactivate = suspendedTrapStack.pop();\n if (trapToReactivate) {\n focusTrap(trapToReactivate.container, trapToReactivate.initialFocus, trapToReactivate.originalSignal);\n }\n}\nfunction followSignal(signal) {\n const controller = new AbortController();\n signal.addEventListener('abort', () => {\n controller.abort();\n });\n return controller;\n}\nexport function focusTrap(container, initialFocus, abortSignal) {\n const controller = new AbortController();\n const signal = abortSignal !== null && abortSignal !== void 0 ? abortSignal : controller.signal;\n container.setAttribute('data-focus-trap', 'active');\n const sentinelStart = document.createElement('span');\n sentinelStart.setAttribute('class', 'sentinel');\n sentinelStart.setAttribute('tabindex', '0');\n sentinelStart.setAttribute('aria-hidden', 'true');\n sentinelStart.onfocus = () => {\n const lastFocusableChild = getFocusableChild(container, true);\n lastFocusableChild === null || lastFocusableChild === void 0 ? void 0 : lastFocusableChild.focus();\n };\n const sentinelEnd = document.createElement('span');\n sentinelEnd.setAttribute('class', 'sentinel');\n sentinelEnd.setAttribute('tabindex', '0');\n sentinelEnd.setAttribute('aria-hidden', 'true');\n sentinelEnd.onfocus = () => {\n const firstFocusableChild = getFocusableChild(container);\n firstFocusableChild === null || firstFocusableChild === void 0 ? void 0 : firstFocusableChild.focus();\n };\n container.prepend(sentinelStart);\n container.append(sentinelEnd);\n let lastFocusedChild = undefined;\n function ensureTrapZoneHasFocus(focusedElement) {\n if (focusedElement instanceof HTMLElement && document.contains(container)) {\n if (container.contains(focusedElement)) {\n lastFocusedChild = focusedElement;\n return;\n }\n else {\n if (lastFocusedChild && isTabbable(lastFocusedChild) && container.contains(lastFocusedChild)) {\n lastFocusedChild.focus();\n return;\n }\n else if (initialFocus && container.contains(initialFocus)) {\n initialFocus.focus();\n return;\n }\n else {\n const firstFocusableChild = getFocusableChild(container);\n firstFocusableChild === null || firstFocusableChild === void 0 ? void 0 : firstFocusableChild.focus();\n return;\n }\n }\n }\n }\n const wrappingController = followSignal(signal);\n if (activeTrap) {\n const suspendedTrap = activeTrap;\n activeTrap.container.setAttribute('data-focus-trap', 'suspended');\n activeTrap.controller.abort();\n suspendedTrapStack.push(suspendedTrap);\n }\n wrappingController.signal.addEventListener('abort', () => {\n activeTrap = undefined;\n });\n signal.addEventListener('abort', () => {\n container.removeAttribute('data-focus-trap');\n const sentinels = container.getElementsByClassName('sentinel');\n while (sentinels.length > 0)\n sentinels[0].remove();\n const suspendedTrapIndex = suspendedTrapStack.findIndex(t => t.container === container);\n if (suspendedTrapIndex >= 0) {\n suspendedTrapStack.splice(suspendedTrapIndex, 1);\n }\n tryReactivate();\n });\n document.addEventListener('focus', event => {\n ensureTrapZoneHasFocus(event.target);\n }, { signal: wrappingController.signal, capture: true });\n ensureTrapZoneHasFocus(document.activeElement);\n activeTrap = {\n container,\n controller: wrappingController,\n initialFocus,\n originalSignal: signal\n };\n const suspendedTrapIndex = suspendedTrapStack.findIndex(t => t.container === container);\n if (suspendedTrapIndex >= 0) {\n suspendedTrapStack.splice(suspendedTrapIndex, 1);\n }\n if (!abortSignal) {\n return controller;\n }\n}\n","// eslint-disable-next-line prettier/prettier\nimport type {AnchorAlignment, AnchorSide} from '@primer/behaviors'\nimport {getAnchoredPosition} from '@primer/behaviors'\n\nconst TOOLTIP_OPEN_CLASS = 'tooltip-open'\nconst TOOLTIP_ARROW_EDGE_OFFSET = 6\n\ntype Direction = 'n' | 's' | 'e' | 'w' | 'ne' | 'se' | 'nw' | 'sw'\n\nconst DIRECTION_CLASSES = [\n 'tooltip-n',\n 'tooltip-s',\n 'tooltip-e',\n 'tooltip-w',\n 'tooltip-ne',\n 'tooltip-se',\n 'tooltip-nw',\n 'tooltip-sw'\n]\n\nclass ToolTipElement extends HTMLElement {\n styles() {\n return `\n :host {\n position: absolute;\n z-index: 1000000;\n padding: .5em .75em;\n font: normal normal 11px/1.5 -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\";\n -webkit-font-smoothing: subpixel-antialiased;\n color: var(--color-fg-on-emphasis);\n text-align: center;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: break-word;\n white-space: pre;\n background: var(--color-neutral-emphasis-plus);\n border-radius: 6px;\n opacity: 0;\n max-width: 250px;\n word-wrap: break-word;\n white-space: normal;\n width: max-content;\n }\n\n :host:before{\n position: absolute;\n z-index: 1000001;\n color: var(--color-neutral-emphasis-plus);\n content: \"\";\n border: 6px solid transparent;\n opacity: 0\n }\n\n @keyframes tooltip-appear {\n from {\n opacity: 0\n }\n to {\n opacity: 1\n }\n }\n\n :host:after{\n position: absolute;\n display: block;\n right: 0;\n left: 0;\n height: 12px;\n content: \"\"\n }\n\n :host(.${TOOLTIP_OPEN_CLASS}),\n :host(.${TOOLTIP_OPEN_CLASS}):before {\n animation-name: tooltip-appear;\n animation-duration: .1s;\n animation-fill-mode: forwards;\n animation-timing-function: ease-in;\n animation-delay: .4s\n }\n\n :host(.tooltip-s):before,\n :host(.tooltip-n):before {\n right: 50%;\n margin-right: -${TOOLTIP_ARROW_EDGE_OFFSET}px;\n }\n\n :host(.tooltip-s):before,\n :host(.tooltip-se):before,\n :host(.tooltip-sw):before {\n bottom: 100%;\n border-bottom-color: var(--color-neutral-emphasis-plus)\n }\n\n :host(.tooltip-s):after,\n :host(.tooltip-se):after,\n :host(.tooltip-sw):after {\n bottom: 100%\n }\n\n :host(.tooltip-n):before,\n :host(.tooltip-ne):before,\n :host(.tooltip-nw):before {\n top: 100%;\n border-top-color: var(--color-neutral-emphasis-plus)\n }\n\n :host(.tooltip-n):after,\n :host(.tooltip-ne):after,\n :host(.tooltip-nw):after {\n top: 100%\n }\n\n :host(.tooltip-se):before,\n :host(.tooltip-ne):before {\n left: 0;\n margin-left: ${TOOLTIP_ARROW_EDGE_OFFSET}px;\n }\n\n :host(.tooltip-sw):before,\n :host(.tooltip-nw):before {\n right: 0;\n margin-right: ${TOOLTIP_ARROW_EDGE_OFFSET}px;\n }\n\n :host(.tooltip-w):before {\n top: 50%;\n bottom: 50%;\n left: 100%;\n margin-top: -6px;\n border-left-color: var(--color-neutral-emphasis-plus)\n }\n\n :host(.tooltip-e):before {\n top: 50%;\n right: 100%;\n bottom: 50%;\n margin-top: -6px;\n border-right-color: var(--color-neutral-emphasis-plus)\n }\n `\n }\n\n #abortController: AbortController | undefined\n #align: AnchorAlignment = 'center'\n #side: AnchorSide = 'outside-bottom'\n #allowUpdatePosition = false\n\n get htmlFor(): string {\n return this.getAttribute('for') || ''\n }\n\n set htmlFor(value: string) {\n this.setAttribute('for', value)\n }\n\n get type(): 'description' | 'label' {\n const type = this.getAttribute('data-type')\n return type === 'label' ? 'label' : 'description'\n }\n\n set type(value: 'description' | 'label') {\n this.setAttribute('data-type', value)\n }\n\n get direction(): Direction {\n return (this.getAttribute('data-direction') || 's') as Direction\n }\n\n set direction(value: Direction) {\n this.setAttribute('data-direction', value)\n }\n\n get control(): HTMLElement | null {\n return this.ownerDocument.getElementById(this.htmlFor)\n }\n\n connectedCallback() {\n if (!this.shadowRoot) {\n const shadow = this.attachShadow({mode: 'open'})\n // eslint-disable-next-line github/no-inner-html\n shadow.innerHTML = `\n \n \n `\n }\n this.hidden = true\n this.#allowUpdatePosition = true\n\n if (!this.id) {\n this.id = `tooltip-${Date.now()}-${(Math.random() * 10000).toFixed(0)}`\n }\n\n if (!this.control) return\n\n this.setAttribute('role', 'tooltip')\n\n this.#abortController?.abort()\n this.#abortController = new AbortController()\n const {signal} = this.#abortController\n\n this.addEventListener('mouseleave', this, {signal})\n this.control.addEventListener('mouseenter', this, {signal})\n this.control.addEventListener('mouseleave', this, {signal})\n this.control.addEventListener('focus', this, {signal})\n this.control.addEventListener('blur', this, {signal})\n this.ownerDocument.addEventListener('keydown', this, {signal})\n this.#update()\n }\n\n disconnectedCallback() {\n this.#abortController?.abort()\n }\n\n handleEvent(event: Event) {\n if (!this.control) return\n\n // Ensures that tooltip stays open when hovering between tooltip and element\n // WCAG Success Criterion 1.4.13 Hoverable\n if ((event.type === 'mouseenter' || event.type === 'focus') && this.hidden) {\n this.hidden = false\n } else if (event.type === 'blur') {\n this.hidden = true\n } else if (\n event.type === 'mouseleave' &&\n (event as MouseEvent).relatedTarget !== this.control &&\n (event as MouseEvent).relatedTarget !== this\n ) {\n this.hidden = true\n } else if (event.type === 'keydown' && (event as KeyboardEvent).key === 'Escape' && !this.hidden) {\n this.hidden = true\n }\n }\n\n static observedAttributes = ['data-type', 'data-direction', 'id', 'hidden']\n\n #update() {\n if (this.hidden) {\n this.classList.remove(TOOLTIP_OPEN_CLASS, ...DIRECTION_CLASSES)\n } else {\n this.classList.add(TOOLTIP_OPEN_CLASS)\n for (const tooltip of this.ownerDocument.querySelectorAll(this.tagName)) {\n if (tooltip !== this) tooltip.hidden = true\n }\n this.#updatePosition()\n }\n }\n\n attributeChangedCallback(name: string) {\n if (name === 'id' || name === 'data-type') {\n if (!this.id || !this.control) return\n if (this.type === 'label') {\n this.control.setAttribute('aria-labelledby', this.id)\n } else {\n let describedBy = this.control.getAttribute('aria-describedby')\n describedBy ? (describedBy = `${describedBy} ${this.id}`) : (describedBy = this.id)\n this.control.setAttribute('aria-describedby', describedBy)\n }\n } else if (this.isConnected && name === 'hidden') {\n this.#update()\n } else if (name === 'data-direction') {\n this.classList.remove(...DIRECTION_CLASSES)\n const direction = this.direction\n if (direction === 'n') {\n this.#align = 'center'\n this.#side = 'outside-top'\n } else if (direction === 'ne') {\n this.#align = 'start'\n this.#side = 'outside-top'\n } else if (direction === 'e') {\n this.#align = 'center'\n this.#side = 'outside-right'\n } else if (direction === 'se') {\n this.#align = 'start'\n this.#side = 'outside-bottom'\n } else if (direction === 's') {\n this.#align = 'center'\n this.#side = 'outside-bottom'\n } else if (direction === 'sw') {\n this.#align = 'end'\n this.#side = 'outside-bottom'\n } else if (direction === 'w') {\n this.#align = 'center'\n this.#side = 'outside-left'\n } else if (direction === 'nw') {\n this.#align = 'end'\n this.#side = 'outside-top'\n }\n }\n }\n\n #updatePosition() {\n if (!this.control) return\n if (!this.#allowUpdatePosition || this.hidden) return\n\n const TOOLTIP_OFFSET = 10\n\n this.style.left = `0px` // Ensures we have reliable tooltip width in `getAnchoredPosition`\n\n const position = getAnchoredPosition(this, this.control, {\n side: this.#side,\n align: this.#align,\n anchorOffset: TOOLTIP_OFFSET\n })\n const anchorSide = position.anchorSide\n const align = position.anchorAlign\n\n this.style.top = `${position.top}px`\n this.style.left = `${position.left}px`\n\n let direction: Direction = 's'\n\n if (anchorSide === 'outside-left') {\n direction = 'w'\n } else if (anchorSide === 'outside-right') {\n direction = 'e'\n } else if (anchorSide === 'outside-top') {\n if (align === 'center') {\n direction = 'n'\n } else if (align === 'start') {\n direction = 'ne'\n } else {\n direction = 'nw'\n }\n } else {\n if (align === 'center') {\n direction = 's'\n } else if (align === 'start') {\n direction = 'se'\n } else {\n direction = 'sw'\n }\n }\n\n this.classList.add(`tooltip-${direction}`)\n }\n}\n\nif (!window.customElements.get('tool-tip')) {\n window.ToolTipElement = ToolTipElement\n window.customElements.define('tool-tip', ToolTipElement)\n}\n\ndeclare global {\n interface Window {\n ToolTipElement: typeof ToolTipElement\n }\n}\n","import {focusTrap} from '@primer/behaviors'\nimport {getFocusableChild} from '@primer/behaviors/utils'\n\nfunction focusIfNeeded(elem?: HTMLElement) {\n if (document.activeElement !== elem) {\n elem?.focus()\n }\n}\n\nexport class ModalDialogElement extends HTMLElement {\n //TODO: Do we remove the abortController from focusTrap?\n #focusAbortController = new AbortController()\n #abortController: AbortController | null = null\n #openButton: HTMLButtonElement | undefined\n #shouldTryLoadingFragment = true\n\n get open() {\n return this.hasAttribute('open')\n }\n set open(value: boolean) {\n if (value) {\n if (this.open) return\n this.setAttribute('open', '')\n this.#overlayBackdrop?.classList.remove('Overlay--hidden')\n document.body.style.overflow = 'hidden'\n if (this.#focusAbortController.signal.aborted) {\n this.#focusAbortController = new AbortController()\n }\n focusTrap(this, undefined, this.#focusAbortController.signal)\n } else {\n if (!this.open) return\n this.removeAttribute('open')\n this.#overlayBackdrop?.classList.add('Overlay--hidden')\n document.body.style.overflow = 'initial'\n this.#focusAbortController.abort()\n // if #openButton is a child of a menu, we need to focus a suitable child of the menu\n // element since it is expected for the menu to close on click\n const menu = this.#openButton?.closest('details') || this.#openButton?.closest('action-menu')\n if (menu) {\n focusIfNeeded(getFocusableChild(menu))\n } else {\n focusIfNeeded(this.#openButton)\n }\n this.#openButton = undefined\n }\n }\n\n get #overlayBackdrop(): HTMLElement | null {\n if (this.parentElement?.hasAttribute('data-modal-dialog-overlay')) {\n return this.parentElement\n }\n\n return null\n }\n\n get showButtons(): NodeList {\n // Dialogs may also be opened from any arbitrary button with a matching show-dialog-id data attribute\n return document.querySelectorAll(`button[data-show-dialog-id='${this.id}']`)\n }\n\n connectedCallback(): void {\n if (!this.hasAttribute('role')) this.setAttribute('role', 'dialog')\n\n const {signal} = (this.#abortController = new AbortController())\n\n this.ownerDocument.addEventListener(\n 'click',\n event => {\n const target = event.target as HTMLElement\n const clickOutsideDialog = target.closest(this.tagName) !== this\n const button = target?.closest('button')\n // go over this logic:\n if (!button) {\n if (clickOutsideDialog) {\n // This click is outside the dialog\n this.close()\n }\n return\n }\n\n let dialogId = button.getAttribute('data-close-dialog-id')\n if (dialogId === this.id) {\n this.close()\n }\n\n dialogId = button.getAttribute('data-submit-dialog-id')\n if (dialogId === this.id) {\n this.close(true)\n }\n\n dialogId = button.getAttribute('data-show-dialog-id')\n if (dialogId === this.id) {\n //TODO: see if I can remove this\n event.stopPropagation()\n this.#openButton = button\n this.show()\n }\n },\n {signal}\n )\n\n this.addEventListener('keydown', e => this.#keydown(e))\n }\n\n disconnectedCallback(): void {\n this.#abortController?.abort()\n }\n\n show() {\n this.open = true\n }\n\n close(closed = false) {\n if (this.open === false) return\n const eventType = closed ? 'close' : 'cancel'\n const dialogEvent = new Event(eventType)\n this.dispatchEvent(dialogEvent)\n this.open = false\n }\n\n #keydown(event: Event) {\n if (!(event instanceof KeyboardEvent)) return\n if (event.isComposing) return\n\n switch (event.key) {\n case 'Escape':\n if (this.open) {\n this.close()\n event.preventDefault()\n event.stopPropagation()\n }\n break\n }\n }\n}\n\ndeclare global {\n interface Window {\n ModalDialogElement: typeof ModalDialogElement\n }\n interface HTMLElementTagNameMap {\n 'modal-dialog': ModalDialogElement\n }\n}\n\nif (!window.customElements.get('modal-dialog')) {\n window.ModalDialogElement = ModalDialogElement\n window.customElements.define('modal-dialog', ModalDialogElement)\n}\n\n"],"names":["ctrlBindings","navigator","userAgent","match","Combobox","[object Object]","input","list","this","isComposing","id","Math","random","toString","slice","keyboardEventHandler","event","combobox","shiftKey","metaKey","altKey","ctrlKey","key","target","querySelector","getAttribute","click","commit","preventDefault","clearSelection","navigate","keyboardBindings","compositionEventHandler","type","document","getElementById","trackComposition","inputHandler","bind","setAttribute","stop","removeAttribute","addEventListener","commitWithElement","removeEventListener","indexDiff","focusEl","Array","from","querySelectorAll","filter","visible","els","focusIndex","indexOf","length","focus","indexOfItem","newIndex","el","scrollTo","Element","closest","dispatchEvent","CustomEvent","bubbles","fireCommitEvent","hidden","HTMLInputElement","offsetWidth","offsetHeight","container","element","scrollTop","containerBottom","clientHeight","top","offsetTop","bottom","inViewport","SCREEN_READER_DELAY","window","testScreenReaderDelay","Autocomplete","results","autoselectEnabled","_a","feedback","clearButton","name","clientOptions","labelElem","interactingWithList","onInputChange","callback","wait","timeout","Rest","clearTimeout","setTimeout","debounce","onResultsMouseDown","onInputBlur","onInputFocus","onKeydown","onCommit","handleClear","updateFeedbackForScreenReaders","value","Event","open","firstOption","children","stopPropagation","trim","fetchResults","selected","HTMLElement","HTMLAnchorElement","textContent","inputString","query","src","url","URL","location","href","params","URLSearchParams","search","append","fetchResult","then","html","innerHTML","identifyOptions","allNewOptions","hasResults","numOptions","firstOptionValue","catch","start","AutocompleteEvent","init","super","relatedTarget","requests","WeakMap","fragment","xhr","XMLHttpRequest","setRequestHeader","pending","get","abort","set","clear","delete","result","Promise","resolve","reject","onload","status","responseText","Error","onerror","send","request","state","AutocompleteElement","arguments","listId","autocomplete","destroy","hasAttribute","observedAttributes","oldValue","newValue","close","copyNode","node","clipboard","writeText","selection","getSelection","removeAllRanges","range","createRange","selectNodeContents","addRange","execCommand","copyText","text","body","createElement","style","width","height","position","createNode","appendChild","removeChild","copy","button","trigger","root","prototype","getRootNode","ownerDocument","Document","ShadowRoot","content","HTMLTextAreaElement","clicked","currentTarget","keydown","focused","blurred","customElements","define","ClipboardCopyElement","showSVG","svg","display","hideSVG","clipboardCopyElementTimers","getTabs","tab","tagName","currentTimeout","copyIcon","checkIcon","showCheck","showCopy","TabContainerElement","tabs","currentIndex","find","matches","code","index","selectTab","tabContainer","panels","panel","selectedTab","selectedPanel","cancelable","detail","weekdays","months","pad","num","strftime","time","formatString","day","getDay","date","getDate","month","getMonth","year","getFullYear","hour","getHours","minute","getMinutes","second","getSeconds","replace","_arg","String","makeFormatter","options","format","Intl","DateTimeFormat","undefined","e","RangeError","dayFirst","dayFirstFormatter","isDayFirst","formatter","output","Date","yearSeparator","yearFormatter","localeFromElement","lang","datetimes","ExtendedTimeElement","title","getFormattedTitle","getFormattedDate","attrName","oldTitle","millis","parse","isNaN","currentTitle","titleFormatter","toLocaleString","timeZoneName","formatters","LocalTimeElement","attributeChangedCallback","d","props","weekday","short","long","numeric","2-digit","prop","formatDate","tz","Object","keys","factory","formatTime","RelativeTime","locale","ago","timeElapsed","ahead","timeAhead","ms","getTime","sec","round","min","hr","timeAgoFromMs","timeUntil","formatRelativeTime","timeUntilFromMs","getUTCFullYear","isYearSeparator","timeFormatter","unit","RelativeTimeFormat","makeRelativeFormat","formatEnRelativeTime","RelativeTimeElement","nowElements","push","updateNowElementsId","updateNowElements","setInterval","connectedCallback","ix","splice","clearInterval","i","len","TimeAgoElement","microTimeAgo","timeAgo","TimeUntilElement","microTimeUntil","startPositions","dragStartPositions","constructedElements","moveCropArea","ImageCropElement","box","image","deltaX","deltaY","KeyboardEvent","has","MouseEvent","pos","pageX","dragStartX","pageY","dragStartY","TouchEvent","changedTouches","x","max","offsetLeft","y","left","fireChangeEvent","updateCropArea","getShadowHost","rect","getBoundingClientRect","delta","setInitialPosition","startX","startY","pageXOffset","pageYOffset","updateDimensions","rootNode","host","startUpdate","direction","passive","classList","add","reposition","newSide","abs","side","clientWidth","stopUpdate","remove","ratio","naturalWidth","slottedInput","shadowRoot","attachShadow","mode","HTMLImageElement","loaded","val","attribute","DetailsMenuElement","preload","details","parentElement","summary","subscriptions","fromEvent","shouldCommit","menu","states","isSummaryFocused","sibling","activeElement","isMenuItem","loadFragment","once","opened","contains","closeCurrentMenu","NullSubscription","focusOnOpen","sub","unsubscribe","eventName","onNext","loader","autofocus","isMouse","focusFirstItem","next","found","def","menuitem","checked","item","textEl","labelText","contentsEl","labelHTML","updateLabel","checkState","indeterminate","updateChecked","role","__classPrivateFieldGet","receiver","kind","f","TypeError","call","__classPrivateFieldSet","alternateOrders","outside-top","outside-bottom","outside-left","outside-right","alternateAlignments","end","center","getAnchoredPosition","floatingElement","anchorElement","settings","parentNode","getComputedStyle","getPositionedParent","clippingRect","overflow","clippingNode","elemRect","elemStyle","borderTop","borderLeft","borderRight","borderBottom","borderTopWidth","borderLeftWidth","borderRightWidth","borderBottomWidth","map","v","parseInt","innerHeight","Infinity","getClippingRect","parentElementStyle","parentElementRect","viewportRect","relativePosition","floatingRect","anchorRect","align","allowOutOfBounds","anchorOffset","alignmentOffset","relativeViewportRect","calculatePosition","anchorSide","anchorAlign","alternateOrder","positionAttempt","prevSide","shouldRecalculatePosition","nextSide","alternateAlignment","alignmentAttempt","prevAlign","shouldRecalculateAlignment","nextAlign","assign","pureCalculateAnchoredPosition","_b","_c","_d","_e","positionDefaults","startsWith","getDefaultSettings","elementDimensions","anchorPosition","anchorRight","anchorBottom","currentPos","containerDimensions","getFocusableChild","lastChild","strict","acceptFn","onlyTabbable","isTabbable","isFocusable","walker","createTreeWalker","NodeFilter","SHOW_ELEMENT","acceptNode","FILTER_ACCEPT","FILTER_SKIP","nextNode","reverse","firstChild","previousNode","iterateFocusableElements","elem","disabledAttrInert","includes","disabled","hiddenInert","hiddenInputInert","sentinelInert","sizeInert","visibilityInert","visibility","clientRectsInert","getClientRects","tabIndex","signalSupported","noop","create","signal","originalAddEventListener","EventTarget","originalCallback","optionsOrCapture","AbortSignal","monkeyPatch","suspendedTrapStack","activeTrap","focusTrap","initialFocus","abortSignal","controller","AbortController","sentinelStart","onfocus","lastFocusableChild","sentinelEnd","lastFocusedChild","ensureTrapZoneHasFocus","focusedElement","firstFocusableChild","prepend","wrappingController","followSignal","suspendedTrap","sentinels","getElementsByClassName","suspendedTrapIndex","findIndex","t","trapToReactivate","pop","originalSignal","tryReactivate","capture","DIRECTION_CLASSES","ToolTipElement","_ToolTipElement_abortController","_ToolTipElement_align","_ToolTipElement_side","_ToolTipElement_allowUpdatePosition","htmlFor","control","styles","now","toFixed","_ToolTipElement_instances","_ToolTipElement_update","describedBy","isConnected","focusIfNeeded","tooltip","_ToolTipElement_updatePosition","ModalDialogElement","_ModalDialogElement_focusAbortController","_ModalDialogElement_abortController","_ModalDialogElement_openButton","_ModalDialogElement_shouldTryLoadingFragment","_ModalDialogElement_instances","_ModalDialogElement_overlayBackdrop_get","aborted","showButtons","clickOutsideDialog","dialogId","show","closed","dialogEvent"],"mappings":"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"} \ No newline at end of file diff --git a/app/components/primer/alpha/dialog.html.erb b/app/components/primer/alpha/dialog.html.erb new file mode 100644 index 0000000000..1842a2c4d3 --- /dev/null +++ b/app/components/primer/alpha/dialog.html.erb @@ -0,0 +1,8 @@ +<%= show_button %> +
+ <%= render Primer::BaseComponent.new(**@system_arguments) do %> + <%= header %> + <%= body %> + <%= footer %> + <% end %> +
diff --git a/app/components/primer/alpha/dialog.rb b/app/components/primer/alpha/dialog.rb new file mode 100644 index 0000000000..9983f2f35f --- /dev/null +++ b/app/components/primer/alpha/dialog.rb @@ -0,0 +1,127 @@ +# frozen_string_literal: true + +module Primer + module Alpha + # A `Dialog` is used to remove the user from the main application flow, + # to confirm actions, ask for disambiguation or to present small forms. + # + # @accessibility + # - **Dialog Accessible Name**: A dialog should have an accessible name, + # so screen readers are aware of the purpose of the dialog when it opens. + # Give an accessible name setting `:title`. The accessible name will be + # used as the main heading inside the dialog. + # - **Dialog unique id**: A dialog should be unique. Give a unique id + # setting `:dialog_id`. If no `:dialog_id` is given, a default randomize + # hex id is generated. + # + # The combination of both `:title` and `:dialog_id` establishes an + # `aria-labelledby` relationship between the title and the unique id of + # the dialog. + class Dialog < Primer::Component + DEFAULT_WIDTH = :medium + WIDTH_MAPPINGS = { + :small => "Overlay--width-small", + DEFAULT_WIDTH => "Overlay--width-medium", + :large => "Overlay--width-large", + :xlarge => "Overlay--width-xlarge", + :xxlarge => "Overlay--width-xxlarge" + }.freeze + WIDTH_OPTIONS = WIDTH_MAPPINGS.keys + + # Optional button to open the dialog. + # + # @param system_arguments [Hash] The same arguments as <%= link_to_component(Primer::ButtonComponent) %>. + renders_one :show_button, lambda { |**system_arguments| + system_arguments[:classes] = class_names( + system_arguments[:classes] + ) + system_arguments[:id] = "dialog-show-#{@system_arguments[:id]}" + system_arguments["data-show-dialog-id"] = @system_arguments[:id] + system_arguments[:data] = (system_arguments[:data] || {}).merge({ "show-dialog-id": @system_arguments[:id] }) + Primer::ButtonComponent.new(**system_arguments) + } + + # Header content. + # + # @param hide_divider [Boolean] If true the visual dividing line between the header and body will be hidden + # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> + renders_one :header, lambda { |hide_divider: false, **system_arguments| + if @subtitle.present? + subtitle_id = "#{id}-description" + end + Primer::Alpha::Dialog::Header.new( + title: @title, + subtitle: @subtitle, + subtitle_id: subtitle_id, + hide_divider: hide_divider, + **system_arguments + ) + } + + # Required body content. + # + # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> + renders_one :body, "Body" + + # Footer content. + # + # @param hide_divider [Boolean] If true the visual dividing line between the body and footer will be hidden + # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> + renders_one :footer, lambda { |hide_divider: false, **system_arguments| + Primer::Alpha::Dialog::Footer.new(hide_divider: hide_divider, **system_arguments) + } + + # @example Dialog with Cancel and Submit buttons + # @description + # An ID is provided which enables wiring of the open and close buttons to the dialog. + # @code + # <%= render(Primer::Alpha::Dialog.new( + # title: "Dialog Example", + # )) do |d| %> + # <% d.show_button { "Show Dialog" } %> + # <% d.body do %> + #

Some content

+ # <% end %> + # <% d.footer do %> + # <%= render(Primer::ButtonComponent.new(data: { "close-dialog-id": "my-dialog" })) { "Cancel" } %> + # <%= render(Primer::ButtonComponent.new(scheme: :primary)) { "Submit" } %> + # <% end %> + # <% end %> + # @param id [String] The id of the dialog. + # @param title [String] The title of the dialog. + # @param subtitle [String] The subtitle of the dialog. This will also set the `aria-describedby` attribute. + # @param width [Symbol] The width of the dialog. <%= one_of(Primer::Alpha::Dialog::WIDTH_OPTIONS) %> + # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> + # @param body_padding_variant?? + def initialize( + title:, + subtitle: nil, + width: DEFAULT_WIDTH, + id: "dialog-#{(36**3 + rand(36**4)).to_s(36)}", + **system_arguments + ) + @system_arguments = deny_tag_argument(**system_arguments) + + @system_arguments[:tag] = "modal-dialog" + @system_arguments[:role] = "dialog" + @system_arguments[:id] = id.to_s + @system_arguments[:aria] = { modal: true } + @system_arguments[:classes] = class_names( + "Overlay", + WIDTH_MAPPINGS[fetch_or_fallback(WIDTH_OPTIONS, width, DEFAULT_WIDTH)], + "Overlay--height-auto", + "Overlay--motion-scaleFade", + system_arguments[:classes] + ) + + @subtitle = subtitle + if subtitle.present? + @system_arguments[:aria].describedby ||= @description + end + + @id = id.to_s + @title = title + end + end + end +end diff --git a/app/components/primer/alpha/dialog/body.rb b/app/components/primer/alpha/dialog/body.rb new file mode 100644 index 0000000000..dedce6c642 --- /dev/null +++ b/app/components/primer/alpha/dialog/body.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +module Primer + module Alpha + class Dialog + # A `Dialog::Body` is a compositional component, used to render the + # Body of a dialog. See <%= link_to_component(Primer::Alpha::Dialog) %>. + class Body < Primer::Component + # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> + def initialize(**system_arguments) + deny_tag_argument(**system_arguments) + system_arguments[:tag] = :header + system_arguments[:classes] = class_names( + "Overlay-body", + system_arguments[:classes] + ) + render(Primer::BaseComponent.new(**system_arguments)) + end + end + end + end +end diff --git a/app/components/primer/alpha/dialog/footer.rb b/app/components/primer/alpha/dialog/footer.rb new file mode 100644 index 0000000000..c72a0937b7 --- /dev/null +++ b/app/components/primer/alpha/dialog/footer.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +module Primer + module Alpha + class Dialog + # A `Dialog::Footer` is a compositional component, used to render the + # Footer of a dialog. See <%= link_to_component(Primer::Alpha::Dialog) %>. + class Footer < Primer::Component + # @param hide_divider [Boolean] If true the visual dividing line between the body and footer will be hidden + # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> + def initialize(hide_divider: false, **system_arguments) + deny_tag_argument(**system_arguments) + system_arguments[:tag] = :div + system_arguments[:classes] = class_names( + "Overlay-footer", + "Overlay-footer--alignEnd", + { "Overlay-footer--divided": !hide_divider }, + system_arguments[:classes] + ) + render(Primer::BaseComponent.new(**system_arguments)) + end + end + end + end +end diff --git a/app/components/primer/alpha/dialog/header.html.erb b/app/components/primer/alpha/dialog/header.html.erb new file mode 100644 index 0000000000..25317b0f89 --- /dev/null +++ b/app/components/primer/alpha/dialog/header.html.erb @@ -0,0 +1,13 @@ +<%= render Primer::BaseComponent.new(**@system_arguments) do %> +
+
+

<%= @title %>

+ <% if @subtitle.present? %> +

<%= @subtitle %>

+ <% end %> +
+
+ <%= render Primer::CloseButton.new(classes: "Overlay-closeButton", "data-close-dialog-id": @system_arguments[:id]) %> +
+
+<% end %> diff --git a/app/components/primer/alpha/dialog/header.rb b/app/components/primer/alpha/dialog/header.rb new file mode 100644 index 0000000000..d6960782ad --- /dev/null +++ b/app/components/primer/alpha/dialog/header.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +module Primer + module Alpha + class Dialog + # A `Dialog::Header` is a compositional component, used to render the + # Header of a dialog. See <%= link_to_component(Primer::Alpha::Dialog) %>. + class Header < Primer::Component + # @param title [String] The title of the dialog. + # @param subtitle [String] The subtitle of the dialog. This will also set the `aria-describedby` attribute. + # @param hide_divider [Boolean] If true the visual dividing line between the body and footer will be hidden + # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> + def initialize( + title:, + subtitle: nil, + sbutitle_id: nil, + hide_divider: false, + **system_arguments + ) + deny_tag_argument(**system_arguments) + system_arguments[:tag] = :header + system_arguments[:classes] = class_names( + "Overlay-header", + { "Overlay-header--divided": !hide_divider }, + system_arguments[:classes] + ) + render(Primer::BaseComponent.new(**system_arguments)) + end + end + end + end +end diff --git a/app/components/primer/alpha/modal-dialog-element.ts b/app/components/primer/alpha/modal-dialog-element.ts new file mode 100644 index 0000000000..8b937dda71 --- /dev/null +++ b/app/components/primer/alpha/modal-dialog-element.ts @@ -0,0 +1,150 @@ +import {focusTrap} from '@primer/behaviors' +import {getFocusableChild} from '@primer/behaviors/utils' + +function focusIfNeeded(elem?: HTMLElement) { + if (document.activeElement !== elem) { + elem?.focus() + } +} + +export class ModalDialogElement extends HTMLElement { + //TODO: Do we remove the abortController from focusTrap? + #focusAbortController = new AbortController() + #abortController: AbortController | null = null + #openButton: HTMLButtonElement | undefined + #shouldTryLoadingFragment = true + + get open() { + return this.hasAttribute('open') + } + set open(value: boolean) { + if (value) { + if (this.open) return + this.setAttribute('open', '') + this.#overlayBackdrop?.classList.remove('Overlay--hidden') + document.body.style.overflow = 'hidden' + if (this.#focusAbortController.signal.aborted) { + this.#focusAbortController = new AbortController() + } + focusTrap(this, undefined, this.#focusAbortController.signal) + } else { + if (!this.open) return + this.removeAttribute('open') + this.#overlayBackdrop?.classList.add('Overlay--hidden') + document.body.style.overflow = 'initial' + this.#focusAbortController.abort() + // if #openButton is a child of a menu, we need to focus a suitable child of the menu + // element since it is expected for the menu to close on click + const menu = this.#openButton?.closest('details') || this.#openButton?.closest('action-menu') + if (menu) { + focusIfNeeded(getFocusableChild(menu)) + } else { + focusIfNeeded(this.#openButton) + } + this.#openButton = undefined + } + } + + get #overlayBackdrop(): HTMLElement | null { + if (this.parentElement?.hasAttribute('data-modal-dialog-overlay')) { + return this.parentElement + } + + return null + } + + get showButtons(): NodeList { + // Dialogs may also be opened from any arbitrary button with a matching show-dialog-id data attribute + return document.querySelectorAll(`button[data-show-dialog-id='${this.id}']`) + } + + connectedCallback(): void { + if (!this.hasAttribute('role')) this.setAttribute('role', 'dialog') + + const {signal} = (this.#abortController = new AbortController()) + + this.ownerDocument.addEventListener( + 'click', + event => { + const target = event.target as HTMLElement + const clickOutsideDialog = target.closest(this.tagName) !== this + const button = target?.closest('button') + // go over this logic: + if (!button) { + if (clickOutsideDialog) { + // This click is outside the dialog + this.close() + } + return + } + + let dialogId = button.getAttribute('data-close-dialog-id') + if (dialogId === this.id) { + this.close() + } + + dialogId = button.getAttribute('data-submit-dialog-id') + if (dialogId === this.id) { + this.close(true) + } + + dialogId = button.getAttribute('data-show-dialog-id') + if (dialogId === this.id) { + //TODO: see if I can remove this + event.stopPropagation() + this.#openButton = button + this.show() + } + }, + {signal} + ) + + this.addEventListener('keydown', e => this.#keydown(e)) + } + + disconnectedCallback(): void { + this.#abortController?.abort() + } + + show() { + this.open = true + } + + close(closed = false) { + if (this.open === false) return + const eventType = closed ? 'close' : 'cancel' + const dialogEvent = new Event(eventType) + this.dispatchEvent(dialogEvent) + this.open = false + } + + #keydown(event: Event) { + if (!(event instanceof KeyboardEvent)) return + if (event.isComposing) return + + switch (event.key) { + case 'Escape': + if (this.open) { + this.close() + event.preventDefault() + event.stopPropagation() + } + break + } + } +} + +declare global { + interface Window { + ModalDialogElement: typeof ModalDialogElement + } + interface HTMLElementTagNameMap { + 'modal-dialog': ModalDialogElement + } +} + +if (!window.customElements.get('modal-dialog')) { + window.ModalDialogElement = ModalDialogElement + window.customElements.define('modal-dialog', ModalDialogElement) +} + diff --git a/app/components/primer/primer.ts b/app/components/primer/primer.ts index 0326541331..846439857f 100644 --- a/app/components/primer/primer.ts +++ b/app/components/primer/primer.ts @@ -6,3 +6,4 @@ import './local_time' import './image_crop' import './dropdown' import './alpha/tool-tip-element' +import './alpha/modal-dialog-element' diff --git a/docs/src/@primer/gatsby-theme-doctocat/nav.yml b/docs/src/@primer/gatsby-theme-doctocat/nav.yml index 63d5b6f8d1..026296187d 100644 --- a/docs/src/@primer/gatsby-theme-doctocat/nav.yml +++ b/docs/src/@primer/gatsby-theme-doctocat/nav.yml @@ -45,6 +45,8 @@ url: "/components/counter" - title: Details url: "/components/details" + - title: Dialog + url: "/components/alpha/dialog" - title: Dropdown url: "/components/dropdown" - title: DropdownMenu diff --git a/lib/tasks/docs.rake b/lib/tasks/docs.rake index cde76e68f4..dad3dae6ad 100644 --- a/lib/tasks/docs.rake +++ b/lib/tasks/docs.rake @@ -53,6 +53,7 @@ namespace :docs do Primer::CloseButton, Primer::CounterComponent, Primer::DetailsComponent, + Primer::Alpha::Dialog, Primer::Dropdown, Primer::DropdownMenuComponent, Primer::Beta::Flash, diff --git a/static/arguments.yml b/static/arguments.yml index 0cd8744dc3..d6bd415a73 100644 --- a/static/arguments.yml +++ b/static/arguments.yml @@ -29,6 +29,36 @@ type: Hash default: N/A description: "[System arguments](/system-arguments)" +- component: Dialog + source: https://github.com/primer/view_components/tree/main/app/components/primer/alpha/dialog.rb + parameters: + - name: id + type: String + default: '`"dialog-#{(36**3 + rand(36**4)).to_s(36)}"`' + description: The id of the dialog. + - name: title + type: String + default: N/A + description: The title of the dialog. + - name: subtitle + type: String + default: "`nil`" + description: The subtitle of the dialog. This will also set the `aria-describedby` + attribute. + - name: role + type: String + default: '`"dialog"`' + description: The role of the dialog, defaults to `dialog`, but could also be set + to `alertdialog`. + - name: width + type: Symbol + default: "`:medium`" + description: The width of the dialog. One of `:large`, `:medium`, `:small`, `:xlarge`, + or `:xxlarge`. + - name: system_arguments + type: Hash + default: N/A + description: "[System arguments](/system-arguments)" - component: Layout source: https://github.com/primer/view_components/tree/main/app/components/primer/alpha/layout.rb parameters: diff --git a/static/audited_at.json b/static/audited_at.json index dfda98d70b..ea1a24a41c 100644 --- a/static/audited_at.json +++ b/static/audited_at.json @@ -1,6 +1,10 @@ { "Primer::Alpha::BorderBox::Header": "", "Primer::Alpha::ButtonMarketing": "", + "Primer::Alpha::Dialog": "", + "Primer::Alpha::Dialog::Body": "", + "Primer::Alpha::Dialog::Footer": "", + "Primer::Alpha::Dialog::Header": "", "Primer::Alpha::Layout": "", "Primer::Alpha::Layout::Main": "", "Primer::Alpha::Layout::Sidebar": "", diff --git a/static/classes.yml b/static/classes.yml index 6a4e0a8197..d9d2a90bbd 100644 --- a/static/classes.yml +++ b/static/classes.yml @@ -49,6 +49,23 @@ - ".Link--muted" - ".Link--primary" - ".Link--secondary" +- ".Overlay" +- ".Overlay--height-auto" +- ".Overlay--hidden" +- ".Overlay--motion-scaleFade" +- ".Overlay--width-medium" +- ".Overlay-actionWrap" +- ".Overlay-backdrop--center" +- ".Overlay-backdrop--full-whenNarrow" +- ".Overlay-body" +- ".Overlay-closeButton" +- ".Overlay-footer" +- ".Overlay-footer--alignEnd" +- ".Overlay-footer--divided" +- ".Overlay-header" +- ".Overlay-headerContentWrap" +- ".Overlay-title" +- ".Overlay-titleWrap" - ".Popover" - ".Popover-message" - ".Popover-message--large" diff --git a/static/constants.json b/static/constants.json index 36b96d483d..35ad73dc08 100644 --- a/static/constants.json +++ b/static/constants.json @@ -44,6 +44,32 @@ "large" ] }, + "Primer::Alpha::Dialog": { + "Body": "Primer::Alpha::Dialog::Body", + "DEFAULT_WIDTH": "medium", + "Footer": "Primer::Alpha::Dialog::Footer", + "Header": "Primer::Alpha::Dialog::Header", + "WIDTH_MAPPINGS": { + "small": "Overlay--width-small", + "medium": "Overlay--width-medium", + "large": "Overlay--width-large", + "xlarge": "Overlay--width-xlarge", + "xxlarge": "Overlay--width-xxlarge" + }, + "WIDTH_OPTIONS": [ + "small", + "medium", + "large", + "xlarge", + "xxlarge" + ] + }, + "Primer::Alpha::Dialog::Body": { + }, + "Primer::Alpha::Dialog::Footer": { + }, + "Primer::Alpha::Dialog::Header": { + }, "Primer::Alpha::Layout": { "FIRST_IN_SOURCE_DEFAULT": "sidebar", "FIRST_IN_SOURCE_OPTIONS": [ @@ -373,7 +399,8 @@ } }, "Primer::Dropdown": { - "Menu": "Primer::Dropdown::Menu" + "Menu": "Primer::Dropdown::Menu", + "MenuTest": "Primer::Dropdown::MenuTest" }, "Primer::Dropdown::Menu": { "AS_DEFAULT": "default", diff --git a/static/statuses.json b/static/statuses.json index 1bdb9ec257..f32ddfcbef 100644 --- a/static/statuses.json +++ b/static/statuses.json @@ -1,6 +1,10 @@ { "Primer::Alpha::BorderBox::Header": "alpha", "Primer::Alpha::ButtonMarketing": "alpha", + "Primer::Alpha::Dialog": "alpha", + "Primer::Alpha::Dialog::Body": "alpha", + "Primer::Alpha::Dialog::Footer": "alpha", + "Primer::Alpha::Dialog::Header": "alpha", "Primer::Alpha::Layout": "alpha", "Primer::Alpha::Layout::Main": "alpha", "Primer::Alpha::Layout::Sidebar": "alpha", diff --git a/stories/primer/alpha/dialog_stories.rb b/stories/primer/alpha/dialog_stories.rb new file mode 100644 index 0000000000..97dbbb17ae --- /dev/null +++ b/stories/primer/alpha/dialog_stories.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require "primer/alpha/dialog" + +class Primer::Alpha::DialogStories < ViewComponent::Storybook::Stories + layout "storybook_preview" + + story(:dialog) do + controls do + title "github" + description "" + select(:tag, Primer::Alpha::Dialog::TAG_OPTIONS, Primer::Alpha::Dialog::DEFAULT_TAG) + href "#" + end + + content do |c| + + end + end +end diff --git a/test/components/component_test.rb b/test/components/component_test.rb index c6ed499332..38780e4659 100644 --- a/test/components/component_test.rb +++ b/test/components/component_test.rb @@ -45,6 +45,14 @@ class PrimerComponentTest < Minitest::Test component.summary { "Foo" } component.body { "Bar" } end], + [Primer::Alpha::Dialog, { title: "Test" }, proc { |component| + component.header { "Foo" } + component.body { "Foo" } + component.footer { "Foo" } + }], + [Primer::Alpha::Dialog::Header, { title: "Test" }], + [Primer::Alpha::Dialog::Body], + [Primer::Alpha::Dialog::Footer], [Primer::Dropdown, {}, lambda do |component| component.button { "Foo" } component.menu do |m| diff --git a/test/components/primer/alpha/dialog_test.rb b/test/components/primer/alpha/dialog_test.rb new file mode 100644 index 0000000000..516e3ab958 --- /dev/null +++ b/test/components/primer/alpha/dialog_test.rb @@ -0,0 +1,75 @@ +# frozen_string_literal: true + +require "test_helper" + +class PrimerAlphaDialogTest < Minitest::Test + include Primer::ComponentTestHelpers + + def test_renders_title_and_body + render_inline(Primer::Alpha::Dialog.new(title: "title")) do |c| + c.body { "Hello" } + end + + assert_selector("modal-dialog[role='dialog']") do + assert_selector("h1", text: "Title") + assert_selector(".Overlay-body", text: "Hello") + end + end + + def test_raises_on_missing_title + error = assert_raises(ArgumentError) do + render_inline(Primer::Alpha::Dialog.new) + end + + assert_includes(error.message, "missing keyword:") + assert_includes(error.message, "title") + end + + def test_renders_provided_id + render_inline(Primer::Alpha::Dialog.new(title: "Title", id: "my-id")) do |c| + c.body { "content" } + end + + assert_selector("modal-dialog[id='my-id']") + end + + def test_renders_random_id + render_inline(Primer::Alpha::Dialog.new(title: "Title")) do |c| + c.body { "content" } + end + + assert_selector("modal-dialog[id^='dialog_']") + end + + def test_renders_subtitle_with_describedby + render_inline(Primer::Alpha::Dialog.new(title: "Title", id: "my-dialog", subtitle: "Subtitle")) do |c| + c.body { "content" } + end + + assert_selector("modal-dialog[id='my-dialog'][aria-describedby='my-dialog-subtitle']") do + assert_selector("h2[id='my-dialog-subtitle']", text: "Subtitle") + end + end + + def test_renders_footer_with_divider_by_default + render_inline(Primer::Alpha::Dialog.new(title: "Title", id: "my-dialog", subtitle: "Subtitle")) do |c| + c.body { "content" } + c.footer { "footer" } + end + + assert_selector("modal-dialog") do + assert_selector(".Overlay-footer.Overlay-footer--divided", text: "footer") + end + end + + def test_renders_footer_without_divider_if_hide_divider + render_inline(Primer::Alpha::Dialog.new(title: "Title", id: "my-dialog", subtitle: "Subtitle")) do |c| + c.body { "content" } + c.footer(hide_divider: true) { "footer" } + end + + assert_selector("modal-dialog") do + assert_selector(".Overlay-footer:not(.Overlay-footer--divided)", text: "footer") + end + end +end