From 112dbd575cb383524aae6cb50b3b7e4922691ef6 Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Fri, 22 Jul 2022 18:45:02 +0100 Subject: [PATCH 01/27] initial dialog implementation --- .../javascripts/primer_view_components.js | 2 +- .../javascripts/primer_view_components.js.map | 2 +- app/components/primer/alpha/dialog.html.erb | 12 + app/components/primer/alpha/dialog.rb | 142 +++ app/components/primer/alpha/dialog/body.rb | 25 + app/components/primer/alpha/dialog/footer.rb | 31 + .../primer/alpha/dialog/header.html.erb | 13 + app/components/primer/alpha/dialog/header.rb | 35 + .../primer/alpha/modal-dialog-element.ts | 150 +++ app/components/primer/primer.ts | 1 + .../src/@primer/gatsby-theme-doctocat/nav.yml | 2 + docs/static/primer_view_components.js | 2 +- docs/static/primer_view_components.js.map | 2 +- lib/tasks/docs.rake | 1 + static/arguments.yml | 30 + static/audited_at.json | 4 + static/constants.json | 28 +- 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 ++ test/previews/primer/alpha/dialog_preview.rb | 57 + .../primer/alpha/dialog_preview/test.html.erb | 7 + .../alpha/dialog_preview/with_footer.html.erb | 8 + .../alpha/dialog_preview/with_form.html.erb | 12 + yarn.lock | 1013 ++++++++--------- 26 files changed, 1136 insertions(+), 550 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 create mode 100644 test/previews/primer/alpha/dialog_preview.rb create mode 100644 test/previews/primer/alpha/dialog_preview/test.html.erb create mode 100644 test/previews/primer/alpha/dialog_preview/with_footer.html.erb create mode 100644 test/previews/primer/alpha/dialog_preview/with_form.html.erb diff --git a/app/assets/javascripts/primer_view_components.js b/app/assets/javascripts/primer_view_components.js index 78175a300d..7cf3aa115c 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(o)[0],n=Array.from(this.list.querySelectorAll('[role="option"]')).filter(o),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 i(t,e){(function(t,e){const n=t.scrollTop,o=n+t.clientHeight,i=e.offsetTop,s=i+e.clientHeight;return i>=n&&s<=o})(t,e)||(t.scrollTop=e.offsetTop)}const s=window.testScreenReaderDelay||100;class r{constructor(t,n,o,i=!1){var s;if(this.container=t,this.input=n,this.results=o,this.combobox=new e(n,o),this.feedback=document.getElementById(`${this.results.id}-feedback`),this.autoselectEnabled=i,this.clearButton=document.getElementById(`${this.input.id||this.input.name}-clear`),this.clientOptions=o.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(...o){clearTimeout(n),n=window.setTimeout((()=>{clearTimeout(n),t(...o)}),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),o=new URLSearchParams(n.search.slice(1));o.append("q",t),n.search=o.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,o=e.length,[i]=e,s=null==i?void 0:i.textContent;this.autoselectEnabled&&s?this.updateFeedbackForScreenReaders(`${o} results. ${s} is the top result: Press Enter to activate.`):this.updateFeedbackForScreenReaders(`${o||"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 o=()=>c.delete(t),i=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 i.then(o,o),i}(t,n)}const u=new WeakMap;class AutocompleteElement 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 o="true"===this.getAttribute("data-autoselect");u.set(this,new r(this,e,n,o)),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 o=u.get(this);if(o)switch(t){case"open":null===n?o.close():o.open();break;case"value":null!==n&&(o.input.value=n),this.dispatchEvent(new a("auto-complete-change",{bubbles:!0,relatedTarget:o.input}))}}}function d(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 h(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),d(n),e.removeChild(n),Promise.resolve()}function f(t){const e=t.getAttribute("for"),n=t.getAttribute("value");function o(){t.dispatchEvent(new CustomEvent("clipboard-copy",{bubbles:!0}))}if(n)h(n).then(o);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&&(i=s,i instanceof HTMLInputElement||i instanceof HTMLTextAreaElement?h(i.value):i instanceof HTMLAnchorElement&&i.hasAttribute("href")?h(i.href):d(i)).then(o)}var i}function m(t){const e=t.currentTarget;e instanceof HTMLElement&&f(e)}function p(t){if(" "===t.key||"Enter"===t.key){const e=t.currentTarget;e instanceof HTMLElement&&(t.preventDefault(),f(e))}}function b(t){t.currentTarget.addEventListener("keydown",p)}function g(t){t.currentTarget.removeEventListener("keydown",p)}window.customElements.get("auto-complete")||(window.AutocompleteElement=AutocompleteElement,window.customElements.define("auto-complete",AutocompleteElement));class ClipboardCopyElement extends HTMLElement{constructor(){super(),this.addEventListener("click",m),this.addEventListener("focus",b),this.addEventListener("blur",g)}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=ClipboardCopyElement,window.customElements.define("clipboard-copy",ClipboardCopyElement));function w(t){t.style.display="inline-block"}function v(t){t.style.display="none"}const y=new WeakMap;function E(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=y.get(t);e?(clearTimeout(e),y.delete(t)):function(t){const[e,n]=t.querySelectorAll(".octicon");e&&n&&(v(e),w(n))}(t),y.set(t,setTimeout((()=>{!function(t){const[e,n]=t.querySelectorAll(".octicon");e&&n&&(w(e),v(n))}(t),y.delete(t)}),2e3))}));class TabContainerElement 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=E(this),o=n.indexOf(n.find((t=>t.matches('[aria-selected="true"]'))));if("ArrowRight"===t.code){let t=o+1;t>=n.length&&(t=0),A(this,t)}else if("ArrowLeft"===t.code){let t=o-1;t<0&&(t=n.length-1),A(this,t)}else"Home"===t.code?(A(this,0),t.preventDefault()):"End"===t.code&&(A(this,n.length-1),t.preventDefault())})),this.addEventListener("click",(t=>{const e=E(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;A(this,e.indexOf(n))}))}connectedCallback(){for(const t of E(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 A(t,e){const n=E(t),o=Array.from(t.querySelectorAll('[role="tabpanel"]')).filter((e=>e.closest(t.tagName)===t)),i=n[e],s=o[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 o)t.hidden=!0,t.hasAttribute("tabindex")||t.hasAttribute("data-tab-container-no-tabstop")||t.setAttribute("tabindex","0");i.setAttribute("aria-selected","true"),i.setAttribute("tabindex","0"),i.focus(),s.hidden=!1,t.dispatchEvent(new CustomEvent("tab-container-changed",{bubbles:!0,detail:{relatedTarget:s}}))}}window.customElements.get("tab-container")||(window.TabContainerElement=TabContainerElement,window.customElements.define("tab-container",TabContainerElement));const T=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],k=["January","February","March","April","May","June","July","August","September","October","November","December"];function x(t){return`0${t}`.slice(-2)}function L(t,e){const n=t.getDay(),o=t.getDate(),i=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 k[i].slice(0,3);case"B":return k[i];case"c":return t.toString();case"d":return x(o);case"e":return String(o);case"H":return x(r);case"I":return x(L(t,"%l"));case"l":return String(0===r||12===r?12:(r+12)%12);case"m":return x(i+1);case"M":return x(a);case"p":return r>11?"PM":"AM";case"P":return r>11?"pm":"am";case"S":return x(c);case"w":return String(n);case"y":return x(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 M(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 C=null;const S=M({day:"numeric",month:"short"});function D(){if(null!==C)return C;const t=S();if(t){const e=t.format(new Date(0));return C=!!e.match(/^\d/),C}return!1}let H=null;const $=M({day:"numeric",month:"short",year:"numeric"});function R(t){const e=t.closest("[lang]");return e instanceof HTMLElement&&e.lang?e.lang:"default"}const F=new WeakMap;class ExtendedTimeElement 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 o=this.getFormattedTitle();if("datetime"===t){const t=Date.parse(n);isNaN(t)?F.delete(this):F.set(this,new Date(t))}const i=this.getFormattedTitle(),s=this.getAttribute("title");"title"===t||!i||s&&s!==o||this.setAttribute("title",i);const r=this.getFormattedDate();r&&(this.textContent=r)}get date(){return F.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=M({day:"numeric",month:"short",year:"numeric",hour:"numeric",minute:"2-digit",timeZoneName:"short"}),I=new WeakMap;class LocalTimeElement extends ExtendedTimeElement{attributeChangedCallback(t,e,n){"hour"!==t&&"minute"!==t&&"second"!==t&&"time-zone-name"!==t||I.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 o=D()?"weekday day month year":"weekday month day, year";for(const e in n){const i=n[e][t.getAttribute(e)||""];o=o.replace(e,i||"")}return o=o.replace(/(\s,)|(,\s$)/,""),L(e,o).replace(/\s+/," ").trim()}(this,t)||""} ${function(t,e){const n={},o=t.getAttribute("hour");"numeric"!==o&&"2-digit"!==o||(n.hour=o);const i=t.getAttribute("minute");"numeric"!==i&&"2-digit"!==i||(n.minute=i);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=I.get(t);a||(a=M(n),I.set(t,a));const c=a();if(c)return c.format(e);return L(e,n.second?"%H:%M:%S":"%H:%M")}(this,t)||""}`.trim()}}window.customElements.get("local-time")||(window.LocalTimeElement=LocalTimeElement,window.customElements.define("local-time",LocalTimeElement));class q{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),o=Math.round(n/60),i=Math.round(o/24);return t>=0&&i<30?this.timeAgoFromMs(t):null}timeAhead(){const t=this.date.getTime()-(new Date).getTime(),e=Math.round(t/1e3),n=Math.round(e/60),o=Math.round(n/60),i=Math.round(o/24);return t>=0&&i<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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return t<0||e<10?W(this.locale,0,"second"):e<45?W(this.locale,-e,"second"):e<90||n<45?W(this.locale,-n,"minute"):n<90||o<24?W(this.locale,-o,"hour"):o<36||i<30?W(this.locale,-i,"day"):s<18?W(this.locale,-s,"month"):W(this.locale,-r,"year")}microTimeAgo(){const t=(new Date).getTime()-this.date.getTime(),e=Math.round(t/1e3),n=Math.round(e/60),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return n<1?"1m":n<60?`${n}m`:o<24?`${o}h`:i<365?`${i}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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return s>=18||s>=12?W(this.locale,r,"year"):i>=45||i>=30?W(this.locale,s,"month"):o>=36||o>=24?W(this.locale,i,"day"):n>=90||n>=45?W(this.locale,o,"hour"):e>=90||e>=45?W(this.locale,n,"minute"):W(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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return i>=365?`${r}y`:o>=24?`${i}d`:n>=60?`${o}h`:n>1?`${n}m`:"1m"}formatDate(){let t=D()?"%e %b":"%b %e";var e;return e=this.date,(new Date).getUTCFullYear()!==e.getUTCFullYear()&&(t+=function(){if(null!==H)return H;const t=$();if(t){const e=t.format(new Date(0));return H=!!e.match(/\d,/),H}return!0}()?", %Y":" %Y"),L(this.date,t)}formatTime(){const t=P();return t?t.format(this.date):L(this.date,"%l:%M%P")}}function W(t,e,n){const o=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 o?o.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=M({hour:"numeric",minute:"2-digit"});class RelativeTimeElement extends ExtendedTimeElement{getFormattedDate(){const t=this.date;if(t)return new q(t,R(this)).toString()}connectedCallback(){B.push(this),Y||(N(),Y=window.setInterval(N,6e4)),super.connectedCallback()}disconnectedCallback(){const t=B.indexOf(this);-1!==t&&B.splice(t,1),B.length||Y&&(clearInterval(Y),Y=null)}}const B=[];let Y;function N(){let t,e,n;for(e=0,n=B.length;e=0&&n.classList.add("nwse"),["ne","sw"].indexOf(e)>=0&&n.classList.add("nesw"),U.set(n,{startX:o.offsetLeft+(["se","ne"].indexOf(e)>=0?0:o.offsetWidth),startY:o.offsetTop+(["se","sw"].indexOf(e)>=0?0:o.offsetHeight)}),z(t)}else n.addEventListener("mousemove",j),n.addEventListener("touchmove",j,{passive:!0})}function J(t,e,n,o=!0){let i=Math.max(Math.abs(e),Math.abs(n),10);const s=U.get(t);if(!s)return;const{box:r,image:a}=K.get(t)||{};if(!r||!a)return;i=Math.min(i,n>0?a.height-s.startY:s.startY,e>0?a.width-s.startX:s.startX);const c=o?Math.round(Math.max(0,e>0?s.startX:s.startX-i)):r.offsetLeft,l=o?Math.round(Math.max(0,n>0?s.startY:s.startY-i)):r.offsetTop;r.style.left=`${c}px`,r.style.top=`${l}px`,r.style.width=`${i}px`,r.style.height=`${i}px`,Q(t,{x:c,y:l,width:i,height:i})}function G(t){const{image:e}=K.get(t)||{};if(!e)return;const n=Math.round(e.clientWidth>e.clientHeight?e.clientHeight:e.clientWidth);U.set(t,{startX:(e.clientWidth-n)/2,startY:(e.clientHeight-n)/2}),J(t,n,n)}function _(t){const e=t.currentTarget;e instanceof ImageCropElement&&(X.delete(e),e.classList.remove("nwse","nesw"),e.removeEventListener("mousemove",z),e.removeEventListener("mousemove",j),e.removeEventListener("touchmove",z),e.removeEventListener("touchmove",j))}function Q(t,e){const{image:n}=K.get(t)||{};if(!n)return;const o=n.naturalWidth/n.width;for(const n in e){const i=Math.round(e[n]*o);e[n]=i;const s=t.querySelector(`[data-image-crop-input='${n}']`);s instanceof HTMLInputElement&&(s.value=i.toString())}t.dispatchEvent(new CustomEvent("image-crop-change",{bubbles:!0,detail:e}))}class ImageCropElement extends HTMLElement{connectedCallback(){if(K.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&&(K.set(this,{box:e,image:n}),n.addEventListener("load",(()=>{this.loaded=!0,G(this)})),this.addEventListener("mouseleave",_),this.addEventListener("touchend",_),this.addEventListener("mouseup",_),e.addEventListener("mousedown",Z),e.addEventListener("touchstart",Z,{passive:!0}),this.addEventListener("keydown",j),this.addEventListener("keydown",z),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:o}=K.get(this)||{};"src"===t&&(this.loaded=!1,o&&(o.src=n))}}window.customElements.get("image-crop")||(window.ImageCropElement=ImageCropElement,window.customElements.define("image-crop",ImageCropElement));class DetailsMenuElement 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=[nt(t,"compositionstart",(t=>ht(this,t))),nt(t,"compositionend",(t=>ht(this,t))),nt(t,"click",(e=>ct(t,e))),nt(t,"change",(e=>ct(t,e))),nt(t,"keydown",(e=>function(t,e,n){if(!(n instanceof KeyboardEvent))return;if(t.querySelector("details[open]"))return;const o=tt.get(e);if(!o||o.isComposing)return;const i=n.target instanceof Element&&"SUMMARY"===n.target.tagName;switch(n.key){case"Escape":t.hasAttribute("open")&&(dt(t),n.preventDefault(),n.stopPropagation());break;case"ArrowDown":{i&&!t.hasAttribute("open")&&t.setAttribute("open","");const e=rt(t,!0);e&&e.focus(),n.preventDefault()}break;case"ArrowUp":{i&&!t.hasAttribute("open")&&t.setAttribute("open","");const e=rt(t,!1);e&&e.focus(),n.preventDefault()}break;case"n":if(at&&n.ctrlKey){const e=rt(t,!0);e&&e.focus(),n.preventDefault()}break;case"p":if(at&&n.ctrlKey){const e=rt(t,!1);e&&e.focus(),n.preventDefault()}break;case" ":case"Enter":{const e=document.activeElement;e instanceof HTMLElement&&ut(e)&&e.closest("details")===t&&(n.preventDefault(),n.stopPropagation(),e.click())}}}(t,this,e))),nt(t,"toggle",(()=>ot(t,this)),{once:!0}),nt(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?nt(t,"mouseover",(()=>ot(t,this)),{once:!0}):et,...it(t)];tt.set(this,{subscriptions:n,loaded:!1,isComposing:!1})}disconnectedCallback(){const t=tt.get(this);if(t){tt.delete(this);for(const e of t.subscriptions)e.unsubscribe()}}}const tt=new WeakMap,et={unsubscribe(){}};function nt(t,e,n,o=!1){return t.addEventListener(e,n,o),{unsubscribe:()=>{t.removeEventListener(e,n,o)}}}function ot(t,e){const n=e.getAttribute("src");if(!n)return;const o=tt.get(e);if(!o)return;if(o.loaded)return;o.loaded=!0;const i=e.querySelector("include-fragment");i&&!i.hasAttribute("src")&&(i.addEventListener("loadend",(()=>st(t))),i.setAttribute("src",n))}function it(t){let e=!1;return[nt(t,"mousedown",(()=>e=!0)),nt(t,"keydown",(()=>e=!1)),nt(t,"toggle",(()=>{t.hasAttribute("open")&&(st(t)||e||function(t){const e=document.activeElement;if(e&&ut(e)&&t.contains(e))return;const n=rt(t,!0);n&&n.focus()}(t))}))]}function st(t){if(!t.hasAttribute("open"))return!1;const e=t.querySelector("details-menu [autofocus]");return!!e&&(e.focus(),!0)}function rt(t,e){const n=Array.from(t.querySelectorAll('[role^="menuitem"]:not([hidden]):not([disabled]):not([aria-disabled="true"])')),o=document.activeElement,i=o instanceof HTMLElement?n.indexOf(o):-1,s=e?n[i+1]:n[i-1],r=e?n[0]:n[n.length-1];return s||r}const at=navigator.userAgent.match(/Macintosh/);function ct(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 o=e.querySelector("input");if("LABEL"===e.tagName&&n===o)return;"LABEL"===e.tagName&&o&&!o.checked||lt(e,t)}else if("change"===e.type){const e=n.closest('[role="menuitemradio"], [role="menuitemcheckbox"]');e&<(e,t)}}function lt(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 o=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(o)n.textContent=o;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 o=(n===t).toString();e instanceof HTMLInputElement&&(o=e.indeterminate?"mixed":e.checked.toString()),n.setAttribute("aria-checked",o)}}(t,e),"menuitemcheckbox"!==t.getAttribute("role")&&dt(e),n.dispatchEvent(new CustomEvent("details-menu-selected",{detail:{relatedTarget:t}})))}function ut(t){const e=t.getAttribute("role");return"menuitem"===e||"menuitemcheckbox"===e||"menuitemradio"===e}function dt(t){if(!t.hasAttribute("open"))return;t.removeAttribute("open");const e=t.querySelector("summary");e&&e.focus()}function ht(t,e){const n=tt.get(t);n&&(n.isComposing="compositionstart"===e.type)}function ft(t,e,n,o){var i,s=arguments.length,r=s<3?e:null===o?o=Object.getOwnPropertyDescriptor(e,n):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,n,o);else for(var a=t.length-1;a>=0;a--)(i=t[a])&&(r=(s<3?i(r):s>3?i(e,n,r):i(e,n))||r);return s>3&&r&&Object.defineProperty(e,n,r),r}function mt(t,e,n,o){if("a"===n&&!o)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?o:"a"===n?o.call(t):o?o.value:e.get(t)}function pt(t,e,n,o,i){if("m"===o)throw new TypeError("Private method is not writable");if("a"===o&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===o?i.call(t,n):i?i.value=n:e.set(t,n),n}window.customElements.get("details-menu")||(window.DetailsMenuElement=DetailsMenuElement,window.customElements.define("details-menu",DetailsMenuElement));const bt=new WeakSet;function gt(t){yt(t),vt(t)}const wt=new WeakMap;function vt(t=document){if(wt.has(t))return wt.get(t);let e=!1;const n=new MutationObserver((t=>{for(const e of t)if("attributes"===e.type&&e.target instanceof Element)Tt(e.target);else if("childList"===e.type&&e.addedNodes.length)for(const t of e.addedNodes)t instanceof Element&&yt(t)}));n.observe(t,{childList:!0,subtree:!0,attributeFilter:["data-action"]});const o={get closed(){return e},unsubscribe(){e=!0,wt.delete(t),n.disconnect()}};return wt.set(t,o),o}function yt(t){for(const e of t.querySelectorAll("[data-action]"))Tt(e);t instanceof Element&&t.hasAttribute("data-action")&&Tt(t)}function Et(t){const e=t.currentTarget;for(const n of At(e))if(t.type===n.type){const o=e.closest(n.tag);bt.has(o)&&"function"==typeof o[n.method]&&o[n.method](t);const i=e.getRootNode();if(i instanceof ShadowRoot&&bt.has(i.host)&&i.host.matches(n.tag)){const e=i.host;"function"==typeof e[n.method]&&e[n.method](t)}}}function*At(t){for(const e of(t.getAttribute("data-action")||"").trim().split(/\s+/)){const t=e.lastIndexOf(":"),n=Math.max(0,e.lastIndexOf("#"))||e.length;yield{type:e.slice(0,t),tag:e.slice(t+1,n),method:e.slice(n+1)||"handleEvent"}||"handleEvent"}}function Tt(t){for(const e of At(t))t.addEventListener(e.type,Et)}const kt=t=>String("symbol"==typeof t?t.description:t).replace(/([A-Z]($|[a-z]))/g,"-$1").replace(/--/g,"-").replace(/^-|-$/,"").toLowerCase(),xt=(t,e="property")=>{const n=kt(t);if(!n.includes("-"))throw new DOMException(`${e}: ${String(t)} is not a valid ${e} name`,"SyntaxError");return n};const Lt=new WeakSet;function Mt(t,e){if(Lt.has(t))return;Lt.add(t);const n=Object.getPrototypeOf(t),o=n?.constructor?.attrPrefix??"data-";e||(e=Dt(n,"attr"));for(const n of e){const e=t[n],i=xt(`${o}${n}`);let s={configurable:!0,get(){return this.getAttribute(i)||""},set(t){this.setAttribute(i,t||"")}};"number"==typeof e?s={configurable:!0,get(){return Number(this.getAttribute(i)||0)},set(t){this.setAttribute(i,t)}}:"boolean"==typeof e&&(s={configurable:!0,get(){return this.hasAttribute(i)},set(t){this.toggleAttribute(i,t)}}),Object.defineProperty(t,n,s),n in t&&!t.hasAttribute(i)&&s.set.call(t,e)}}const Ct=Symbol.for("catalyst");class St{constructor(t){const e=this,n=t.prototype.connectedCallback;t.prototype.connectedCallback=function(){e.connectedCallback(this,n)};const o=t.prototype.disconnectedCallback;t.prototype.disconnectedCallback=function(){e.disconnectedCallback(this,o)};const i=t.prototype.attributeChangedCallback;t.prototype.attributeChangedCallback=function(t,n,o){e.attributeChangedCallback(this,t,n,o,i)};let s=t.observedAttributes||[];Object.defineProperty(t,"observedAttributes",{configurable:!0,get(){return e.observedAttributes(this,s)},set(t){s=t}}),function(t){let e=t.observedAttributes||[];const n=t.attrPrefix??"data-",o=t=>xt(`${n}${t}`);Object.defineProperty(t,"observedAttributes",{configurable:!0,get:()=>[...Dt(t.prototype,"attr")].map(o).concat(e),set(t){e=t}})}(t),function(t){const e=kt(t.name).replace(/-element$/,"");try{window.customElements.define(e,t),window[t.name]=customElements.get(e)}catch(t){if(!(t instanceof DOMException&&"NotSupportedError"===t.name))throw t}}(t)}observedAttributes(t,e){return e}connectedCallback(t,e){t.toggleAttribute("data-catalyst",!0),customElements.upgrade(t),function(t){for(const e of t.querySelectorAll("template[data-shadowroot]"))e.parentElement===t&&t.attachShadow({mode:"closed"===e.getAttribute("data-shadowroot")?"closed":"open"}).append(e.content.cloneNode(!0))}(t),Mt(t),function(t){bt.add(t),t.shadowRoot&>(t.shadowRoot),yt(t),vt(t.ownerDocument)}(t),e?.call(t),t.shadowRoot&>(t.shadowRoot)}disconnectedCallback(t,e){e?.call(t)}attributeChangedCallback(t,e,n,o,i){Mt(t),"data-catalyst"!==e&&i&&i.call(t,e,n,o)}}function Dt(t,e){if(!Object.prototype.hasOwnProperty.call(t,Ct)){const e=t[Ct],n=t[Ct]=new Map;if(e)for(const[t,o]of e)n.set(t,new Set(o))}const n=t[Ct];return n.has(e)||n.set(e,new Set),n.get(e)}function Ht(t,e){Dt(t,"target").add(e),Object.defineProperty(t,e,{configurable:!0,get(){return function(t,e){const n=t.tagName.toLowerCase();if(t.shadowRoot)for(const o of t.shadowRoot.querySelectorAll(`[data-target~="${n}.${e}"]`))if(!o.closest(n))return o;for(const o of t.querySelectorAll(`[data-target~="${n}.${e}"]`))if(o.closest(n)===t)return o}(this,e)}})}function $t(t,e=0,{start:n=!1,middle:o=!1,once:i=!1}={}){return function(t,e=0,{start:n=!0,middle:o=!0,once:i=!1}={}){let s,r=0,a=!1;function c(...l){if(a)return;const u=Date.now()-r;r=Date.now(),n?(n=!1,t.apply(this,l),i&&c.cancel()):(o&&u{r=Date.now(),t.apply(this,l),i&&c.cancel()}),o?e-u:e))}return c.cancel=()=>{clearTimeout(s),a=!0},c}(t,e,{start:n,middle:o,once:i})}new Promise((t=>{"loading"!==document.readyState?t():document.addEventListener("readystatechange",(()=>t()),{once:!0})})),new Promise((t=>{const e=new AbortController;e.signal.addEventListener("abort",(()=>t()));const n={once:!0,passive:!0,signal:e.signal},o=()=>e.abort();document.addEventListener("mousedown",o,n),document.addEventListener("touchstart",o,n),document.addEventListener("keydown",o,n),document.addEventListener("pointerdown",o,n)}));let Rt=class ToggleSwitchElement extends HTMLElement{get src(){const t=this.getAttribute("src");if(!t)return null;const e=this.ownerDocument.createElement("a");return e.href=t,e.href}get csrf(){const t=this.querySelector("[data-csrf]");return this.getAttribute("csrf")||t instanceof HTMLInputElement&&t.value||null}get csrfField(){return this.getAttribute("csrf-field")||"authenticity_token"}isRemote(){return null!=this.src}toggle(){this.isRemote()?(this.setLoadingState(),this.check()):this.performToggle()}turnOn(){this.isDisabled()||(this.switch.setAttribute("aria-checked","true"),this.classList.add("ToggleSwitch--checked"))}turnOff(){this.isDisabled()||(this.switch.setAttribute("aria-checked","false"),this.classList.remove("ToggleSwitch--checked"))}isOn(){return"true"===this.switch.getAttribute("aria-checked")}isOff(){return!this.isOn()}isDisabled(){return"true"===this.switch.getAttribute("aria-disabled")}disable(){this.switch.setAttribute("aria-disabled","true")}enable(){this.switch.setAttribute("aria-disabled","false")}performToggle(){this.isOn()?this.turnOff():this.turnOn()}setLoadingState(){this.disable(),this.errorIcon.setAttribute("hidden","hidden"),this.loadingSpinner.removeAttribute("hidden")}setSuccessState(){this.setFinishedState(!1)}setErrorState(){this.setFinishedState(!0)}setFinishedState(t){t&&this.errorIcon.removeAttribute("hidden"),this.loadingSpinner.setAttribute("hidden","hidden"),this.enable()}async check(){const t=new FormData;this.csrf&&t.append(this.csrfField,this.csrf),t.append("value",this.isOn()?"1":"0");try{(await fetch(this.src,{credentials:"same-origin",method:"POST",body:t})).ok?(this.setSuccessState(),this.performToggle()):this.setErrorState()}catch(t){this.setErrorState()}}};ft([Ht],Rt.prototype,"switch",void 0),ft([Ht],Rt.prototype,"loadingSpinner",void 0),ft([Ht],Rt.prototype,"errorIcon",void 0),ft([function(t=0,e={}){return(n,o,i)=>{if(!i||"function"!=typeof i.value)throw new Error("debounce can only decorate functions");const s=i.value;i.value=$t(s,t,e),Object.defineProperty(n,o,i)}}(300)],Rt.prototype,"check",null),Rt=ft([function(t){new St(t)}],Rt);const Ft={"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"]},Ot={start:["end","center"],end:["start","center"],center:["end","start"]};function It(t,e,n={}){const o=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),i=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,o=n.getBoundingClientRect(),i=getComputedStyle(n),[s,r,a,c]=[i.borderTopWidth,i.borderLeftWidth,i.borderRightWidth,i.borderBottomWidth].map((t=>parseInt(t,10)||0));return{top:o.top+s,left:o.left+r,width:o.width-a-r,height:Math.max(o.height-s-c,n===document.body?window.innerHeight:-1/0)}}(o),s=getComputedStyle(o),r=o.getBoundingClientRect(),[a,c]=[s.borderTopWidth,s.borderLeftWidth].map((t=>parseInt(t,10)||0));return function(t,e,n,o,{side:i,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=Nt(n,o,i,s,a,c),d=i,h=s;if(u.top-=e.top,u.left-=e.left,!r){const r=Ft[i];let f=0;if(r){let t=i;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})}(i,{top:r.top+a,left:r.left+c},t.getBoundingClientRect(),e instanceof Element?e.getBoundingClientRect():e,function(t={}){var e,n,o,i,s;const r=null!==(e=t.side)&&void 0!==e?e:qt,a=null!==(n=t.align)&&void 0!==n?n:Wt;return{side:r,align:a,anchorOffset:null!==(o=t.anchorOffset)&&void 0!==o?o:"inside-center"===r?0:Pt,alignmentOffset:null!==(i=t.alignmentOffset)&&void 0!==i?i:"center"!==a&&r.startsWith("inside")?Bt:0,allowOutOfBounds:null!==(s=t.allowOutOfBounds)&&void 0!==s?s:Yt}}(n))}const qt="outside-bottom",Wt="start",Pt=4,Bt=4,Yt=!1;function Nt(t,e,n,o,i,s){const r=e.left+e.width,a=e.top+e.height;let c=-1,l=-1;return"outside-top"===n?c=e.top-i-t.height:"outside-bottom"===n?c=a+i:"outside-left"===n?l=e.left-i-t.width:"outside-right"===n&&(l=r+i),"outside-top"!==n&&"outside-bottom"!==n||(l="start"===o?e.left+s:"center"===o?e.left-(t.width-e.width)/2+s:r-t.width-s),"outside-left"!==n&&"outside-right"!==n||(c="start"===o?e.top+s:"center"===o?e.top-(t.height-e.height)/2+s:a-t.height-s),"inside-top"===n?c=e.top+i:"inside-bottom"===n?c=a-i-t.height:"inside-left"===n?l=e.left+i:"inside-right"===n?l=r-i-t.width:"inside-center"===n&&(l=(r+e.left)/2-t.width/2+i),"inside-top"===n||"inside-bottom"===n?l="start"===o?e.left+s:"center"===o?e.left-(t.width-e.width)/2+s:r-t.width-s:"inside-left"!==n&&"inside-right"!==n&&"inside-center"!==n||(c="start"===o?e.top+s:"center"===o?e.top-(t.height-e.height)/2+s:a-t.height-s),{top:c,left:l}}function Ut(t,e,n,o){return"outside-top"===t||"outside-bottom"===t?e.topn.height+n.top:e.leftn.width+n.left}function Xt(t,e,n,o){return"end"===t?e.leftn.left+n.width||e.left\n ${this.styles()}\n \n \n `}if(this.hiddenFromView=!0,pt(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=mt(this,jt,"f"))||void 0===t||t.abort(),pt(this,jt,new AbortController,"f");const{signal:e}=mt(this,jt,"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}),mt(this,Kt,"m",Jt).call(this)}disconnectedCallback(){var t;null===(t=mt(this,jt,"f"))||void 0===t||t.abort()}handleEvent(t){this.control&&("mouseenter"!==t.type&&"focus"!==t.type||!this.hiddenFromView?"blur"===t.type||"mouseleave"===t.type&&t.relatedTarget!==this.control&&t.relatedTarget!==this?this.hiddenFromView=!0:"keydown"!==t.type||"Escape"!==t.key||this.hiddenFromView||(this.hiddenFromView=!0):this.hiddenFromView=!1)}attributeChangedCallback(t){if("id"===t||"data-type"===t){if(!this.id||!this.control)return;if("label"===this.type){let t=this.control.getAttribute("aria-labelledby");t=t?`${t} ${this.id}`:this.id,this.control.setAttribute("aria-labelledby",t),this.setAttribute("aria-hidden","true")}else{let t=this.control.getAttribute("aria-describedby");t=t?`${t} ${this.id}`:this.id,this.control.setAttribute("aria-describedby",t)}}else if("data-direction"===t){this.classList.remove(..._t);const t=this.direction;"n"===t?(pt(this,zt,"center","f"),pt(this,Vt,"outside-top","f")):"ne"===t?(pt(this,zt,"start","f"),pt(this,Vt,"outside-top","f")):"e"===t?(pt(this,zt,"center","f"),pt(this,Vt,"outside-right","f")):"se"===t?(pt(this,zt,"start","f"),pt(this,Vt,"outside-bottom","f")):"s"===t?(pt(this,zt,"center","f"),pt(this,Vt,"outside-bottom","f")):"sw"===t?(pt(this,zt,"end","f"),pt(this,Vt,"outside-bottom","f")):"w"===t?(pt(this,zt,"center","f"),pt(this,Vt,"outside-left","f")):"nw"===t&&(pt(this,zt,"end","f"),pt(this,Vt,"outside-top","f"))}}}jt=new WeakMap,zt=new WeakMap,Vt=new WeakMap,Zt=new WeakMap,Kt=new WeakSet,Jt=function(){if(this.hiddenFromView)this.classList.remove("tooltip-open",..._t);else{this.classList.add("tooltip-open");for(const t of this.ownerDocument.querySelectorAll(this.tagName))t!==this&&(t.hiddenFromView=!0);mt(this,Kt,"m",Gt).call(this)}},Gt=function(){if(!this.control)return;if(!mt(this,Zt,"f")||this.hiddenFromView)return;this.style.left="0px";const t=It(this,this.control,{side:mt(this,Vt,"f"),align:mt(this,zt,"f"),anchorOffset:10}),e=t.anchorSide,n=t.anchorAlign;this.style.top=`${t.top}px`,this.style.left=`${t.left}px`;let o="s";o="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-${o}`)},ToolTipElement.observedAttributes=["data-type","data-direction","id"],window.customElements.get("tool-tip")||(window.ToolTipElement=ToolTipElement,window.customElements.define("tool-tip",ToolTipElement)); +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(o)[0],n=Array.from(this.list.querySelectorAll('[role="option"]')).filter(o),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 i(t,e){(function(t,e){const n=t.scrollTop,o=n+t.clientHeight,i=e.offsetTop,s=i+e.clientHeight;return i>=n&&s<=o})(t,e)||(t.scrollTop=e.offsetTop)}const s=window.testScreenReaderDelay||100;class r{constructor(t,n,o,i=!1){var s;if(this.container=t,this.input=n,this.results=o,this.combobox=new e(n,o),this.feedback=document.getElementById(`${this.results.id}-feedback`),this.autoselectEnabled=i,this.clearButton=document.getElementById(`${this.input.id||this.input.name}-clear`),this.clientOptions=o.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(...o){clearTimeout(n),n=window.setTimeout((()=>{clearTimeout(n),t(...o)}),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),o=new URLSearchParams(n.search.slice(1));o.append("q",t),n.search=o.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,o=e.length,[i]=e,s=null==i?void 0:i.textContent;this.autoselectEnabled&&s?this.updateFeedbackForScreenReaders(`${o} results. ${s} is the top result: Press Enter to activate.`):this.updateFeedbackForScreenReaders(`${o||"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 o=()=>c.delete(t),i=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 i.then(o,o),i}(t,n)}const u=new WeakMap;class AutocompleteElement 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 o="true"===this.getAttribute("data-autoselect");u.set(this,new r(this,e,n,o)),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 o=u.get(this);if(o)switch(t){case"open":null===n?o.close():o.open();break;case"value":null!==n&&(o.input.value=n),this.dispatchEvent(new a("auto-complete-change",{bubbles:!0,relatedTarget:o.input}))}}}function d(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 h(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),d(n),e.removeChild(n),Promise.resolve()}function f(t){const e=t.getAttribute("for"),n=t.getAttribute("value");function o(){t.dispatchEvent(new CustomEvent("clipboard-copy",{bubbles:!0}))}if(n)h(n).then(o);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&&(i=s,i instanceof HTMLInputElement||i instanceof HTMLTextAreaElement?h(i.value):i instanceof HTMLAnchorElement&&i.hasAttribute("href")?h(i.href):d(i)).then(o)}var i}function m(t){const e=t.currentTarget;e instanceof HTMLElement&&f(e)}function p(t){if(" "===t.key||"Enter"===t.key){const e=t.currentTarget;e instanceof HTMLElement&&(t.preventDefault(),f(e))}}function b(t){t.currentTarget.addEventListener("keydown",p)}function g(t){t.currentTarget.removeEventListener("keydown",p)}window.customElements.get("auto-complete")||(window.AutocompleteElement=AutocompleteElement,window.customElements.define("auto-complete",AutocompleteElement));class ClipboardCopyElement extends HTMLElement{constructor(){super(),this.addEventListener("click",m),this.addEventListener("focus",b),this.addEventListener("blur",g)}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=ClipboardCopyElement,window.customElements.define("clipboard-copy",ClipboardCopyElement));function w(t){t.style.display="inline-block"}function v(t){t.style.display="none"}const E=new WeakMap;function y(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=E.get(t);e?(clearTimeout(e),E.delete(t)):function(t){const[e,n]=t.querySelectorAll(".octicon");e&&n&&(v(e),w(n))}(t),E.set(t,setTimeout((()=>{!function(t){const[e,n]=t.querySelectorAll(".octicon");e&&n&&(w(e),v(n))}(t),E.delete(t)}),2e3))}));class TabContainerElement 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=y(this),o=n.indexOf(n.find((t=>t.matches('[aria-selected="true"]'))));if("ArrowRight"===t.code){let t=o+1;t>=n.length&&(t=0),A(this,t)}else if("ArrowLeft"===t.code){let t=o-1;t<0&&(t=n.length-1),A(this,t)}else"Home"===t.code?(A(this,0),t.preventDefault()):"End"===t.code&&(A(this,n.length-1),t.preventDefault())})),this.addEventListener("click",(t=>{const e=y(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;A(this,e.indexOf(n))}))}connectedCallback(){for(const t of y(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 A(t,e){const n=y(t),o=Array.from(t.querySelectorAll('[role="tabpanel"]')).filter((e=>e.closest(t.tagName)===t)),i=n[e],s=o[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 o)t.hidden=!0,t.hasAttribute("tabindex")||t.hasAttribute("data-tab-container-no-tabstop")||t.setAttribute("tabindex","0");i.setAttribute("aria-selected","true"),i.setAttribute("tabindex","0"),i.focus(),s.hidden=!1,t.dispatchEvent(new CustomEvent("tab-container-changed",{bubbles:!0,detail:{relatedTarget:s}}))}}window.customElements.get("tab-container")||(window.TabContainerElement=TabContainerElement,window.customElements.define("tab-container",TabContainerElement));const T=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],k=["January","February","March","April","May","June","July","August","September","October","November","December"];function L(t){return`0${t}`.slice(-2)}function x(t,e){const n=t.getDay(),o=t.getDate(),i=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 k[i].slice(0,3);case"B":return k[i];case"c":return t.toString();case"d":return L(o);case"e":return String(o);case"H":return L(r);case"I":return L(x(t,"%l"));case"l":return String(0===r||12===r?12:(r+12)%12);case"m":return L(i+1);case"M":return L(a);case"p":return r>11?"PM":"AM";case"P":return r>11?"pm":"am";case"S":return L(c);case"w":return String(n);case"y":return L(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 M(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 C=null;const S=M({day:"numeric",month:"short"});function D(){if(null!==C)return C;const t=S();if(t){const e=t.format(new Date(0));return C=!!e.match(/^\d/),C}return!1}let H=null;const F=M({day:"numeric",month:"short",year:"numeric"});function R(t){const e=t.closest("[lang]");return e instanceof HTMLElement&&e.lang?e.lang:"default"}const $=new WeakMap;class ExtendedTimeElement 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 o=this.getFormattedTitle();if("datetime"===t){const t=Date.parse(n);isNaN(t)?$.delete(this):$.set(this,new Date(t))}const i=this.getFormattedTitle(),s=this.getAttribute("title");"title"===t||!i||s&&s!==o||this.setAttribute("title",i);const r=this.getFormattedDate();r&&(this.textContent=r)}get date(){return $.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=M({day:"numeric",month:"short",year:"numeric",hour:"numeric",minute:"2-digit",timeZoneName:"short"}),I=new WeakMap;class LocalTimeElement extends ExtendedTimeElement{attributeChangedCallback(t,e,n){"hour"!==t&&"minute"!==t&&"second"!==t&&"time-zone-name"!==t||I.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 o=D()?"weekday day month year":"weekday month day, year";for(const e in n){const i=n[e][t.getAttribute(e)||""];o=o.replace(e,i||"")}return o=o.replace(/(\s,)|(,\s$)/,""),x(e,o).replace(/\s+/," ").trim()}(this,t)||""} ${function(t,e){const n={},o=t.getAttribute("hour");"numeric"!==o&&"2-digit"!==o||(n.hour=o);const i=t.getAttribute("minute");"numeric"!==i&&"2-digit"!==i||(n.minute=i);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=I.get(t);a||(a=M(n),I.set(t,a));const c=a();if(c)return c.format(e);return x(e,n.second?"%H:%M:%S":"%H:%M")}(this,t)||""}`.trim()}}window.customElements.get("local-time")||(window.LocalTimeElement=LocalTimeElement,window.customElements.define("local-time",LocalTimeElement));class W{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),o=Math.round(n/60),i=Math.round(o/24);return t>=0&&i<30?this.timeAgoFromMs(t):null}timeAhead(){const t=this.date.getTime()-(new Date).getTime(),e=Math.round(t/1e3),n=Math.round(e/60),o=Math.round(n/60),i=Math.round(o/24);return t>=0&&i<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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return t<0||e<10?q(this.locale,0,"second"):e<45?q(this.locale,-e,"second"):e<90||n<45?q(this.locale,-n,"minute"):n<90||o<24?q(this.locale,-o,"hour"):o<36||i<30?q(this.locale,-i,"day"):s<18?q(this.locale,-s,"month"):q(this.locale,-r,"year")}microTimeAgo(){const t=(new Date).getTime()-this.date.getTime(),e=Math.round(t/1e3),n=Math.round(e/60),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return n<1?"1m":n<60?`${n}m`:o<24?`${o}h`:i<365?`${i}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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return s>=18||s>=12?q(this.locale,r,"year"):i>=45||i>=30?q(this.locale,s,"month"):o>=36||o>=24?q(this.locale,i,"day"):n>=90||n>=45?q(this.locale,o,"hour"):e>=90||e>=45?q(this.locale,n,"minute"):q(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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return i>=365?`${r}y`:o>=24?`${i}d`:n>=60?`${o}h`:n>1?`${n}m`:"1m"}formatDate(){let t=D()?"%e %b":"%b %e";var e;return e=this.date,(new Date).getUTCFullYear()!==e.getUTCFullYear()&&(t+=function(){if(null!==H)return H;const t=F();if(t){const e=t.format(new Date(0));return H=!!e.match(/\d,/),H}return!0}()?", %Y":" %Y"),x(this.date,t)}formatTime(){const t=P();return t?t.format(this.date):x(this.date,"%l:%M%P")}}function q(t,e,n){const o=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 o?o.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=M({hour:"numeric",minute:"2-digit"});class RelativeTimeElement extends ExtendedTimeElement{getFormattedDate(){const t=this.date;if(t)return new W(t,R(this)).toString()}connectedCallback(){N.push(this),B||(Y(),B=window.setInterval(Y,6e4)),super.connectedCallback()}disconnectedCallback(){const t=N.indexOf(this);-1!==t&&N.splice(t,1),N.length||B&&(clearInterval(B),B=null)}}const N=[];let B;function Y(){let t,e,n;for(e=0,n=N.length;e=0&&n.classList.add("nwse"),["ne","sw"].indexOf(e)>=0&&n.classList.add("nesw"),U.set(n,{startX:o.offsetLeft+(["se","ne"].indexOf(e)>=0?0:o.offsetWidth),startY:o.offsetTop+(["se","sw"].indexOf(e)>=0?0:o.offsetHeight)}),z(t)}else n.addEventListener("mousemove",j),n.addEventListener("touchmove",j,{passive:!0})}function _(t,e,n,o=!0){let i=Math.max(Math.abs(e),Math.abs(n),10);const s=U.get(t);if(!s)return;const{box:r,image:a}=K.get(t)||{};if(!r||!a)return;i=Math.min(i,n>0?a.height-s.startY:s.startY,e>0?a.width-s.startX:s.startX);const c=o?Math.round(Math.max(0,e>0?s.startX:s.startX-i)):r.offsetLeft,l=o?Math.round(Math.max(0,n>0?s.startY:s.startY-i)):r.offsetTop;r.style.left=`${c}px`,r.style.top=`${l}px`,r.style.width=`${i}px`,r.style.height=`${i}px`,Q(t,{x:c,y:l,width:i,height:i})}function J(t){const{image:e}=K.get(t)||{};if(!e)return;const n=Math.round(e.clientWidth>e.clientHeight?e.clientHeight:e.clientWidth);U.set(t,{startX:(e.clientWidth-n)/2,startY:(e.clientHeight-n)/2}),_(t,n,n)}function G(t){const e=t.currentTarget;e instanceof ImageCropElement&&(X.delete(e),e.classList.remove("nwse","nesw"),e.removeEventListener("mousemove",z),e.removeEventListener("mousemove",j),e.removeEventListener("touchmove",z),e.removeEventListener("touchmove",j))}function Q(t,e){const{image:n}=K.get(t)||{};if(!n)return;const o=n.naturalWidth/n.width;for(const n in e){const i=Math.round(e[n]*o);e[n]=i;const s=t.querySelector(`[data-image-crop-input='${n}']`);s instanceof HTMLInputElement&&(s.value=i.toString())}t.dispatchEvent(new CustomEvent("image-crop-change",{bubbles:!0,detail:e}))}class ImageCropElement extends HTMLElement{connectedCallback(){if(K.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&&(K.set(this,{box:e,image:n}),n.addEventListener("load",(()=>{this.loaded=!0,J(this)})),this.addEventListener("mouseleave",G),this.addEventListener("touchend",G),this.addEventListener("mouseup",G),e.addEventListener("mousedown",Z),e.addEventListener("touchstart",Z,{passive:!0}),this.addEventListener("keydown",j),this.addEventListener("keydown",z),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:o}=K.get(this)||{};"src"===t&&(this.loaded=!1,o&&(o.src=n))}}window.customElements.get("image-crop")||(window.ImageCropElement=ImageCropElement,window.customElements.define("image-crop",ImageCropElement));class DetailsMenuElement 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=[nt(t,"compositionstart",(t=>ht(this,t))),nt(t,"compositionend",(t=>ht(this,t))),nt(t,"click",(e=>ct(t,e))),nt(t,"change",(e=>ct(t,e))),nt(t,"keydown",(e=>function(t,e,n){if(!(n instanceof KeyboardEvent))return;if(t.querySelector("details[open]"))return;const o=tt.get(e);if(!o||o.isComposing)return;const i=n.target instanceof Element&&"SUMMARY"===n.target.tagName;switch(n.key){case"Escape":t.hasAttribute("open")&&(dt(t),n.preventDefault(),n.stopPropagation());break;case"ArrowDown":{i&&!t.hasAttribute("open")&&t.setAttribute("open","");const e=rt(t,!0);e&&e.focus(),n.preventDefault()}break;case"ArrowUp":{i&&!t.hasAttribute("open")&&t.setAttribute("open","");const e=rt(t,!1);e&&e.focus(),n.preventDefault()}break;case"n":if(at&&n.ctrlKey){const e=rt(t,!0);e&&e.focus(),n.preventDefault()}break;case"p":if(at&&n.ctrlKey){const e=rt(t,!1);e&&e.focus(),n.preventDefault()}break;case" ":case"Enter":{const e=document.activeElement;e instanceof HTMLElement&&ut(e)&&e.closest("details")===t&&(n.preventDefault(),n.stopPropagation(),e.click())}}}(t,this,e))),nt(t,"toggle",(()=>ot(t,this)),{once:!0}),nt(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?nt(t,"mouseover",(()=>ot(t,this)),{once:!0}):et,...it(t)];tt.set(this,{subscriptions:n,loaded:!1,isComposing:!1})}disconnectedCallback(){const t=tt.get(this);if(t){tt.delete(this);for(const e of t.subscriptions)e.unsubscribe()}}}const tt=new WeakMap,et={unsubscribe(){}};function nt(t,e,n,o=!1){return t.addEventListener(e,n,o),{unsubscribe:()=>{t.removeEventListener(e,n,o)}}}function ot(t,e){const n=e.getAttribute("src");if(!n)return;const o=tt.get(e);if(!o)return;if(o.loaded)return;o.loaded=!0;const i=e.querySelector("include-fragment");i&&!i.hasAttribute("src")&&(i.addEventListener("loadend",(()=>st(t))),i.setAttribute("src",n))}function it(t){let e=!1;return[nt(t,"mousedown",(()=>e=!0)),nt(t,"keydown",(()=>e=!1)),nt(t,"toggle",(()=>{t.hasAttribute("open")&&(st(t)||e||function(t){const e=document.activeElement;if(e&&ut(e)&&t.contains(e))return;const n=rt(t,!0);n&&n.focus()}(t))}))]}function st(t){if(!t.hasAttribute("open"))return!1;const e=t.querySelector("details-menu [autofocus]");return!!e&&(e.focus(),!0)}function rt(t,e){const n=Array.from(t.querySelectorAll('[role^="menuitem"]:not([hidden]):not([disabled]):not([aria-disabled="true"])')),o=document.activeElement,i=o instanceof HTMLElement?n.indexOf(o):-1,s=e?n[i+1]:n[i-1],r=e?n[0]:n[n.length-1];return s||r}const at=navigator.userAgent.match(/Macintosh/);function ct(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 o=e.querySelector("input");if("LABEL"===e.tagName&&n===o)return;"LABEL"===e.tagName&&o&&!o.checked||lt(e,t)}else if("change"===e.type){const e=n.closest('[role="menuitemradio"], [role="menuitemcheckbox"]');e&<(e,t)}}function lt(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 o=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(o)n.textContent=o;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 o=(n===t).toString();e instanceof HTMLInputElement&&(o=e.indeterminate?"mixed":e.checked.toString()),n.setAttribute("aria-checked",o)}}(t,e),"menuitemcheckbox"!==t.getAttribute("role")&&dt(e),n.dispatchEvent(new CustomEvent("details-menu-selected",{detail:{relatedTarget:t}})))}function ut(t){const e=t.getAttribute("role");return"menuitem"===e||"menuitemcheckbox"===e||"menuitemradio"===e}function dt(t){if(!t.hasAttribute("open"))return;t.removeAttribute("open");const e=t.querySelector("summary");e&&e.focus()}function ht(t,e){const n=tt.get(t);n&&(n.isComposing="compositionstart"===e.type)}function ft(t,e,n,o){var i,s=arguments.length,r=s<3?e:null===o?o=Object.getOwnPropertyDescriptor(e,n):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,n,o);else for(var a=t.length-1;a>=0;a--)(i=t[a])&&(r=(s<3?i(r):s>3?i(e,n,r):i(e,n))||r);return s>3&&r&&Object.defineProperty(e,n,r),r}function mt(t,e,n,o){if("a"===n&&!o)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?o:"a"===n?o.call(t):o?o.value:e.get(t)}function pt(t,e,n,o,i){if("m"===o)throw new TypeError("Private method is not writable");if("a"===o&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===o?i.call(t,n):i?i.value=n:e.set(t,n),n}window.customElements.get("details-menu")||(window.DetailsMenuElement=DetailsMenuElement,window.customElements.define("details-menu",DetailsMenuElement));const bt=new WeakSet;function gt(t){Et(t),vt(t)}const wt=new WeakMap;function vt(t=document){if(wt.has(t))return wt.get(t);let e=!1;const n=new MutationObserver((t=>{for(const e of t)if("attributes"===e.type&&e.target instanceof Element)Tt(e.target);else if("childList"===e.type&&e.addedNodes.length)for(const t of e.addedNodes)t instanceof Element&&Et(t)}));n.observe(t,{childList:!0,subtree:!0,attributeFilter:["data-action"]});const o={get closed(){return e},unsubscribe(){e=!0,wt.delete(t),n.disconnect()}};return wt.set(t,o),o}function Et(t){for(const e of t.querySelectorAll("[data-action]"))Tt(e);t instanceof Element&&t.hasAttribute("data-action")&&Tt(t)}function yt(t){const e=t.currentTarget;for(const n of At(e))if(t.type===n.type){const o=e.closest(n.tag);bt.has(o)&&"function"==typeof o[n.method]&&o[n.method](t);const i=e.getRootNode();if(i instanceof ShadowRoot&&bt.has(i.host)&&i.host.matches(n.tag)){const e=i.host;"function"==typeof e[n.method]&&e[n.method](t)}}}function*At(t){for(const e of(t.getAttribute("data-action")||"").trim().split(/\s+/)){const t=e.lastIndexOf(":"),n=Math.max(0,e.lastIndexOf("#"))||e.length;yield{type:e.slice(0,t),tag:e.slice(t+1,n),method:e.slice(n+1)||"handleEvent"}||"handleEvent"}}function Tt(t){for(const e of At(t))t.addEventListener(e.type,yt)}const kt=t=>String("symbol"==typeof t?t.description:t).replace(/([A-Z]($|[a-z]))/g,"-$1").replace(/--/g,"-").replace(/^-|-$/,"").toLowerCase(),Lt=(t,e="property")=>{const n=kt(t);if(!n.includes("-"))throw new DOMException(`${e}: ${String(t)} is not a valid ${e} name`,"SyntaxError");return n};const xt=new WeakSet;function Mt(t,e){if(xt.has(t))return;xt.add(t);const n=Object.getPrototypeOf(t),o=n?.constructor?.attrPrefix??"data-";e||(e=Dt(n,"attr"));for(const n of e){const e=t[n],i=Lt(`${o}${n}`);let s={configurable:!0,get(){return this.getAttribute(i)||""},set(t){this.setAttribute(i,t||"")}};"number"==typeof e?s={configurable:!0,get(){return Number(this.getAttribute(i)||0)},set(t){this.setAttribute(i,t)}}:"boolean"==typeof e&&(s={configurable:!0,get(){return this.hasAttribute(i)},set(t){this.toggleAttribute(i,t)}}),Object.defineProperty(t,n,s),n in t&&!t.hasAttribute(i)&&s.set.call(t,e)}}const Ct=Symbol.for("catalyst");class St{constructor(t){const e=this,n=t.prototype.connectedCallback;t.prototype.connectedCallback=function(){e.connectedCallback(this,n)};const o=t.prototype.disconnectedCallback;t.prototype.disconnectedCallback=function(){e.disconnectedCallback(this,o)};const i=t.prototype.attributeChangedCallback;t.prototype.attributeChangedCallback=function(t,n,o){e.attributeChangedCallback(this,t,n,o,i)};let s=t.observedAttributes||[];Object.defineProperty(t,"observedAttributes",{configurable:!0,get(){return e.observedAttributes(this,s)},set(t){s=t}}),function(t){let e=t.observedAttributes||[];const n=t.attrPrefix??"data-",o=t=>Lt(`${n}${t}`);Object.defineProperty(t,"observedAttributes",{configurable:!0,get:()=>[...Dt(t.prototype,"attr")].map(o).concat(e),set(t){e=t}})}(t),function(t){const e=kt(t.name).replace(/-element$/,"");try{window.customElements.define(e,t),window[t.name]=customElements.get(e)}catch(t){if(!(t instanceof DOMException&&"NotSupportedError"===t.name))throw t}}(t)}observedAttributes(t,e){return e}connectedCallback(t,e){t.toggleAttribute("data-catalyst",!0),customElements.upgrade(t),function(t){for(const e of t.querySelectorAll("template[data-shadowroot]"))e.parentElement===t&&t.attachShadow({mode:"closed"===e.getAttribute("data-shadowroot")?"closed":"open"}).append(e.content.cloneNode(!0))}(t),Mt(t),function(t){bt.add(t),t.shadowRoot&>(t.shadowRoot),Et(t),vt(t.ownerDocument)}(t),e?.call(t),t.shadowRoot&>(t.shadowRoot)}disconnectedCallback(t,e){e?.call(t)}attributeChangedCallback(t,e,n,o,i){Mt(t),"data-catalyst"!==e&&i&&i.call(t,e,n,o)}}function Dt(t,e){if(!Object.prototype.hasOwnProperty.call(t,Ct)){const e=t[Ct],n=t[Ct]=new Map;if(e)for(const[t,o]of e)n.set(t,new Set(o))}const n=t[Ct];return n.has(e)||n.set(e,new Set),n.get(e)}function Ht(t,e){Dt(t,"target").add(e),Object.defineProperty(t,e,{configurable:!0,get(){return function(t,e){const n=t.tagName.toLowerCase();if(t.shadowRoot)for(const o of t.shadowRoot.querySelectorAll(`[data-target~="${n}.${e}"]`))if(!o.closest(n))return o;for(const o of t.querySelectorAll(`[data-target~="${n}.${e}"]`))if(o.closest(n)===t)return o}(this,e)}})}function Ft(t,e=0,{start:n=!1,middle:o=!1,once:i=!1}={}){return function(t,e=0,{start:n=!0,middle:o=!0,once:i=!1}={}){let s,r=0,a=!1;function c(...l){if(a)return;const u=Date.now()-r;r=Date.now(),n?(n=!1,t.apply(this,l),i&&c.cancel()):(o&&u{r=Date.now(),t.apply(this,l),i&&c.cancel()}),o?e-u:e))}return c.cancel=()=>{clearTimeout(s),a=!0},c}(t,e,{start:n,middle:o,once:i})}new Promise((t=>{"loading"!==document.readyState?t():document.addEventListener("readystatechange",(()=>t()),{once:!0})})),new Promise((t=>{const e=new AbortController;e.signal.addEventListener("abort",(()=>t()));const n={once:!0,passive:!0,signal:e.signal},o=()=>e.abort();document.addEventListener("mousedown",o,n),document.addEventListener("touchstart",o,n),document.addEventListener("keydown",o,n),document.addEventListener("pointerdown",o,n)}));let Rt=class ToggleSwitchElement extends HTMLElement{get src(){const t=this.getAttribute("src");if(!t)return null;const e=this.ownerDocument.createElement("a");return e.href=t,e.href}get csrf(){const t=this.querySelector("[data-csrf]");return this.getAttribute("csrf")||t instanceof HTMLInputElement&&t.value||null}get csrfField(){return this.getAttribute("csrf-field")||"authenticity_token"}isRemote(){return null!=this.src}toggle(){this.isRemote()?(this.setLoadingState(),this.check()):this.performToggle()}turnOn(){this.isDisabled()||(this.switch.setAttribute("aria-checked","true"),this.classList.add("ToggleSwitch--checked"))}turnOff(){this.isDisabled()||(this.switch.setAttribute("aria-checked","false"),this.classList.remove("ToggleSwitch--checked"))}isOn(){return"true"===this.switch.getAttribute("aria-checked")}isOff(){return!this.isOn()}isDisabled(){return"true"===this.switch.getAttribute("aria-disabled")}disable(){this.switch.setAttribute("aria-disabled","true")}enable(){this.switch.setAttribute("aria-disabled","false")}performToggle(){this.isOn()?this.turnOff():this.turnOn()}setLoadingState(){this.disable(),this.errorIcon.setAttribute("hidden","hidden"),this.loadingSpinner.removeAttribute("hidden")}setSuccessState(){this.setFinishedState(!1)}setErrorState(){this.setFinishedState(!0)}setFinishedState(t){t&&this.errorIcon.removeAttribute("hidden"),this.loadingSpinner.setAttribute("hidden","hidden"),this.enable()}async check(){const t=new FormData;this.csrf&&t.append(this.csrfField,this.csrf),t.append("value",this.isOn()?"1":"0");try{(await fetch(this.src,{credentials:"same-origin",method:"POST",body:t})).ok?(this.setSuccessState(),this.performToggle()):this.setErrorState()}catch(t){this.setErrorState()}}};ft([Ht],Rt.prototype,"switch",void 0),ft([Ht],Rt.prototype,"loadingSpinner",void 0),ft([Ht],Rt.prototype,"errorIcon",void 0),ft([function(t=0,e={}){return(n,o,i)=>{if(!i||"function"!=typeof i.value)throw new Error("debounce can only decorate functions");const s=i.value;i.value=Ft(s,t,e),Object.defineProperty(n,o,i)}}(300)],Rt.prototype,"check",null),Rt=ft([function(t){new St(t)}],Rt);const $t={"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"]},Ot={start:["end","center"],end:["start","center"],center:["end","start"]};function It(t,e,n={}){const o=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),i=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,o=n.getBoundingClientRect(),i=getComputedStyle(n),[s,r,a,c]=[i.borderTopWidth,i.borderLeftWidth,i.borderRightWidth,i.borderBottomWidth].map((t=>parseInt(t,10)||0));return{top:o.top+s,left:o.left+r,width:o.width-a-r,height:Math.max(o.height-s-c,n===document.body?window.innerHeight:-1/0)}}(o),s=getComputedStyle(o),r=o.getBoundingClientRect(),[a,c]=[s.borderTopWidth,s.borderLeftWidth].map((t=>parseInt(t,10)||0));return function(t,e,n,o,{side:i,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=Yt(n,o,i,s,a,c),d=i,h=s;if(u.top-=e.top,u.left-=e.left,!r){const r=$t[i];let f=0;if(r){let t=i;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})}(i,{top:r.top+a,left:r.left+c},t.getBoundingClientRect(),e instanceof Element?e.getBoundingClientRect():e,function(t={}){var e,n,o,i,s;const r=null!==(e=t.side)&&void 0!==e?e:Wt,a=null!==(n=t.align)&&void 0!==n?n:qt;return{side:r,align:a,anchorOffset:null!==(o=t.anchorOffset)&&void 0!==o?o:"inside-center"===r?0:Pt,alignmentOffset:null!==(i=t.alignmentOffset)&&void 0!==i?i:"center"!==a&&r.startsWith("inside")?Nt:0,allowOutOfBounds:null!==(s=t.allowOutOfBounds)&&void 0!==s?s:Bt}}(n))}const Wt="outside-bottom",qt="start",Pt=4,Nt=4,Bt=!1;function Yt(t,e,n,o,i,s){const r=e.left+e.width,a=e.top+e.height;let c=-1,l=-1;return"outside-top"===n?c=e.top-i-t.height:"outside-bottom"===n?c=a+i:"outside-left"===n?l=e.left-i-t.width:"outside-right"===n&&(l=r+i),"outside-top"!==n&&"outside-bottom"!==n||(l="start"===o?e.left+s:"center"===o?e.left-(t.width-e.width)/2+s:r-t.width-s),"outside-left"!==n&&"outside-right"!==n||(c="start"===o?e.top+s:"center"===o?e.top-(t.height-e.height)/2+s:a-t.height-s),"inside-top"===n?c=e.top+i:"inside-bottom"===n?c=a-i-t.height:"inside-left"===n?l=e.left+i:"inside-right"===n?l=r-i-t.width:"inside-center"===n&&(l=(r+e.left)/2-t.width/2+i),"inside-top"===n||"inside-bottom"===n?l="start"===o?e.left+s:"center"===o?e.left-(t.width-e.width)/2+s:r-t.width-s:"inside-left"!==n&&"inside-right"!==n&&"inside-center"!==n||(c="start"===o?e.top+s:"center"===o?e.top-(t.height-e.height)/2+s:a-t.height-s),{top:c,left:l}}function Ut(t,e,n,o){return"outside-top"===t||"outside-bottom"===t?e.topn.height+n.top:e.leftn.width+n.left}function Xt(t,e,n,o){return"end"===t?e.leftn.left+n.width||e.leftt instanceof HTMLElement&&s(t,i)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP});let a=null;if(!e.reverse&&s(t,i)&&(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,i)&&(yield t)}(t,{reverse:e,strict:!0,onlyTabbable:!0}).next().value}function jt(t,e=!1){const n=["BUTTON","INPUT","SELECT","TEXTAREA","OPTGROUP","OPTION","FIELDSET"].includes(t.tagName)&&t.disabled,o=t.hidden,i=t instanceof HTMLInputElement&&"hidden"===t.type,s=t.classList.contains("sentinel");if(n||o||i||s)return!1;if(e){const e=0===t.offsetWidth||0===t.offsetHeight,n=["hidden","collapse"].includes(getComputedStyle(t).visibility),o=0===t.getClientRects().length;if(e||n||o)return!1}return null!=t.getAttribute("tabindex")||!(t instanceof HTMLAnchorElement&&null==t.getAttribute("href"))&&-1!==t.tabIndex}function zt(t,e=!1){return jt(t,e)&&"-1"!==t.getAttribute("tabindex")}let Vt=!1;function Zt(){}try{const t=Object.create({},{signal:{get(){Vt=!0}}});window.addEventListener("test",Zt,t),window.removeEventListener("test",Zt,t)}catch(t){}Vt||(function(){if("undefined"==typeof window)return;const t=EventTarget.prototype.addEventListener;EventTarget.prototype.addEventListener=function(e,n,o){return"object"==typeof o&&"signal"in o&&o.signal instanceof AbortSignal&&t.call(o.signal,"abort",(()=>{this.removeEventListener(e,n,o)})),t.call(this,e,n,o)}}(),Vt=!0);const _t=[];let Jt;function Gt(t,e,n){const o=new AbortController,i=null!=n?n:o.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=Kt(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&&zt(a)&&t.contains(a))return void a.focus();if(e&&t.contains(e))return void e.focus();{const e=Kt(t);return void(null==e||e.focus())}}}r.setAttribute("class","sentinel"),r.setAttribute("tabindex","0"),r.setAttribute("aria-hidden","true"),r.onfocus=()=>{const e=Kt(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}(i);if(Jt){const t=Jt;Jt.container.setAttribute("data-focus-trap","suspended"),Jt.controller.abort(),_t.push(t)}l.signal.addEventListener("abort",(()=>{Jt=void 0})),i.addEventListener("abort",(()=>{t.removeAttribute("data-focus-trap");const e=t.getElementsByClassName("sentinel");for(;e.length>0;)e[0].remove();const n=_t.findIndex((e=>e.container===t));n>=0&&_t.splice(n,1),function(){const t=_t.pop();t&&Gt(t.container,t.initialFocus,t.originalSignal)}()})),document.addEventListener("focus",(t=>{c(t.target)}),{signal:l.signal,capture:!0}),c(document.activeElement),Jt={container:t,controller:l,initialFocus:e,originalSignal:i};const u=_t.findIndex((e=>e.container===t));if(u>=0&&_t.splice(u,1),!n)return o}var Qt,te,ee,ne,oe,ie,se;const re=["tooltip-n","tooltip-s","tooltip-e","tooltip-w","tooltip-ne","tooltip-se","tooltip-nw","tooltip-sw"];class ToolTipElement extends HTMLElement{constructor(){super(...arguments),Qt.add(this),te.set(this,void 0),ee.set(this,"center"),ne.set(this,"outside-bottom"),oe.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)}set hiddenFromView(t){this.classList.toggle("sr-only",t),this.isConnected&&mt(this,Qt,"m",ie).call(this)}get hiddenFromView(){return this.classList.contains("sr-only")}connectedCallback(){var t;if(!this.shadowRoot){this.attachShadow({mode:"open"}).innerHTML=`\n \n \n `}if(this.hiddenFromView=!0,pt(this,oe,!0,"f"),this.id||(this.id=`tooltip-${Date.now()}-${(1e4*Math.random()).toFixed(0)}`),!this.control)return;this.setAttribute("role","tooltip"),null===(t=mt(this,te,"f"))||void 0===t||t.abort(),pt(this,te,new AbortController,"f");const{signal:e}=mt(this,te,"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}),mt(this,Qt,"m",ie).call(this)}disconnectedCallback(){var t;null===(t=mt(this,te,"f"))||void 0===t||t.abort()}handleEvent(t){this.control&&("mouseenter"!==t.type&&"focus"!==t.type||!this.hiddenFromView?"blur"===t.type||"mouseleave"===t.type&&t.relatedTarget!==this.control&&t.relatedTarget!==this?this.hiddenFromView=!0:"keydown"!==t.type||"Escape"!==t.key||this.hiddenFromView||(this.hiddenFromView=!0):this.hiddenFromView=!1)}attributeChangedCallback(t){if("id"===t||"data-type"===t){if(!this.id||!this.control)return;if("label"===this.type){let t=this.control.getAttribute("aria-labelledby");t=t?`${t} ${this.id}`:this.id,this.control.setAttribute("aria-labelledby",t),this.setAttribute("aria-hidden","true")}else{let t=this.control.getAttribute("aria-describedby");t=t?`${t} ${this.id}`:this.id,this.control.setAttribute("aria-describedby",t)}}else if("data-direction"===t){this.classList.remove(...re);const t=this.direction;"n"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-top","f")):"ne"===t?(pt(this,ee,"start","f"),pt(this,ne,"outside-top","f")):"e"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-right","f")):"se"===t?(pt(this,ee,"start","f"),pt(this,ne,"outside-bottom","f")):"s"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-bottom","f")):"sw"===t?(pt(this,ee,"end","f"),pt(this,ne,"outside-bottom","f")):"w"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-left","f")):"nw"===t&&(pt(this,ee,"end","f"),pt(this,ne,"outside-top","f"))}}}var ae,ce,le,ue,de,he,fe;function me(t){document.activeElement!==t&&(null==t||t.focus())}te=new WeakMap,ee=new WeakMap,ne=new WeakMap,oe=new WeakMap,Qt=new WeakSet,ie=function(){if(this.hiddenFromView)this.classList.remove("tooltip-open",...re);else{this.classList.add("tooltip-open");for(const t of this.ownerDocument.querySelectorAll(this.tagName))t!==this&&(t.hiddenFromView=!0);mt(this,Qt,"m",se).call(this)}},se=function(){if(!this.control)return;if(!mt(this,oe,"f")||this.hiddenFromView)return;this.style.left="0px";const t=It(this,this.control,{side:mt(this,ne,"f"),align:mt(this,ee,"f"),anchorOffset:10}),e=t.anchorSide,n=t.anchorAlign;this.style.top=`${t.top}px`,this.style.left=`${t.left}px`;let o="s";o="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-${o}`)},ToolTipElement.observedAttributes=["data-type","data-direction","id"],window.customElements.get("tool-tip")||(window.ToolTipElement=ToolTipElement,window.customElements.define("tool-tip",ToolTipElement));class ModalDialogElement extends HTMLElement{constructor(){super(...arguments),ae.add(this),ce.set(this,new AbortController),le.set(this,null),ue.set(this,void 0),de.set(this,!0)}get open(){return this.hasAttribute("open")}set open(t){var e,n,o,i;if(t){if(this.open)return;this.setAttribute("open",""),null===(e=mt(this,ae,"a",he))||void 0===e||e.classList.remove("Overlay--hidden"),document.body.style.overflow="hidden",mt(this,ce,"f").signal.aborted&&pt(this,ce,new AbortController,"f"),Gt(this,void 0,mt(this,ce,"f").signal)}else{if(!this.open)return;this.removeAttribute("open"),null===(n=mt(this,ae,"a",he))||void 0===n||n.classList.add("Overlay--hidden"),document.body.style.overflow="initial",mt(this,ce,"f").abort();const t=(null===(o=mt(this,ue,"f"))||void 0===o?void 0:o.closest("details"))||(null===(i=mt(this,ue,"f"))||void 0===i?void 0:i.closest("action-menu"));me(t?Kt(t):mt(this,ue,"f")),pt(this,ue,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}=pt(this,le,new AbortController,"f");this.ownerDocument.addEventListener("click",(t=>{const e=t.target,n=e.closest(this.tagName)!==this,o=null==e?void 0:e.closest("button");if(!o)return void(n&&this.close());let i=o.getAttribute("data-close-dialog-id");i===this.id&&this.close(),i=o.getAttribute("data-submit-dialog-id"),i===this.id&&this.close(!0),i=o.getAttribute("data-show-dialog-id"),i===this.id&&(t.stopPropagation(),pt(this,ue,o,"f"),this.show())}),{signal:t}),this.addEventListener("keydown",(t=>mt(this,ae,"m",fe).call(this,t)))}disconnectedCallback(){var t;null===(t=mt(this,le,"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}}ce=new WeakMap,le=new WeakMap,ue=new WeakMap,de=new WeakMap,ae=new WeakSet,he=function(){var t;return(null===(t=this.parentElement)||void 0===t?void 0:t.hasAttribute("data-modal-dialog-overlay"))?this.parentElement:null},fe=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=ModalDialogElement,window.customElements.define("modal-dialog",ModalDialogElement)); //# 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 45c5c0a83a..90b78716cf 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/@github/catalyst/lib/bind.js","../../../node_modules/@github/catalyst/lib/dasherize.js","../../../node_modules/@github/catalyst/lib/attr.js","../../../node_modules/@github/catalyst/lib/core.js","../../../node_modules/@github/catalyst/lib/register.js","../../../node_modules/@github/catalyst/lib/auto-shadow-root.js","../../../node_modules/@github/catalyst/lib/target.js","../../../node_modules/@github/catalyst/lib/findtarget.js","../../../node_modules/@github/mini-throttle/dist/index.js","../../../node_modules/@github/catalyst/lib/lazy-define.js","../../components/primer/alpha/toggle-switch-element.ts","../../../node_modules/@github/mini-throttle/dist/decorators.js","../../../node_modules/@github/catalyst/lib/controller.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 controllers = new WeakSet();\n/*\n * Bind `[data-action]` elements from the DOM to their actions.\n *\n */\nexport function bind(controller) {\n controllers.add(controller);\n if (controller.shadowRoot)\n bindShadow(controller.shadowRoot);\n bindElements(controller);\n listenForBind(controller.ownerDocument);\n}\nexport function bindShadow(root) {\n bindElements(root);\n listenForBind(root);\n}\nconst observers = new WeakMap();\n/**\n * Set up observer that will make sure any actions that are dynamically\n * injected into `el` will be bound to it's controller.\n *\n * This returns a Subscription object which you can call `unsubscribe()` on to\n * stop further live updates.\n */\nexport function listenForBind(el = document) {\n if (observers.has(el))\n return observers.get(el);\n let closed = false;\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.target instanceof Element) {\n bindActions(mutation.target);\n }\n else if (mutation.type === 'childList' && mutation.addedNodes.length) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element) {\n bindElements(node);\n }\n }\n }\n }\n });\n observer.observe(el, { childList: true, subtree: true, attributeFilter: ['data-action'] });\n const subscription = {\n get closed() {\n return closed;\n },\n unsubscribe() {\n closed = true;\n observers.delete(el);\n observer.disconnect();\n }\n };\n observers.set(el, subscription);\n return subscription;\n}\nfunction bindElements(root) {\n for (const el of root.querySelectorAll('[data-action]')) {\n bindActions(el);\n }\n // Also bind the controller to itself\n if (root instanceof Element && root.hasAttribute('data-action')) {\n bindActions(root);\n }\n}\n// Bind a single function to all events to avoid anonymous closure performance penalty.\nfunction handleEvent(event) {\n const el = event.currentTarget;\n for (const binding of bindings(el)) {\n if (event.type === binding.type) {\n const controller = el.closest(binding.tag);\n if (controllers.has(controller) && typeof controller[binding.method] === 'function') {\n controller[binding.method](event);\n }\n const root = el.getRootNode();\n if (root instanceof ShadowRoot && controllers.has(root.host) && root.host.matches(binding.tag)) {\n const shadowController = root.host;\n if (typeof shadowController[binding.method] === 'function') {\n shadowController[binding.method](event);\n }\n }\n }\n }\n}\nfunction* bindings(el) {\n for (const action of (el.getAttribute('data-action') || '').trim().split(/\\s+/)) {\n const eventSep = action.lastIndexOf(':');\n const methodSep = Math.max(0, action.lastIndexOf('#')) || action.length;\n yield {\n type: action.slice(0, eventSep),\n tag: action.slice(eventSep + 1, methodSep),\n method: action.slice(methodSep + 1) || 'handleEvent'\n } || 'handleEvent';\n }\n}\nfunction bindActions(el) {\n for (const binding of bindings(el)) {\n el.addEventListener(binding.type, handleEvent);\n }\n}\n//# sourceMappingURL=bind.js.map","export const dasherize = (str) => String(typeof str === 'symbol' ? str.description : str)\n .replace(/([A-Z]($|[a-z]))/g, '-$1')\n .replace(/--/g, '-')\n .replace(/^-|-$/, '')\n .toLowerCase();\nexport const mustDasherize = (str, type = 'property') => {\n const dashed = dasherize(str);\n if (!dashed.includes('-')) {\n throw new DOMException(`${type}: ${String(str)} is not a valid ${type} name`, 'SyntaxError');\n }\n return dashed;\n};\n//# sourceMappingURL=dasherize.js.map","import { mustDasherize } from './dasherize.js';\nimport { meta } from './core.js';\nconst attrKey = 'attr';\n/**\n * Attr is a decorator which tags a property as one to be initialized via\n * `initializeAttrs`.\n *\n * The signature is typed such that the property must be one of a String,\n * Number or Boolean. This matches the behavior of `initializeAttrs`.\n */\nexport function attr(proto, key) {\n meta(proto, attrKey).add(key);\n}\n/**\n * initializeAttrs is called with a set of class property names (if omitted, it\n * will look for any properties tagged with the `@attr` decorator). With this\n * list it defines property descriptors for each property that map to `data-*`\n * attributes on the HTMLElement instance.\n *\n * It works around Native Class Property semantics - which are equivalent to\n * calling `Object.defineProperty` on the instance upon creation, but before\n * `constructor()` is called.\n *\n * If a class property is assigned to the class body, it will infer the type\n * (using `typeof`) and define an appropriate getter/setter combo that aligns\n * to that type. This means class properties assigned to Numbers can only ever\n * be Numbers, assigned to Booleans can only ever be Booleans, and assigned to\n * Strings can only ever be Strings.\n *\n * This is automatically called as part of `@controller`. If a class uses the\n * `@controller` decorator it should not call this manually.\n */\nconst initialized = new WeakSet();\nexport function initializeAttrs(instance, names) {\n if (initialized.has(instance))\n return;\n initialized.add(instance);\n const proto = Object.getPrototypeOf(instance);\n const prefix = proto?.constructor?.attrPrefix ?? 'data-';\n if (!names)\n names = meta(proto, attrKey);\n for (const key of names) {\n const value = instance[key];\n const name = mustDasherize(`${prefix}${key}`);\n let descriptor = {\n configurable: true,\n get() {\n return this.getAttribute(name) || '';\n },\n set(newValue) {\n this.setAttribute(name, newValue || '');\n }\n };\n if (typeof value === 'number') {\n descriptor = {\n configurable: true,\n get() {\n return Number(this.getAttribute(name) || 0);\n },\n set(newValue) {\n this.setAttribute(name, newValue);\n }\n };\n }\n else if (typeof value === 'boolean') {\n descriptor = {\n configurable: true,\n get() {\n return this.hasAttribute(name);\n },\n set(newValue) {\n this.toggleAttribute(name, newValue);\n }\n };\n }\n Object.defineProperty(instance, key, descriptor);\n if (key in instance && !instance.hasAttribute(name)) {\n descriptor.set.call(instance, value);\n }\n }\n}\nexport function defineObservedAttributes(classObject) {\n let observed = classObject.observedAttributes || [];\n const prefix = classObject.attrPrefix ?? 'data-';\n const attrToAttributeName = (name) => mustDasherize(`${prefix}${name}`);\n Object.defineProperty(classObject, 'observedAttributes', {\n configurable: true,\n get() {\n return [...meta(classObject.prototype, attrKey)].map(attrToAttributeName).concat(observed);\n },\n set(attributes) {\n observed = attributes;\n }\n });\n}\n//# sourceMappingURL=attr.js.map","import { register } from './register.js';\nimport { bind, bindShadow } from './bind.js';\nimport { autoShadowRoot } from './auto-shadow-root.js';\nimport { defineObservedAttributes, initializeAttrs } from './attr.js';\nconst symbol = Symbol.for('catalyst');\nexport class CatalystDelegate {\n constructor(classObject) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const delegate = this;\n const connectedCallback = classObject.prototype.connectedCallback;\n classObject.prototype.connectedCallback = function () {\n delegate.connectedCallback(this, connectedCallback);\n };\n const disconnectedCallback = classObject.prototype.disconnectedCallback;\n classObject.prototype.disconnectedCallback = function () {\n delegate.disconnectedCallback(this, disconnectedCallback);\n };\n const attributeChangedCallback = classObject.prototype.attributeChangedCallback;\n classObject.prototype.attributeChangedCallback = function (name, oldValue, newValue) {\n delegate.attributeChangedCallback(this, name, oldValue, newValue, attributeChangedCallback);\n };\n let observedAttributes = classObject.observedAttributes || [];\n Object.defineProperty(classObject, 'observedAttributes', {\n configurable: true,\n get() {\n return delegate.observedAttributes(this, observedAttributes);\n },\n set(attributes) {\n observedAttributes = attributes;\n }\n });\n defineObservedAttributes(classObject);\n register(classObject);\n }\n observedAttributes(instance, observedAttributes) {\n return observedAttributes;\n }\n connectedCallback(instance, connectedCallback) {\n instance.toggleAttribute('data-catalyst', true);\n customElements.upgrade(instance);\n autoShadowRoot(instance);\n initializeAttrs(instance);\n bind(instance);\n connectedCallback?.call(instance);\n if (instance.shadowRoot)\n bindShadow(instance.shadowRoot);\n }\n disconnectedCallback(element, disconnectedCallback) {\n disconnectedCallback?.call(element);\n }\n attributeChangedCallback(instance, name, oldValue, newValue, attributeChangedCallback) {\n initializeAttrs(instance);\n if (name !== 'data-catalyst' && attributeChangedCallback) {\n attributeChangedCallback.call(instance, name, oldValue, newValue);\n }\n }\n}\nexport function meta(proto, name) {\n if (!Object.prototype.hasOwnProperty.call(proto, symbol)) {\n const parent = proto[symbol];\n const map = (proto[symbol] = new Map());\n if (parent) {\n for (const [key, value] of parent) {\n map.set(key, new Set(value));\n }\n }\n }\n const map = proto[symbol];\n if (!map.has(name))\n map.set(name, new Set());\n return map.get(name);\n}\n//# sourceMappingURL=core.js.map","import { dasherize } from './dasherize.js';\n/**\n * Register the controller as a custom element.\n *\n * The classname is converted to a approriate tag name.\n *\n * Example: HelloController => hello-controller\n */\nexport function register(classObject) {\n const name = dasherize(classObject.name).replace(/-element$/, '');\n try {\n window.customElements.define(name, classObject);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n window[classObject.name] = customElements.get(name);\n }\n catch (e) {\n // The only reason for window.customElements.define to throw a `NotSupportedError`\n // is if the element has already been defined.\n if (!(e instanceof DOMException && e.name === 'NotSupportedError'))\n throw e;\n }\n return classObject;\n}\n//# sourceMappingURL=register.js.map","export function autoShadowRoot(element) {\n for (const template of element.querySelectorAll('template[data-shadowroot]')) {\n if (template.parentElement === element) {\n element\n .attachShadow({\n mode: template.getAttribute('data-shadowroot') === 'closed' ? 'closed' : 'open'\n })\n .append(template.content.cloneNode(true));\n }\n }\n}\n//# sourceMappingURL=auto-shadow-root.js.map","import { findTarget, findTargets } from './findtarget.js';\nimport { meta } from './core.js';\n/**\n * Target is a decorator which - when assigned to a property field on the\n * class - will override that class field, turning it into a Getter which\n * returns a call to `findTarget(this, key)` where `key` is the name of the\n * property field. In other words, `@target foo` becomes a getter for\n * `findTarget(this, 'foo')`.\n */\nexport function target(proto, key) {\n meta(proto, 'target').add(key);\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n return findTarget(this, key);\n }\n });\n}\n/**\n * Targets is a decorator which - when assigned to a property field on the\n * class - will override that class field, turning it into a Getter which\n * returns a call to `findTargets(this, key)` where `key` is the name of the\n * property field. In other words, `@targets foo` becomes a getter for\n * `findTargets(this, 'foo')`.\n */\nexport function targets(proto, key) {\n meta(proto, 'targets').add(key);\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n return findTargets(this, key);\n }\n });\n}\n//# sourceMappingURL=target.js.map","/**\n * findTarget will run `querySelectorAll` against the given controller, plus\n * its shadowRoot, returning any the first child that:\n *\n * - Matches the selector of `[data-target~=\"tag.name\"]` where tag is the\n * tagName of the given HTMLElement, and `name` is the given `name` argument.\n *\n * - Closest ascendant of the element, that matches the tagname of the\n * controller, is the specific instance of the controller itself - in other\n * words it is not nested in other controllers of the same type.\n *\n */\nexport function findTarget(controller, name) {\n const tag = controller.tagName.toLowerCase();\n if (controller.shadowRoot) {\n for (const el of controller.shadowRoot.querySelectorAll(`[data-target~=\"${tag}.${name}\"]`)) {\n if (!el.closest(tag))\n return el;\n }\n }\n for (const el of controller.querySelectorAll(`[data-target~=\"${tag}.${name}\"]`)) {\n if (el.closest(tag) === controller)\n return el;\n }\n}\nexport function findTargets(controller, name) {\n const tag = controller.tagName.toLowerCase();\n const targets = [];\n if (controller.shadowRoot) {\n for (const el of controller.shadowRoot.querySelectorAll(`[data-targets~=\"${tag}.${name}\"]`)) {\n if (!el.closest(tag))\n targets.push(el);\n }\n }\n for (const el of controller.querySelectorAll(`[data-targets~=\"${tag}.${name}\"]`)) {\n if (el.closest(tag) === controller)\n targets.push(el);\n }\n return targets;\n}\n//# sourceMappingURL=findtarget.js.map","export function throttle(callback, wait = 0, { start = true, middle = true, once = false } = {}) {\n let last = 0;\n let timer;\n let cancelled = false;\n function fn(...args) {\n if (cancelled)\n return;\n const delta = Date.now() - last;\n last = Date.now();\n if (start) {\n start = false;\n callback.apply(this, args);\n if (once)\n fn.cancel();\n }\n else if ((middle && delta < wait) || !middle) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n last = Date.now();\n callback.apply(this, args);\n if (once)\n fn.cancel();\n }, !middle ? wait : wait - delta);\n }\n }\n fn.cancel = () => {\n clearTimeout(timer);\n cancelled = true;\n };\n return fn;\n}\nexport function debounce(callback, wait = 0, { start = false, middle = false, once = false } = {}) {\n return throttle(callback, wait, { start, middle, once });\n}\n","const dynamicElements = new Map();\nconst ready = new Promise(resolve => {\n if (document.readyState !== 'loading') {\n resolve();\n }\n else {\n document.addEventListener('readystatechange', () => resolve(), { once: true });\n }\n});\nconst firstInteraction = new Promise(resolve => {\n const controller = new AbortController();\n controller.signal.addEventListener('abort', () => resolve());\n const listenerOptions = { once: true, passive: true, signal: controller.signal };\n const handler = () => controller.abort();\n document.addEventListener('mousedown', handler, listenerOptions);\n // eslint-disable-next-line github/require-passive-events\n document.addEventListener('touchstart', handler, listenerOptions);\n document.addEventListener('keydown', handler, listenerOptions);\n document.addEventListener('pointerdown', handler, listenerOptions);\n});\nconst visible = (tagName) => new Promise(resolve => {\n const observer = new IntersectionObserver(entries => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n resolve();\n observer.disconnect();\n return;\n }\n }\n }, {\n // Currently the threshold is set to 256px from the bottom of the viewport\n // with a threshold of 0.1. This means the element will not load until about\n // 2 keyboard-down-arrow presses away from being visible in the viewport,\n // giving us some time to fetch it before the contents are made visible\n rootMargin: '0px 0px 256px 0px',\n threshold: 0.01\n });\n for (const el of document.querySelectorAll(tagName)) {\n observer.observe(el);\n }\n});\nconst strategies = {\n ready: () => ready,\n firstInteraction: () => firstInteraction,\n visible\n};\nconst timers = new WeakMap();\nfunction scan(node) {\n cancelAnimationFrame(timers.get(node) || 0);\n timers.set(node, requestAnimationFrame(() => {\n for (const tagName of dynamicElements.keys()) {\n const child = node.matches(tagName) ? node : node.querySelector(tagName);\n if (customElements.get(tagName) || child) {\n const strategyName = (child?.getAttribute('data-load-on') || 'ready');\n const strategy = strategyName in strategies ? strategies[strategyName] : strategies.ready;\n // eslint-disable-next-line github/no-then\n for (const cb of dynamicElements.get(tagName) || [])\n strategy(tagName).then(cb);\n dynamicElements.delete(tagName);\n timers.delete(node);\n }\n }\n }));\n}\nlet elementLoader;\nexport function lazyDefine(tagName, callback) {\n if (!dynamicElements.has(tagName))\n dynamicElements.set(tagName, new Set());\n dynamicElements.get(tagName).add(callback);\n scan(document.body);\n if (!elementLoader) {\n elementLoader = new MutationObserver(mutations => {\n if (!dynamicElements.size)\n return;\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element)\n scan(node);\n }\n }\n });\n elementLoader.observe(document, { subtree: true, childList: true });\n }\n}\n//# sourceMappingURL=lazy-define.js.map","/* eslint-disable custom-elements/expose-class-on-global */\n/* eslint-disable custom-elements/define-tag-after-class-definition */\n\nimport {controller, target} from '@github/catalyst'\nimport {debounce} from '@github/mini-throttle/decorators'\n\n@controller\nexport class ToggleSwitchElement extends HTMLElement {\n @target switch: HTMLElement\n @target loadingSpinner: HTMLElement\n @target errorIcon: HTMLElement\n\n get src(): string | null {\n const src = this.getAttribute('src')\n if (!src) return null\n\n const link = this.ownerDocument.createElement('a')\n link.href = src\n return link.href\n }\n\n get csrf(): string | null {\n const csrfElement = this.querySelector('[data-csrf]')\n return this.getAttribute('csrf') || (csrfElement instanceof HTMLInputElement && csrfElement.value) || null\n }\n\n get csrfField(): string {\n // the authenticity token is passed into the element and is not generated in js land\n\n return this.getAttribute('csrf-field') || 'authenticity_token'\n }\n\n isRemote(): boolean {\n return this.src != null\n }\n\n toggle() {\n if (this.isRemote()) {\n this.setLoadingState()\n this.check()\n } else {\n this.performToggle()\n }\n }\n\n turnOn(): void {\n if (this.isDisabled()) {\n return\n }\n\n this.switch.setAttribute('aria-checked', 'true')\n this.classList.add('ToggleSwitch--checked')\n }\n\n turnOff(): void {\n if (this.isDisabled()) {\n return\n }\n\n this.switch.setAttribute('aria-checked', 'false')\n this.classList.remove('ToggleSwitch--checked')\n }\n\n isOn(): boolean {\n return this.switch.getAttribute('aria-checked') === 'true'\n }\n\n isOff(): boolean {\n return !this.isOn()\n }\n\n isDisabled(): boolean {\n return this.switch.getAttribute('aria-disabled') === 'true'\n }\n\n disable(): void {\n this.switch.setAttribute('aria-disabled', 'true')\n }\n\n enable(): void {\n this.switch.setAttribute('aria-disabled', 'false')\n }\n\n private performToggle(): void {\n if (this.isOn()) {\n this.turnOff()\n } else {\n this.turnOn()\n }\n }\n\n private setLoadingState(): void {\n this.disable()\n this.errorIcon.setAttribute('hidden', 'hidden')\n this.loadingSpinner.removeAttribute('hidden')\n }\n\n private setSuccessState(): void {\n this.setFinishedState(false)\n }\n\n private setErrorState(): void {\n this.setFinishedState(true)\n }\n\n private setFinishedState(error: boolean): void {\n if (error) {\n this.errorIcon.removeAttribute('hidden')\n }\n\n this.loadingSpinner.setAttribute('hidden', 'hidden')\n this.enable()\n }\n\n @debounce(300)\n private async check() {\n const body = new FormData()\n\n if (this.csrf) {\n body.append(this.csrfField, this.csrf)\n }\n\n body.append('value', this.isOn() ? '1' : '0')\n\n try {\n const response = await fetch(this.src!, {\n credentials: 'same-origin',\n method: 'POST',\n body\n })\n if (response.ok) {\n this.setSuccessState()\n this.performToggle()\n } else {\n this.setErrorState()\n }\n } catch (error) {\n this.setErrorState()\n }\n }\n}\n\ndeclare global {\n interface Window {\n ToggleSwitchElement: typeof ToggleSwitchElement\n }\n}\n","import { debounce as db, throttle as th } from './index';\nexport function throttle(wait = 0, opts = {}) {\n return (proto, name, descriptor) => {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error('debounce can only decorate functions');\n }\n const fn = descriptor.value;\n descriptor.value = th(fn, wait, opts);\n Object.defineProperty(proto, name, descriptor);\n };\n}\nexport function debounce(wait = 0, opts = {}) {\n return (proto, name, descriptor) => {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error('debounce can only decorate functions');\n }\n const fn = descriptor.value;\n descriptor.value = db(fn, wait, opts);\n Object.defineProperty(proto, name, descriptor);\n };\n}\n","import { CatalystDelegate } from './core.js';\n/**\n * Controller is a decorator to be used over a class that extends HTMLElement.\n * It will automatically `register()` the component in the customElement\n * registry, as well as ensuring `bind(this)` is called on `connectedCallback`,\n * wrapping the classes `connectedCallback` method if needed.\n */\nexport function controller(classObject) {\n new CatalystDelegate(classObject);\n}\n//# sourceMappingURL=controller.js.map","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\nconst TOOLTIP_SR_ONLY_CLASS = 'sr-only'\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 set hiddenFromView(value: true | false) {\n value ? this.classList.add(TOOLTIP_SR_ONLY_CLASS) : this.classList.remove(TOOLTIP_SR_ONLY_CLASS)\n if (this.isConnected) this.#update()\n }\n\n get hiddenFromView() {\n return this.classList.contains(TOOLTIP_SR_ONLY_CLASS)\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.hiddenFromView = 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.hiddenFromView) {\n this.hiddenFromView = false\n } else if (event.type === 'blur') {\n this.hiddenFromView = true\n } else if (\n event.type === 'mouseleave' &&\n (event as MouseEvent).relatedTarget !== this.control &&\n (event as MouseEvent).relatedTarget !== this\n ) {\n this.hiddenFromView = true\n } else if (event.type === 'keydown' && (event as KeyboardEvent).key === 'Escape' && !this.hiddenFromView) {\n this.hiddenFromView = true\n }\n }\n\n static observedAttributes = ['data-type', 'data-direction', 'id']\n\n #update() {\n if (this.hiddenFromView) {\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.hiddenFromView = 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 let labelledBy = this.control.getAttribute('aria-labelledby')\n labelledBy ? (labelledBy = `${labelledBy} ${this.id}`) : (labelledBy = this.id)\n this.control.setAttribute('aria-labelledby', labelledBy)\n\n // Prevent duplicate accessible name announcements.\n this.setAttribute('aria-hidden', 'true')\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 (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.hiddenFromView) 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","__decorate","decorators","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__classPrivateFieldGet","receiver","kind","f","TypeError","call","__classPrivateFieldSet","controllers","WeakSet","bindShadow","bindElements","listenForBind","observers","closed","observer","MutationObserver","mutations","mutation","bindActions","addedNodes","observe","childList","subtree","attributeFilter","subscription","disconnect","handleEvent","binding","bindings","controller","tag","method","shadowController","action","split","eventSep","lastIndexOf","methodSep","dasherize","str","description","toLowerCase","mustDasherize","dashed","includes","DOMException","initialized","initializeAttrs","instance","names","proto","getPrototypeOf","prefix","constructor","attrPrefix","meta","descriptor","configurable","Number","toggleAttribute","symbol","Symbol","for","CatalystDelegate","classObject","delegate","disconnectedCallback","attributes","observed","attrToAttributeName","map","concat","defineObservedAttributes","register","upgrade","template","cloneNode","autoShadowRoot","hasOwnProperty","parent","Map","Set","findTarget","middle","timer","last","cancelled","fn","args","now","apply","cancel","throttle","readyState","AbortController","signal","listenerOptions","handler","ToggleSwitchElement","link","csrf","csrfElement","csrfField","isRemote","setLoadingState","check","performToggle","isDisabled","switch","isOn","turnOff","turnOn","disable","errorIcon","loadingSpinner","setFinishedState","error","enable","FormData","fetch","credentials","ok","setSuccessState","setErrorState","opts","db","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","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","hiddenFromView","isConnected","_ToolTipElement_instances","_ToolTipElement_update","styles","toFixed","labelledBy","describedBy","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/@github/catalyst/lib/bind.js","../../../node_modules/@github/catalyst/lib/dasherize.js","../../../node_modules/@github/catalyst/lib/attr.js","../../../node_modules/@github/catalyst/lib/core.js","../../../node_modules/@github/catalyst/lib/register.js","../../../node_modules/@github/catalyst/lib/auto-shadow-root.js","../../../node_modules/@github/catalyst/lib/target.js","../../../node_modules/@github/catalyst/lib/findtarget.js","../../../node_modules/@github/mini-throttle/dist/index.js","../../../node_modules/@github/catalyst/lib/lazy-define.js","../../components/primer/alpha/toggle-switch-element.ts","../../../node_modules/@github/mini-throttle/dist/decorators.js","../../../node_modules/@github/catalyst/lib/controller.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 controllers = new WeakSet();\n/*\n * Bind `[data-action]` elements from the DOM to their actions.\n *\n */\nexport function bind(controller) {\n controllers.add(controller);\n if (controller.shadowRoot)\n bindShadow(controller.shadowRoot);\n bindElements(controller);\n listenForBind(controller.ownerDocument);\n}\nexport function bindShadow(root) {\n bindElements(root);\n listenForBind(root);\n}\nconst observers = new WeakMap();\n/**\n * Set up observer that will make sure any actions that are dynamically\n * injected into `el` will be bound to it's controller.\n *\n * This returns a Subscription object which you can call `unsubscribe()` on to\n * stop further live updates.\n */\nexport function listenForBind(el = document) {\n if (observers.has(el))\n return observers.get(el);\n let closed = false;\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.target instanceof Element) {\n bindActions(mutation.target);\n }\n else if (mutation.type === 'childList' && mutation.addedNodes.length) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element) {\n bindElements(node);\n }\n }\n }\n }\n });\n observer.observe(el, { childList: true, subtree: true, attributeFilter: ['data-action'] });\n const subscription = {\n get closed() {\n return closed;\n },\n unsubscribe() {\n closed = true;\n observers.delete(el);\n observer.disconnect();\n }\n };\n observers.set(el, subscription);\n return subscription;\n}\nfunction bindElements(root) {\n for (const el of root.querySelectorAll('[data-action]')) {\n bindActions(el);\n }\n // Also bind the controller to itself\n if (root instanceof Element && root.hasAttribute('data-action')) {\n bindActions(root);\n }\n}\n// Bind a single function to all events to avoid anonymous closure performance penalty.\nfunction handleEvent(event) {\n const el = event.currentTarget;\n for (const binding of bindings(el)) {\n if (event.type === binding.type) {\n const controller = el.closest(binding.tag);\n if (controllers.has(controller) && typeof controller[binding.method] === 'function') {\n controller[binding.method](event);\n }\n const root = el.getRootNode();\n if (root instanceof ShadowRoot && controllers.has(root.host) && root.host.matches(binding.tag)) {\n const shadowController = root.host;\n if (typeof shadowController[binding.method] === 'function') {\n shadowController[binding.method](event);\n }\n }\n }\n }\n}\nfunction* bindings(el) {\n for (const action of (el.getAttribute('data-action') || '').trim().split(/\\s+/)) {\n const eventSep = action.lastIndexOf(':');\n const methodSep = Math.max(0, action.lastIndexOf('#')) || action.length;\n yield {\n type: action.slice(0, eventSep),\n tag: action.slice(eventSep + 1, methodSep),\n method: action.slice(methodSep + 1) || 'handleEvent'\n } || 'handleEvent';\n }\n}\nfunction bindActions(el) {\n for (const binding of bindings(el)) {\n el.addEventListener(binding.type, handleEvent);\n }\n}\n//# sourceMappingURL=bind.js.map","export const dasherize = (str) => String(typeof str === 'symbol' ? str.description : str)\n .replace(/([A-Z]($|[a-z]))/g, '-$1')\n .replace(/--/g, '-')\n .replace(/^-|-$/, '')\n .toLowerCase();\nexport const mustDasherize = (str, type = 'property') => {\n const dashed = dasherize(str);\n if (!dashed.includes('-')) {\n throw new DOMException(`${type}: ${String(str)} is not a valid ${type} name`, 'SyntaxError');\n }\n return dashed;\n};\n//# sourceMappingURL=dasherize.js.map","import { mustDasherize } from './dasherize.js';\nimport { meta } from './core.js';\nconst attrKey = 'attr';\n/**\n * Attr is a decorator which tags a property as one to be initialized via\n * `initializeAttrs`.\n *\n * The signature is typed such that the property must be one of a String,\n * Number or Boolean. This matches the behavior of `initializeAttrs`.\n */\nexport function attr(proto, key) {\n meta(proto, attrKey).add(key);\n}\n/**\n * initializeAttrs is called with a set of class property names (if omitted, it\n * will look for any properties tagged with the `@attr` decorator). With this\n * list it defines property descriptors for each property that map to `data-*`\n * attributes on the HTMLElement instance.\n *\n * It works around Native Class Property semantics - which are equivalent to\n * calling `Object.defineProperty` on the instance upon creation, but before\n * `constructor()` is called.\n *\n * If a class property is assigned to the class body, it will infer the type\n * (using `typeof`) and define an appropriate getter/setter combo that aligns\n * to that type. This means class properties assigned to Numbers can only ever\n * be Numbers, assigned to Booleans can only ever be Booleans, and assigned to\n * Strings can only ever be Strings.\n *\n * This is automatically called as part of `@controller`. If a class uses the\n * `@controller` decorator it should not call this manually.\n */\nconst initialized = new WeakSet();\nexport function initializeAttrs(instance, names) {\n if (initialized.has(instance))\n return;\n initialized.add(instance);\n const proto = Object.getPrototypeOf(instance);\n const prefix = proto?.constructor?.attrPrefix ?? 'data-';\n if (!names)\n names = meta(proto, attrKey);\n for (const key of names) {\n const value = instance[key];\n const name = mustDasherize(`${prefix}${key}`);\n let descriptor = {\n configurable: true,\n get() {\n return this.getAttribute(name) || '';\n },\n set(newValue) {\n this.setAttribute(name, newValue || '');\n }\n };\n if (typeof value === 'number') {\n descriptor = {\n configurable: true,\n get() {\n return Number(this.getAttribute(name) || 0);\n },\n set(newValue) {\n this.setAttribute(name, newValue);\n }\n };\n }\n else if (typeof value === 'boolean') {\n descriptor = {\n configurable: true,\n get() {\n return this.hasAttribute(name);\n },\n set(newValue) {\n this.toggleAttribute(name, newValue);\n }\n };\n }\n Object.defineProperty(instance, key, descriptor);\n if (key in instance && !instance.hasAttribute(name)) {\n descriptor.set.call(instance, value);\n }\n }\n}\nexport function defineObservedAttributes(classObject) {\n let observed = classObject.observedAttributes || [];\n const prefix = classObject.attrPrefix ?? 'data-';\n const attrToAttributeName = (name) => mustDasherize(`${prefix}${name}`);\n Object.defineProperty(classObject, 'observedAttributes', {\n configurable: true,\n get() {\n return [...meta(classObject.prototype, attrKey)].map(attrToAttributeName).concat(observed);\n },\n set(attributes) {\n observed = attributes;\n }\n });\n}\n//# sourceMappingURL=attr.js.map","import { register } from './register.js';\nimport { bind, bindShadow } from './bind.js';\nimport { autoShadowRoot } from './auto-shadow-root.js';\nimport { defineObservedAttributes, initializeAttrs } from './attr.js';\nconst symbol = Symbol.for('catalyst');\nexport class CatalystDelegate {\n constructor(classObject) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const delegate = this;\n const connectedCallback = classObject.prototype.connectedCallback;\n classObject.prototype.connectedCallback = function () {\n delegate.connectedCallback(this, connectedCallback);\n };\n const disconnectedCallback = classObject.prototype.disconnectedCallback;\n classObject.prototype.disconnectedCallback = function () {\n delegate.disconnectedCallback(this, disconnectedCallback);\n };\n const attributeChangedCallback = classObject.prototype.attributeChangedCallback;\n classObject.prototype.attributeChangedCallback = function (name, oldValue, newValue) {\n delegate.attributeChangedCallback(this, name, oldValue, newValue, attributeChangedCallback);\n };\n let observedAttributes = classObject.observedAttributes || [];\n Object.defineProperty(classObject, 'observedAttributes', {\n configurable: true,\n get() {\n return delegate.observedAttributes(this, observedAttributes);\n },\n set(attributes) {\n observedAttributes = attributes;\n }\n });\n defineObservedAttributes(classObject);\n register(classObject);\n }\n observedAttributes(instance, observedAttributes) {\n return observedAttributes;\n }\n connectedCallback(instance, connectedCallback) {\n instance.toggleAttribute('data-catalyst', true);\n customElements.upgrade(instance);\n autoShadowRoot(instance);\n initializeAttrs(instance);\n bind(instance);\n connectedCallback?.call(instance);\n if (instance.shadowRoot)\n bindShadow(instance.shadowRoot);\n }\n disconnectedCallback(element, disconnectedCallback) {\n disconnectedCallback?.call(element);\n }\n attributeChangedCallback(instance, name, oldValue, newValue, attributeChangedCallback) {\n initializeAttrs(instance);\n if (name !== 'data-catalyst' && attributeChangedCallback) {\n attributeChangedCallback.call(instance, name, oldValue, newValue);\n }\n }\n}\nexport function meta(proto, name) {\n if (!Object.prototype.hasOwnProperty.call(proto, symbol)) {\n const parent = proto[symbol];\n const map = (proto[symbol] = new Map());\n if (parent) {\n for (const [key, value] of parent) {\n map.set(key, new Set(value));\n }\n }\n }\n const map = proto[symbol];\n if (!map.has(name))\n map.set(name, new Set());\n return map.get(name);\n}\n//# sourceMappingURL=core.js.map","import { dasherize } from './dasherize.js';\n/**\n * Register the controller as a custom element.\n *\n * The classname is converted to a approriate tag name.\n *\n * Example: HelloController => hello-controller\n */\nexport function register(classObject) {\n const name = dasherize(classObject.name).replace(/-element$/, '');\n try {\n window.customElements.define(name, classObject);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n window[classObject.name] = customElements.get(name);\n }\n catch (e) {\n // The only reason for window.customElements.define to throw a `NotSupportedError`\n // is if the element has already been defined.\n if (!(e instanceof DOMException && e.name === 'NotSupportedError'))\n throw e;\n }\n return classObject;\n}\n//# sourceMappingURL=register.js.map","export function autoShadowRoot(element) {\n for (const template of element.querySelectorAll('template[data-shadowroot]')) {\n if (template.parentElement === element) {\n element\n .attachShadow({\n mode: template.getAttribute('data-shadowroot') === 'closed' ? 'closed' : 'open'\n })\n .append(template.content.cloneNode(true));\n }\n }\n}\n//# sourceMappingURL=auto-shadow-root.js.map","import { findTarget, findTargets } from './findtarget.js';\nimport { meta } from './core.js';\n/**\n * Target is a decorator which - when assigned to a property field on the\n * class - will override that class field, turning it into a Getter which\n * returns a call to `findTarget(this, key)` where `key` is the name of the\n * property field. In other words, `@target foo` becomes a getter for\n * `findTarget(this, 'foo')`.\n */\nexport function target(proto, key) {\n meta(proto, 'target').add(key);\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n return findTarget(this, key);\n }\n });\n}\n/**\n * Targets is a decorator which - when assigned to a property field on the\n * class - will override that class field, turning it into a Getter which\n * returns a call to `findTargets(this, key)` where `key` is the name of the\n * property field. In other words, `@targets foo` becomes a getter for\n * `findTargets(this, 'foo')`.\n */\nexport function targets(proto, key) {\n meta(proto, 'targets').add(key);\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n return findTargets(this, key);\n }\n });\n}\n//# sourceMappingURL=target.js.map","/**\n * findTarget will run `querySelectorAll` against the given controller, plus\n * its shadowRoot, returning any the first child that:\n *\n * - Matches the selector of `[data-target~=\"tag.name\"]` where tag is the\n * tagName of the given HTMLElement, and `name` is the given `name` argument.\n *\n * - Closest ascendant of the element, that matches the tagname of the\n * controller, is the specific instance of the controller itself - in other\n * words it is not nested in other controllers of the same type.\n *\n */\nexport function findTarget(controller, name) {\n const tag = controller.tagName.toLowerCase();\n if (controller.shadowRoot) {\n for (const el of controller.shadowRoot.querySelectorAll(`[data-target~=\"${tag}.${name}\"]`)) {\n if (!el.closest(tag))\n return el;\n }\n }\n for (const el of controller.querySelectorAll(`[data-target~=\"${tag}.${name}\"]`)) {\n if (el.closest(tag) === controller)\n return el;\n }\n}\nexport function findTargets(controller, name) {\n const tag = controller.tagName.toLowerCase();\n const targets = [];\n if (controller.shadowRoot) {\n for (const el of controller.shadowRoot.querySelectorAll(`[data-targets~=\"${tag}.${name}\"]`)) {\n if (!el.closest(tag))\n targets.push(el);\n }\n }\n for (const el of controller.querySelectorAll(`[data-targets~=\"${tag}.${name}\"]`)) {\n if (el.closest(tag) === controller)\n targets.push(el);\n }\n return targets;\n}\n//# sourceMappingURL=findtarget.js.map","export function throttle(callback, wait = 0, { start = true, middle = true, once = false } = {}) {\n let last = 0;\n let timer;\n let cancelled = false;\n function fn(...args) {\n if (cancelled)\n return;\n const delta = Date.now() - last;\n last = Date.now();\n if (start) {\n start = false;\n callback.apply(this, args);\n if (once)\n fn.cancel();\n }\n else if ((middle && delta < wait) || !middle) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n last = Date.now();\n callback.apply(this, args);\n if (once)\n fn.cancel();\n }, !middle ? wait : wait - delta);\n }\n }\n fn.cancel = () => {\n clearTimeout(timer);\n cancelled = true;\n };\n return fn;\n}\nexport function debounce(callback, wait = 0, { start = false, middle = false, once = false } = {}) {\n return throttle(callback, wait, { start, middle, once });\n}\n","const dynamicElements = new Map();\nconst ready = new Promise(resolve => {\n if (document.readyState !== 'loading') {\n resolve();\n }\n else {\n document.addEventListener('readystatechange', () => resolve(), { once: true });\n }\n});\nconst firstInteraction = new Promise(resolve => {\n const controller = new AbortController();\n controller.signal.addEventListener('abort', () => resolve());\n const listenerOptions = { once: true, passive: true, signal: controller.signal };\n const handler = () => controller.abort();\n document.addEventListener('mousedown', handler, listenerOptions);\n // eslint-disable-next-line github/require-passive-events\n document.addEventListener('touchstart', handler, listenerOptions);\n document.addEventListener('keydown', handler, listenerOptions);\n document.addEventListener('pointerdown', handler, listenerOptions);\n});\nconst visible = (tagName) => new Promise(resolve => {\n const observer = new IntersectionObserver(entries => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n resolve();\n observer.disconnect();\n return;\n }\n }\n }, {\n // Currently the threshold is set to 256px from the bottom of the viewport\n // with a threshold of 0.1. This means the element will not load until about\n // 2 keyboard-down-arrow presses away from being visible in the viewport,\n // giving us some time to fetch it before the contents are made visible\n rootMargin: '0px 0px 256px 0px',\n threshold: 0.01\n });\n for (const el of document.querySelectorAll(tagName)) {\n observer.observe(el);\n }\n});\nconst strategies = {\n ready: () => ready,\n firstInteraction: () => firstInteraction,\n visible\n};\nconst timers = new WeakMap();\nfunction scan(node) {\n cancelAnimationFrame(timers.get(node) || 0);\n timers.set(node, requestAnimationFrame(() => {\n for (const tagName of dynamicElements.keys()) {\n const child = node.matches(tagName) ? node : node.querySelector(tagName);\n if (customElements.get(tagName) || child) {\n const strategyName = (child?.getAttribute('data-load-on') || 'ready');\n const strategy = strategyName in strategies ? strategies[strategyName] : strategies.ready;\n // eslint-disable-next-line github/no-then\n for (const cb of dynamicElements.get(tagName) || [])\n strategy(tagName).then(cb);\n dynamicElements.delete(tagName);\n timers.delete(node);\n }\n }\n }));\n}\nlet elementLoader;\nexport function lazyDefine(tagName, callback) {\n if (!dynamicElements.has(tagName))\n dynamicElements.set(tagName, new Set());\n dynamicElements.get(tagName).add(callback);\n scan(document.body);\n if (!elementLoader) {\n elementLoader = new MutationObserver(mutations => {\n if (!dynamicElements.size)\n return;\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element)\n scan(node);\n }\n }\n });\n elementLoader.observe(document, { subtree: true, childList: true });\n }\n}\n//# sourceMappingURL=lazy-define.js.map","/* eslint-disable custom-elements/expose-class-on-global */\n/* eslint-disable custom-elements/define-tag-after-class-definition */\n\nimport {controller, target} from '@github/catalyst'\nimport {debounce} from '@github/mini-throttle/decorators'\n\n@controller\nexport class ToggleSwitchElement extends HTMLElement {\n @target switch: HTMLElement\n @target loadingSpinner: HTMLElement\n @target errorIcon: HTMLElement\n\n get src(): string | null {\n const src = this.getAttribute('src')\n if (!src) return null\n\n const link = this.ownerDocument.createElement('a')\n link.href = src\n return link.href\n }\n\n get csrf(): string | null {\n const csrfElement = this.querySelector('[data-csrf]')\n return this.getAttribute('csrf') || (csrfElement instanceof HTMLInputElement && csrfElement.value) || null\n }\n\n get csrfField(): string {\n // the authenticity token is passed into the element and is not generated in js land\n\n return this.getAttribute('csrf-field') || 'authenticity_token'\n }\n\n isRemote(): boolean {\n return this.src != null\n }\n\n toggle() {\n if (this.isRemote()) {\n this.setLoadingState()\n this.check()\n } else {\n this.performToggle()\n }\n }\n\n turnOn(): void {\n if (this.isDisabled()) {\n return\n }\n\n this.switch.setAttribute('aria-checked', 'true')\n this.classList.add('ToggleSwitch--checked')\n }\n\n turnOff(): void {\n if (this.isDisabled()) {\n return\n }\n\n this.switch.setAttribute('aria-checked', 'false')\n this.classList.remove('ToggleSwitch--checked')\n }\n\n isOn(): boolean {\n return this.switch.getAttribute('aria-checked') === 'true'\n }\n\n isOff(): boolean {\n return !this.isOn()\n }\n\n isDisabled(): boolean {\n return this.switch.getAttribute('aria-disabled') === 'true'\n }\n\n disable(): void {\n this.switch.setAttribute('aria-disabled', 'true')\n }\n\n enable(): void {\n this.switch.setAttribute('aria-disabled', 'false')\n }\n\n private performToggle(): void {\n if (this.isOn()) {\n this.turnOff()\n } else {\n this.turnOn()\n }\n }\n\n private setLoadingState(): void {\n this.disable()\n this.errorIcon.setAttribute('hidden', 'hidden')\n this.loadingSpinner.removeAttribute('hidden')\n }\n\n private setSuccessState(): void {\n this.setFinishedState(false)\n }\n\n private setErrorState(): void {\n this.setFinishedState(true)\n }\n\n private setFinishedState(error: boolean): void {\n if (error) {\n this.errorIcon.removeAttribute('hidden')\n }\n\n this.loadingSpinner.setAttribute('hidden', 'hidden')\n this.enable()\n }\n\n @debounce(300)\n private async check() {\n const body = new FormData()\n\n if (this.csrf) {\n body.append(this.csrfField, this.csrf)\n }\n\n body.append('value', this.isOn() ? '1' : '0')\n\n try {\n const response = await fetch(this.src!, {\n credentials: 'same-origin',\n method: 'POST',\n body\n })\n if (response.ok) {\n this.setSuccessState()\n this.performToggle()\n } else {\n this.setErrorState()\n }\n } catch (error) {\n this.setErrorState()\n }\n }\n}\n\ndeclare global {\n interface Window {\n ToggleSwitchElement: typeof ToggleSwitchElement\n }\n}\n","import { debounce as db, throttle as th } from './index';\nexport function throttle(wait = 0, opts = {}) {\n return (proto, name, descriptor) => {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error('debounce can only decorate functions');\n }\n const fn = descriptor.value;\n descriptor.value = th(fn, wait, opts);\n Object.defineProperty(proto, name, descriptor);\n };\n}\nexport function debounce(wait = 0, opts = {}) {\n return (proto, name, descriptor) => {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error('debounce can only decorate functions');\n }\n const fn = descriptor.value;\n descriptor.value = db(fn, wait, opts);\n Object.defineProperty(proto, name, descriptor);\n };\n}\n","import { CatalystDelegate } from './core.js';\n/**\n * Controller is a decorator to be used over a class that extends HTMLElement.\n * It will automatically `register()` the component in the customElement\n * registry, as well as ensuring `bind(this)` is called on `connectedCallback`,\n * wrapping the classes `connectedCallback` method if needed.\n */\nexport function controller(classObject) {\n new CatalystDelegate(classObject);\n}\n//# sourceMappingURL=controller.js.map","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\nconst TOOLTIP_SR_ONLY_CLASS = 'sr-only'\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 set hiddenFromView(value: true | false) {\n this.classList.toggle(TOOLTIP_SR_ONLY_CLASS, value)\n if (this.isConnected) this.#update()\n }\n\n get hiddenFromView() {\n return this.classList.contains(TOOLTIP_SR_ONLY_CLASS)\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.hiddenFromView = 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.hiddenFromView) {\n this.hiddenFromView = false\n } else if (event.type === 'blur') {\n this.hiddenFromView = true\n } else if (\n event.type === 'mouseleave' &&\n (event as MouseEvent).relatedTarget !== this.control &&\n (event as MouseEvent).relatedTarget !== this\n ) {\n this.hiddenFromView = true\n } else if (event.type === 'keydown' && (event as KeyboardEvent).key === 'Escape' && !this.hiddenFromView) {\n this.hiddenFromView = true\n }\n }\n\n static observedAttributes = ['data-type', 'data-direction', 'id']\n\n #update() {\n if (this.hiddenFromView) {\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.hiddenFromView = 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 let labelledBy = this.control.getAttribute('aria-labelledby')\n if (labelledBy) {\n labelledBy = `${labelledBy} ${this.id}`\n } else {\n labelledBy = this.id\n }\n this.control.setAttribute('aria-labelledby', labelledBy)\n\n // Prevent duplicate accessible name announcements.\n this.setAttribute('aria-hidden', 'true')\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 (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.hiddenFromView) 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","__decorate","decorators","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__classPrivateFieldGet","receiver","kind","f","TypeError","call","__classPrivateFieldSet","controllers","WeakSet","bindShadow","bindElements","listenForBind","observers","closed","observer","MutationObserver","mutations","mutation","bindActions","addedNodes","observe","childList","subtree","attributeFilter","subscription","disconnect","handleEvent","binding","bindings","controller","tag","method","shadowController","action","split","eventSep","lastIndexOf","methodSep","dasherize","str","description","toLowerCase","mustDasherize","dashed","includes","DOMException","initialized","initializeAttrs","instance","names","proto","getPrototypeOf","prefix","constructor","attrPrefix","meta","descriptor","configurable","Number","toggleAttribute","symbol","Symbol","for","CatalystDelegate","classObject","delegate","disconnectedCallback","attributes","observed","attrToAttributeName","map","concat","defineObservedAttributes","register","upgrade","template","cloneNode","autoShadowRoot","hasOwnProperty","parent","Map","Set","findTarget","middle","timer","last","cancelled","fn","args","now","apply","cancel","throttle","readyState","AbortController","signal","listenerOptions","handler","ToggleSwitchElement","link","csrf","csrfElement","csrfField","isRemote","setLoadingState","check","performToggle","isDisabled","switch","isOn","turnOff","turnOn","disable","errorIcon","loadingSpinner","setFinishedState","error","enable","FormData","fetch","credentials","ok","setSuccessState","setErrorState","opts","db","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","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","disabled","hiddenInert","hiddenInputInert","sentinelInert","sizeInert","visibilityInert","visibility","clientRectsInert","getClientRects","tabIndex","signalSupported","noop","create","originalAddEventListener","EventTarget","originalCallback","optionsOrCapture","AbortSignal","monkeyPatch","suspendedTrapStack","activeTrap","focusTrap","initialFocus","abortSignal","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","hiddenFromView","toggle","isConnected","_ToolTipElement_instances","_ToolTipElement_update","styles","toFixed","labelledBy","describedBy","focusIfNeeded","tooltip","_ToolTipElement_updatePosition","ModalDialogElement","_ModalDialogElement_focusAbortController","_ModalDialogElement_abortController","_ModalDialogElement_openButton","_ModalDialogElement_shouldTryLoadingFragment","_ModalDialogElement_instances","_ModalDialogElement_overlayBackdrop_get","aborted","showButtons","clickOutsideDialog","dialogId","show","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..865a8ee708 --- /dev/null +++ b/app/components/primer/alpha/dialog.html.erb @@ -0,0 +1,12 @@ +<%= show_button %> +
+ <%= render Primer::BaseComponent.new(**@system_arguments) do %> + <%= header %> + <% if content.present? %> + <%= content %> + <% else %> + <%= body %> + <%= footer %> + <% end %> + <% end %> +
diff --git a/app/components/primer/alpha/dialog.rb b/app/components/primer/alpha/dialog.rb new file mode 100644 index 0000000000..54cc60a45c --- /dev/null +++ b/app/components/primer/alpha/dialog.rb @@ -0,0 +1,142 @@ +# 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 + + DEFAULT_HEIGHT = :auto + HEIGHT_MAPPINGS = { + :small => "Overlay--height-small", + DEFAULT_HEIGHT => "Overlay--height-auto", + :large => "Overlay--height-large", + :xlarge => "Overlay--height-xlarge", + }.freeze + HEIGHT_OPTIONS = HEIGHT_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| + Primer::Alpha::Dialog::Header.new( + id: @id, + title: @title, + subtitle: @subtitle, + 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, "Footer" + + # @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", + # id: "my-dialog", + # )) 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 height [Symbol] The height of the dialog. <%= one_of(Primer::Alpha::Dialog::HEIGHT_OPTIONS) %> + # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> + def initialize( + title:, + subtitle: nil, + width: DEFAULT_WIDTH, + height: DEFAULT_HEIGHT, + 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)], + HEIGHT_MAPPINGS[fetch_or_fallback(HEIGHT_OPTIONS, height, DEFAULT_HEIGHT)], + "Overlay--motion-scaleFade", + system_arguments[:classes] + ) + + @id = id.to_s + @title = title + + @subtitle = subtitle + if subtitle.present? + @system_arguments[:aria] ||= {} + @system_arguments[:aria][:describedby] ||= "#{@id}-description" + end + + end + + def before_render + with_header() unless header? + with_body() unless body? + 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..b8e90486f6 --- /dev/null +++ b/app/components/primer/alpha/dialog/body.rb @@ -0,0 +1,25 @@ +# 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) + @system_arguments = deny_tag_argument(**system_arguments) + @system_arguments[:tag] = :div + @system_arguments[:classes] = class_names( + "Overlay-body", + system_arguments[:classes] + ) + end + + def call + render(Primer::BaseComponent.new(**@system_arguments)) { content } + 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..1cfc2f54ce --- /dev/null +++ b/app/components/primer/alpha/dialog/footer.rb @@ -0,0 +1,31 @@ +# 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 + ) + @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] + ) + end + + def call + render(Primer::BaseComponent.new(**@system_arguments)) { content } + 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..a654ed626d --- /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": @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..5192783cf1 --- /dev/null +++ b/app/components/primer/alpha/dialog/header.rb @@ -0,0 +1,35 @@ +# 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( + id:, + title:, + subtitle: nil, + subtitle_id: nil, + hide_divider: false, + **system_arguments + ) + @id = id + @title = title + @subtitle = subtitle + @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] + ) + 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 f173cad8fb..83934df3b1 100644 --- a/app/components/primer/primer.ts +++ b/app/components/primer/primer.ts @@ -7,3 +7,4 @@ import './image_crop' import './dropdown' import './alpha/toggle-switch-element' 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 97e224ae19..60688affed 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/beta/counter" - title: Details url: "/components/beta/details" + - title: Dialog + url: "/components/alpha/dialog" - title: Dropdown url: "/components/dropdown" - title: DropdownMenu diff --git a/docs/static/primer_view_components.js b/docs/static/primer_view_components.js index 78175a300d..7cf3aa115c 100644 --- a/docs/static/primer_view_components.js +++ b/docs/static/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(o)[0],n=Array.from(this.list.querySelectorAll('[role="option"]')).filter(o),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 i(t,e){(function(t,e){const n=t.scrollTop,o=n+t.clientHeight,i=e.offsetTop,s=i+e.clientHeight;return i>=n&&s<=o})(t,e)||(t.scrollTop=e.offsetTop)}const s=window.testScreenReaderDelay||100;class r{constructor(t,n,o,i=!1){var s;if(this.container=t,this.input=n,this.results=o,this.combobox=new e(n,o),this.feedback=document.getElementById(`${this.results.id}-feedback`),this.autoselectEnabled=i,this.clearButton=document.getElementById(`${this.input.id||this.input.name}-clear`),this.clientOptions=o.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(...o){clearTimeout(n),n=window.setTimeout((()=>{clearTimeout(n),t(...o)}),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),o=new URLSearchParams(n.search.slice(1));o.append("q",t),n.search=o.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,o=e.length,[i]=e,s=null==i?void 0:i.textContent;this.autoselectEnabled&&s?this.updateFeedbackForScreenReaders(`${o} results. ${s} is the top result: Press Enter to activate.`):this.updateFeedbackForScreenReaders(`${o||"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 o=()=>c.delete(t),i=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 i.then(o,o),i}(t,n)}const u=new WeakMap;class AutocompleteElement 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 o="true"===this.getAttribute("data-autoselect");u.set(this,new r(this,e,n,o)),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 o=u.get(this);if(o)switch(t){case"open":null===n?o.close():o.open();break;case"value":null!==n&&(o.input.value=n),this.dispatchEvent(new a("auto-complete-change",{bubbles:!0,relatedTarget:o.input}))}}}function d(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 h(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),d(n),e.removeChild(n),Promise.resolve()}function f(t){const e=t.getAttribute("for"),n=t.getAttribute("value");function o(){t.dispatchEvent(new CustomEvent("clipboard-copy",{bubbles:!0}))}if(n)h(n).then(o);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&&(i=s,i instanceof HTMLInputElement||i instanceof HTMLTextAreaElement?h(i.value):i instanceof HTMLAnchorElement&&i.hasAttribute("href")?h(i.href):d(i)).then(o)}var i}function m(t){const e=t.currentTarget;e instanceof HTMLElement&&f(e)}function p(t){if(" "===t.key||"Enter"===t.key){const e=t.currentTarget;e instanceof HTMLElement&&(t.preventDefault(),f(e))}}function b(t){t.currentTarget.addEventListener("keydown",p)}function g(t){t.currentTarget.removeEventListener("keydown",p)}window.customElements.get("auto-complete")||(window.AutocompleteElement=AutocompleteElement,window.customElements.define("auto-complete",AutocompleteElement));class ClipboardCopyElement extends HTMLElement{constructor(){super(),this.addEventListener("click",m),this.addEventListener("focus",b),this.addEventListener("blur",g)}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=ClipboardCopyElement,window.customElements.define("clipboard-copy",ClipboardCopyElement));function w(t){t.style.display="inline-block"}function v(t){t.style.display="none"}const y=new WeakMap;function E(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=y.get(t);e?(clearTimeout(e),y.delete(t)):function(t){const[e,n]=t.querySelectorAll(".octicon");e&&n&&(v(e),w(n))}(t),y.set(t,setTimeout((()=>{!function(t){const[e,n]=t.querySelectorAll(".octicon");e&&n&&(w(e),v(n))}(t),y.delete(t)}),2e3))}));class TabContainerElement 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=E(this),o=n.indexOf(n.find((t=>t.matches('[aria-selected="true"]'))));if("ArrowRight"===t.code){let t=o+1;t>=n.length&&(t=0),A(this,t)}else if("ArrowLeft"===t.code){let t=o-1;t<0&&(t=n.length-1),A(this,t)}else"Home"===t.code?(A(this,0),t.preventDefault()):"End"===t.code&&(A(this,n.length-1),t.preventDefault())})),this.addEventListener("click",(t=>{const e=E(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;A(this,e.indexOf(n))}))}connectedCallback(){for(const t of E(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 A(t,e){const n=E(t),o=Array.from(t.querySelectorAll('[role="tabpanel"]')).filter((e=>e.closest(t.tagName)===t)),i=n[e],s=o[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 o)t.hidden=!0,t.hasAttribute("tabindex")||t.hasAttribute("data-tab-container-no-tabstop")||t.setAttribute("tabindex","0");i.setAttribute("aria-selected","true"),i.setAttribute("tabindex","0"),i.focus(),s.hidden=!1,t.dispatchEvent(new CustomEvent("tab-container-changed",{bubbles:!0,detail:{relatedTarget:s}}))}}window.customElements.get("tab-container")||(window.TabContainerElement=TabContainerElement,window.customElements.define("tab-container",TabContainerElement));const T=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],k=["January","February","March","April","May","June","July","August","September","October","November","December"];function x(t){return`0${t}`.slice(-2)}function L(t,e){const n=t.getDay(),o=t.getDate(),i=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 k[i].slice(0,3);case"B":return k[i];case"c":return t.toString();case"d":return x(o);case"e":return String(o);case"H":return x(r);case"I":return x(L(t,"%l"));case"l":return String(0===r||12===r?12:(r+12)%12);case"m":return x(i+1);case"M":return x(a);case"p":return r>11?"PM":"AM";case"P":return r>11?"pm":"am";case"S":return x(c);case"w":return String(n);case"y":return x(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 M(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 C=null;const S=M({day:"numeric",month:"short"});function D(){if(null!==C)return C;const t=S();if(t){const e=t.format(new Date(0));return C=!!e.match(/^\d/),C}return!1}let H=null;const $=M({day:"numeric",month:"short",year:"numeric"});function R(t){const e=t.closest("[lang]");return e instanceof HTMLElement&&e.lang?e.lang:"default"}const F=new WeakMap;class ExtendedTimeElement 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 o=this.getFormattedTitle();if("datetime"===t){const t=Date.parse(n);isNaN(t)?F.delete(this):F.set(this,new Date(t))}const i=this.getFormattedTitle(),s=this.getAttribute("title");"title"===t||!i||s&&s!==o||this.setAttribute("title",i);const r=this.getFormattedDate();r&&(this.textContent=r)}get date(){return F.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=M({day:"numeric",month:"short",year:"numeric",hour:"numeric",minute:"2-digit",timeZoneName:"short"}),I=new WeakMap;class LocalTimeElement extends ExtendedTimeElement{attributeChangedCallback(t,e,n){"hour"!==t&&"minute"!==t&&"second"!==t&&"time-zone-name"!==t||I.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 o=D()?"weekday day month year":"weekday month day, year";for(const e in n){const i=n[e][t.getAttribute(e)||""];o=o.replace(e,i||"")}return o=o.replace(/(\s,)|(,\s$)/,""),L(e,o).replace(/\s+/," ").trim()}(this,t)||""} ${function(t,e){const n={},o=t.getAttribute("hour");"numeric"!==o&&"2-digit"!==o||(n.hour=o);const i=t.getAttribute("minute");"numeric"!==i&&"2-digit"!==i||(n.minute=i);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=I.get(t);a||(a=M(n),I.set(t,a));const c=a();if(c)return c.format(e);return L(e,n.second?"%H:%M:%S":"%H:%M")}(this,t)||""}`.trim()}}window.customElements.get("local-time")||(window.LocalTimeElement=LocalTimeElement,window.customElements.define("local-time",LocalTimeElement));class q{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),o=Math.round(n/60),i=Math.round(o/24);return t>=0&&i<30?this.timeAgoFromMs(t):null}timeAhead(){const t=this.date.getTime()-(new Date).getTime(),e=Math.round(t/1e3),n=Math.round(e/60),o=Math.round(n/60),i=Math.round(o/24);return t>=0&&i<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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return t<0||e<10?W(this.locale,0,"second"):e<45?W(this.locale,-e,"second"):e<90||n<45?W(this.locale,-n,"minute"):n<90||o<24?W(this.locale,-o,"hour"):o<36||i<30?W(this.locale,-i,"day"):s<18?W(this.locale,-s,"month"):W(this.locale,-r,"year")}microTimeAgo(){const t=(new Date).getTime()-this.date.getTime(),e=Math.round(t/1e3),n=Math.round(e/60),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return n<1?"1m":n<60?`${n}m`:o<24?`${o}h`:i<365?`${i}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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return s>=18||s>=12?W(this.locale,r,"year"):i>=45||i>=30?W(this.locale,s,"month"):o>=36||o>=24?W(this.locale,i,"day"):n>=90||n>=45?W(this.locale,o,"hour"):e>=90||e>=45?W(this.locale,n,"minute"):W(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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return i>=365?`${r}y`:o>=24?`${i}d`:n>=60?`${o}h`:n>1?`${n}m`:"1m"}formatDate(){let t=D()?"%e %b":"%b %e";var e;return e=this.date,(new Date).getUTCFullYear()!==e.getUTCFullYear()&&(t+=function(){if(null!==H)return H;const t=$();if(t){const e=t.format(new Date(0));return H=!!e.match(/\d,/),H}return!0}()?", %Y":" %Y"),L(this.date,t)}formatTime(){const t=P();return t?t.format(this.date):L(this.date,"%l:%M%P")}}function W(t,e,n){const o=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 o?o.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=M({hour:"numeric",minute:"2-digit"});class RelativeTimeElement extends ExtendedTimeElement{getFormattedDate(){const t=this.date;if(t)return new q(t,R(this)).toString()}connectedCallback(){B.push(this),Y||(N(),Y=window.setInterval(N,6e4)),super.connectedCallback()}disconnectedCallback(){const t=B.indexOf(this);-1!==t&&B.splice(t,1),B.length||Y&&(clearInterval(Y),Y=null)}}const B=[];let Y;function N(){let t,e,n;for(e=0,n=B.length;e=0&&n.classList.add("nwse"),["ne","sw"].indexOf(e)>=0&&n.classList.add("nesw"),U.set(n,{startX:o.offsetLeft+(["se","ne"].indexOf(e)>=0?0:o.offsetWidth),startY:o.offsetTop+(["se","sw"].indexOf(e)>=0?0:o.offsetHeight)}),z(t)}else n.addEventListener("mousemove",j),n.addEventListener("touchmove",j,{passive:!0})}function J(t,e,n,o=!0){let i=Math.max(Math.abs(e),Math.abs(n),10);const s=U.get(t);if(!s)return;const{box:r,image:a}=K.get(t)||{};if(!r||!a)return;i=Math.min(i,n>0?a.height-s.startY:s.startY,e>0?a.width-s.startX:s.startX);const c=o?Math.round(Math.max(0,e>0?s.startX:s.startX-i)):r.offsetLeft,l=o?Math.round(Math.max(0,n>0?s.startY:s.startY-i)):r.offsetTop;r.style.left=`${c}px`,r.style.top=`${l}px`,r.style.width=`${i}px`,r.style.height=`${i}px`,Q(t,{x:c,y:l,width:i,height:i})}function G(t){const{image:e}=K.get(t)||{};if(!e)return;const n=Math.round(e.clientWidth>e.clientHeight?e.clientHeight:e.clientWidth);U.set(t,{startX:(e.clientWidth-n)/2,startY:(e.clientHeight-n)/2}),J(t,n,n)}function _(t){const e=t.currentTarget;e instanceof ImageCropElement&&(X.delete(e),e.classList.remove("nwse","nesw"),e.removeEventListener("mousemove",z),e.removeEventListener("mousemove",j),e.removeEventListener("touchmove",z),e.removeEventListener("touchmove",j))}function Q(t,e){const{image:n}=K.get(t)||{};if(!n)return;const o=n.naturalWidth/n.width;for(const n in e){const i=Math.round(e[n]*o);e[n]=i;const s=t.querySelector(`[data-image-crop-input='${n}']`);s instanceof HTMLInputElement&&(s.value=i.toString())}t.dispatchEvent(new CustomEvent("image-crop-change",{bubbles:!0,detail:e}))}class ImageCropElement extends HTMLElement{connectedCallback(){if(K.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&&(K.set(this,{box:e,image:n}),n.addEventListener("load",(()=>{this.loaded=!0,G(this)})),this.addEventListener("mouseleave",_),this.addEventListener("touchend",_),this.addEventListener("mouseup",_),e.addEventListener("mousedown",Z),e.addEventListener("touchstart",Z,{passive:!0}),this.addEventListener("keydown",j),this.addEventListener("keydown",z),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:o}=K.get(this)||{};"src"===t&&(this.loaded=!1,o&&(o.src=n))}}window.customElements.get("image-crop")||(window.ImageCropElement=ImageCropElement,window.customElements.define("image-crop",ImageCropElement));class DetailsMenuElement 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=[nt(t,"compositionstart",(t=>ht(this,t))),nt(t,"compositionend",(t=>ht(this,t))),nt(t,"click",(e=>ct(t,e))),nt(t,"change",(e=>ct(t,e))),nt(t,"keydown",(e=>function(t,e,n){if(!(n instanceof KeyboardEvent))return;if(t.querySelector("details[open]"))return;const o=tt.get(e);if(!o||o.isComposing)return;const i=n.target instanceof Element&&"SUMMARY"===n.target.tagName;switch(n.key){case"Escape":t.hasAttribute("open")&&(dt(t),n.preventDefault(),n.stopPropagation());break;case"ArrowDown":{i&&!t.hasAttribute("open")&&t.setAttribute("open","");const e=rt(t,!0);e&&e.focus(),n.preventDefault()}break;case"ArrowUp":{i&&!t.hasAttribute("open")&&t.setAttribute("open","");const e=rt(t,!1);e&&e.focus(),n.preventDefault()}break;case"n":if(at&&n.ctrlKey){const e=rt(t,!0);e&&e.focus(),n.preventDefault()}break;case"p":if(at&&n.ctrlKey){const e=rt(t,!1);e&&e.focus(),n.preventDefault()}break;case" ":case"Enter":{const e=document.activeElement;e instanceof HTMLElement&&ut(e)&&e.closest("details")===t&&(n.preventDefault(),n.stopPropagation(),e.click())}}}(t,this,e))),nt(t,"toggle",(()=>ot(t,this)),{once:!0}),nt(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?nt(t,"mouseover",(()=>ot(t,this)),{once:!0}):et,...it(t)];tt.set(this,{subscriptions:n,loaded:!1,isComposing:!1})}disconnectedCallback(){const t=tt.get(this);if(t){tt.delete(this);for(const e of t.subscriptions)e.unsubscribe()}}}const tt=new WeakMap,et={unsubscribe(){}};function nt(t,e,n,o=!1){return t.addEventListener(e,n,o),{unsubscribe:()=>{t.removeEventListener(e,n,o)}}}function ot(t,e){const n=e.getAttribute("src");if(!n)return;const o=tt.get(e);if(!o)return;if(o.loaded)return;o.loaded=!0;const i=e.querySelector("include-fragment");i&&!i.hasAttribute("src")&&(i.addEventListener("loadend",(()=>st(t))),i.setAttribute("src",n))}function it(t){let e=!1;return[nt(t,"mousedown",(()=>e=!0)),nt(t,"keydown",(()=>e=!1)),nt(t,"toggle",(()=>{t.hasAttribute("open")&&(st(t)||e||function(t){const e=document.activeElement;if(e&&ut(e)&&t.contains(e))return;const n=rt(t,!0);n&&n.focus()}(t))}))]}function st(t){if(!t.hasAttribute("open"))return!1;const e=t.querySelector("details-menu [autofocus]");return!!e&&(e.focus(),!0)}function rt(t,e){const n=Array.from(t.querySelectorAll('[role^="menuitem"]:not([hidden]):not([disabled]):not([aria-disabled="true"])')),o=document.activeElement,i=o instanceof HTMLElement?n.indexOf(o):-1,s=e?n[i+1]:n[i-1],r=e?n[0]:n[n.length-1];return s||r}const at=navigator.userAgent.match(/Macintosh/);function ct(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 o=e.querySelector("input");if("LABEL"===e.tagName&&n===o)return;"LABEL"===e.tagName&&o&&!o.checked||lt(e,t)}else if("change"===e.type){const e=n.closest('[role="menuitemradio"], [role="menuitemcheckbox"]');e&<(e,t)}}function lt(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 o=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(o)n.textContent=o;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 o=(n===t).toString();e instanceof HTMLInputElement&&(o=e.indeterminate?"mixed":e.checked.toString()),n.setAttribute("aria-checked",o)}}(t,e),"menuitemcheckbox"!==t.getAttribute("role")&&dt(e),n.dispatchEvent(new CustomEvent("details-menu-selected",{detail:{relatedTarget:t}})))}function ut(t){const e=t.getAttribute("role");return"menuitem"===e||"menuitemcheckbox"===e||"menuitemradio"===e}function dt(t){if(!t.hasAttribute("open"))return;t.removeAttribute("open");const e=t.querySelector("summary");e&&e.focus()}function ht(t,e){const n=tt.get(t);n&&(n.isComposing="compositionstart"===e.type)}function ft(t,e,n,o){var i,s=arguments.length,r=s<3?e:null===o?o=Object.getOwnPropertyDescriptor(e,n):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,n,o);else for(var a=t.length-1;a>=0;a--)(i=t[a])&&(r=(s<3?i(r):s>3?i(e,n,r):i(e,n))||r);return s>3&&r&&Object.defineProperty(e,n,r),r}function mt(t,e,n,o){if("a"===n&&!o)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?o:"a"===n?o.call(t):o?o.value:e.get(t)}function pt(t,e,n,o,i){if("m"===o)throw new TypeError("Private method is not writable");if("a"===o&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===o?i.call(t,n):i?i.value=n:e.set(t,n),n}window.customElements.get("details-menu")||(window.DetailsMenuElement=DetailsMenuElement,window.customElements.define("details-menu",DetailsMenuElement));const bt=new WeakSet;function gt(t){yt(t),vt(t)}const wt=new WeakMap;function vt(t=document){if(wt.has(t))return wt.get(t);let e=!1;const n=new MutationObserver((t=>{for(const e of t)if("attributes"===e.type&&e.target instanceof Element)Tt(e.target);else if("childList"===e.type&&e.addedNodes.length)for(const t of e.addedNodes)t instanceof Element&&yt(t)}));n.observe(t,{childList:!0,subtree:!0,attributeFilter:["data-action"]});const o={get closed(){return e},unsubscribe(){e=!0,wt.delete(t),n.disconnect()}};return wt.set(t,o),o}function yt(t){for(const e of t.querySelectorAll("[data-action]"))Tt(e);t instanceof Element&&t.hasAttribute("data-action")&&Tt(t)}function Et(t){const e=t.currentTarget;for(const n of At(e))if(t.type===n.type){const o=e.closest(n.tag);bt.has(o)&&"function"==typeof o[n.method]&&o[n.method](t);const i=e.getRootNode();if(i instanceof ShadowRoot&&bt.has(i.host)&&i.host.matches(n.tag)){const e=i.host;"function"==typeof e[n.method]&&e[n.method](t)}}}function*At(t){for(const e of(t.getAttribute("data-action")||"").trim().split(/\s+/)){const t=e.lastIndexOf(":"),n=Math.max(0,e.lastIndexOf("#"))||e.length;yield{type:e.slice(0,t),tag:e.slice(t+1,n),method:e.slice(n+1)||"handleEvent"}||"handleEvent"}}function Tt(t){for(const e of At(t))t.addEventListener(e.type,Et)}const kt=t=>String("symbol"==typeof t?t.description:t).replace(/([A-Z]($|[a-z]))/g,"-$1").replace(/--/g,"-").replace(/^-|-$/,"").toLowerCase(),xt=(t,e="property")=>{const n=kt(t);if(!n.includes("-"))throw new DOMException(`${e}: ${String(t)} is not a valid ${e} name`,"SyntaxError");return n};const Lt=new WeakSet;function Mt(t,e){if(Lt.has(t))return;Lt.add(t);const n=Object.getPrototypeOf(t),o=n?.constructor?.attrPrefix??"data-";e||(e=Dt(n,"attr"));for(const n of e){const e=t[n],i=xt(`${o}${n}`);let s={configurable:!0,get(){return this.getAttribute(i)||""},set(t){this.setAttribute(i,t||"")}};"number"==typeof e?s={configurable:!0,get(){return Number(this.getAttribute(i)||0)},set(t){this.setAttribute(i,t)}}:"boolean"==typeof e&&(s={configurable:!0,get(){return this.hasAttribute(i)},set(t){this.toggleAttribute(i,t)}}),Object.defineProperty(t,n,s),n in t&&!t.hasAttribute(i)&&s.set.call(t,e)}}const Ct=Symbol.for("catalyst");class St{constructor(t){const e=this,n=t.prototype.connectedCallback;t.prototype.connectedCallback=function(){e.connectedCallback(this,n)};const o=t.prototype.disconnectedCallback;t.prototype.disconnectedCallback=function(){e.disconnectedCallback(this,o)};const i=t.prototype.attributeChangedCallback;t.prototype.attributeChangedCallback=function(t,n,o){e.attributeChangedCallback(this,t,n,o,i)};let s=t.observedAttributes||[];Object.defineProperty(t,"observedAttributes",{configurable:!0,get(){return e.observedAttributes(this,s)},set(t){s=t}}),function(t){let e=t.observedAttributes||[];const n=t.attrPrefix??"data-",o=t=>xt(`${n}${t}`);Object.defineProperty(t,"observedAttributes",{configurable:!0,get:()=>[...Dt(t.prototype,"attr")].map(o).concat(e),set(t){e=t}})}(t),function(t){const e=kt(t.name).replace(/-element$/,"");try{window.customElements.define(e,t),window[t.name]=customElements.get(e)}catch(t){if(!(t instanceof DOMException&&"NotSupportedError"===t.name))throw t}}(t)}observedAttributes(t,e){return e}connectedCallback(t,e){t.toggleAttribute("data-catalyst",!0),customElements.upgrade(t),function(t){for(const e of t.querySelectorAll("template[data-shadowroot]"))e.parentElement===t&&t.attachShadow({mode:"closed"===e.getAttribute("data-shadowroot")?"closed":"open"}).append(e.content.cloneNode(!0))}(t),Mt(t),function(t){bt.add(t),t.shadowRoot&>(t.shadowRoot),yt(t),vt(t.ownerDocument)}(t),e?.call(t),t.shadowRoot&>(t.shadowRoot)}disconnectedCallback(t,e){e?.call(t)}attributeChangedCallback(t,e,n,o,i){Mt(t),"data-catalyst"!==e&&i&&i.call(t,e,n,o)}}function Dt(t,e){if(!Object.prototype.hasOwnProperty.call(t,Ct)){const e=t[Ct],n=t[Ct]=new Map;if(e)for(const[t,o]of e)n.set(t,new Set(o))}const n=t[Ct];return n.has(e)||n.set(e,new Set),n.get(e)}function Ht(t,e){Dt(t,"target").add(e),Object.defineProperty(t,e,{configurable:!0,get(){return function(t,e){const n=t.tagName.toLowerCase();if(t.shadowRoot)for(const o of t.shadowRoot.querySelectorAll(`[data-target~="${n}.${e}"]`))if(!o.closest(n))return o;for(const o of t.querySelectorAll(`[data-target~="${n}.${e}"]`))if(o.closest(n)===t)return o}(this,e)}})}function $t(t,e=0,{start:n=!1,middle:o=!1,once:i=!1}={}){return function(t,e=0,{start:n=!0,middle:o=!0,once:i=!1}={}){let s,r=0,a=!1;function c(...l){if(a)return;const u=Date.now()-r;r=Date.now(),n?(n=!1,t.apply(this,l),i&&c.cancel()):(o&&u{r=Date.now(),t.apply(this,l),i&&c.cancel()}),o?e-u:e))}return c.cancel=()=>{clearTimeout(s),a=!0},c}(t,e,{start:n,middle:o,once:i})}new Promise((t=>{"loading"!==document.readyState?t():document.addEventListener("readystatechange",(()=>t()),{once:!0})})),new Promise((t=>{const e=new AbortController;e.signal.addEventListener("abort",(()=>t()));const n={once:!0,passive:!0,signal:e.signal},o=()=>e.abort();document.addEventListener("mousedown",o,n),document.addEventListener("touchstart",o,n),document.addEventListener("keydown",o,n),document.addEventListener("pointerdown",o,n)}));let Rt=class ToggleSwitchElement extends HTMLElement{get src(){const t=this.getAttribute("src");if(!t)return null;const e=this.ownerDocument.createElement("a");return e.href=t,e.href}get csrf(){const t=this.querySelector("[data-csrf]");return this.getAttribute("csrf")||t instanceof HTMLInputElement&&t.value||null}get csrfField(){return this.getAttribute("csrf-field")||"authenticity_token"}isRemote(){return null!=this.src}toggle(){this.isRemote()?(this.setLoadingState(),this.check()):this.performToggle()}turnOn(){this.isDisabled()||(this.switch.setAttribute("aria-checked","true"),this.classList.add("ToggleSwitch--checked"))}turnOff(){this.isDisabled()||(this.switch.setAttribute("aria-checked","false"),this.classList.remove("ToggleSwitch--checked"))}isOn(){return"true"===this.switch.getAttribute("aria-checked")}isOff(){return!this.isOn()}isDisabled(){return"true"===this.switch.getAttribute("aria-disabled")}disable(){this.switch.setAttribute("aria-disabled","true")}enable(){this.switch.setAttribute("aria-disabled","false")}performToggle(){this.isOn()?this.turnOff():this.turnOn()}setLoadingState(){this.disable(),this.errorIcon.setAttribute("hidden","hidden"),this.loadingSpinner.removeAttribute("hidden")}setSuccessState(){this.setFinishedState(!1)}setErrorState(){this.setFinishedState(!0)}setFinishedState(t){t&&this.errorIcon.removeAttribute("hidden"),this.loadingSpinner.setAttribute("hidden","hidden"),this.enable()}async check(){const t=new FormData;this.csrf&&t.append(this.csrfField,this.csrf),t.append("value",this.isOn()?"1":"0");try{(await fetch(this.src,{credentials:"same-origin",method:"POST",body:t})).ok?(this.setSuccessState(),this.performToggle()):this.setErrorState()}catch(t){this.setErrorState()}}};ft([Ht],Rt.prototype,"switch",void 0),ft([Ht],Rt.prototype,"loadingSpinner",void 0),ft([Ht],Rt.prototype,"errorIcon",void 0),ft([function(t=0,e={}){return(n,o,i)=>{if(!i||"function"!=typeof i.value)throw new Error("debounce can only decorate functions");const s=i.value;i.value=$t(s,t,e),Object.defineProperty(n,o,i)}}(300)],Rt.prototype,"check",null),Rt=ft([function(t){new St(t)}],Rt);const Ft={"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"]},Ot={start:["end","center"],end:["start","center"],center:["end","start"]};function It(t,e,n={}){const o=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),i=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,o=n.getBoundingClientRect(),i=getComputedStyle(n),[s,r,a,c]=[i.borderTopWidth,i.borderLeftWidth,i.borderRightWidth,i.borderBottomWidth].map((t=>parseInt(t,10)||0));return{top:o.top+s,left:o.left+r,width:o.width-a-r,height:Math.max(o.height-s-c,n===document.body?window.innerHeight:-1/0)}}(o),s=getComputedStyle(o),r=o.getBoundingClientRect(),[a,c]=[s.borderTopWidth,s.borderLeftWidth].map((t=>parseInt(t,10)||0));return function(t,e,n,o,{side:i,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=Nt(n,o,i,s,a,c),d=i,h=s;if(u.top-=e.top,u.left-=e.left,!r){const r=Ft[i];let f=0;if(r){let t=i;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})}(i,{top:r.top+a,left:r.left+c},t.getBoundingClientRect(),e instanceof Element?e.getBoundingClientRect():e,function(t={}){var e,n,o,i,s;const r=null!==(e=t.side)&&void 0!==e?e:qt,a=null!==(n=t.align)&&void 0!==n?n:Wt;return{side:r,align:a,anchorOffset:null!==(o=t.anchorOffset)&&void 0!==o?o:"inside-center"===r?0:Pt,alignmentOffset:null!==(i=t.alignmentOffset)&&void 0!==i?i:"center"!==a&&r.startsWith("inside")?Bt:0,allowOutOfBounds:null!==(s=t.allowOutOfBounds)&&void 0!==s?s:Yt}}(n))}const qt="outside-bottom",Wt="start",Pt=4,Bt=4,Yt=!1;function Nt(t,e,n,o,i,s){const r=e.left+e.width,a=e.top+e.height;let c=-1,l=-1;return"outside-top"===n?c=e.top-i-t.height:"outside-bottom"===n?c=a+i:"outside-left"===n?l=e.left-i-t.width:"outside-right"===n&&(l=r+i),"outside-top"!==n&&"outside-bottom"!==n||(l="start"===o?e.left+s:"center"===o?e.left-(t.width-e.width)/2+s:r-t.width-s),"outside-left"!==n&&"outside-right"!==n||(c="start"===o?e.top+s:"center"===o?e.top-(t.height-e.height)/2+s:a-t.height-s),"inside-top"===n?c=e.top+i:"inside-bottom"===n?c=a-i-t.height:"inside-left"===n?l=e.left+i:"inside-right"===n?l=r-i-t.width:"inside-center"===n&&(l=(r+e.left)/2-t.width/2+i),"inside-top"===n||"inside-bottom"===n?l="start"===o?e.left+s:"center"===o?e.left-(t.width-e.width)/2+s:r-t.width-s:"inside-left"!==n&&"inside-right"!==n&&"inside-center"!==n||(c="start"===o?e.top+s:"center"===o?e.top-(t.height-e.height)/2+s:a-t.height-s),{top:c,left:l}}function Ut(t,e,n,o){return"outside-top"===t||"outside-bottom"===t?e.topn.height+n.top:e.leftn.width+n.left}function Xt(t,e,n,o){return"end"===t?e.leftn.left+n.width||e.left\n ${this.styles()}\n \n \n `}if(this.hiddenFromView=!0,pt(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=mt(this,jt,"f"))||void 0===t||t.abort(),pt(this,jt,new AbortController,"f");const{signal:e}=mt(this,jt,"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}),mt(this,Kt,"m",Jt).call(this)}disconnectedCallback(){var t;null===(t=mt(this,jt,"f"))||void 0===t||t.abort()}handleEvent(t){this.control&&("mouseenter"!==t.type&&"focus"!==t.type||!this.hiddenFromView?"blur"===t.type||"mouseleave"===t.type&&t.relatedTarget!==this.control&&t.relatedTarget!==this?this.hiddenFromView=!0:"keydown"!==t.type||"Escape"!==t.key||this.hiddenFromView||(this.hiddenFromView=!0):this.hiddenFromView=!1)}attributeChangedCallback(t){if("id"===t||"data-type"===t){if(!this.id||!this.control)return;if("label"===this.type){let t=this.control.getAttribute("aria-labelledby");t=t?`${t} ${this.id}`:this.id,this.control.setAttribute("aria-labelledby",t),this.setAttribute("aria-hidden","true")}else{let t=this.control.getAttribute("aria-describedby");t=t?`${t} ${this.id}`:this.id,this.control.setAttribute("aria-describedby",t)}}else if("data-direction"===t){this.classList.remove(..._t);const t=this.direction;"n"===t?(pt(this,zt,"center","f"),pt(this,Vt,"outside-top","f")):"ne"===t?(pt(this,zt,"start","f"),pt(this,Vt,"outside-top","f")):"e"===t?(pt(this,zt,"center","f"),pt(this,Vt,"outside-right","f")):"se"===t?(pt(this,zt,"start","f"),pt(this,Vt,"outside-bottom","f")):"s"===t?(pt(this,zt,"center","f"),pt(this,Vt,"outside-bottom","f")):"sw"===t?(pt(this,zt,"end","f"),pt(this,Vt,"outside-bottom","f")):"w"===t?(pt(this,zt,"center","f"),pt(this,Vt,"outside-left","f")):"nw"===t&&(pt(this,zt,"end","f"),pt(this,Vt,"outside-top","f"))}}}jt=new WeakMap,zt=new WeakMap,Vt=new WeakMap,Zt=new WeakMap,Kt=new WeakSet,Jt=function(){if(this.hiddenFromView)this.classList.remove("tooltip-open",..._t);else{this.classList.add("tooltip-open");for(const t of this.ownerDocument.querySelectorAll(this.tagName))t!==this&&(t.hiddenFromView=!0);mt(this,Kt,"m",Gt).call(this)}},Gt=function(){if(!this.control)return;if(!mt(this,Zt,"f")||this.hiddenFromView)return;this.style.left="0px";const t=It(this,this.control,{side:mt(this,Vt,"f"),align:mt(this,zt,"f"),anchorOffset:10}),e=t.anchorSide,n=t.anchorAlign;this.style.top=`${t.top}px`,this.style.left=`${t.left}px`;let o="s";o="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-${o}`)},ToolTipElement.observedAttributes=["data-type","data-direction","id"],window.customElements.get("tool-tip")||(window.ToolTipElement=ToolTipElement,window.customElements.define("tool-tip",ToolTipElement)); +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(o)[0],n=Array.from(this.list.querySelectorAll('[role="option"]')).filter(o),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 i(t,e){(function(t,e){const n=t.scrollTop,o=n+t.clientHeight,i=e.offsetTop,s=i+e.clientHeight;return i>=n&&s<=o})(t,e)||(t.scrollTop=e.offsetTop)}const s=window.testScreenReaderDelay||100;class r{constructor(t,n,o,i=!1){var s;if(this.container=t,this.input=n,this.results=o,this.combobox=new e(n,o),this.feedback=document.getElementById(`${this.results.id}-feedback`),this.autoselectEnabled=i,this.clearButton=document.getElementById(`${this.input.id||this.input.name}-clear`),this.clientOptions=o.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(...o){clearTimeout(n),n=window.setTimeout((()=>{clearTimeout(n),t(...o)}),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),o=new URLSearchParams(n.search.slice(1));o.append("q",t),n.search=o.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,o=e.length,[i]=e,s=null==i?void 0:i.textContent;this.autoselectEnabled&&s?this.updateFeedbackForScreenReaders(`${o} results. ${s} is the top result: Press Enter to activate.`):this.updateFeedbackForScreenReaders(`${o||"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 o=()=>c.delete(t),i=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 i.then(o,o),i}(t,n)}const u=new WeakMap;class AutocompleteElement 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 o="true"===this.getAttribute("data-autoselect");u.set(this,new r(this,e,n,o)),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 o=u.get(this);if(o)switch(t){case"open":null===n?o.close():o.open();break;case"value":null!==n&&(o.input.value=n),this.dispatchEvent(new a("auto-complete-change",{bubbles:!0,relatedTarget:o.input}))}}}function d(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 h(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),d(n),e.removeChild(n),Promise.resolve()}function f(t){const e=t.getAttribute("for"),n=t.getAttribute("value");function o(){t.dispatchEvent(new CustomEvent("clipboard-copy",{bubbles:!0}))}if(n)h(n).then(o);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&&(i=s,i instanceof HTMLInputElement||i instanceof HTMLTextAreaElement?h(i.value):i instanceof HTMLAnchorElement&&i.hasAttribute("href")?h(i.href):d(i)).then(o)}var i}function m(t){const e=t.currentTarget;e instanceof HTMLElement&&f(e)}function p(t){if(" "===t.key||"Enter"===t.key){const e=t.currentTarget;e instanceof HTMLElement&&(t.preventDefault(),f(e))}}function b(t){t.currentTarget.addEventListener("keydown",p)}function g(t){t.currentTarget.removeEventListener("keydown",p)}window.customElements.get("auto-complete")||(window.AutocompleteElement=AutocompleteElement,window.customElements.define("auto-complete",AutocompleteElement));class ClipboardCopyElement extends HTMLElement{constructor(){super(),this.addEventListener("click",m),this.addEventListener("focus",b),this.addEventListener("blur",g)}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=ClipboardCopyElement,window.customElements.define("clipboard-copy",ClipboardCopyElement));function w(t){t.style.display="inline-block"}function v(t){t.style.display="none"}const E=new WeakMap;function y(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=E.get(t);e?(clearTimeout(e),E.delete(t)):function(t){const[e,n]=t.querySelectorAll(".octicon");e&&n&&(v(e),w(n))}(t),E.set(t,setTimeout((()=>{!function(t){const[e,n]=t.querySelectorAll(".octicon");e&&n&&(w(e),v(n))}(t),E.delete(t)}),2e3))}));class TabContainerElement 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=y(this),o=n.indexOf(n.find((t=>t.matches('[aria-selected="true"]'))));if("ArrowRight"===t.code){let t=o+1;t>=n.length&&(t=0),A(this,t)}else if("ArrowLeft"===t.code){let t=o-1;t<0&&(t=n.length-1),A(this,t)}else"Home"===t.code?(A(this,0),t.preventDefault()):"End"===t.code&&(A(this,n.length-1),t.preventDefault())})),this.addEventListener("click",(t=>{const e=y(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;A(this,e.indexOf(n))}))}connectedCallback(){for(const t of y(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 A(t,e){const n=y(t),o=Array.from(t.querySelectorAll('[role="tabpanel"]')).filter((e=>e.closest(t.tagName)===t)),i=n[e],s=o[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 o)t.hidden=!0,t.hasAttribute("tabindex")||t.hasAttribute("data-tab-container-no-tabstop")||t.setAttribute("tabindex","0");i.setAttribute("aria-selected","true"),i.setAttribute("tabindex","0"),i.focus(),s.hidden=!1,t.dispatchEvent(new CustomEvent("tab-container-changed",{bubbles:!0,detail:{relatedTarget:s}}))}}window.customElements.get("tab-container")||(window.TabContainerElement=TabContainerElement,window.customElements.define("tab-container",TabContainerElement));const T=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],k=["January","February","March","April","May","June","July","August","September","October","November","December"];function L(t){return`0${t}`.slice(-2)}function x(t,e){const n=t.getDay(),o=t.getDate(),i=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 k[i].slice(0,3);case"B":return k[i];case"c":return t.toString();case"d":return L(o);case"e":return String(o);case"H":return L(r);case"I":return L(x(t,"%l"));case"l":return String(0===r||12===r?12:(r+12)%12);case"m":return L(i+1);case"M":return L(a);case"p":return r>11?"PM":"AM";case"P":return r>11?"pm":"am";case"S":return L(c);case"w":return String(n);case"y":return L(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 M(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 C=null;const S=M({day:"numeric",month:"short"});function D(){if(null!==C)return C;const t=S();if(t){const e=t.format(new Date(0));return C=!!e.match(/^\d/),C}return!1}let H=null;const F=M({day:"numeric",month:"short",year:"numeric"});function R(t){const e=t.closest("[lang]");return e instanceof HTMLElement&&e.lang?e.lang:"default"}const $=new WeakMap;class ExtendedTimeElement 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 o=this.getFormattedTitle();if("datetime"===t){const t=Date.parse(n);isNaN(t)?$.delete(this):$.set(this,new Date(t))}const i=this.getFormattedTitle(),s=this.getAttribute("title");"title"===t||!i||s&&s!==o||this.setAttribute("title",i);const r=this.getFormattedDate();r&&(this.textContent=r)}get date(){return $.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=M({day:"numeric",month:"short",year:"numeric",hour:"numeric",minute:"2-digit",timeZoneName:"short"}),I=new WeakMap;class LocalTimeElement extends ExtendedTimeElement{attributeChangedCallback(t,e,n){"hour"!==t&&"minute"!==t&&"second"!==t&&"time-zone-name"!==t||I.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 o=D()?"weekday day month year":"weekday month day, year";for(const e in n){const i=n[e][t.getAttribute(e)||""];o=o.replace(e,i||"")}return o=o.replace(/(\s,)|(,\s$)/,""),x(e,o).replace(/\s+/," ").trim()}(this,t)||""} ${function(t,e){const n={},o=t.getAttribute("hour");"numeric"!==o&&"2-digit"!==o||(n.hour=o);const i=t.getAttribute("minute");"numeric"!==i&&"2-digit"!==i||(n.minute=i);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=I.get(t);a||(a=M(n),I.set(t,a));const c=a();if(c)return c.format(e);return x(e,n.second?"%H:%M:%S":"%H:%M")}(this,t)||""}`.trim()}}window.customElements.get("local-time")||(window.LocalTimeElement=LocalTimeElement,window.customElements.define("local-time",LocalTimeElement));class W{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),o=Math.round(n/60),i=Math.round(o/24);return t>=0&&i<30?this.timeAgoFromMs(t):null}timeAhead(){const t=this.date.getTime()-(new Date).getTime(),e=Math.round(t/1e3),n=Math.round(e/60),o=Math.round(n/60),i=Math.round(o/24);return t>=0&&i<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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return t<0||e<10?q(this.locale,0,"second"):e<45?q(this.locale,-e,"second"):e<90||n<45?q(this.locale,-n,"minute"):n<90||o<24?q(this.locale,-o,"hour"):o<36||i<30?q(this.locale,-i,"day"):s<18?q(this.locale,-s,"month"):q(this.locale,-r,"year")}microTimeAgo(){const t=(new Date).getTime()-this.date.getTime(),e=Math.round(t/1e3),n=Math.round(e/60),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return n<1?"1m":n<60?`${n}m`:o<24?`${o}h`:i<365?`${i}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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return s>=18||s>=12?q(this.locale,r,"year"):i>=45||i>=30?q(this.locale,s,"month"):o>=36||o>=24?q(this.locale,i,"day"):n>=90||n>=45?q(this.locale,o,"hour"):e>=90||e>=45?q(this.locale,n,"minute"):q(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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return i>=365?`${r}y`:o>=24?`${i}d`:n>=60?`${o}h`:n>1?`${n}m`:"1m"}formatDate(){let t=D()?"%e %b":"%b %e";var e;return e=this.date,(new Date).getUTCFullYear()!==e.getUTCFullYear()&&(t+=function(){if(null!==H)return H;const t=F();if(t){const e=t.format(new Date(0));return H=!!e.match(/\d,/),H}return!0}()?", %Y":" %Y"),x(this.date,t)}formatTime(){const t=P();return t?t.format(this.date):x(this.date,"%l:%M%P")}}function q(t,e,n){const o=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 o?o.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=M({hour:"numeric",minute:"2-digit"});class RelativeTimeElement extends ExtendedTimeElement{getFormattedDate(){const t=this.date;if(t)return new W(t,R(this)).toString()}connectedCallback(){N.push(this),B||(Y(),B=window.setInterval(Y,6e4)),super.connectedCallback()}disconnectedCallback(){const t=N.indexOf(this);-1!==t&&N.splice(t,1),N.length||B&&(clearInterval(B),B=null)}}const N=[];let B;function Y(){let t,e,n;for(e=0,n=N.length;e=0&&n.classList.add("nwse"),["ne","sw"].indexOf(e)>=0&&n.classList.add("nesw"),U.set(n,{startX:o.offsetLeft+(["se","ne"].indexOf(e)>=0?0:o.offsetWidth),startY:o.offsetTop+(["se","sw"].indexOf(e)>=0?0:o.offsetHeight)}),z(t)}else n.addEventListener("mousemove",j),n.addEventListener("touchmove",j,{passive:!0})}function _(t,e,n,o=!0){let i=Math.max(Math.abs(e),Math.abs(n),10);const s=U.get(t);if(!s)return;const{box:r,image:a}=K.get(t)||{};if(!r||!a)return;i=Math.min(i,n>0?a.height-s.startY:s.startY,e>0?a.width-s.startX:s.startX);const c=o?Math.round(Math.max(0,e>0?s.startX:s.startX-i)):r.offsetLeft,l=o?Math.round(Math.max(0,n>0?s.startY:s.startY-i)):r.offsetTop;r.style.left=`${c}px`,r.style.top=`${l}px`,r.style.width=`${i}px`,r.style.height=`${i}px`,Q(t,{x:c,y:l,width:i,height:i})}function J(t){const{image:e}=K.get(t)||{};if(!e)return;const n=Math.round(e.clientWidth>e.clientHeight?e.clientHeight:e.clientWidth);U.set(t,{startX:(e.clientWidth-n)/2,startY:(e.clientHeight-n)/2}),_(t,n,n)}function G(t){const e=t.currentTarget;e instanceof ImageCropElement&&(X.delete(e),e.classList.remove("nwse","nesw"),e.removeEventListener("mousemove",z),e.removeEventListener("mousemove",j),e.removeEventListener("touchmove",z),e.removeEventListener("touchmove",j))}function Q(t,e){const{image:n}=K.get(t)||{};if(!n)return;const o=n.naturalWidth/n.width;for(const n in e){const i=Math.round(e[n]*o);e[n]=i;const s=t.querySelector(`[data-image-crop-input='${n}']`);s instanceof HTMLInputElement&&(s.value=i.toString())}t.dispatchEvent(new CustomEvent("image-crop-change",{bubbles:!0,detail:e}))}class ImageCropElement extends HTMLElement{connectedCallback(){if(K.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&&(K.set(this,{box:e,image:n}),n.addEventListener("load",(()=>{this.loaded=!0,J(this)})),this.addEventListener("mouseleave",G),this.addEventListener("touchend",G),this.addEventListener("mouseup",G),e.addEventListener("mousedown",Z),e.addEventListener("touchstart",Z,{passive:!0}),this.addEventListener("keydown",j),this.addEventListener("keydown",z),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:o}=K.get(this)||{};"src"===t&&(this.loaded=!1,o&&(o.src=n))}}window.customElements.get("image-crop")||(window.ImageCropElement=ImageCropElement,window.customElements.define("image-crop",ImageCropElement));class DetailsMenuElement 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=[nt(t,"compositionstart",(t=>ht(this,t))),nt(t,"compositionend",(t=>ht(this,t))),nt(t,"click",(e=>ct(t,e))),nt(t,"change",(e=>ct(t,e))),nt(t,"keydown",(e=>function(t,e,n){if(!(n instanceof KeyboardEvent))return;if(t.querySelector("details[open]"))return;const o=tt.get(e);if(!o||o.isComposing)return;const i=n.target instanceof Element&&"SUMMARY"===n.target.tagName;switch(n.key){case"Escape":t.hasAttribute("open")&&(dt(t),n.preventDefault(),n.stopPropagation());break;case"ArrowDown":{i&&!t.hasAttribute("open")&&t.setAttribute("open","");const e=rt(t,!0);e&&e.focus(),n.preventDefault()}break;case"ArrowUp":{i&&!t.hasAttribute("open")&&t.setAttribute("open","");const e=rt(t,!1);e&&e.focus(),n.preventDefault()}break;case"n":if(at&&n.ctrlKey){const e=rt(t,!0);e&&e.focus(),n.preventDefault()}break;case"p":if(at&&n.ctrlKey){const e=rt(t,!1);e&&e.focus(),n.preventDefault()}break;case" ":case"Enter":{const e=document.activeElement;e instanceof HTMLElement&&ut(e)&&e.closest("details")===t&&(n.preventDefault(),n.stopPropagation(),e.click())}}}(t,this,e))),nt(t,"toggle",(()=>ot(t,this)),{once:!0}),nt(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?nt(t,"mouseover",(()=>ot(t,this)),{once:!0}):et,...it(t)];tt.set(this,{subscriptions:n,loaded:!1,isComposing:!1})}disconnectedCallback(){const t=tt.get(this);if(t){tt.delete(this);for(const e of t.subscriptions)e.unsubscribe()}}}const tt=new WeakMap,et={unsubscribe(){}};function nt(t,e,n,o=!1){return t.addEventListener(e,n,o),{unsubscribe:()=>{t.removeEventListener(e,n,o)}}}function ot(t,e){const n=e.getAttribute("src");if(!n)return;const o=tt.get(e);if(!o)return;if(o.loaded)return;o.loaded=!0;const i=e.querySelector("include-fragment");i&&!i.hasAttribute("src")&&(i.addEventListener("loadend",(()=>st(t))),i.setAttribute("src",n))}function it(t){let e=!1;return[nt(t,"mousedown",(()=>e=!0)),nt(t,"keydown",(()=>e=!1)),nt(t,"toggle",(()=>{t.hasAttribute("open")&&(st(t)||e||function(t){const e=document.activeElement;if(e&&ut(e)&&t.contains(e))return;const n=rt(t,!0);n&&n.focus()}(t))}))]}function st(t){if(!t.hasAttribute("open"))return!1;const e=t.querySelector("details-menu [autofocus]");return!!e&&(e.focus(),!0)}function rt(t,e){const n=Array.from(t.querySelectorAll('[role^="menuitem"]:not([hidden]):not([disabled]):not([aria-disabled="true"])')),o=document.activeElement,i=o instanceof HTMLElement?n.indexOf(o):-1,s=e?n[i+1]:n[i-1],r=e?n[0]:n[n.length-1];return s||r}const at=navigator.userAgent.match(/Macintosh/);function ct(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 o=e.querySelector("input");if("LABEL"===e.tagName&&n===o)return;"LABEL"===e.tagName&&o&&!o.checked||lt(e,t)}else if("change"===e.type){const e=n.closest('[role="menuitemradio"], [role="menuitemcheckbox"]');e&<(e,t)}}function lt(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 o=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(o)n.textContent=o;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 o=(n===t).toString();e instanceof HTMLInputElement&&(o=e.indeterminate?"mixed":e.checked.toString()),n.setAttribute("aria-checked",o)}}(t,e),"menuitemcheckbox"!==t.getAttribute("role")&&dt(e),n.dispatchEvent(new CustomEvent("details-menu-selected",{detail:{relatedTarget:t}})))}function ut(t){const e=t.getAttribute("role");return"menuitem"===e||"menuitemcheckbox"===e||"menuitemradio"===e}function dt(t){if(!t.hasAttribute("open"))return;t.removeAttribute("open");const e=t.querySelector("summary");e&&e.focus()}function ht(t,e){const n=tt.get(t);n&&(n.isComposing="compositionstart"===e.type)}function ft(t,e,n,o){var i,s=arguments.length,r=s<3?e:null===o?o=Object.getOwnPropertyDescriptor(e,n):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,n,o);else for(var a=t.length-1;a>=0;a--)(i=t[a])&&(r=(s<3?i(r):s>3?i(e,n,r):i(e,n))||r);return s>3&&r&&Object.defineProperty(e,n,r),r}function mt(t,e,n,o){if("a"===n&&!o)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?o:"a"===n?o.call(t):o?o.value:e.get(t)}function pt(t,e,n,o,i){if("m"===o)throw new TypeError("Private method is not writable");if("a"===o&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===o?i.call(t,n):i?i.value=n:e.set(t,n),n}window.customElements.get("details-menu")||(window.DetailsMenuElement=DetailsMenuElement,window.customElements.define("details-menu",DetailsMenuElement));const bt=new WeakSet;function gt(t){Et(t),vt(t)}const wt=new WeakMap;function vt(t=document){if(wt.has(t))return wt.get(t);let e=!1;const n=new MutationObserver((t=>{for(const e of t)if("attributes"===e.type&&e.target instanceof Element)Tt(e.target);else if("childList"===e.type&&e.addedNodes.length)for(const t of e.addedNodes)t instanceof Element&&Et(t)}));n.observe(t,{childList:!0,subtree:!0,attributeFilter:["data-action"]});const o={get closed(){return e},unsubscribe(){e=!0,wt.delete(t),n.disconnect()}};return wt.set(t,o),o}function Et(t){for(const e of t.querySelectorAll("[data-action]"))Tt(e);t instanceof Element&&t.hasAttribute("data-action")&&Tt(t)}function yt(t){const e=t.currentTarget;for(const n of At(e))if(t.type===n.type){const o=e.closest(n.tag);bt.has(o)&&"function"==typeof o[n.method]&&o[n.method](t);const i=e.getRootNode();if(i instanceof ShadowRoot&&bt.has(i.host)&&i.host.matches(n.tag)){const e=i.host;"function"==typeof e[n.method]&&e[n.method](t)}}}function*At(t){for(const e of(t.getAttribute("data-action")||"").trim().split(/\s+/)){const t=e.lastIndexOf(":"),n=Math.max(0,e.lastIndexOf("#"))||e.length;yield{type:e.slice(0,t),tag:e.slice(t+1,n),method:e.slice(n+1)||"handleEvent"}||"handleEvent"}}function Tt(t){for(const e of At(t))t.addEventListener(e.type,yt)}const kt=t=>String("symbol"==typeof t?t.description:t).replace(/([A-Z]($|[a-z]))/g,"-$1").replace(/--/g,"-").replace(/^-|-$/,"").toLowerCase(),Lt=(t,e="property")=>{const n=kt(t);if(!n.includes("-"))throw new DOMException(`${e}: ${String(t)} is not a valid ${e} name`,"SyntaxError");return n};const xt=new WeakSet;function Mt(t,e){if(xt.has(t))return;xt.add(t);const n=Object.getPrototypeOf(t),o=n?.constructor?.attrPrefix??"data-";e||(e=Dt(n,"attr"));for(const n of e){const e=t[n],i=Lt(`${o}${n}`);let s={configurable:!0,get(){return this.getAttribute(i)||""},set(t){this.setAttribute(i,t||"")}};"number"==typeof e?s={configurable:!0,get(){return Number(this.getAttribute(i)||0)},set(t){this.setAttribute(i,t)}}:"boolean"==typeof e&&(s={configurable:!0,get(){return this.hasAttribute(i)},set(t){this.toggleAttribute(i,t)}}),Object.defineProperty(t,n,s),n in t&&!t.hasAttribute(i)&&s.set.call(t,e)}}const Ct=Symbol.for("catalyst");class St{constructor(t){const e=this,n=t.prototype.connectedCallback;t.prototype.connectedCallback=function(){e.connectedCallback(this,n)};const o=t.prototype.disconnectedCallback;t.prototype.disconnectedCallback=function(){e.disconnectedCallback(this,o)};const i=t.prototype.attributeChangedCallback;t.prototype.attributeChangedCallback=function(t,n,o){e.attributeChangedCallback(this,t,n,o,i)};let s=t.observedAttributes||[];Object.defineProperty(t,"observedAttributes",{configurable:!0,get(){return e.observedAttributes(this,s)},set(t){s=t}}),function(t){let e=t.observedAttributes||[];const n=t.attrPrefix??"data-",o=t=>Lt(`${n}${t}`);Object.defineProperty(t,"observedAttributes",{configurable:!0,get:()=>[...Dt(t.prototype,"attr")].map(o).concat(e),set(t){e=t}})}(t),function(t){const e=kt(t.name).replace(/-element$/,"");try{window.customElements.define(e,t),window[t.name]=customElements.get(e)}catch(t){if(!(t instanceof DOMException&&"NotSupportedError"===t.name))throw t}}(t)}observedAttributes(t,e){return e}connectedCallback(t,e){t.toggleAttribute("data-catalyst",!0),customElements.upgrade(t),function(t){for(const e of t.querySelectorAll("template[data-shadowroot]"))e.parentElement===t&&t.attachShadow({mode:"closed"===e.getAttribute("data-shadowroot")?"closed":"open"}).append(e.content.cloneNode(!0))}(t),Mt(t),function(t){bt.add(t),t.shadowRoot&>(t.shadowRoot),Et(t),vt(t.ownerDocument)}(t),e?.call(t),t.shadowRoot&>(t.shadowRoot)}disconnectedCallback(t,e){e?.call(t)}attributeChangedCallback(t,e,n,o,i){Mt(t),"data-catalyst"!==e&&i&&i.call(t,e,n,o)}}function Dt(t,e){if(!Object.prototype.hasOwnProperty.call(t,Ct)){const e=t[Ct],n=t[Ct]=new Map;if(e)for(const[t,o]of e)n.set(t,new Set(o))}const n=t[Ct];return n.has(e)||n.set(e,new Set),n.get(e)}function Ht(t,e){Dt(t,"target").add(e),Object.defineProperty(t,e,{configurable:!0,get(){return function(t,e){const n=t.tagName.toLowerCase();if(t.shadowRoot)for(const o of t.shadowRoot.querySelectorAll(`[data-target~="${n}.${e}"]`))if(!o.closest(n))return o;for(const o of t.querySelectorAll(`[data-target~="${n}.${e}"]`))if(o.closest(n)===t)return o}(this,e)}})}function Ft(t,e=0,{start:n=!1,middle:o=!1,once:i=!1}={}){return function(t,e=0,{start:n=!0,middle:o=!0,once:i=!1}={}){let s,r=0,a=!1;function c(...l){if(a)return;const u=Date.now()-r;r=Date.now(),n?(n=!1,t.apply(this,l),i&&c.cancel()):(o&&u{r=Date.now(),t.apply(this,l),i&&c.cancel()}),o?e-u:e))}return c.cancel=()=>{clearTimeout(s),a=!0},c}(t,e,{start:n,middle:o,once:i})}new Promise((t=>{"loading"!==document.readyState?t():document.addEventListener("readystatechange",(()=>t()),{once:!0})})),new Promise((t=>{const e=new AbortController;e.signal.addEventListener("abort",(()=>t()));const n={once:!0,passive:!0,signal:e.signal},o=()=>e.abort();document.addEventListener("mousedown",o,n),document.addEventListener("touchstart",o,n),document.addEventListener("keydown",o,n),document.addEventListener("pointerdown",o,n)}));let Rt=class ToggleSwitchElement extends HTMLElement{get src(){const t=this.getAttribute("src");if(!t)return null;const e=this.ownerDocument.createElement("a");return e.href=t,e.href}get csrf(){const t=this.querySelector("[data-csrf]");return this.getAttribute("csrf")||t instanceof HTMLInputElement&&t.value||null}get csrfField(){return this.getAttribute("csrf-field")||"authenticity_token"}isRemote(){return null!=this.src}toggle(){this.isRemote()?(this.setLoadingState(),this.check()):this.performToggle()}turnOn(){this.isDisabled()||(this.switch.setAttribute("aria-checked","true"),this.classList.add("ToggleSwitch--checked"))}turnOff(){this.isDisabled()||(this.switch.setAttribute("aria-checked","false"),this.classList.remove("ToggleSwitch--checked"))}isOn(){return"true"===this.switch.getAttribute("aria-checked")}isOff(){return!this.isOn()}isDisabled(){return"true"===this.switch.getAttribute("aria-disabled")}disable(){this.switch.setAttribute("aria-disabled","true")}enable(){this.switch.setAttribute("aria-disabled","false")}performToggle(){this.isOn()?this.turnOff():this.turnOn()}setLoadingState(){this.disable(),this.errorIcon.setAttribute("hidden","hidden"),this.loadingSpinner.removeAttribute("hidden")}setSuccessState(){this.setFinishedState(!1)}setErrorState(){this.setFinishedState(!0)}setFinishedState(t){t&&this.errorIcon.removeAttribute("hidden"),this.loadingSpinner.setAttribute("hidden","hidden"),this.enable()}async check(){const t=new FormData;this.csrf&&t.append(this.csrfField,this.csrf),t.append("value",this.isOn()?"1":"0");try{(await fetch(this.src,{credentials:"same-origin",method:"POST",body:t})).ok?(this.setSuccessState(),this.performToggle()):this.setErrorState()}catch(t){this.setErrorState()}}};ft([Ht],Rt.prototype,"switch",void 0),ft([Ht],Rt.prototype,"loadingSpinner",void 0),ft([Ht],Rt.prototype,"errorIcon",void 0),ft([function(t=0,e={}){return(n,o,i)=>{if(!i||"function"!=typeof i.value)throw new Error("debounce can only decorate functions");const s=i.value;i.value=Ft(s,t,e),Object.defineProperty(n,o,i)}}(300)],Rt.prototype,"check",null),Rt=ft([function(t){new St(t)}],Rt);const $t={"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"]},Ot={start:["end","center"],end:["start","center"],center:["end","start"]};function It(t,e,n={}){const o=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),i=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,o=n.getBoundingClientRect(),i=getComputedStyle(n),[s,r,a,c]=[i.borderTopWidth,i.borderLeftWidth,i.borderRightWidth,i.borderBottomWidth].map((t=>parseInt(t,10)||0));return{top:o.top+s,left:o.left+r,width:o.width-a-r,height:Math.max(o.height-s-c,n===document.body?window.innerHeight:-1/0)}}(o),s=getComputedStyle(o),r=o.getBoundingClientRect(),[a,c]=[s.borderTopWidth,s.borderLeftWidth].map((t=>parseInt(t,10)||0));return function(t,e,n,o,{side:i,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=Yt(n,o,i,s,a,c),d=i,h=s;if(u.top-=e.top,u.left-=e.left,!r){const r=$t[i];let f=0;if(r){let t=i;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})}(i,{top:r.top+a,left:r.left+c},t.getBoundingClientRect(),e instanceof Element?e.getBoundingClientRect():e,function(t={}){var e,n,o,i,s;const r=null!==(e=t.side)&&void 0!==e?e:Wt,a=null!==(n=t.align)&&void 0!==n?n:qt;return{side:r,align:a,anchorOffset:null!==(o=t.anchorOffset)&&void 0!==o?o:"inside-center"===r?0:Pt,alignmentOffset:null!==(i=t.alignmentOffset)&&void 0!==i?i:"center"!==a&&r.startsWith("inside")?Nt:0,allowOutOfBounds:null!==(s=t.allowOutOfBounds)&&void 0!==s?s:Bt}}(n))}const Wt="outside-bottom",qt="start",Pt=4,Nt=4,Bt=!1;function Yt(t,e,n,o,i,s){const r=e.left+e.width,a=e.top+e.height;let c=-1,l=-1;return"outside-top"===n?c=e.top-i-t.height:"outside-bottom"===n?c=a+i:"outside-left"===n?l=e.left-i-t.width:"outside-right"===n&&(l=r+i),"outside-top"!==n&&"outside-bottom"!==n||(l="start"===o?e.left+s:"center"===o?e.left-(t.width-e.width)/2+s:r-t.width-s),"outside-left"!==n&&"outside-right"!==n||(c="start"===o?e.top+s:"center"===o?e.top-(t.height-e.height)/2+s:a-t.height-s),"inside-top"===n?c=e.top+i:"inside-bottom"===n?c=a-i-t.height:"inside-left"===n?l=e.left+i:"inside-right"===n?l=r-i-t.width:"inside-center"===n&&(l=(r+e.left)/2-t.width/2+i),"inside-top"===n||"inside-bottom"===n?l="start"===o?e.left+s:"center"===o?e.left-(t.width-e.width)/2+s:r-t.width-s:"inside-left"!==n&&"inside-right"!==n&&"inside-center"!==n||(c="start"===o?e.top+s:"center"===o?e.top-(t.height-e.height)/2+s:a-t.height-s),{top:c,left:l}}function Ut(t,e,n,o){return"outside-top"===t||"outside-bottom"===t?e.topn.height+n.top:e.leftn.width+n.left}function Xt(t,e,n,o){return"end"===t?e.leftn.left+n.width||e.leftt instanceof HTMLElement&&s(t,i)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP});let a=null;if(!e.reverse&&s(t,i)&&(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,i)&&(yield t)}(t,{reverse:e,strict:!0,onlyTabbable:!0}).next().value}function jt(t,e=!1){const n=["BUTTON","INPUT","SELECT","TEXTAREA","OPTGROUP","OPTION","FIELDSET"].includes(t.tagName)&&t.disabled,o=t.hidden,i=t instanceof HTMLInputElement&&"hidden"===t.type,s=t.classList.contains("sentinel");if(n||o||i||s)return!1;if(e){const e=0===t.offsetWidth||0===t.offsetHeight,n=["hidden","collapse"].includes(getComputedStyle(t).visibility),o=0===t.getClientRects().length;if(e||n||o)return!1}return null!=t.getAttribute("tabindex")||!(t instanceof HTMLAnchorElement&&null==t.getAttribute("href"))&&-1!==t.tabIndex}function zt(t,e=!1){return jt(t,e)&&"-1"!==t.getAttribute("tabindex")}let Vt=!1;function Zt(){}try{const t=Object.create({},{signal:{get(){Vt=!0}}});window.addEventListener("test",Zt,t),window.removeEventListener("test",Zt,t)}catch(t){}Vt||(function(){if("undefined"==typeof window)return;const t=EventTarget.prototype.addEventListener;EventTarget.prototype.addEventListener=function(e,n,o){return"object"==typeof o&&"signal"in o&&o.signal instanceof AbortSignal&&t.call(o.signal,"abort",(()=>{this.removeEventListener(e,n,o)})),t.call(this,e,n,o)}}(),Vt=!0);const _t=[];let Jt;function Gt(t,e,n){const o=new AbortController,i=null!=n?n:o.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=Kt(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&&zt(a)&&t.contains(a))return void a.focus();if(e&&t.contains(e))return void e.focus();{const e=Kt(t);return void(null==e||e.focus())}}}r.setAttribute("class","sentinel"),r.setAttribute("tabindex","0"),r.setAttribute("aria-hidden","true"),r.onfocus=()=>{const e=Kt(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}(i);if(Jt){const t=Jt;Jt.container.setAttribute("data-focus-trap","suspended"),Jt.controller.abort(),_t.push(t)}l.signal.addEventListener("abort",(()=>{Jt=void 0})),i.addEventListener("abort",(()=>{t.removeAttribute("data-focus-trap");const e=t.getElementsByClassName("sentinel");for(;e.length>0;)e[0].remove();const n=_t.findIndex((e=>e.container===t));n>=0&&_t.splice(n,1),function(){const t=_t.pop();t&&Gt(t.container,t.initialFocus,t.originalSignal)}()})),document.addEventListener("focus",(t=>{c(t.target)}),{signal:l.signal,capture:!0}),c(document.activeElement),Jt={container:t,controller:l,initialFocus:e,originalSignal:i};const u=_t.findIndex((e=>e.container===t));if(u>=0&&_t.splice(u,1),!n)return o}var Qt,te,ee,ne,oe,ie,se;const re=["tooltip-n","tooltip-s","tooltip-e","tooltip-w","tooltip-ne","tooltip-se","tooltip-nw","tooltip-sw"];class ToolTipElement extends HTMLElement{constructor(){super(...arguments),Qt.add(this),te.set(this,void 0),ee.set(this,"center"),ne.set(this,"outside-bottom"),oe.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)}set hiddenFromView(t){this.classList.toggle("sr-only",t),this.isConnected&&mt(this,Qt,"m",ie).call(this)}get hiddenFromView(){return this.classList.contains("sr-only")}connectedCallback(){var t;if(!this.shadowRoot){this.attachShadow({mode:"open"}).innerHTML=`\n \n \n `}if(this.hiddenFromView=!0,pt(this,oe,!0,"f"),this.id||(this.id=`tooltip-${Date.now()}-${(1e4*Math.random()).toFixed(0)}`),!this.control)return;this.setAttribute("role","tooltip"),null===(t=mt(this,te,"f"))||void 0===t||t.abort(),pt(this,te,new AbortController,"f");const{signal:e}=mt(this,te,"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}),mt(this,Qt,"m",ie).call(this)}disconnectedCallback(){var t;null===(t=mt(this,te,"f"))||void 0===t||t.abort()}handleEvent(t){this.control&&("mouseenter"!==t.type&&"focus"!==t.type||!this.hiddenFromView?"blur"===t.type||"mouseleave"===t.type&&t.relatedTarget!==this.control&&t.relatedTarget!==this?this.hiddenFromView=!0:"keydown"!==t.type||"Escape"!==t.key||this.hiddenFromView||(this.hiddenFromView=!0):this.hiddenFromView=!1)}attributeChangedCallback(t){if("id"===t||"data-type"===t){if(!this.id||!this.control)return;if("label"===this.type){let t=this.control.getAttribute("aria-labelledby");t=t?`${t} ${this.id}`:this.id,this.control.setAttribute("aria-labelledby",t),this.setAttribute("aria-hidden","true")}else{let t=this.control.getAttribute("aria-describedby");t=t?`${t} ${this.id}`:this.id,this.control.setAttribute("aria-describedby",t)}}else if("data-direction"===t){this.classList.remove(...re);const t=this.direction;"n"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-top","f")):"ne"===t?(pt(this,ee,"start","f"),pt(this,ne,"outside-top","f")):"e"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-right","f")):"se"===t?(pt(this,ee,"start","f"),pt(this,ne,"outside-bottom","f")):"s"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-bottom","f")):"sw"===t?(pt(this,ee,"end","f"),pt(this,ne,"outside-bottom","f")):"w"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-left","f")):"nw"===t&&(pt(this,ee,"end","f"),pt(this,ne,"outside-top","f"))}}}var ae,ce,le,ue,de,he,fe;function me(t){document.activeElement!==t&&(null==t||t.focus())}te=new WeakMap,ee=new WeakMap,ne=new WeakMap,oe=new WeakMap,Qt=new WeakSet,ie=function(){if(this.hiddenFromView)this.classList.remove("tooltip-open",...re);else{this.classList.add("tooltip-open");for(const t of this.ownerDocument.querySelectorAll(this.tagName))t!==this&&(t.hiddenFromView=!0);mt(this,Qt,"m",se).call(this)}},se=function(){if(!this.control)return;if(!mt(this,oe,"f")||this.hiddenFromView)return;this.style.left="0px";const t=It(this,this.control,{side:mt(this,ne,"f"),align:mt(this,ee,"f"),anchorOffset:10}),e=t.anchorSide,n=t.anchorAlign;this.style.top=`${t.top}px`,this.style.left=`${t.left}px`;let o="s";o="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-${o}`)},ToolTipElement.observedAttributes=["data-type","data-direction","id"],window.customElements.get("tool-tip")||(window.ToolTipElement=ToolTipElement,window.customElements.define("tool-tip",ToolTipElement));class ModalDialogElement extends HTMLElement{constructor(){super(...arguments),ae.add(this),ce.set(this,new AbortController),le.set(this,null),ue.set(this,void 0),de.set(this,!0)}get open(){return this.hasAttribute("open")}set open(t){var e,n,o,i;if(t){if(this.open)return;this.setAttribute("open",""),null===(e=mt(this,ae,"a",he))||void 0===e||e.classList.remove("Overlay--hidden"),document.body.style.overflow="hidden",mt(this,ce,"f").signal.aborted&&pt(this,ce,new AbortController,"f"),Gt(this,void 0,mt(this,ce,"f").signal)}else{if(!this.open)return;this.removeAttribute("open"),null===(n=mt(this,ae,"a",he))||void 0===n||n.classList.add("Overlay--hidden"),document.body.style.overflow="initial",mt(this,ce,"f").abort();const t=(null===(o=mt(this,ue,"f"))||void 0===o?void 0:o.closest("details"))||(null===(i=mt(this,ue,"f"))||void 0===i?void 0:i.closest("action-menu"));me(t?Kt(t):mt(this,ue,"f")),pt(this,ue,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}=pt(this,le,new AbortController,"f");this.ownerDocument.addEventListener("click",(t=>{const e=t.target,n=e.closest(this.tagName)!==this,o=null==e?void 0:e.closest("button");if(!o)return void(n&&this.close());let i=o.getAttribute("data-close-dialog-id");i===this.id&&this.close(),i=o.getAttribute("data-submit-dialog-id"),i===this.id&&this.close(!0),i=o.getAttribute("data-show-dialog-id"),i===this.id&&(t.stopPropagation(),pt(this,ue,o,"f"),this.show())}),{signal:t}),this.addEventListener("keydown",(t=>mt(this,ae,"m",fe).call(this,t)))}disconnectedCallback(){var t;null===(t=mt(this,le,"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}}ce=new WeakMap,le=new WeakMap,ue=new WeakMap,de=new WeakMap,ae=new WeakSet,he=function(){var t;return(null===(t=this.parentElement)||void 0===t?void 0:t.hasAttribute("data-modal-dialog-overlay"))?this.parentElement:null},fe=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=ModalDialogElement,window.customElements.define("modal-dialog",ModalDialogElement)); //# sourceMappingURL=primer_view_components.js.map diff --git a/docs/static/primer_view_components.js.map b/docs/static/primer_view_components.js.map index 45c5c0a83a..90b78716cf 100644 --- a/docs/static/primer_view_components.js.map +++ b/docs/static/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/@github/catalyst/lib/bind.js","../../../node_modules/@github/catalyst/lib/dasherize.js","../../../node_modules/@github/catalyst/lib/attr.js","../../../node_modules/@github/catalyst/lib/core.js","../../../node_modules/@github/catalyst/lib/register.js","../../../node_modules/@github/catalyst/lib/auto-shadow-root.js","../../../node_modules/@github/catalyst/lib/target.js","../../../node_modules/@github/catalyst/lib/findtarget.js","../../../node_modules/@github/mini-throttle/dist/index.js","../../../node_modules/@github/catalyst/lib/lazy-define.js","../../components/primer/alpha/toggle-switch-element.ts","../../../node_modules/@github/mini-throttle/dist/decorators.js","../../../node_modules/@github/catalyst/lib/controller.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 controllers = new WeakSet();\n/*\n * Bind `[data-action]` elements from the DOM to their actions.\n *\n */\nexport function bind(controller) {\n controllers.add(controller);\n if (controller.shadowRoot)\n bindShadow(controller.shadowRoot);\n bindElements(controller);\n listenForBind(controller.ownerDocument);\n}\nexport function bindShadow(root) {\n bindElements(root);\n listenForBind(root);\n}\nconst observers = new WeakMap();\n/**\n * Set up observer that will make sure any actions that are dynamically\n * injected into `el` will be bound to it's controller.\n *\n * This returns a Subscription object which you can call `unsubscribe()` on to\n * stop further live updates.\n */\nexport function listenForBind(el = document) {\n if (observers.has(el))\n return observers.get(el);\n let closed = false;\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.target instanceof Element) {\n bindActions(mutation.target);\n }\n else if (mutation.type === 'childList' && mutation.addedNodes.length) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element) {\n bindElements(node);\n }\n }\n }\n }\n });\n observer.observe(el, { childList: true, subtree: true, attributeFilter: ['data-action'] });\n const subscription = {\n get closed() {\n return closed;\n },\n unsubscribe() {\n closed = true;\n observers.delete(el);\n observer.disconnect();\n }\n };\n observers.set(el, subscription);\n return subscription;\n}\nfunction bindElements(root) {\n for (const el of root.querySelectorAll('[data-action]')) {\n bindActions(el);\n }\n // Also bind the controller to itself\n if (root instanceof Element && root.hasAttribute('data-action')) {\n bindActions(root);\n }\n}\n// Bind a single function to all events to avoid anonymous closure performance penalty.\nfunction handleEvent(event) {\n const el = event.currentTarget;\n for (const binding of bindings(el)) {\n if (event.type === binding.type) {\n const controller = el.closest(binding.tag);\n if (controllers.has(controller) && typeof controller[binding.method] === 'function') {\n controller[binding.method](event);\n }\n const root = el.getRootNode();\n if (root instanceof ShadowRoot && controllers.has(root.host) && root.host.matches(binding.tag)) {\n const shadowController = root.host;\n if (typeof shadowController[binding.method] === 'function') {\n shadowController[binding.method](event);\n }\n }\n }\n }\n}\nfunction* bindings(el) {\n for (const action of (el.getAttribute('data-action') || '').trim().split(/\\s+/)) {\n const eventSep = action.lastIndexOf(':');\n const methodSep = Math.max(0, action.lastIndexOf('#')) || action.length;\n yield {\n type: action.slice(0, eventSep),\n tag: action.slice(eventSep + 1, methodSep),\n method: action.slice(methodSep + 1) || 'handleEvent'\n } || 'handleEvent';\n }\n}\nfunction bindActions(el) {\n for (const binding of bindings(el)) {\n el.addEventListener(binding.type, handleEvent);\n }\n}\n//# sourceMappingURL=bind.js.map","export const dasherize = (str) => String(typeof str === 'symbol' ? str.description : str)\n .replace(/([A-Z]($|[a-z]))/g, '-$1')\n .replace(/--/g, '-')\n .replace(/^-|-$/, '')\n .toLowerCase();\nexport const mustDasherize = (str, type = 'property') => {\n const dashed = dasherize(str);\n if (!dashed.includes('-')) {\n throw new DOMException(`${type}: ${String(str)} is not a valid ${type} name`, 'SyntaxError');\n }\n return dashed;\n};\n//# sourceMappingURL=dasherize.js.map","import { mustDasherize } from './dasherize.js';\nimport { meta } from './core.js';\nconst attrKey = 'attr';\n/**\n * Attr is a decorator which tags a property as one to be initialized via\n * `initializeAttrs`.\n *\n * The signature is typed such that the property must be one of a String,\n * Number or Boolean. This matches the behavior of `initializeAttrs`.\n */\nexport function attr(proto, key) {\n meta(proto, attrKey).add(key);\n}\n/**\n * initializeAttrs is called with a set of class property names (if omitted, it\n * will look for any properties tagged with the `@attr` decorator). With this\n * list it defines property descriptors for each property that map to `data-*`\n * attributes on the HTMLElement instance.\n *\n * It works around Native Class Property semantics - which are equivalent to\n * calling `Object.defineProperty` on the instance upon creation, but before\n * `constructor()` is called.\n *\n * If a class property is assigned to the class body, it will infer the type\n * (using `typeof`) and define an appropriate getter/setter combo that aligns\n * to that type. This means class properties assigned to Numbers can only ever\n * be Numbers, assigned to Booleans can only ever be Booleans, and assigned to\n * Strings can only ever be Strings.\n *\n * This is automatically called as part of `@controller`. If a class uses the\n * `@controller` decorator it should not call this manually.\n */\nconst initialized = new WeakSet();\nexport function initializeAttrs(instance, names) {\n if (initialized.has(instance))\n return;\n initialized.add(instance);\n const proto = Object.getPrototypeOf(instance);\n const prefix = proto?.constructor?.attrPrefix ?? 'data-';\n if (!names)\n names = meta(proto, attrKey);\n for (const key of names) {\n const value = instance[key];\n const name = mustDasherize(`${prefix}${key}`);\n let descriptor = {\n configurable: true,\n get() {\n return this.getAttribute(name) || '';\n },\n set(newValue) {\n this.setAttribute(name, newValue || '');\n }\n };\n if (typeof value === 'number') {\n descriptor = {\n configurable: true,\n get() {\n return Number(this.getAttribute(name) || 0);\n },\n set(newValue) {\n this.setAttribute(name, newValue);\n }\n };\n }\n else if (typeof value === 'boolean') {\n descriptor = {\n configurable: true,\n get() {\n return this.hasAttribute(name);\n },\n set(newValue) {\n this.toggleAttribute(name, newValue);\n }\n };\n }\n Object.defineProperty(instance, key, descriptor);\n if (key in instance && !instance.hasAttribute(name)) {\n descriptor.set.call(instance, value);\n }\n }\n}\nexport function defineObservedAttributes(classObject) {\n let observed = classObject.observedAttributes || [];\n const prefix = classObject.attrPrefix ?? 'data-';\n const attrToAttributeName = (name) => mustDasherize(`${prefix}${name}`);\n Object.defineProperty(classObject, 'observedAttributes', {\n configurable: true,\n get() {\n return [...meta(classObject.prototype, attrKey)].map(attrToAttributeName).concat(observed);\n },\n set(attributes) {\n observed = attributes;\n }\n });\n}\n//# sourceMappingURL=attr.js.map","import { register } from './register.js';\nimport { bind, bindShadow } from './bind.js';\nimport { autoShadowRoot } from './auto-shadow-root.js';\nimport { defineObservedAttributes, initializeAttrs } from './attr.js';\nconst symbol = Symbol.for('catalyst');\nexport class CatalystDelegate {\n constructor(classObject) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const delegate = this;\n const connectedCallback = classObject.prototype.connectedCallback;\n classObject.prototype.connectedCallback = function () {\n delegate.connectedCallback(this, connectedCallback);\n };\n const disconnectedCallback = classObject.prototype.disconnectedCallback;\n classObject.prototype.disconnectedCallback = function () {\n delegate.disconnectedCallback(this, disconnectedCallback);\n };\n const attributeChangedCallback = classObject.prototype.attributeChangedCallback;\n classObject.prototype.attributeChangedCallback = function (name, oldValue, newValue) {\n delegate.attributeChangedCallback(this, name, oldValue, newValue, attributeChangedCallback);\n };\n let observedAttributes = classObject.observedAttributes || [];\n Object.defineProperty(classObject, 'observedAttributes', {\n configurable: true,\n get() {\n return delegate.observedAttributes(this, observedAttributes);\n },\n set(attributes) {\n observedAttributes = attributes;\n }\n });\n defineObservedAttributes(classObject);\n register(classObject);\n }\n observedAttributes(instance, observedAttributes) {\n return observedAttributes;\n }\n connectedCallback(instance, connectedCallback) {\n instance.toggleAttribute('data-catalyst', true);\n customElements.upgrade(instance);\n autoShadowRoot(instance);\n initializeAttrs(instance);\n bind(instance);\n connectedCallback?.call(instance);\n if (instance.shadowRoot)\n bindShadow(instance.shadowRoot);\n }\n disconnectedCallback(element, disconnectedCallback) {\n disconnectedCallback?.call(element);\n }\n attributeChangedCallback(instance, name, oldValue, newValue, attributeChangedCallback) {\n initializeAttrs(instance);\n if (name !== 'data-catalyst' && attributeChangedCallback) {\n attributeChangedCallback.call(instance, name, oldValue, newValue);\n }\n }\n}\nexport function meta(proto, name) {\n if (!Object.prototype.hasOwnProperty.call(proto, symbol)) {\n const parent = proto[symbol];\n const map = (proto[symbol] = new Map());\n if (parent) {\n for (const [key, value] of parent) {\n map.set(key, new Set(value));\n }\n }\n }\n const map = proto[symbol];\n if (!map.has(name))\n map.set(name, new Set());\n return map.get(name);\n}\n//# sourceMappingURL=core.js.map","import { dasherize } from './dasherize.js';\n/**\n * Register the controller as a custom element.\n *\n * The classname is converted to a approriate tag name.\n *\n * Example: HelloController => hello-controller\n */\nexport function register(classObject) {\n const name = dasherize(classObject.name).replace(/-element$/, '');\n try {\n window.customElements.define(name, classObject);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n window[classObject.name] = customElements.get(name);\n }\n catch (e) {\n // The only reason for window.customElements.define to throw a `NotSupportedError`\n // is if the element has already been defined.\n if (!(e instanceof DOMException && e.name === 'NotSupportedError'))\n throw e;\n }\n return classObject;\n}\n//# sourceMappingURL=register.js.map","export function autoShadowRoot(element) {\n for (const template of element.querySelectorAll('template[data-shadowroot]')) {\n if (template.parentElement === element) {\n element\n .attachShadow({\n mode: template.getAttribute('data-shadowroot') === 'closed' ? 'closed' : 'open'\n })\n .append(template.content.cloneNode(true));\n }\n }\n}\n//# sourceMappingURL=auto-shadow-root.js.map","import { findTarget, findTargets } from './findtarget.js';\nimport { meta } from './core.js';\n/**\n * Target is a decorator which - when assigned to a property field on the\n * class - will override that class field, turning it into a Getter which\n * returns a call to `findTarget(this, key)` where `key` is the name of the\n * property field. In other words, `@target foo` becomes a getter for\n * `findTarget(this, 'foo')`.\n */\nexport function target(proto, key) {\n meta(proto, 'target').add(key);\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n return findTarget(this, key);\n }\n });\n}\n/**\n * Targets is a decorator which - when assigned to a property field on the\n * class - will override that class field, turning it into a Getter which\n * returns a call to `findTargets(this, key)` where `key` is the name of the\n * property field. In other words, `@targets foo` becomes a getter for\n * `findTargets(this, 'foo')`.\n */\nexport function targets(proto, key) {\n meta(proto, 'targets').add(key);\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n return findTargets(this, key);\n }\n });\n}\n//# sourceMappingURL=target.js.map","/**\n * findTarget will run `querySelectorAll` against the given controller, plus\n * its shadowRoot, returning any the first child that:\n *\n * - Matches the selector of `[data-target~=\"tag.name\"]` where tag is the\n * tagName of the given HTMLElement, and `name` is the given `name` argument.\n *\n * - Closest ascendant of the element, that matches the tagname of the\n * controller, is the specific instance of the controller itself - in other\n * words it is not nested in other controllers of the same type.\n *\n */\nexport function findTarget(controller, name) {\n const tag = controller.tagName.toLowerCase();\n if (controller.shadowRoot) {\n for (const el of controller.shadowRoot.querySelectorAll(`[data-target~=\"${tag}.${name}\"]`)) {\n if (!el.closest(tag))\n return el;\n }\n }\n for (const el of controller.querySelectorAll(`[data-target~=\"${tag}.${name}\"]`)) {\n if (el.closest(tag) === controller)\n return el;\n }\n}\nexport function findTargets(controller, name) {\n const tag = controller.tagName.toLowerCase();\n const targets = [];\n if (controller.shadowRoot) {\n for (const el of controller.shadowRoot.querySelectorAll(`[data-targets~=\"${tag}.${name}\"]`)) {\n if (!el.closest(tag))\n targets.push(el);\n }\n }\n for (const el of controller.querySelectorAll(`[data-targets~=\"${tag}.${name}\"]`)) {\n if (el.closest(tag) === controller)\n targets.push(el);\n }\n return targets;\n}\n//# sourceMappingURL=findtarget.js.map","export function throttle(callback, wait = 0, { start = true, middle = true, once = false } = {}) {\n let last = 0;\n let timer;\n let cancelled = false;\n function fn(...args) {\n if (cancelled)\n return;\n const delta = Date.now() - last;\n last = Date.now();\n if (start) {\n start = false;\n callback.apply(this, args);\n if (once)\n fn.cancel();\n }\n else if ((middle && delta < wait) || !middle) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n last = Date.now();\n callback.apply(this, args);\n if (once)\n fn.cancel();\n }, !middle ? wait : wait - delta);\n }\n }\n fn.cancel = () => {\n clearTimeout(timer);\n cancelled = true;\n };\n return fn;\n}\nexport function debounce(callback, wait = 0, { start = false, middle = false, once = false } = {}) {\n return throttle(callback, wait, { start, middle, once });\n}\n","const dynamicElements = new Map();\nconst ready = new Promise(resolve => {\n if (document.readyState !== 'loading') {\n resolve();\n }\n else {\n document.addEventListener('readystatechange', () => resolve(), { once: true });\n }\n});\nconst firstInteraction = new Promise(resolve => {\n const controller = new AbortController();\n controller.signal.addEventListener('abort', () => resolve());\n const listenerOptions = { once: true, passive: true, signal: controller.signal };\n const handler = () => controller.abort();\n document.addEventListener('mousedown', handler, listenerOptions);\n // eslint-disable-next-line github/require-passive-events\n document.addEventListener('touchstart', handler, listenerOptions);\n document.addEventListener('keydown', handler, listenerOptions);\n document.addEventListener('pointerdown', handler, listenerOptions);\n});\nconst visible = (tagName) => new Promise(resolve => {\n const observer = new IntersectionObserver(entries => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n resolve();\n observer.disconnect();\n return;\n }\n }\n }, {\n // Currently the threshold is set to 256px from the bottom of the viewport\n // with a threshold of 0.1. This means the element will not load until about\n // 2 keyboard-down-arrow presses away from being visible in the viewport,\n // giving us some time to fetch it before the contents are made visible\n rootMargin: '0px 0px 256px 0px',\n threshold: 0.01\n });\n for (const el of document.querySelectorAll(tagName)) {\n observer.observe(el);\n }\n});\nconst strategies = {\n ready: () => ready,\n firstInteraction: () => firstInteraction,\n visible\n};\nconst timers = new WeakMap();\nfunction scan(node) {\n cancelAnimationFrame(timers.get(node) || 0);\n timers.set(node, requestAnimationFrame(() => {\n for (const tagName of dynamicElements.keys()) {\n const child = node.matches(tagName) ? node : node.querySelector(tagName);\n if (customElements.get(tagName) || child) {\n const strategyName = (child?.getAttribute('data-load-on') || 'ready');\n const strategy = strategyName in strategies ? strategies[strategyName] : strategies.ready;\n // eslint-disable-next-line github/no-then\n for (const cb of dynamicElements.get(tagName) || [])\n strategy(tagName).then(cb);\n dynamicElements.delete(tagName);\n timers.delete(node);\n }\n }\n }));\n}\nlet elementLoader;\nexport function lazyDefine(tagName, callback) {\n if (!dynamicElements.has(tagName))\n dynamicElements.set(tagName, new Set());\n dynamicElements.get(tagName).add(callback);\n scan(document.body);\n if (!elementLoader) {\n elementLoader = new MutationObserver(mutations => {\n if (!dynamicElements.size)\n return;\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element)\n scan(node);\n }\n }\n });\n elementLoader.observe(document, { subtree: true, childList: true });\n }\n}\n//# sourceMappingURL=lazy-define.js.map","/* eslint-disable custom-elements/expose-class-on-global */\n/* eslint-disable custom-elements/define-tag-after-class-definition */\n\nimport {controller, target} from '@github/catalyst'\nimport {debounce} from '@github/mini-throttle/decorators'\n\n@controller\nexport class ToggleSwitchElement extends HTMLElement {\n @target switch: HTMLElement\n @target loadingSpinner: HTMLElement\n @target errorIcon: HTMLElement\n\n get src(): string | null {\n const src = this.getAttribute('src')\n if (!src) return null\n\n const link = this.ownerDocument.createElement('a')\n link.href = src\n return link.href\n }\n\n get csrf(): string | null {\n const csrfElement = this.querySelector('[data-csrf]')\n return this.getAttribute('csrf') || (csrfElement instanceof HTMLInputElement && csrfElement.value) || null\n }\n\n get csrfField(): string {\n // the authenticity token is passed into the element and is not generated in js land\n\n return this.getAttribute('csrf-field') || 'authenticity_token'\n }\n\n isRemote(): boolean {\n return this.src != null\n }\n\n toggle() {\n if (this.isRemote()) {\n this.setLoadingState()\n this.check()\n } else {\n this.performToggle()\n }\n }\n\n turnOn(): void {\n if (this.isDisabled()) {\n return\n }\n\n this.switch.setAttribute('aria-checked', 'true')\n this.classList.add('ToggleSwitch--checked')\n }\n\n turnOff(): void {\n if (this.isDisabled()) {\n return\n }\n\n this.switch.setAttribute('aria-checked', 'false')\n this.classList.remove('ToggleSwitch--checked')\n }\n\n isOn(): boolean {\n return this.switch.getAttribute('aria-checked') === 'true'\n }\n\n isOff(): boolean {\n return !this.isOn()\n }\n\n isDisabled(): boolean {\n return this.switch.getAttribute('aria-disabled') === 'true'\n }\n\n disable(): void {\n this.switch.setAttribute('aria-disabled', 'true')\n }\n\n enable(): void {\n this.switch.setAttribute('aria-disabled', 'false')\n }\n\n private performToggle(): void {\n if (this.isOn()) {\n this.turnOff()\n } else {\n this.turnOn()\n }\n }\n\n private setLoadingState(): void {\n this.disable()\n this.errorIcon.setAttribute('hidden', 'hidden')\n this.loadingSpinner.removeAttribute('hidden')\n }\n\n private setSuccessState(): void {\n this.setFinishedState(false)\n }\n\n private setErrorState(): void {\n this.setFinishedState(true)\n }\n\n private setFinishedState(error: boolean): void {\n if (error) {\n this.errorIcon.removeAttribute('hidden')\n }\n\n this.loadingSpinner.setAttribute('hidden', 'hidden')\n this.enable()\n }\n\n @debounce(300)\n private async check() {\n const body = new FormData()\n\n if (this.csrf) {\n body.append(this.csrfField, this.csrf)\n }\n\n body.append('value', this.isOn() ? '1' : '0')\n\n try {\n const response = await fetch(this.src!, {\n credentials: 'same-origin',\n method: 'POST',\n body\n })\n if (response.ok) {\n this.setSuccessState()\n this.performToggle()\n } else {\n this.setErrorState()\n }\n } catch (error) {\n this.setErrorState()\n }\n }\n}\n\ndeclare global {\n interface Window {\n ToggleSwitchElement: typeof ToggleSwitchElement\n }\n}\n","import { debounce as db, throttle as th } from './index';\nexport function throttle(wait = 0, opts = {}) {\n return (proto, name, descriptor) => {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error('debounce can only decorate functions');\n }\n const fn = descriptor.value;\n descriptor.value = th(fn, wait, opts);\n Object.defineProperty(proto, name, descriptor);\n };\n}\nexport function debounce(wait = 0, opts = {}) {\n return (proto, name, descriptor) => {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error('debounce can only decorate functions');\n }\n const fn = descriptor.value;\n descriptor.value = db(fn, wait, opts);\n Object.defineProperty(proto, name, descriptor);\n };\n}\n","import { CatalystDelegate } from './core.js';\n/**\n * Controller is a decorator to be used over a class that extends HTMLElement.\n * It will automatically `register()` the component in the customElement\n * registry, as well as ensuring `bind(this)` is called on `connectedCallback`,\n * wrapping the classes `connectedCallback` method if needed.\n */\nexport function controller(classObject) {\n new CatalystDelegate(classObject);\n}\n//# sourceMappingURL=controller.js.map","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\nconst TOOLTIP_SR_ONLY_CLASS = 'sr-only'\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 set hiddenFromView(value: true | false) {\n value ? this.classList.add(TOOLTIP_SR_ONLY_CLASS) : this.classList.remove(TOOLTIP_SR_ONLY_CLASS)\n if (this.isConnected) this.#update()\n }\n\n get hiddenFromView() {\n return this.classList.contains(TOOLTIP_SR_ONLY_CLASS)\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.hiddenFromView = 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.hiddenFromView) {\n this.hiddenFromView = false\n } else if (event.type === 'blur') {\n this.hiddenFromView = true\n } else if (\n event.type === 'mouseleave' &&\n (event as MouseEvent).relatedTarget !== this.control &&\n (event as MouseEvent).relatedTarget !== this\n ) {\n this.hiddenFromView = true\n } else if (event.type === 'keydown' && (event as KeyboardEvent).key === 'Escape' && !this.hiddenFromView) {\n this.hiddenFromView = true\n }\n }\n\n static observedAttributes = ['data-type', 'data-direction', 'id']\n\n #update() {\n if (this.hiddenFromView) {\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.hiddenFromView = 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 let labelledBy = this.control.getAttribute('aria-labelledby')\n labelledBy ? (labelledBy = `${labelledBy} ${this.id}`) : (labelledBy = this.id)\n this.control.setAttribute('aria-labelledby', labelledBy)\n\n // Prevent duplicate accessible name announcements.\n this.setAttribute('aria-hidden', 'true')\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 (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.hiddenFromView) 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","__decorate","decorators","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__classPrivateFieldGet","receiver","kind","f","TypeError","call","__classPrivateFieldSet","controllers","WeakSet","bindShadow","bindElements","listenForBind","observers","closed","observer","MutationObserver","mutations","mutation","bindActions","addedNodes","observe","childList","subtree","attributeFilter","subscription","disconnect","handleEvent","binding","bindings","controller","tag","method","shadowController","action","split","eventSep","lastIndexOf","methodSep","dasherize","str","description","toLowerCase","mustDasherize","dashed","includes","DOMException","initialized","initializeAttrs","instance","names","proto","getPrototypeOf","prefix","constructor","attrPrefix","meta","descriptor","configurable","Number","toggleAttribute","symbol","Symbol","for","CatalystDelegate","classObject","delegate","disconnectedCallback","attributes","observed","attrToAttributeName","map","concat","defineObservedAttributes","register","upgrade","template","cloneNode","autoShadowRoot","hasOwnProperty","parent","Map","Set","findTarget","middle","timer","last","cancelled","fn","args","now","apply","cancel","throttle","readyState","AbortController","signal","listenerOptions","handler","ToggleSwitchElement","link","csrf","csrfElement","csrfField","isRemote","setLoadingState","check","performToggle","isDisabled","switch","isOn","turnOff","turnOn","disable","errorIcon","loadingSpinner","setFinishedState","error","enable","FormData","fetch","credentials","ok","setSuccessState","setErrorState","opts","db","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","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","hiddenFromView","isConnected","_ToolTipElement_instances","_ToolTipElement_update","styles","toFixed","labelledBy","describedBy","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/@github/catalyst/lib/bind.js","../../../node_modules/@github/catalyst/lib/dasherize.js","../../../node_modules/@github/catalyst/lib/attr.js","../../../node_modules/@github/catalyst/lib/core.js","../../../node_modules/@github/catalyst/lib/register.js","../../../node_modules/@github/catalyst/lib/auto-shadow-root.js","../../../node_modules/@github/catalyst/lib/target.js","../../../node_modules/@github/catalyst/lib/findtarget.js","../../../node_modules/@github/mini-throttle/dist/index.js","../../../node_modules/@github/catalyst/lib/lazy-define.js","../../components/primer/alpha/toggle-switch-element.ts","../../../node_modules/@github/mini-throttle/dist/decorators.js","../../../node_modules/@github/catalyst/lib/controller.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 controllers = new WeakSet();\n/*\n * Bind `[data-action]` elements from the DOM to their actions.\n *\n */\nexport function bind(controller) {\n controllers.add(controller);\n if (controller.shadowRoot)\n bindShadow(controller.shadowRoot);\n bindElements(controller);\n listenForBind(controller.ownerDocument);\n}\nexport function bindShadow(root) {\n bindElements(root);\n listenForBind(root);\n}\nconst observers = new WeakMap();\n/**\n * Set up observer that will make sure any actions that are dynamically\n * injected into `el` will be bound to it's controller.\n *\n * This returns a Subscription object which you can call `unsubscribe()` on to\n * stop further live updates.\n */\nexport function listenForBind(el = document) {\n if (observers.has(el))\n return observers.get(el);\n let closed = false;\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.target instanceof Element) {\n bindActions(mutation.target);\n }\n else if (mutation.type === 'childList' && mutation.addedNodes.length) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element) {\n bindElements(node);\n }\n }\n }\n }\n });\n observer.observe(el, { childList: true, subtree: true, attributeFilter: ['data-action'] });\n const subscription = {\n get closed() {\n return closed;\n },\n unsubscribe() {\n closed = true;\n observers.delete(el);\n observer.disconnect();\n }\n };\n observers.set(el, subscription);\n return subscription;\n}\nfunction bindElements(root) {\n for (const el of root.querySelectorAll('[data-action]')) {\n bindActions(el);\n }\n // Also bind the controller to itself\n if (root instanceof Element && root.hasAttribute('data-action')) {\n bindActions(root);\n }\n}\n// Bind a single function to all events to avoid anonymous closure performance penalty.\nfunction handleEvent(event) {\n const el = event.currentTarget;\n for (const binding of bindings(el)) {\n if (event.type === binding.type) {\n const controller = el.closest(binding.tag);\n if (controllers.has(controller) && typeof controller[binding.method] === 'function') {\n controller[binding.method](event);\n }\n const root = el.getRootNode();\n if (root instanceof ShadowRoot && controllers.has(root.host) && root.host.matches(binding.tag)) {\n const shadowController = root.host;\n if (typeof shadowController[binding.method] === 'function') {\n shadowController[binding.method](event);\n }\n }\n }\n }\n}\nfunction* bindings(el) {\n for (const action of (el.getAttribute('data-action') || '').trim().split(/\\s+/)) {\n const eventSep = action.lastIndexOf(':');\n const methodSep = Math.max(0, action.lastIndexOf('#')) || action.length;\n yield {\n type: action.slice(0, eventSep),\n tag: action.slice(eventSep + 1, methodSep),\n method: action.slice(methodSep + 1) || 'handleEvent'\n } || 'handleEvent';\n }\n}\nfunction bindActions(el) {\n for (const binding of bindings(el)) {\n el.addEventListener(binding.type, handleEvent);\n }\n}\n//# sourceMappingURL=bind.js.map","export const dasherize = (str) => String(typeof str === 'symbol' ? str.description : str)\n .replace(/([A-Z]($|[a-z]))/g, '-$1')\n .replace(/--/g, '-')\n .replace(/^-|-$/, '')\n .toLowerCase();\nexport const mustDasherize = (str, type = 'property') => {\n const dashed = dasherize(str);\n if (!dashed.includes('-')) {\n throw new DOMException(`${type}: ${String(str)} is not a valid ${type} name`, 'SyntaxError');\n }\n return dashed;\n};\n//# sourceMappingURL=dasherize.js.map","import { mustDasherize } from './dasherize.js';\nimport { meta } from './core.js';\nconst attrKey = 'attr';\n/**\n * Attr is a decorator which tags a property as one to be initialized via\n * `initializeAttrs`.\n *\n * The signature is typed such that the property must be one of a String,\n * Number or Boolean. This matches the behavior of `initializeAttrs`.\n */\nexport function attr(proto, key) {\n meta(proto, attrKey).add(key);\n}\n/**\n * initializeAttrs is called with a set of class property names (if omitted, it\n * will look for any properties tagged with the `@attr` decorator). With this\n * list it defines property descriptors for each property that map to `data-*`\n * attributes on the HTMLElement instance.\n *\n * It works around Native Class Property semantics - which are equivalent to\n * calling `Object.defineProperty` on the instance upon creation, but before\n * `constructor()` is called.\n *\n * If a class property is assigned to the class body, it will infer the type\n * (using `typeof`) and define an appropriate getter/setter combo that aligns\n * to that type. This means class properties assigned to Numbers can only ever\n * be Numbers, assigned to Booleans can only ever be Booleans, and assigned to\n * Strings can only ever be Strings.\n *\n * This is automatically called as part of `@controller`. If a class uses the\n * `@controller` decorator it should not call this manually.\n */\nconst initialized = new WeakSet();\nexport function initializeAttrs(instance, names) {\n if (initialized.has(instance))\n return;\n initialized.add(instance);\n const proto = Object.getPrototypeOf(instance);\n const prefix = proto?.constructor?.attrPrefix ?? 'data-';\n if (!names)\n names = meta(proto, attrKey);\n for (const key of names) {\n const value = instance[key];\n const name = mustDasherize(`${prefix}${key}`);\n let descriptor = {\n configurable: true,\n get() {\n return this.getAttribute(name) || '';\n },\n set(newValue) {\n this.setAttribute(name, newValue || '');\n }\n };\n if (typeof value === 'number') {\n descriptor = {\n configurable: true,\n get() {\n return Number(this.getAttribute(name) || 0);\n },\n set(newValue) {\n this.setAttribute(name, newValue);\n }\n };\n }\n else if (typeof value === 'boolean') {\n descriptor = {\n configurable: true,\n get() {\n return this.hasAttribute(name);\n },\n set(newValue) {\n this.toggleAttribute(name, newValue);\n }\n };\n }\n Object.defineProperty(instance, key, descriptor);\n if (key in instance && !instance.hasAttribute(name)) {\n descriptor.set.call(instance, value);\n }\n }\n}\nexport function defineObservedAttributes(classObject) {\n let observed = classObject.observedAttributes || [];\n const prefix = classObject.attrPrefix ?? 'data-';\n const attrToAttributeName = (name) => mustDasherize(`${prefix}${name}`);\n Object.defineProperty(classObject, 'observedAttributes', {\n configurable: true,\n get() {\n return [...meta(classObject.prototype, attrKey)].map(attrToAttributeName).concat(observed);\n },\n set(attributes) {\n observed = attributes;\n }\n });\n}\n//# sourceMappingURL=attr.js.map","import { register } from './register.js';\nimport { bind, bindShadow } from './bind.js';\nimport { autoShadowRoot } from './auto-shadow-root.js';\nimport { defineObservedAttributes, initializeAttrs } from './attr.js';\nconst symbol = Symbol.for('catalyst');\nexport class CatalystDelegate {\n constructor(classObject) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const delegate = this;\n const connectedCallback = classObject.prototype.connectedCallback;\n classObject.prototype.connectedCallback = function () {\n delegate.connectedCallback(this, connectedCallback);\n };\n const disconnectedCallback = classObject.prototype.disconnectedCallback;\n classObject.prototype.disconnectedCallback = function () {\n delegate.disconnectedCallback(this, disconnectedCallback);\n };\n const attributeChangedCallback = classObject.prototype.attributeChangedCallback;\n classObject.prototype.attributeChangedCallback = function (name, oldValue, newValue) {\n delegate.attributeChangedCallback(this, name, oldValue, newValue, attributeChangedCallback);\n };\n let observedAttributes = classObject.observedAttributes || [];\n Object.defineProperty(classObject, 'observedAttributes', {\n configurable: true,\n get() {\n return delegate.observedAttributes(this, observedAttributes);\n },\n set(attributes) {\n observedAttributes = attributes;\n }\n });\n defineObservedAttributes(classObject);\n register(classObject);\n }\n observedAttributes(instance, observedAttributes) {\n return observedAttributes;\n }\n connectedCallback(instance, connectedCallback) {\n instance.toggleAttribute('data-catalyst', true);\n customElements.upgrade(instance);\n autoShadowRoot(instance);\n initializeAttrs(instance);\n bind(instance);\n connectedCallback?.call(instance);\n if (instance.shadowRoot)\n bindShadow(instance.shadowRoot);\n }\n disconnectedCallback(element, disconnectedCallback) {\n disconnectedCallback?.call(element);\n }\n attributeChangedCallback(instance, name, oldValue, newValue, attributeChangedCallback) {\n initializeAttrs(instance);\n if (name !== 'data-catalyst' && attributeChangedCallback) {\n attributeChangedCallback.call(instance, name, oldValue, newValue);\n }\n }\n}\nexport function meta(proto, name) {\n if (!Object.prototype.hasOwnProperty.call(proto, symbol)) {\n const parent = proto[symbol];\n const map = (proto[symbol] = new Map());\n if (parent) {\n for (const [key, value] of parent) {\n map.set(key, new Set(value));\n }\n }\n }\n const map = proto[symbol];\n if (!map.has(name))\n map.set(name, new Set());\n return map.get(name);\n}\n//# sourceMappingURL=core.js.map","import { dasherize } from './dasherize.js';\n/**\n * Register the controller as a custom element.\n *\n * The classname is converted to a approriate tag name.\n *\n * Example: HelloController => hello-controller\n */\nexport function register(classObject) {\n const name = dasherize(classObject.name).replace(/-element$/, '');\n try {\n window.customElements.define(name, classObject);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n window[classObject.name] = customElements.get(name);\n }\n catch (e) {\n // The only reason for window.customElements.define to throw a `NotSupportedError`\n // is if the element has already been defined.\n if (!(e instanceof DOMException && e.name === 'NotSupportedError'))\n throw e;\n }\n return classObject;\n}\n//# sourceMappingURL=register.js.map","export function autoShadowRoot(element) {\n for (const template of element.querySelectorAll('template[data-shadowroot]')) {\n if (template.parentElement === element) {\n element\n .attachShadow({\n mode: template.getAttribute('data-shadowroot') === 'closed' ? 'closed' : 'open'\n })\n .append(template.content.cloneNode(true));\n }\n }\n}\n//# sourceMappingURL=auto-shadow-root.js.map","import { findTarget, findTargets } from './findtarget.js';\nimport { meta } from './core.js';\n/**\n * Target is a decorator which - when assigned to a property field on the\n * class - will override that class field, turning it into a Getter which\n * returns a call to `findTarget(this, key)` where `key` is the name of the\n * property field. In other words, `@target foo` becomes a getter for\n * `findTarget(this, 'foo')`.\n */\nexport function target(proto, key) {\n meta(proto, 'target').add(key);\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n return findTarget(this, key);\n }\n });\n}\n/**\n * Targets is a decorator which - when assigned to a property field on the\n * class - will override that class field, turning it into a Getter which\n * returns a call to `findTargets(this, key)` where `key` is the name of the\n * property field. In other words, `@targets foo` becomes a getter for\n * `findTargets(this, 'foo')`.\n */\nexport function targets(proto, key) {\n meta(proto, 'targets').add(key);\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n return findTargets(this, key);\n }\n });\n}\n//# sourceMappingURL=target.js.map","/**\n * findTarget will run `querySelectorAll` against the given controller, plus\n * its shadowRoot, returning any the first child that:\n *\n * - Matches the selector of `[data-target~=\"tag.name\"]` where tag is the\n * tagName of the given HTMLElement, and `name` is the given `name` argument.\n *\n * - Closest ascendant of the element, that matches the tagname of the\n * controller, is the specific instance of the controller itself - in other\n * words it is not nested in other controllers of the same type.\n *\n */\nexport function findTarget(controller, name) {\n const tag = controller.tagName.toLowerCase();\n if (controller.shadowRoot) {\n for (const el of controller.shadowRoot.querySelectorAll(`[data-target~=\"${tag}.${name}\"]`)) {\n if (!el.closest(tag))\n return el;\n }\n }\n for (const el of controller.querySelectorAll(`[data-target~=\"${tag}.${name}\"]`)) {\n if (el.closest(tag) === controller)\n return el;\n }\n}\nexport function findTargets(controller, name) {\n const tag = controller.tagName.toLowerCase();\n const targets = [];\n if (controller.shadowRoot) {\n for (const el of controller.shadowRoot.querySelectorAll(`[data-targets~=\"${tag}.${name}\"]`)) {\n if (!el.closest(tag))\n targets.push(el);\n }\n }\n for (const el of controller.querySelectorAll(`[data-targets~=\"${tag}.${name}\"]`)) {\n if (el.closest(tag) === controller)\n targets.push(el);\n }\n return targets;\n}\n//# sourceMappingURL=findtarget.js.map","export function throttle(callback, wait = 0, { start = true, middle = true, once = false } = {}) {\n let last = 0;\n let timer;\n let cancelled = false;\n function fn(...args) {\n if (cancelled)\n return;\n const delta = Date.now() - last;\n last = Date.now();\n if (start) {\n start = false;\n callback.apply(this, args);\n if (once)\n fn.cancel();\n }\n else if ((middle && delta < wait) || !middle) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n last = Date.now();\n callback.apply(this, args);\n if (once)\n fn.cancel();\n }, !middle ? wait : wait - delta);\n }\n }\n fn.cancel = () => {\n clearTimeout(timer);\n cancelled = true;\n };\n return fn;\n}\nexport function debounce(callback, wait = 0, { start = false, middle = false, once = false } = {}) {\n return throttle(callback, wait, { start, middle, once });\n}\n","const dynamicElements = new Map();\nconst ready = new Promise(resolve => {\n if (document.readyState !== 'loading') {\n resolve();\n }\n else {\n document.addEventListener('readystatechange', () => resolve(), { once: true });\n }\n});\nconst firstInteraction = new Promise(resolve => {\n const controller = new AbortController();\n controller.signal.addEventListener('abort', () => resolve());\n const listenerOptions = { once: true, passive: true, signal: controller.signal };\n const handler = () => controller.abort();\n document.addEventListener('mousedown', handler, listenerOptions);\n // eslint-disable-next-line github/require-passive-events\n document.addEventListener('touchstart', handler, listenerOptions);\n document.addEventListener('keydown', handler, listenerOptions);\n document.addEventListener('pointerdown', handler, listenerOptions);\n});\nconst visible = (tagName) => new Promise(resolve => {\n const observer = new IntersectionObserver(entries => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n resolve();\n observer.disconnect();\n return;\n }\n }\n }, {\n // Currently the threshold is set to 256px from the bottom of the viewport\n // with a threshold of 0.1. This means the element will not load until about\n // 2 keyboard-down-arrow presses away from being visible in the viewport,\n // giving us some time to fetch it before the contents are made visible\n rootMargin: '0px 0px 256px 0px',\n threshold: 0.01\n });\n for (const el of document.querySelectorAll(tagName)) {\n observer.observe(el);\n }\n});\nconst strategies = {\n ready: () => ready,\n firstInteraction: () => firstInteraction,\n visible\n};\nconst timers = new WeakMap();\nfunction scan(node) {\n cancelAnimationFrame(timers.get(node) || 0);\n timers.set(node, requestAnimationFrame(() => {\n for (const tagName of dynamicElements.keys()) {\n const child = node.matches(tagName) ? node : node.querySelector(tagName);\n if (customElements.get(tagName) || child) {\n const strategyName = (child?.getAttribute('data-load-on') || 'ready');\n const strategy = strategyName in strategies ? strategies[strategyName] : strategies.ready;\n // eslint-disable-next-line github/no-then\n for (const cb of dynamicElements.get(tagName) || [])\n strategy(tagName).then(cb);\n dynamicElements.delete(tagName);\n timers.delete(node);\n }\n }\n }));\n}\nlet elementLoader;\nexport function lazyDefine(tagName, callback) {\n if (!dynamicElements.has(tagName))\n dynamicElements.set(tagName, new Set());\n dynamicElements.get(tagName).add(callback);\n scan(document.body);\n if (!elementLoader) {\n elementLoader = new MutationObserver(mutations => {\n if (!dynamicElements.size)\n return;\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element)\n scan(node);\n }\n }\n });\n elementLoader.observe(document, { subtree: true, childList: true });\n }\n}\n//# sourceMappingURL=lazy-define.js.map","/* eslint-disable custom-elements/expose-class-on-global */\n/* eslint-disable custom-elements/define-tag-after-class-definition */\n\nimport {controller, target} from '@github/catalyst'\nimport {debounce} from '@github/mini-throttle/decorators'\n\n@controller\nexport class ToggleSwitchElement extends HTMLElement {\n @target switch: HTMLElement\n @target loadingSpinner: HTMLElement\n @target errorIcon: HTMLElement\n\n get src(): string | null {\n const src = this.getAttribute('src')\n if (!src) return null\n\n const link = this.ownerDocument.createElement('a')\n link.href = src\n return link.href\n }\n\n get csrf(): string | null {\n const csrfElement = this.querySelector('[data-csrf]')\n return this.getAttribute('csrf') || (csrfElement instanceof HTMLInputElement && csrfElement.value) || null\n }\n\n get csrfField(): string {\n // the authenticity token is passed into the element and is not generated in js land\n\n return this.getAttribute('csrf-field') || 'authenticity_token'\n }\n\n isRemote(): boolean {\n return this.src != null\n }\n\n toggle() {\n if (this.isRemote()) {\n this.setLoadingState()\n this.check()\n } else {\n this.performToggle()\n }\n }\n\n turnOn(): void {\n if (this.isDisabled()) {\n return\n }\n\n this.switch.setAttribute('aria-checked', 'true')\n this.classList.add('ToggleSwitch--checked')\n }\n\n turnOff(): void {\n if (this.isDisabled()) {\n return\n }\n\n this.switch.setAttribute('aria-checked', 'false')\n this.classList.remove('ToggleSwitch--checked')\n }\n\n isOn(): boolean {\n return this.switch.getAttribute('aria-checked') === 'true'\n }\n\n isOff(): boolean {\n return !this.isOn()\n }\n\n isDisabled(): boolean {\n return this.switch.getAttribute('aria-disabled') === 'true'\n }\n\n disable(): void {\n this.switch.setAttribute('aria-disabled', 'true')\n }\n\n enable(): void {\n this.switch.setAttribute('aria-disabled', 'false')\n }\n\n private performToggle(): void {\n if (this.isOn()) {\n this.turnOff()\n } else {\n this.turnOn()\n }\n }\n\n private setLoadingState(): void {\n this.disable()\n this.errorIcon.setAttribute('hidden', 'hidden')\n this.loadingSpinner.removeAttribute('hidden')\n }\n\n private setSuccessState(): void {\n this.setFinishedState(false)\n }\n\n private setErrorState(): void {\n this.setFinishedState(true)\n }\n\n private setFinishedState(error: boolean): void {\n if (error) {\n this.errorIcon.removeAttribute('hidden')\n }\n\n this.loadingSpinner.setAttribute('hidden', 'hidden')\n this.enable()\n }\n\n @debounce(300)\n private async check() {\n const body = new FormData()\n\n if (this.csrf) {\n body.append(this.csrfField, this.csrf)\n }\n\n body.append('value', this.isOn() ? '1' : '0')\n\n try {\n const response = await fetch(this.src!, {\n credentials: 'same-origin',\n method: 'POST',\n body\n })\n if (response.ok) {\n this.setSuccessState()\n this.performToggle()\n } else {\n this.setErrorState()\n }\n } catch (error) {\n this.setErrorState()\n }\n }\n}\n\ndeclare global {\n interface Window {\n ToggleSwitchElement: typeof ToggleSwitchElement\n }\n}\n","import { debounce as db, throttle as th } from './index';\nexport function throttle(wait = 0, opts = {}) {\n return (proto, name, descriptor) => {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error('debounce can only decorate functions');\n }\n const fn = descriptor.value;\n descriptor.value = th(fn, wait, opts);\n Object.defineProperty(proto, name, descriptor);\n };\n}\nexport function debounce(wait = 0, opts = {}) {\n return (proto, name, descriptor) => {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error('debounce can only decorate functions');\n }\n const fn = descriptor.value;\n descriptor.value = db(fn, wait, opts);\n Object.defineProperty(proto, name, descriptor);\n };\n}\n","import { CatalystDelegate } from './core.js';\n/**\n * Controller is a decorator to be used over a class that extends HTMLElement.\n * It will automatically `register()` the component in the customElement\n * registry, as well as ensuring `bind(this)` is called on `connectedCallback`,\n * wrapping the classes `connectedCallback` method if needed.\n */\nexport function controller(classObject) {\n new CatalystDelegate(classObject);\n}\n//# sourceMappingURL=controller.js.map","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\nconst TOOLTIP_SR_ONLY_CLASS = 'sr-only'\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 set hiddenFromView(value: true | false) {\n this.classList.toggle(TOOLTIP_SR_ONLY_CLASS, value)\n if (this.isConnected) this.#update()\n }\n\n get hiddenFromView() {\n return this.classList.contains(TOOLTIP_SR_ONLY_CLASS)\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.hiddenFromView = 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.hiddenFromView) {\n this.hiddenFromView = false\n } else if (event.type === 'blur') {\n this.hiddenFromView = true\n } else if (\n event.type === 'mouseleave' &&\n (event as MouseEvent).relatedTarget !== this.control &&\n (event as MouseEvent).relatedTarget !== this\n ) {\n this.hiddenFromView = true\n } else if (event.type === 'keydown' && (event as KeyboardEvent).key === 'Escape' && !this.hiddenFromView) {\n this.hiddenFromView = true\n }\n }\n\n static observedAttributes = ['data-type', 'data-direction', 'id']\n\n #update() {\n if (this.hiddenFromView) {\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.hiddenFromView = 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 let labelledBy = this.control.getAttribute('aria-labelledby')\n if (labelledBy) {\n labelledBy = `${labelledBy} ${this.id}`\n } else {\n labelledBy = this.id\n }\n this.control.setAttribute('aria-labelledby', labelledBy)\n\n // Prevent duplicate accessible name announcements.\n this.setAttribute('aria-hidden', 'true')\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 (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.hiddenFromView) 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","__decorate","decorators","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__classPrivateFieldGet","receiver","kind","f","TypeError","call","__classPrivateFieldSet","controllers","WeakSet","bindShadow","bindElements","listenForBind","observers","closed","observer","MutationObserver","mutations","mutation","bindActions","addedNodes","observe","childList","subtree","attributeFilter","subscription","disconnect","handleEvent","binding","bindings","controller","tag","method","shadowController","action","split","eventSep","lastIndexOf","methodSep","dasherize","str","description","toLowerCase","mustDasherize","dashed","includes","DOMException","initialized","initializeAttrs","instance","names","proto","getPrototypeOf","prefix","constructor","attrPrefix","meta","descriptor","configurable","Number","toggleAttribute","symbol","Symbol","for","CatalystDelegate","classObject","delegate","disconnectedCallback","attributes","observed","attrToAttributeName","map","concat","defineObservedAttributes","register","upgrade","template","cloneNode","autoShadowRoot","hasOwnProperty","parent","Map","Set","findTarget","middle","timer","last","cancelled","fn","args","now","apply","cancel","throttle","readyState","AbortController","signal","listenerOptions","handler","ToggleSwitchElement","link","csrf","csrfElement","csrfField","isRemote","setLoadingState","check","performToggle","isDisabled","switch","isOn","turnOff","turnOn","disable","errorIcon","loadingSpinner","setFinishedState","error","enable","FormData","fetch","credentials","ok","setSuccessState","setErrorState","opts","db","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","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","disabled","hiddenInert","hiddenInputInert","sentinelInert","sizeInert","visibilityInert","visibility","clientRectsInert","getClientRects","tabIndex","signalSupported","noop","create","originalAddEventListener","EventTarget","originalCallback","optionsOrCapture","AbortSignal","monkeyPatch","suspendedTrapStack","activeTrap","focusTrap","initialFocus","abortSignal","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","hiddenFromView","toggle","isConnected","_ToolTipElement_instances","_ToolTipElement_update","styles","toFixed","labelledBy","describedBy","focusIfNeeded","tooltip","_ToolTipElement_updatePosition","ModalDialogElement","_ModalDialogElement_focusAbortController","_ModalDialogElement_abortController","_ModalDialogElement_openButton","_ModalDialogElement_shouldTryLoadingFragment","_ModalDialogElement_instances","_ModalDialogElement_overlayBackdrop_get","aborted","showButtons","clickOutsideDialog","dialogId","show","dialogEvent"],"mappings":"AAAA,MAAMA,IAAiBC,UAAUC,UAAUC,MAAM,aAClC,MAAMC,EACjBC,YAAYC,EAAOC,GACfC,KAAKF,MAAQA,EACbE,KAAKD,KAAOA,EACZC,KAAKC,aAAc,EACdF,EAAKG,KACNH,EAAKG,GAAK,YAAYC,KAAKC,SACtBC,WACAC,MAAM,EAAG,MAElBN,KAAKO,qBAAuBC,GAuEpC,SAA0BA,EAAOC,GAC7B,GAAID,EAAME,UAAYF,EAAMG,SAAWH,EAAMI,OACzC,OACJ,IAAKpB,GAAgBgB,EAAMK,QACvB,OACJ,GAAIJ,EAASR,YACT,OACJ,OAAQO,EAAMM,KACV,IAAK,QACL,IAAK,OA4Cb,SAAgBhB,EAAOC,GACnB,MAAMgB,EAAShB,EAAKiB,cAAc,0BAClC,QAAKD,IAEwC,SAAzCA,EAAOE,aAAa,kBAExBF,EAAOG,SADI,IAhDCC,CAAOV,EAASX,MAAOW,EAASV,OAChCS,EAAMY,iBAEV,MACJ,IAAK,SACDX,EAASY,iBACT,MACJ,IAAK,YACDZ,EAASa,SAAS,GAClBd,EAAMY,iBACN,MACJ,IAAK,UACDX,EAASa,UAAU,GACnBd,EAAMY,iBACN,MACJ,IAAK,IACG5B,GAAgBgB,EAAMK,UACtBJ,EAASa,SAAS,GAClBd,EAAMY,kBAEV,MACJ,IAAK,IACG5B,GAAgBgB,EAAMK,UACtBJ,EAASa,UAAU,GACnBd,EAAMY,kBAEV,MACJ,QACI,GAAIZ,EAAMK,QACN,MACJJ,EAASY,kBA/GwBE,CAAiBf,EAAOR,MAC7DA,KAAKwB,wBAA0BhB,GA4IvC,SAA0BA,EAAOC,GAC7BA,EAASR,YAA6B,qBAAfO,EAAMiB,KAE7B,IADaC,SAASC,eAAelB,EAASX,MAAMmB,aAAa,kBAAoB,IAEjF,OACJR,EAASY,iBAjJmCO,CAAiBpB,EAAOR,MAChEA,KAAK6B,aAAe7B,KAAKqB,eAAeS,KAAK9B,MAC7CF,EAAMiC,aAAa,OAAQ,YAC3BjC,EAAMiC,aAAa,gBAAiBhC,EAAKG,IACzCJ,EAAMiC,aAAa,gBAAiB,SACpCjC,EAAMiC,aAAa,oBAAqB,QACxCjC,EAAMiC,aAAa,gBAAiB,WAExClC,UACIG,KAAKqB,iBACLrB,KAAKgC,OACLhC,KAAKF,MAAMmC,gBAAgB,QAC3BjC,KAAKF,MAAMmC,gBAAgB,iBAC3BjC,KAAKF,MAAMmC,gBAAgB,iBAC3BjC,KAAKF,MAAMmC,gBAAgB,qBAC3BjC,KAAKF,MAAMmC,gBAAgB,iBAE/BpC,QACIG,KAAKF,MAAMiC,aAAa,gBAAiB,QACzC/B,KAAKF,MAAMoC,iBAAiB,mBAAoBlC,KAAKwB,yBACrDxB,KAAKF,MAAMoC,iBAAiB,iBAAkBlC,KAAKwB,yBACnDxB,KAAKF,MAAMoC,iBAAiB,QAASlC,KAAK6B,cAC1C7B,KAAKF,MAAMoC,iBAAiB,UAAWlC,KAAKO,sBAC5CP,KAAKD,KAAKmC,iBAAiB,QAASC,GAExCtC,OACIG,KAAKqB,iBACLrB,KAAKF,MAAMiC,aAAa,gBAAiB,SACzC/B,KAAKF,MAAMsC,oBAAoB,mBAAoBpC,KAAKwB,yBACxDxB,KAAKF,MAAMsC,oBAAoB,iBAAkBpC,KAAKwB,yBACtDxB,KAAKF,MAAMsC,oBAAoB,QAASpC,KAAK6B,cAC7C7B,KAAKF,MAAMsC,oBAAoB,UAAWpC,KAAKO,sBAC/CP,KAAKD,KAAKqC,oBAAoB,QAASD,GAE3CtC,SAASwC,EAAY,GACjB,MAAMC,EAAUC,MAAMC,KAAKxC,KAAKD,KAAK0C,iBAAiB,2BAA2BC,OAAOC,GAAS,GAC3FC,EAAML,MAAMC,KAAKxC,KAAKD,KAAK0C,iBAAiB,oBAAoBC,OAAOC,GACvEE,EAAaD,EAAIE,QAAQR,GAC/B,GAAKO,IAAeD,EAAIG,OAAS,GAAmB,IAAdV,GAAoC,IAAfQ,IAAmC,IAAfR,EAG3E,OAFArC,KAAKqB,sBACLrB,KAAKF,MAAMkD,QAGf,IAAIC,EAA4B,IAAdZ,EAAkB,EAAIO,EAAIG,OAAS,EACrD,GAAIT,GAAWO,GAAc,EAAG,CAC5B,MAAMK,EAAWL,EAAaR,EAC1Ba,GAAY,GAAKA,EAAWN,EAAIG,SAChCE,EAAcC,GAEtB,MAAMnC,EAAS6B,EAAIK,GACnB,GAAKlC,EAEL,IAAK,MAAMoC,KAAMP,EACT7B,IAAWoC,GACXnD,KAAKF,MAAMiC,aAAa,wBAAyBhB,EAAOb,IACxDa,EAAOgB,aAAa,gBAAiB,QACrCqB,EAASpD,KAAKD,KAAMgB,IAGpBoC,EAAGpB,aAAa,gBAAiB,SAI7ClC,iBACIG,KAAKF,MAAMmC,gBAAgB,yBAC3B,IAAK,MAAMkB,KAAMnD,KAAKD,KAAK0C,iBAAiB,0BACxCU,EAAGpB,aAAa,gBAAiB,UA+C7C,SAASI,EAAkB3B,GACvB,KAAMA,EAAMO,kBAAkBsC,SAC1B,OACJ,MAAMtC,EAASP,EAAMO,OAAOuC,QAAQ,mBAC/BvC,GAEwC,SAAzCA,EAAOE,aAAa,kBAa5B,SAAyBF,GACrBA,EAAOwC,cAAc,IAAIC,YAAY,kBAAmB,CAAEC,SAAS,KAZnEC,CAAgB3C,GAcpB,SAAS4B,EAAQQ,GACb,OAASA,EAAGQ,UACNR,aAAcS,kBAAgC,WAAZT,EAAG1B,QACtC0B,EAAGU,YAAc,GAAKV,EAAGW,aAAe,GASjD,SAASV,EAASW,EAAWhD,IAK7B,SAAoBgD,EAAWC,GAC3B,MAAMC,EAAYF,EAAUE,UACtBC,EAAkBD,EAAYF,EAAUI,aACxCC,EAAMJ,EAAQK,UACdC,EAASF,EAAMJ,EAAQG,aAC7B,OAAOC,GAAOH,GAAaK,GAAUJ,GAThCK,CAAWR,EAAWhD,KACvBgD,EAAUE,UAAYlD,EAAOsD,WCpJrC,MAAMG,EAAsBC,OAAOC,uBAAyB,IAC5D,MAAMC,EACF9E,YAAYkE,EAAWjE,EAAO8E,EAASC,GAAoB,GACvD,IAAIC,EAaJ,GAZA9E,KAAK+D,UAAYA,EACjB/D,KAAKF,MAAQA,EACbE,KAAK4E,QAAUA,EACf5E,KAAKS,SAAW,IAAIb,EAASE,EAAO8E,GACpC5E,KAAK+E,SAAWrD,SAASC,eAAe,GAAG3B,KAAK4E,QAAQ1E,eACxDF,KAAK6E,kBAAoBA,EACzB7E,KAAKgF,YAActD,SAASC,eAAe,GAAG3B,KAAKF,MAAMI,IAAMF,KAAKF,MAAMmF,cAC1EjF,KAAKkF,cAAgBN,EAAQnC,iBAAiB,iBAC1CzC,KAAK+E,WACL/E,KAAK+E,SAAShD,aAAa,YAAa,UACxC/B,KAAK+E,SAAShD,aAAa,cAAe,SAE1C/B,KAAKgF,cAAgBhF,KAAKgF,YAAY/D,aAAa,cAAe,CAClE,MAAMkE,EAAYzD,SAASV,cAAc,cAAchB,KAAKF,MAAMmF,UAClEjF,KAAKgF,YAAYjD,aAAa,aAAc,UAC5C/B,KAAKgF,YAAYjD,aAAa,kBAAmB,GAAG/B,KAAKgF,YAAY9E,OAAOiF,MAAAA,OAA6C,EAASA,EAAUjF,KAAO,MAElJF,KAAKF,MAAMmB,aAAa,kBACzBjB,KAAKF,MAAMiC,aAAa,gBAAiB,SAE7C/B,KAAK4E,QAAQjB,QAAS,EACtB3D,KAAK4E,QAAQ7C,aAAa,aAAc,WACxC/B,KAAKF,MAAMiC,aAAa,eAAgB,OACxC/B,KAAKF,MAAMiC,aAAa,aAAc,SACtC/B,KAAKoF,qBAAsB,EAC3BpF,KAAKqF,cAxCb,SAAkBC,EAAUC,EAAO,GAC/B,IAAIC,EACJ,OAAO,YAAaC,GAChBC,aAAaF,GACbA,EAAUf,OAAOkB,YAAW,KACxBD,aAAaF,GACbF,KAAYG,KACbF,IAiCkBK,CAAS5F,KAAKqF,cAAcvD,KAAK9B,MAAO,KAC7DA,KAAK6F,mBAAqB7F,KAAK6F,mBAAmB/D,KAAK9B,MACvDA,KAAK8F,YAAc9F,KAAK8F,YAAYhE,KAAK9B,MACzCA,KAAK+F,aAAe/F,KAAK+F,aAAajE,KAAK9B,MAC3CA,KAAKgG,UAAYhG,KAAKgG,UAAUlE,KAAK9B,MACrCA,KAAKiG,SAAWjG,KAAKiG,SAASnE,KAAK9B,MACnCA,KAAKkG,YAAclG,KAAKkG,YAAYpE,KAAK9B,MACzCA,KAAKF,MAAMoC,iBAAiB,UAAWlC,KAAKgG,WAC5ChG,KAAKF,MAAMoC,iBAAiB,QAASlC,KAAK+F,cAC1C/F,KAAKF,MAAMoC,iBAAiB,OAAQlC,KAAK8F,aACzC9F,KAAKF,MAAMoC,iBAAiB,QAASlC,KAAKqF,eAC1CrF,KAAK4E,QAAQ1C,iBAAiB,YAAalC,KAAK6F,oBAChD7F,KAAK4E,QAAQ1C,iBAAiB,kBAAmBlC,KAAKiG,UAC1B,QAA3BnB,EAAK9E,KAAKgF,mBAAgC,IAAPF,GAAyBA,EAAG5C,iBAAiB,QAASlC,KAAKkG,aAEnGrG,UACIG,KAAKF,MAAMsC,oBAAoB,UAAWpC,KAAKgG,WAC/ChG,KAAKF,MAAMsC,oBAAoB,QAASpC,KAAK+F,cAC7C/F,KAAKF,MAAMsC,oBAAoB,OAAQpC,KAAK8F,aAC5C9F,KAAKF,MAAMsC,oBAAoB,QAASpC,KAAKqF,eAC7CrF,KAAK4E,QAAQxC,oBAAoB,YAAapC,KAAK6F,oBACnD7F,KAAK4E,QAAQxC,oBAAoB,kBAAmBpC,KAAKiG,UAE7DpG,YAAYW,GACRA,EAAMY,iBAC2C,SAA7CpB,KAAKF,MAAMmB,aAAa,mBACxBjB,KAAKF,MAAMiC,aAAa,gBAAiB,SACzC/B,KAAKmG,+BAA+B,oBAExCnG,KAAKF,MAAMsG,MAAQ,GACnBpG,KAAK+D,UAAUqC,MAAQ,GACvBpG,KAAKF,MAAMkD,QACXhD,KAAKF,MAAMyD,cAAc,IAAI8C,MAAM,WACnCrG,KAAK+D,UAAUuC,MAAO,EAE1BzG,UAAUW,GACN,GAAkB,UAAdA,EAAMM,KAAmBd,KAAK+D,UAAUuC,MAAQtG,KAAK6E,kBAAmB,CACxE,MAAM0B,EAAcvG,KAAK4E,QAAQ4B,SAAS,GACtCD,IACA/F,EAAMiG,kBACNjG,EAAMY,iBACNpB,KAAKiG,SAAS,CAAElF,OAAQwF,KAGhC,GAAkB,WAAd/F,EAAMM,KAAoBd,KAAK+D,UAAUuC,KACzCtG,KAAK+D,UAAUuC,MAAO,EACtB9F,EAAMiG,kBACNjG,EAAMY,sBAEL,GAAIZ,EAAMI,QAAwB,YAAdJ,EAAMM,KAAqBd,KAAK+D,UAAUuC,KAC/DtG,KAAK+D,UAAUuC,MAAO,EACtB9F,EAAMiG,kBACNjG,EAAMY,sBAEL,GAAIZ,EAAMI,QAAwB,cAAdJ,EAAMM,MAAwBd,KAAK+D,UAAUuC,KAAM,CACxE,IAAKtG,KAAKF,MAAMsG,MAAMM,OAClB,OACJ1G,KAAK+D,UAAUuC,MAAO,EACtB9F,EAAMiG,kBACNjG,EAAMY,kBAGdvB,eACIG,KAAK2G,eAET9G,cACQG,KAAKoF,oBACLpF,KAAKoF,qBAAsB,EAG/BpF,KAAK+D,UAAUuC,MAAO,EAE1BzG,UAASkB,OAAEA,IACP,MAAM6F,EAAW7F,EACjB,KAAM6F,aAAoBC,aACtB,OAEJ,GADA7G,KAAK+D,UAAUuC,MAAO,EAClBM,aAAoBE,kBACpB,OACJ,MAAMV,EAAQQ,EAAS3F,aAAa,4BAA8B2F,EAASG,YAC3E/G,KAAKmG,+BAA+B,GAAGS,EAASG,aAAe,gBAC/D/G,KAAK+D,UAAUqC,MAAQA,EAClBA,GACDpG,KAAKmG,+BAA+B,mBAG5CtG,qBACIG,KAAKoF,qBAAsB,EAE/BvF,gBACQG,KAAK+E,UAAY/E,KAAK+E,SAASgC,cAC/B/G,KAAK+E,SAASgC,YAAc,IAEhC/G,KAAK+D,UAAU9B,gBAAgB,SAC/BjC,KAAK2G,eAET9G,kBACI,IAAIK,EAAK,EACT,IAAK,MAAMiD,KAAMnD,KAAK4E,QAAQnC,iBAAiB,6BAC3CU,EAAGjD,GAAK,GAAGF,KAAK4E,QAAQ1E,aAAaA,MAG7CL,+BAA+BmH,GAC3BrB,YAAW,KACH3F,KAAK+E,WACL/E,KAAK+E,SAASgC,YAAcC,KAEjCxC,GAEP3E,eACI,MAAMoH,EAAQjH,KAAKF,MAAMsG,MAAMM,OAC/B,IAAKO,EAED,YADAjH,KAAK+D,UAAUuC,MAAO,GAG1B,MAAMY,EAAMlH,KAAK+D,UAAUmD,IAC3B,IAAKA,EACD,OACJ,MAAMC,EAAM,IAAIC,IAAIF,EAAKzC,OAAO4C,SAASC,MACnCC,EAAS,IAAIC,gBAAgBL,EAAIM,OAAOnH,MAAM,IACpDiH,EAAOG,OAAO,IAAKT,GACnBE,EAAIM,OAASF,EAAOlH,WACpBL,KAAK+D,UAAUR,cAAc,IAAIC,YAAY,cAC7CxD,KAAK+D,UACA4D,YAAY3H,KAAKF,MAAOqH,EAAI9G,YAC5BuH,MAAKC,IACN7H,KAAK4E,QAAQkD,UAAYD,EACzB7H,KAAK+H,kBACL,MAAMC,EAAgBhI,KAAK4E,QAAQnC,iBAAiB,mBAC9CwF,IAAeD,EAAcjF,OAC7BmF,EAAaF,EAAcjF,QAC1BwD,GAAeyB,EAChBG,EAAmB5B,MAAAA,OAAiD,EAASA,EAAYQ,YAC3F/G,KAAK6E,mBAAqBsD,EAC1BnI,KAAKmG,+BAA+B,GAAG+B,cAAuBC,iDAG9DnI,KAAKmG,+BAA+B,GAAG+B,GAAc,iBAEzDlI,KAAK+D,UAAUuC,KAAO2B,EACtBjI,KAAK+D,UAAUR,cAAc,IAAIC,YAAY,SAC7CxD,KAAK+D,UAAUR,cAAc,IAAIC,YAAY,eAE5C4E,OAAM,KACPpI,KAAK+D,UAAUR,cAAc,IAAIC,YAAY,UAC7CxD,KAAK+D,UAAUR,cAAc,IAAIC,YAAY,eAGrD3D,OACSG,KAAK4E,QAAQjB,SAElB3D,KAAKS,SAAS4H,QACdrI,KAAK4E,QAAQjB,QAAS,GAE1B9D,QACQG,KAAK4E,QAAQjB,SAEjB3D,KAAKS,SAASuB,OACdhC,KAAK4E,QAAQjB,QAAS,IAI9B,MAAM2E,UAA0B9E,YAC5B3D,YAAY4B,EAAM8G,GACdC,MAAM/G,EAAM8G,GACZvI,KAAKyI,cAAgBF,EAAKE,eAIlC,MAAMC,EAAW,IAAIC,QACrB,SAASC,EAASzF,EAAIgE,GAClB,MAAM0B,EAAM,IAAIC,eAGhB,OAFAD,EAAIvC,KAAK,MAAOa,GAAK,GACrB0B,EAAIE,iBAAiB,SAAU,sBAGnC,SAAiB5F,EAAI0F,GACjB,MAAMG,EAAUN,EAASO,IAAI9F,GACzB6F,GACAA,EAAQE,QACZR,EAASS,IAAIhG,EAAI0F,GACjB,MAAMO,EAAQ,IAAMV,EAASW,OAAOlG,GAC9BmG,EAIV,SAAcT,GACV,OAAO,IAAIU,SAAQ,CAACC,EAASC,KACzBZ,EAAIa,OAAS,WACLb,EAAIc,QAAU,KAAOd,EAAIc,OAAS,IAClCH,EAAQX,EAAIe,cAGZH,EAAO,IAAII,MAAMhB,EAAIe,gBAG7Bf,EAAIiB,QAAUL,EACdZ,EAAIkB,UAfOA,CAAKlB,GAEpB,OADAS,EAAO1B,KAAKwB,EAAOA,GACZE,EAVAU,CAAQ7G,EAAI0F,GA2BvB,MAAMoB,EAAQ,IAAItB,QAClB,MAAMuB,4BAA4BrD,YAC9BhH,cACI2I,SAAS2B,WACTnK,KAAK2H,YAAciB,EAEvB/I,oBACI,MAAMuK,EAASpK,KAAKiB,aAAa,OACjC,IAAKmJ,EACD,OACJ,MAAMtK,EAAQE,KAAKgB,cAAc,SAC3B4D,EAAUlD,SAASC,eAAeyI,GACxC,KAAMtK,aAAiB8D,kBAAsBgB,GACzC,OACJ,MAAMC,EAA6D,SAAzC7E,KAAKiB,aAAa,mBAC5CgJ,EAAMd,IAAInJ,KAAM,IAAI2E,EAAa3E,KAAMF,EAAO8E,EAASC,IACvDD,EAAQ7C,aAAa,OAAQ,WAEjClC,uBACI,MAAMwK,EAAeJ,EAAMhB,IAAIjJ,MAC3BqK,IACAA,EAAaC,UACbL,EAAMZ,OAAOrJ,OAGrBkH,UACI,OAAOlH,KAAKiB,aAAa,QAAU,GAEvCiG,QAAQC,GACJnH,KAAK+B,aAAa,MAAOoF,GAE7Bf,YACI,OAAOpG,KAAKiB,aAAa,UAAY,GAEzCmF,UAAUA,GACNpG,KAAK+B,aAAa,QAASqE,GAE/BE,WACI,OAAOtG,KAAKuK,aAAa,QAE7BjE,SAASF,GACDA,EACApG,KAAK+B,aAAa,OAAQ,IAG1B/B,KAAKiC,gBAAgB,QAG7BuI,gCACI,MAAO,CAAC,OAAQ,SAEpB3K,yBAAyBoF,EAAMwF,EAAUC,GACrC,GAAID,IAAaC,EACb,OACJ,MAAML,EAAeJ,EAAMhB,IAAIjJ,MAC/B,GAAKqK,EAEL,OAAQpF,GACJ,IAAK,OACY,OAAbyF,EAAoBL,EAAaM,QAAUN,EAAa/D,OACxD,MACJ,IAAK,QACgB,OAAboE,IACAL,EAAavK,MAAMsG,MAAQsE,GAE/B1K,KAAKuD,cAAc,IAAI+E,EAAkB,uBAAwB,CAC7D7E,SAAS,EACTgF,cAAe4B,EAAavK,WC5ShD,SAAS8K,EAASC,GAChB,GAAI,cAAepL,UAGjB,OAAOA,UAAUqL,UAAUC,UAAUF,EAAK9D,aAG5C,MAAMiE,EAAYC,eAElB,GAAiB,MAAbD,EACF,OAAOzB,QAAQE,OAAO,IAAII,OAG5BmB,EAAUE,kBACV,MAAMC,EAAQzJ,SAAS0J,cAKvB,OAJAD,EAAME,mBAAmBR,GACzBG,EAAUM,SAASH,GACnBzJ,SAAS6J,YAAY,QACrBP,EAAUE,kBACH3B,QAAQC,UAEjB,SAASgC,EAASC,GAChB,GAAI,cAAehM,UAGjB,OAAOA,UAAUqL,UAAUC,UAAUU,GAGvC,MAAMC,EAAOhK,SAASgK,KAEtB,IAAKA,EACH,OAAOnC,QAAQE,OAAO,IAAII,OAG5B,MAAMgB,EA5CR,SAAoBY,GAClB,MAAMZ,EAAOnJ,SAASiK,cAAc,OAMpC,OALAd,EAAKe,MAAMC,MAAQ,MACnBhB,EAAKe,MAAME,OAAS,MACpBjB,EAAKe,MAAMG,SAAW,QACtBlB,EAAKe,MAAMxH,IAAM,MACjByG,EAAK9D,YAAc0E,EACZZ,EAqCMmB,CAAWP,GAIxB,OAHAC,EAAKO,YAAYpB,GACjBD,EAASC,GACTa,EAAKQ,YAAYrB,GACVtB,QAAQC,UAGjB,SAAS2C,EAAKC,GACZ,MAAMlM,EAAKkM,EAAOnL,aAAa,OACzBwK,EAAOW,EAAOnL,aAAa,SAEjC,SAASoL,IACPD,EAAO7I,cAAc,IAAIC,YAAY,iBAAkB,CACrDC,SAAS,KAIb,GAAIgI,EACFD,EAASC,GAAM7D,KAAKyE,QACf,GAAInM,EAAI,CACb,MAAMoM,EAAO,gBAAiBjJ,QAAQkJ,UAAYH,EAAOI,cAAgBJ,EAAOK,cAChF,KAAMH,aAAgBI,UAAY,eAAgBjI,QAAU6H,aAAgBK,YAAa,OACzF,MAAM9B,EAAOyB,EAAK3K,eAAezB,GAC7B2K,IAIY+B,EAJK/B,EAKnB+B,aAAmBhJ,kBAAoBgJ,aAAmBC,oBACrDrB,EAASoB,EAAQxG,OACfwG,aAAmB9F,mBAAqB8F,EAAQrC,aAAa,QAC/DiB,EAASoB,EAAQtF,MAEjBsD,EAASgC,IAVWhF,KAAKyE,GAIpC,IAAoBO,EAUpB,SAASE,EAAQtM,GACf,MAAM4L,EAAS5L,EAAMuM,cAEjBX,aAAkBvF,aACpBsF,EAAKC,GAIT,SAASY,EAAQxM,GACf,GAAkB,MAAdA,EAAMM,KAA6B,UAAdN,EAAMM,IAAiB,CAC9C,MAAMsL,EAAS5L,EAAMuM,cAEjBX,aAAkBvF,cACpBrG,EAAMY,iBACN+K,EAAKC,KAKX,SAASa,EAAQzM,GACfA,EAAMuM,cAAc7K,iBAAiB,UAAW8K,GAGlD,SAASE,EAAQ1M,GACfA,EAAMuM,cAAc3K,oBAAoB,UAAW4K,GDmNhDvI,OAAO0I,eAAelE,IAAI,mBAC3BxE,OAAOyF,oBAAsBA,oBAC7BzF,OAAO0I,eAAeC,OAAO,gBAAiBlD,sBClNlD,MAAMmD,6BAA6BxG,YACjChH,cACE2I,QACAxI,KAAKkC,iBAAiB,QAAS4K,GAC/B9M,KAAKkC,iBAAiB,QAAS+K,GAC/BjN,KAAKkC,iBAAiB,OAAQgL,GAGhCrN,oBACOG,KAAKuK,aAAa,aACrBvK,KAAK+B,aAAa,WAAY,KAG3B/B,KAAKuK,aAAa,SACrBvK,KAAK+B,aAAa,OAAQ,UAI9BqE,YACE,OAAOpG,KAAKiB,aAAa,UAAY,GAGvCmF,UAAUqF,GACRzL,KAAK+B,aAAa,QAAS0J,IAK1BhH,OAAO0I,eAAelE,IAAI,oBAC7BxE,OAAO4I,qBAAuBA,qBAC9B5I,OAAO0I,eAAeC,OAAO,iBAAkBC,uBCtIjD,SAASC,EAAQC,GACfA,EAAI3B,MAAM4B,QAAU,eAGtB,SAASC,EAAQF,GACfA,EAAI3B,MAAM4B,QAAU,OAuBtB,MAAME,EAA6B,IAAI/E,QChCvC,SAASgF,EAAQxK,GACb,OAAOZ,MAAMC,KAAKW,EAAGV,iBAAiB,kCAAkCC,QAAOkL,GAAOA,aAAe/G,aAAe+G,EAAItK,QAAQH,EAAG0K,WAAa1K,IDiCpJzB,SAASQ,iBAAiB,kBAAkB,UAASnB,OAACA,IACpD,KAAMA,aAAkB8F,aAAc,OACtC,IAAK9F,EAAOwJ,aAAa,uBAAwB,OAEjD,MAAMuD,EAAiBJ,EAA2BzE,IAAIlI,GAElD+M,GACFpI,aAAaoI,GACbJ,EAA2BrE,OAAOtI,IAnBtC,SAAmBqL,GACjB,MAAO2B,EAAUC,GAAa5B,EAAO3J,iBAA6B,YAE7DsL,GAAaC,IAElBP,EAAQM,GACRT,EAAQU,IAeNC,CAAUlN,GAGZ2M,EAA2BvE,IACzBpI,EACA4E,YAAW,MApCf,SAAkByG,GAChB,MAAO2B,EAAUC,GAAa5B,EAAO3J,iBAA6B,YAE7DsL,GAAaC,IAElBV,EAAQS,GACRN,EAAQO,IA+BJE,CAASnN,GACT2M,EAA2BrE,OAAOtI,KAjDF,SCCvB,MAAMoN,4BAA4BtH,YAC7ChH,cACI2I,QACAxI,KAAKkC,iBAAiB,WAAY1B,IAC9B,MAAMO,EAASP,EAAMO,OACrB,KAAMA,aAAkB8F,aACpB,OACJ,GAAI9F,EAAOuC,QAAQtD,KAAK6N,WAAa7N,KACjC,OACJ,GAAoC,QAAhCe,EAAOE,aAAa,UAAsBF,EAAOuC,QAAQ,oBACzD,OACJ,MAAM8K,EAAOT,EAAQ3N,MACfqO,EAAeD,EAAKtL,QAAQsL,EAAKE,MAAKV,GAAOA,EAAIW,QAAQ,6BAC/D,GAAmB,eAAf/N,EAAMgO,KAAuB,CAC7B,IAAIC,EAAQJ,EAAe,EACvBI,GAASL,EAAKrL,SACd0L,EAAQ,GACZC,EAAU1O,KAAMyO,QAEf,GAAmB,cAAfjO,EAAMgO,KAAsB,CACjC,IAAIC,EAAQJ,EAAe,EACvBI,EAAQ,IACRA,EAAQL,EAAKrL,OAAS,GAC1B2L,EAAU1O,KAAMyO,OAEI,SAAfjO,EAAMgO,MACXE,EAAU1O,KAAM,GAChBQ,EAAMY,kBAEc,QAAfZ,EAAMgO,OACXE,EAAU1O,KAAMoO,EAAKrL,OAAS,GAC9BvC,EAAMY,qBAGdpB,KAAKkC,iBAAiB,SAAU1B,IAC5B,MAAM4N,EAAOT,EAAQ3N,MACrB,KAAMQ,EAAMO,kBAAkBsC,SAC1B,OACJ,GAAI7C,EAAMO,OAAOuC,QAAQtD,KAAK6N,WAAa7N,KACvC,OACJ,MAAM4N,EAAMpN,EAAMO,OAAOuC,QAAQ,gBACjC,KAAMsK,aAAe/G,aAAiB+G,EAAItK,QAAQ,qBAC9C,OAEJoL,EAAU1O,KADIoO,EAAKtL,QAAQ8K,OAInC/N,oBACI,IAAK,MAAM+N,KAAOD,EAAQ3N,MACjB4N,EAAIrD,aAAa,kBAClBqD,EAAI7L,aAAa,gBAAiB,SAEjC6L,EAAIrD,aAAa,cACwB,SAAtCqD,EAAI3M,aAAa,iBACjB2M,EAAI7L,aAAa,WAAY,KAG7B6L,EAAI7L,aAAa,WAAY,QAMjD,SAAS2M,EAAUC,EAAcF,GAC7B,MAAML,EAAOT,EAAQgB,GACfC,EAASrM,MAAMC,KAAKmM,EAAalM,iBAAiB,sBAAsBC,QAAOmM,GAASA,EAAMvL,QAAQqL,EAAad,WAAac,IAChIG,EAAcV,EAAKK,GACnBM,EAAgBH,EAAOH,GAM7B,KALmBE,EAAapL,cAAc,IAAIC,YAAY,uBAAwB,CAClFC,SAAS,EACTuL,YAAY,EACZC,OAAQ,CAAExG,cAAesG,MAE7B,CAEA,IAAK,MAAMnB,KAAOQ,EACdR,EAAI7L,aAAa,gBAAiB,SAClC6L,EAAI7L,aAAa,WAAY,MAEjC,IAAK,MAAM8M,KAASD,EAChBC,EAAMlL,QAAS,EACVkL,EAAMtE,aAAa,aAAgBsE,EAAMtE,aAAa,kCACvDsE,EAAM9M,aAAa,WAAY,KAGvC+M,EAAY/M,aAAa,gBAAiB,QAC1C+M,EAAY/M,aAAa,WAAY,KACrC+M,EAAY9L,QACZ+L,EAAcpL,QAAS,EACvBgL,EAAapL,cAAc,IAAIC,YAAY,wBAAyB,CAChEC,SAAS,EACTwL,OAAQ,CAAExG,cAAesG,OAG5BtK,OAAO0I,eAAelE,IAAI,mBAC3BxE,OAAO0J,oBAAsBA,oBAC7B1J,OAAO0I,eAAeC,OAAO,gBAAiBe,sBCnGlD,MAAMe,EAAW,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YAC9EC,EAAS,CACX,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,YAEJ,SAASC,EAAIC,GACT,MAAO,IAAIA,IAAM/O,OAAO,GAE5B,SAASgP,EAASC,EAAMC,GACpB,MAAMC,EAAMF,EAAKG,SACXC,EAAOJ,EAAKK,UACZC,EAAQN,EAAKO,WACbC,EAAOR,EAAKS,cACZC,EAAOV,EAAKW,WACZC,EAASZ,EAAKa,aACdC,EAASd,EAAKe,aACpB,OAAOd,EAAae,QAAQ,+BAA+B,SAAUC,GACjE,IAAI7Q,EAEJ,OADiB6Q,EAAK,IAElB,IAAK,IACD,MAAO,IACX,IAAK,IACD,OAAOtB,EAASO,GAAKnP,MAAM,EAAG,GAClC,IAAK,IACD,OAAO4O,EAASO,GACpB,IAAK,IACD,OAAON,EAAOU,GAAOvP,MAAM,EAAG,GAClC,IAAK,IACD,OAAO6O,EAAOU,GAClB,IAAK,IACD,OAAON,EAAKlP,WAChB,IAAK,IACD,OAAO+O,EAAIO,GACf,IAAK,IACD,OAAOc,OAAOd,GAClB,IAAK,IACD,OAAOP,EAAIa,GACf,IAAK,IACD,OAAOb,EAAIE,EAASC,EAAM,OAC9B,IAAK,IACD,OACWkB,OADE,IAATR,GAAuB,KAATA,EACA,IAGCA,EAAO,IAAM,IAEpC,IAAK,IACD,OAAOb,EAAIS,EAAQ,GACvB,IAAK,IACD,OAAOT,EAAIe,GACf,IAAK,IACD,OAAIF,EAAO,GACA,KAGA,KAEf,IAAK,IACD,OAAIA,EAAO,GACA,KAGA,KAEf,IAAK,IACD,OAAOb,EAAIiB,GACf,IAAK,IACD,OAAOI,OAAOhB,GAClB,IAAK,IACD,OAAOL,EAAIW,EAAO,KACtB,IAAK,IACD,OAAOU,OAAOV,GAClB,IAAK,IAED,OADApQ,EAAQ4P,EAAKlP,WAAWV,MAAM,cACvBA,EAAQA,EAAM,GAAK,GAC9B,IAAK,IAED,OADAA,EAAQ4P,EAAKlP,WAAWV,MAAM,qBACvBA,EAAQA,EAAM,GAAK,GAElC,MAAO,MAGf,SAAS+Q,EAAcC,GACnB,IAAIC,EACJ,OAAO,WACH,GAAIA,EACA,OAAOA,EACX,GAAI,SAAUnM,OACV,IAEI,OADAmM,EAAS,IAAIC,KAAKC,oBAAeC,EAAWJ,GACrCC,EAEX,MAAOI,GACH,KAAMA,aAAaC,YACf,MAAMD,IAM1B,IAAIE,EAAW,KACf,MAAMC,EAAoBT,EAAc,CAAEjB,IAAK,UAAWI,MAAO,UACjE,SAASuB,IACL,GAAiB,OAAbF,EACA,OAAOA,EAEX,MAAMG,EAAYF,IAClB,GAAIE,EAAW,CACX,MAAMC,EAASD,EAAUT,OAAO,IAAIW,KAAK,IAEzC,OADAL,IAAaI,EAAO3R,MAAM,OACnBuR,EAGP,OAAO,EAGf,IAAIM,EAAgB,KACpB,MAAMC,EAAgBf,EAAc,CAAEjB,IAAK,UAAWI,MAAO,QAASE,KAAM,YA+B5E,SAAS2B,EAAkBvO,GACvB,MAAMY,EAAYZ,EAAGG,QAAQ,UAC7B,OAAIS,aAAqB8C,aAAe9C,EAAU4N,KACvC5N,EAAU4N,KAEd,UAGX,MAAMC,EAAY,IAAIjJ,QACtB,MAAMkJ,4BAA4BhL,YAC9B2D,gCACI,MAAO,CACH,WACA,MACA,SACA,OACA,OACA,SACA,QACA,SACA,QACA,UACA,OACA,kBAGR3K,oBACI,MAAMiS,EAAQ9R,KAAK+R,oBACfD,IAAU9R,KAAKuK,aAAa,UAC5BvK,KAAK+B,aAAa,QAAS+P,GAE/B,MAAMrG,EAAOzL,KAAKgS,mBACdvG,IACAzL,KAAK+G,YAAc0E,GAG3B5L,yBAAyBoS,EAAUxH,EAAUC,GACzC,MAAMwH,EAAWlS,KAAK+R,oBACtB,GAAiB,aAAbE,EAAyB,CACzB,MAAME,EAASZ,KAAKa,MAAM1H,GACtB2H,MAAMF,GACNP,EAAUvI,OAAOrJ,MAGjB4R,EAAUzI,IAAInJ,KAAM,IAAIuR,KAAKY,IAGrC,MAAML,EAAQ9R,KAAK+R,oBACbO,EAAetS,KAAKiB,aAAa,SACtB,UAAbgR,IAAwBH,GAAWQ,GAAgBA,IAAiBJ,GACpElS,KAAK+B,aAAa,QAAS+P,GAE/B,MAAMrG,EAAOzL,KAAKgS,mBACdvG,IACAzL,KAAK+G,YAAc0E,GAG3BkE,WACI,OAAOiC,EAAU3I,IAAIjJ,MAEzBH,oBACI,MAAM8P,EAAO3P,KAAK2P,KAClB,IAAKA,EACD,OACJ,MAAM0B,EAAYkB,IAClB,GAAIlB,EACA,OAAOA,EAAUT,OAAOjB,GAGxB,IACI,OAAOA,EAAK6C,iBAEhB,MAAOxB,GACH,GAAIA,aAAaC,WACb,OAAOtB,EAAKtP,WAGZ,MAAM2Q,GAKtBnR,qBAIJ,MAAM0S,EAAiB7B,EAAc,CACjCjB,IAAK,UACLI,MAAO,QACPE,KAAM,UACNE,KAAM,UACNE,OAAQ,UACRsC,aAAc,UAGZC,EAAa,IAAI/J,QACvB,MAAMgK,yBAAyBd,oBAC3BhS,yBAAyBoS,EAAUxH,EAAUC,GACxB,SAAbuH,GAAoC,WAAbA,GAAsC,WAAbA,GAAsC,mBAAbA,GACzES,EAAWrJ,OAAOrJ,MAEtBwI,MAAMoK,yBAAyBX,EAAUxH,EAAUC,GAEvD7K,mBACI,MAAMgT,EAAI7S,KAAK2P,KACf,IAAKkD,EACD,OAGJ,MAAO,GAGf,SAAoB1P,EAAIwM,GACpB,MAAMmD,EAAQ,CACVC,QAAS,CACLC,MAAO,KACPC,KAAM,MAEVxD,IAAK,CACDyD,QAAS,KACTC,UAAW,MAEftD,MAAO,CACHmD,MAAO,KACPC,KAAM,MAEVlD,KAAM,CACFmD,QAAS,KACTC,UAAW,OAGnB,IAAIvC,EAASQ,IAAe,yBAA2B,0BACvD,IAAK,MAAMgC,KAAQN,EAAO,CACtB,MAAM1M,EAAQ0M,EAAMM,GAAMjQ,EAAGlC,aAAamS,IAAS,IACnDxC,EAASA,EAAOL,QAAQ6C,EAAMhN,GAAS,IAG3C,OADAwK,EAASA,EAAOL,QAAQ,eAAgB,IACjCjB,EAASK,EAAMiB,GAAQL,QAAQ,MAAO,KAAK7J,OA9BjC2M,CAAWrT,KAAM6S,IAAM,MAgC5C,SAAoB1P,EAAIwM,GACpB,MAAMgB,EAAU,GACVV,EAAO9M,EAAGlC,aAAa,QAChB,YAATgP,GAA+B,YAATA,IACtBU,EAAQV,KAAOA,GACnB,MAAME,EAAShN,EAAGlC,aAAa,UAChB,YAAXkP,GAAmC,YAAXA,IACxBQ,EAAQR,OAASA,GACrB,MAAME,EAASlN,EAAGlC,aAAa,UAChB,YAAXoP,GAAmC,YAAXA,IACxBM,EAAQN,OAASA,GACrB,MAAMiD,EAAKnQ,EAAGlC,aAAa,kBAChB,UAAPqS,GAAyB,SAAPA,IAClB3C,EAAQ8B,aAAea,GAC3B,GAAoC,IAAhCC,OAAOC,KAAK7C,GAAS5N,OACrB,OAEJ,IAAI0Q,EAAUf,EAAWzJ,IAAI9F,GACxBsQ,IACDA,EAAU/C,EAAcC,GACxB+B,EAAWvJ,IAAIhG,EAAIsQ,IAEvB,MAAMpC,EAAYoC,IAClB,GAAIpC,EACA,OAAOA,EAAUT,OAAOjB,GAIxB,OAAOL,EAASK,EADFgB,EAAQN,OAAS,WAAa,SA1D/BqD,CAAW1T,KAAM6S,IAAM,KACXnM,QA6D5BjC,OAAO0I,eAAelE,IAAI,gBAC3BxE,OAAOkO,iBAAmBA,iBAC1BlO,OAAO0I,eAAeC,OAAO,aAAcuF,mBAG/C,MAAMgB,EACF9T,YAAY8P,EAAMiE,GACd5T,KAAK2P,KAAOA,EACZ3P,KAAK4T,OAASA,EAElB/T,WACI,MAAMgU,EAAM7T,KAAK8T,cACjB,GAAID,EACA,OAAOA,EAEN,CACD,MAAME,EAAQ/T,KAAKgU,YACnB,OAAID,GAIO,MAAM/T,KAAKqT,gBAI9BxT,cACI,MAAMoU,GAAK,IAAI1C,MAAO2C,UAAYlU,KAAK2P,KAAKuE,UACtCC,EAAMhU,KAAKiU,MAAMH,EAAK,KACtBI,EAAMlU,KAAKiU,MAAMD,EAAM,IACvBG,EAAKnU,KAAKiU,MAAMC,EAAM,IACtB5E,EAAMtP,KAAKiU,MAAME,EAAK,IAC5B,OAAIL,GAAM,GAAKxE,EAAM,GACVzP,KAAKuU,cAAcN,GAGnB,KAGfpU,YACI,MAAMoU,EAAKjU,KAAK2P,KAAKuE,WAAY,IAAI3C,MAAO2C,UACtCC,EAAMhU,KAAKiU,MAAMH,EAAK,KACtBI,EAAMlU,KAAKiU,MAAMD,EAAM,IACvBG,EAAKnU,KAAKiU,MAAMC,EAAM,IACtB5E,EAAMtP,KAAKiU,MAAME,EAAK,IAC5B,OAAIL,GAAM,GAAKxE,EAAM,GACVzP,KAAKwU,YAGL,KAGf3U,UACI,MAAMoU,GAAK,IAAI1C,MAAO2C,UAAYlU,KAAK2P,KAAKuE,UAC5C,OAAOlU,KAAKuU,cAAcN,GAE9BpU,cAAcoU,GACV,MAAME,EAAMhU,KAAKiU,MAAMH,EAAK,KACtBI,EAAMlU,KAAKiU,MAAMD,EAAM,IACvBG,EAAKnU,KAAKiU,MAAMC,EAAM,IACtB5E,EAAMtP,KAAKiU,MAAME,EAAK,IACtBzE,EAAQ1P,KAAKiU,MAAM3E,EAAM,IACzBM,EAAO5P,KAAKiU,MAAMvE,EAAQ,IAChC,OAAIoE,EAAK,GAGAE,EAAM,GAFJM,EAAmBzU,KAAK4T,OAAQ,EAAG,UAKrCO,EAAM,GACJM,EAAmBzU,KAAK4T,QAASO,EAAK,UAExCA,EAAM,IAGNE,EAAM,GAFJI,EAAmBzU,KAAK4T,QAASS,EAAK,UAKxCA,EAAM,IAGNC,EAAK,GAFHG,EAAmBzU,KAAK4T,QAASU,EAAI,QAKvCA,EAAK,IAGL7E,EAAM,GAFJgF,EAAmBzU,KAAK4T,QAASnE,EAAK,OAKxCI,EAAQ,GACN4E,EAAmBzU,KAAK4T,QAAS/D,EAAO,SAGxC4E,EAAmBzU,KAAK4T,QAAS7D,EAAM,QAGtDlQ,eACI,MAAMoU,GAAK,IAAI1C,MAAO2C,UAAYlU,KAAK2P,KAAKuE,UACtCC,EAAMhU,KAAKiU,MAAMH,EAAK,KACtBI,EAAMlU,KAAKiU,MAAMD,EAAM,IACvBG,EAAKnU,KAAKiU,MAAMC,EAAM,IACtB5E,EAAMtP,KAAKiU,MAAME,EAAK,IACtBzE,EAAQ1P,KAAKiU,MAAM3E,EAAM,IACzBM,EAAO5P,KAAKiU,MAAMvE,EAAQ,IAChC,OAAIwE,EAAM,EACC,KAEFA,EAAM,GACJ,GAAGA,KAELC,EAAK,GACH,GAAGA,KAEL7E,EAAM,IACJ,GAAGA,KAGH,GAAGM,KAGlBlQ,YACI,MAAMoU,EAAKjU,KAAK2P,KAAKuE,WAAY,IAAI3C,MAAO2C,UAC5C,OAAOlU,KAAK0U,gBAAgBT,GAEhCpU,gBAAgBoU,GACZ,MAAME,EAAMhU,KAAKiU,MAAMH,EAAK,KACtBI,EAAMlU,KAAKiU,MAAMD,EAAM,IACvBG,EAAKnU,KAAKiU,MAAMC,EAAM,IACtB5E,EAAMtP,KAAKiU,MAAME,EAAK,IACtBzE,EAAQ1P,KAAKiU,MAAM3E,EAAM,IACzBM,EAAO5P,KAAKiU,MAAMvE,EAAQ,IAChC,OAAIA,GAAS,IAGJA,GAAS,GAFP4E,EAAmBzU,KAAK4T,OAAQ7D,EAAM,QAKxCN,GAAO,IAGPA,GAAO,GAFLgF,EAAmBzU,KAAK4T,OAAQ/D,EAAO,SAKzCyE,GAAM,IAGNA,GAAM,GAFJG,EAAmBzU,KAAK4T,OAAQnE,EAAK,OAKvC4E,GAAO,IAGPA,GAAO,GAFLI,EAAmBzU,KAAK4T,OAAQU,EAAI,QAKtCH,GAAO,IAGPA,GAAO,GAFLM,EAAmBzU,KAAK4T,OAAQS,EAAK,UAMrCI,EAAmBzU,KAAK4T,OAD1BO,GAAO,GAC2BA,EAGA,EAHK,UAMpDtU,iBACI,MAAMoU,EAAKjU,KAAK2P,KAAKuE,WAAY,IAAI3C,MAAO2C,UACtCC,EAAMhU,KAAKiU,MAAMH,EAAK,KACtBI,EAAMlU,KAAKiU,MAAMD,EAAM,IACvBG,EAAKnU,KAAKiU,MAAMC,EAAM,IACtB5E,EAAMtP,KAAKiU,MAAME,EAAK,IACtBzE,EAAQ1P,KAAKiU,MAAM3E,EAAM,IACzBM,EAAO5P,KAAKiU,MAAMvE,EAAQ,IAChC,OAAIJ,GAAO,IACA,GAAGM,KAELuE,GAAM,GACJ,GAAG7E,KAEL4E,GAAO,GACL,GAAGC,KAELD,EAAM,EACJ,GAAGA,KAGH,KAGfxU,aACI,IAAI+Q,EAASQ,IAAe,QAAU,QA3X9C,IAAoBzB,EA+XZ,OA/XYA,EA4XI3P,KAAK2P,MA3Xb,IAAI4B,MACLoD,mBAAqBhF,EAAKgF,mBA2X7B/D,GA3YZ,WACI,GAAsB,OAAlBY,EACA,OAAOA,EAEX,MAAMH,EAAYI,IAClB,GAAIJ,EAAW,CACX,MAAMC,EAASD,EAAUT,OAAO,IAAIW,KAAK,IAEzC,OADAC,IAAkBF,EAAO3R,MAAM,OACxB6R,EAGP,OAAO,EAgYOoD,GAAoB,OAAS,OAEpCtF,EAAStP,KAAK2P,KAAMiB,GAE/B/Q,aACI,MAAMwR,EAAYwD,IAClB,OAAIxD,EACOA,EAAUT,OAAO5Q,KAAK2P,MAGtBL,EAAStP,KAAK2P,KAAM,YAIvC,SAAS8E,EAAmBb,EAAQxN,EAAO0O,GACvC,MAAMzD,EAxYV,SAA4BuC,EAAQjD,GAChC,GAAI,SAAUlM,QAAU,uBAAwBA,OAAOoM,KACnD,IACI,OAAO,IAAIA,KAAKkE,mBAAmBnB,EAAQjD,GAE/C,MAAOK,GACH,KAAMA,aAAaC,YACf,MAAMD,GAiYAgE,CAAmBpB,EAAQ,CAAEV,QAAS,SACxD,OAAI7B,EACOA,EAAUT,OAAOxK,EAAO0O,GAMvC,SAA8B1O,EAAO0O,GACjC,GAAc,IAAV1O,EACA,OAAQ0O,GACJ,IAAK,OACL,IAAK,UACL,IAAK,QACL,IAAK,OACD,MAAO,QAAQA,IACnB,IAAK,MACD,MAAO,QACX,IAAK,OACL,IAAK,SACD,MAAO,QAAQA,KACnB,IAAK,SACD,MAAO,WAGd,GAAc,IAAV1O,EACL,OAAQ0O,GACJ,IAAK,OACL,IAAK,UACL,IAAK,QACL,IAAK,OACD,MAAO,QAAQA,IACnB,IAAK,MACD,MAAO,WACX,IAAK,OACL,IAAK,SACL,IAAK,SACD,MAAO,QAAQA,SAGtB,IAAe,IAAX1O,EACL,OAAQ0O,GACJ,IAAK,OACL,IAAK,UACL,IAAK,QACL,IAAK,OACD,MAAO,QAAQA,IACnB,IAAK,MACD,MAAO,YACX,IAAK,OACL,IAAK,SACL,IAAK,SACD,MAAO,KAAKA,aAGnB,GAAI1O,EAAQ,EACb,OAAQ0O,GACJ,IAAK,OACL,IAAK,UACL,IAAK,QACL,IAAK,OACL,IAAK,MACL,IAAK,OACL,IAAK,SACL,IAAK,SACD,MAAO,MAAM1O,KAAS0O,UAG7B,GAAI1O,GAAS,EACd,OAAQ0O,GACJ,IAAK,OACL,IAAK,UACL,IAAK,QACL,IAAK,OACL,IAAK,MACL,IAAK,OACL,IAAK,SACL,IAAK,SACD,MAAO,IAAI1O,KAAS0O,SAGhC,MAAM,IAAI7D,WAAW,uCAAuC6D,MA5EjDG,CAAqB7O,EAAO0O,GA8E3C,MAAMD,EAAgBnE,EAAc,CAAET,KAAM,UAAWE,OAAQ,YAE/D,MAAM+E,4BAA4BrD,oBAC9BhS,mBACI,MAAM8P,EAAO3P,KAAK2P,KAClB,GAAKA,EAEL,OAAO,IAAIgE,EAAahE,EAAM+B,EAAkB1R,OAAOK,WAE3DR,oBACIsV,EAAYC,KAAKpV,MACZqV,IACDC,IACAD,EAAsB5Q,OAAO8Q,YAAYD,EAAmB,MAEhE9M,MAAMgN,oBAEV3V,uBACI,MAAM4V,EAAKN,EAAYrS,QAAQ9C,OACnB,IAARyV,GACAN,EAAYO,OAAOD,EAAI,GAEtBN,EAAYpS,QACTsS,IACAM,cAAcN,GACdA,EAAsB,OAKtC,MAAMF,EAAc,GACpB,IAAIE,EACJ,SAASC,IACL,IAAI/F,EAAMqG,EAAGC,EACb,IAAKD,EAAI,EAAGC,EAAMV,EAAYpS,OAAQ6S,EAAIC,EAAKD,IAC3CrG,EAAO4F,EAAYS,GACnBrG,EAAKxI,YAAcwI,EAAKyC,oBAAsB,GAGjDvN,OAAO0I,eAAelE,IAAI,mBAC3BxE,OAAOyQ,oBAAsBA,oBAC7BzQ,OAAO0I,eAAeC,OAAO,gBAAiB8H,sBAGlD,MAAMY,uBAAuBZ,oBACzBrV,mBACI,MAAM+Q,EAAS5Q,KAAKiB,aAAa,UAC3B0O,EAAO3P,KAAK2P,KAClB,GAAKA,EAEL,MAAe,UAAXiB,EACO,IAAI+C,EAAahE,EAAM+B,EAAkB1R,OAAO+V,eAGhD,IAAIpC,EAAahE,EAAM+B,EAAkB1R,OAAOgW,WAI9DvR,OAAO0I,eAAelE,IAAI,cAC3BxE,OAAOqR,eAAiBA,eACxBrR,OAAO0I,eAAeC,OAAO,WAAY0I,iBAG7C,MAAMG,yBAAyBf,oBAC3BrV,mBACI,MAAM+Q,EAAS5Q,KAAKiB,aAAa,UAC3B0O,EAAO3P,KAAK2P,KAClB,GAAKA,EAEL,MAAe,UAAXiB,EACO,IAAI+C,EAAahE,EAAM+B,EAAkB1R,OAAOkW,iBAGhD,IAAIvC,EAAahE,EAAM+B,EAAkB1R,OAAOwU,aAI9D/P,OAAO0I,eAAelE,IAAI,gBAC3BxE,OAAOwR,iBAAmBA,iBAC1BxR,OAAO0I,eAAeC,OAAO,aAAc6I,mBC7rB/C,MAAME,EAAiB,IAAIxN,QACrByN,EAAqB,IAAIzN,QACzB0N,EAAsB,IAAI1N,QAChC,SAAS2N,EAAa9V,GAClB,MAAM2C,EAAK3C,EAAMuM,cACjB,KAAM5J,aAAcoT,kBAChB,OACJ,MAAMC,IAAEA,EAAGC,MAAEA,GAAUJ,EAAoBpN,IAAI9F,IAAO,GACtD,IAAKqT,IAAQC,EACT,OACJ,IAAIC,EAAS,EACTC,EAAS,EACb,GAAInW,aAAiBoW,cACC,YAAdpW,EAAMM,IACN6V,GAAU,EAES,cAAdnW,EAAMM,IACX6V,EAAS,EAEU,cAAdnW,EAAMM,IACX4V,GAAU,EAES,eAAdlW,EAAMM,MACX4V,EAAS,QAGZ,GAAIN,EAAmBS,IAAI1T,IAAO3C,aAAiBsW,WAAY,CAChE,MAAMC,EAAMX,EAAmBnN,IAAI9F,GACnCuT,EAASlW,EAAMwW,MAAQD,EAAIE,WAC3BN,EAASnW,EAAM0W,MAAQH,EAAII,gBAE1B,GAAIf,EAAmBS,IAAI1T,IAAO3C,aAAiB4W,WAAY,CAChE,MAAMJ,MAAEA,EAAKE,MAAEA,GAAU1W,EAAM6W,eAAe,IACxCJ,WAAEA,EAAUE,WAAEA,GAAef,EAAmBnN,IAAI9F,GAC1DuT,EAASM,EAAQC,EACjBN,EAASO,EAAQC,EAErB,GAAe,IAAXT,GAA2B,IAAXC,EAAc,CAC9B,MAAMW,EAAInX,KAAKkU,IAAIlU,KAAKoX,IAAI,EAAGf,EAAIgB,WAAad,GAASD,EAAM5K,MAAQ2K,EAAI3S,aACrE4T,EAAItX,KAAKkU,IAAIlU,KAAKoX,IAAI,EAAGf,EAAInS,UAAYsS,GAASF,EAAM3K,OAAS0K,EAAI1S,cAC3E0S,EAAI5K,MAAM8L,KAAO,GAAGJ,MACpBd,EAAI5K,MAAMxH,IAAM,GAAGqT,MACnBE,EAAgBxU,EAAI,CAAEmU,EAAAA,EAAGG,EAAAA,EAAG5L,MAAO2K,EAAI3S,YAAaiI,OAAQ0K,EAAI1S,eAEpE,GAAItD,aAAiBsW,WACjBV,EAAmBjN,IAAIhG,EAAI,CACvB8T,WAAYzW,EAAMwW,MAClBG,WAAY3W,EAAM0W,aAGrB,GAAI1W,aAAiB4W,WAAY,CAClC,MAAMJ,MAAEA,EAAKE,MAAEA,GAAU1W,EAAM6W,eAAe,GAC9CjB,EAAmBjN,IAAIhG,EAAI,CACvB8T,WAAYD,EACZG,WAAYD,KAIxB,SAASU,EAAepX,GACpB,MAAMO,EAASP,EAAMO,OACrB,KAAMA,aAAkB8F,aACpB,OACJ,MAAM1D,EAAK0U,EAAc9W,GACzB,KAAMoC,aAAcoT,kBAChB,OACJ,MAAMC,IAAEA,GAAQH,EAAoBpN,IAAI9F,IAAO,GAC/C,IAAKqT,EACD,OACJ,MAAMsB,EAAO3U,EAAG4U,wBAChB,IAAIrB,EAAQC,EAAQqB,EACpB,GAAIxX,aAAiBoW,cAAe,CAChC,GAAkB,WAAdpW,EAAMM,IACN,OAAOmX,EAAmB9U,GAK9B,GAJkB,MAAd3C,EAAMM,MACNkX,GAAS,IACK,MAAdxX,EAAMM,MACNkX,EAAQ,KACPA,EACD,OACJtB,EAASF,EAAI3S,YAAcmU,EAC3BrB,EAASH,EAAI1S,aAAekU,EAC5B7B,EAAehN,IAAIhG,EAAI,CAAE+U,OAAQ1B,EAAIgB,WAAYW,OAAQ3B,EAAInS,iBAE5D,GAAI7D,aAAiBsW,WAAY,CAClC,MAAMC,EAAMZ,EAAelN,IAAI9F,GAC/B,IAAK4T,EACD,OACJL,EAASlW,EAAMwW,MAAQD,EAAImB,OAASJ,EAAKJ,KAAOjT,OAAO2T,YACvDzB,EAASnW,EAAM0W,MAAQH,EAAIoB,OAASL,EAAK1T,IAAMK,OAAO4T,iBAErD,GAAI7X,aAAiB4W,WAAY,CAClC,MAAML,EAAMZ,EAAelN,IAAI9F,GAC/B,IAAK4T,EACD,OACJL,EAASlW,EAAM6W,eAAe,GAAGL,MAAQD,EAAImB,OAASJ,EAAKJ,KAAOjT,OAAO2T,YACzEzB,EAASnW,EAAM6W,eAAe,GAAGH,MAAQH,EAAIoB,OAASL,EAAK1T,IAAMK,OAAO4T,YAExE3B,GAAUC,GACV2B,EAAiBnV,EAAIuT,EAAQC,IAAUnW,aAAiBoW,gBAEhE,SAASiB,EAAc1U,GACnB,MAAMoV,EAAWpV,EAAGqJ,cACpB,OAAM+L,aAAoB5L,WAEnB4L,EAASC,KADLrV,EAGf,SAASsV,EAAYjY,GACjB,MAAMuM,EAAgBvM,EAAMuM,cAC5B,KAAMA,aAAyBlG,aAC3B,OACJ,MAAM1D,EAAK0U,EAAc9K,GACzB,KAAM5J,aAAcoT,kBAChB,OACJ,MAAMC,IAAEA,GAAQH,EAAoBpN,IAAI9F,IAAO,GAC/C,IAAKqT,EACD,OACJ,MAAMzV,EAASP,EAAMO,OACrB,GAAMA,aAAkB8F,YAExB,GAAI9F,EAAOwJ,aAAa,kBAAmB,CACvC,MAAMmO,EAAY3X,EAAOE,aAAa,mBAAqB,GAC3DkC,EAAGjB,iBAAiB,YAAa0V,GACjCzU,EAAGjB,iBAAiB,YAAa0V,EAAgB,CAAEe,SAAS,IACxD,CAAC,KAAM,MAAM7V,QAAQ4V,IAAc,GACnCvV,EAAGyV,UAAUC,IAAI,QACjB,CAAC,KAAM,MAAM/V,QAAQ4V,IAAc,GACnCvV,EAAGyV,UAAUC,IAAI,QACrB1C,EAAehN,IAAIhG,EAAI,CACnB+U,OAAQ1B,EAAIgB,YAAc,CAAC,KAAM,MAAM1U,QAAQ4V,IAAc,EAAI,EAAIlC,EAAI3S,aACzEsU,OAAQ3B,EAAInS,WAAa,CAAC,KAAM,MAAMvB,QAAQ4V,IAAc,EAAI,EAAIlC,EAAI1S,gBAE5E8T,EAAepX,QAGf2C,EAAGjB,iBAAiB,YAAaoU,GACjCnT,EAAGjB,iBAAiB,YAAaoU,EAAc,CAAEqC,SAAS,IAGlE,SAASL,EAAiBvX,EAAQ2V,EAAQC,EAAQmC,GAAa,GAC3D,IAAIC,EAAU5Y,KAAKoX,IAAIpX,KAAK6Y,IAAItC,GAASvW,KAAK6Y,IAAIrC,GAAS,IAC3D,MAAMI,EAAMZ,EAAelN,IAAIlI,GAC/B,IAAKgW,EACD,OACJ,MAAMP,IAAEA,EAAGC,MAAEA,GAAUJ,EAAoBpN,IAAIlI,IAAW,GAC1D,IAAKyV,IAAQC,EACT,OACJsC,EAAU5Y,KAAKkU,IAAI0E,EAASpC,EAAS,EAAIF,EAAM3K,OAASiL,EAAIoB,OAASpB,EAAIoB,OAAQzB,EAAS,EAAID,EAAM5K,MAAQkL,EAAImB,OAASnB,EAAImB,QAC7H,MAAMZ,EAAIwB,EAAa3Y,KAAKiU,MAAMjU,KAAKoX,IAAI,EAAGb,EAAS,EAAIK,EAAImB,OAASnB,EAAImB,OAASa,IAAYvC,EAAIgB,WAC/FC,EAAIqB,EAAa3Y,KAAKiU,MAAMjU,KAAKoX,IAAI,EAAGZ,EAAS,EAAII,EAAIoB,OAASpB,EAAIoB,OAASY,IAAYvC,EAAInS,UACrGmS,EAAI5K,MAAM8L,KAAO,GAAGJ,MACpBd,EAAI5K,MAAMxH,IAAM,GAAGqT,MACnBjB,EAAI5K,MAAMC,MAAQ,GAAGkN,MACrBvC,EAAI5K,MAAME,OAAS,GAAGiN,MACtBpB,EAAgB5W,EAAQ,CAAEuW,EAAAA,EAAGG,EAAAA,EAAG5L,MAAOkN,EAASjN,OAAQiN,IAE5D,SAASd,EAAmB9U,GACxB,MAAMsT,MAAEA,GAAUJ,EAAoBpN,IAAI9F,IAAO,GACjD,IAAKsT,EACD,OACJ,MAAMwC,EAAO9Y,KAAKiU,MAAMqC,EAAMyC,YAAczC,EAAMtS,aAAesS,EAAMtS,aAAesS,EAAMyC,aAC5F/C,EAAehN,IAAIhG,EAAI,CACnB+U,QAASzB,EAAMyC,YAAcD,GAAQ,EACrCd,QAAS1B,EAAMtS,aAAe8U,GAAQ,IAE1CX,EAAiBnV,EAAI8V,EAAMA,GAE/B,SAASE,EAAW3Y,GAChB,MAAM2C,EAAK3C,EAAMuM,cACX5J,aAAcoT,mBAEpBH,EAAmB/M,OAAOlG,GAC1BA,EAAGyV,UAAUQ,OAAO,OAAQ,QAC5BjW,EAAGf,oBAAoB,YAAawV,GACpCzU,EAAGf,oBAAoB,YAAakU,GACpCnT,EAAGf,oBAAoB,YAAawV,GACpCzU,EAAGf,oBAAoB,YAAakU,IAExC,SAASqB,EAAgB5W,EAAQuI,GAC7B,MAAMmN,MAAEA,GAAUJ,EAAoBpN,IAAIlI,IAAW,GACrD,IAAK0V,EACD,OACJ,MAAM4C,EAAQ5C,EAAM6C,aAAe7C,EAAM5K,MACzC,IAAK,MAAM/K,KAAOwI,EAAQ,CACtB,MAAMlD,EAAQjG,KAAKiU,MAAM9K,EAAOxI,GAAOuY,GACvC/P,EAAOxI,GAAOsF,EACd,MAAMmT,EAAexY,EAAOC,cAAc,2BAA2BF,OACjEyY,aAAwB3V,mBACxB2V,EAAanT,MAAQA,EAAM/F,YAEnCU,EAAOwC,cAAc,IAAIC,YAAY,oBAAqB,CAAEC,SAAS,EAAMwL,OAAQ3F,KAEvF,MAAMiN,yBAAyB1P,YAC3BhH,oBACI,GAAIwW,EAAoBQ,IAAI7W,MACxB,OACJ,MAAMwZ,EAAaxZ,KAAKyZ,aAAa,CAAEC,KAAM,SAC7CF,EAAW1R,UAAY,yjEA+EvB,MAAM0O,EAAMgD,EAAWxY,cAAc,mBACrC,KAAMwV,aAAe3P,aACjB,OACJ,MAAM4P,EAAQ+C,EAAWxY,cAAc,OACjCyV,aAAiBkD,mBAEvBtD,EAAoBlN,IAAInJ,KAAM,CAAEwW,IAAAA,EAAKC,MAAAA,IACrCA,EAAMvU,iBAAiB,QAAQ,KAC3BlC,KAAK4Z,QAAS,EACd3B,EAAmBjY,SAEvBA,KAAKkC,iBAAiB,aAAciX,GACpCnZ,KAAKkC,iBAAiB,WAAYiX,GAClCnZ,KAAKkC,iBAAiB,UAAWiX,GACjC3C,EAAItU,iBAAiB,YAAauW,GAClCjC,EAAItU,iBAAiB,aAAcuW,EAAa,CAAEE,SAAS,IAC3D3Y,KAAKkC,iBAAiB,UAAWoU,GACjCtW,KAAKkC,iBAAiB,UAAW0V,GAC7B5X,KAAKkH,MACLuP,EAAMvP,IAAMlH,KAAKkH,MAEzBsD,gCACI,MAAO,CAAC,OAEZtD,UACI,OAAOlH,KAAKiB,aAAa,OAE7BiG,QAAQ2S,GACAA,EACA7Z,KAAK+B,aAAa,MAAO8X,GAGzB7Z,KAAKiC,gBAAgB,OAG7B2X,aACI,OAAO5Z,KAAKuK,aAAa,UAE7BqP,WAAWC,GACHA,EACA7Z,KAAK+B,aAAa,SAAU,IAG5B/B,KAAKiC,gBAAgB,UAG7BpC,yBAAyBia,EAAWrP,EAAUC,GAC1C,MAAM+L,MAAEA,GAAUJ,EAAoBpN,IAAIjJ,OAAS,GACjC,QAAd8Z,IACA9Z,KAAK4Z,QAAS,EACVnD,IACAA,EAAMvP,IAAMwD,KAKvBjG,OAAO0I,eAAelE,IAAI,gBAC3BxE,OAAO8R,iBAAmBA,iBAC1B9R,OAAO0I,eAAeC,OAAO,aAAcmJ,mBC7U/C,MAAMwD,2BAA2BlT,YAC7BmT,cACI,OAAOha,KAAKuK,aAAa,WAE7ByP,YAAY5T,GACJA,EACApG,KAAK+B,aAAa,UAAW,IAG7B/B,KAAKiC,gBAAgB,WAG7BiF,UACI,OAAOlH,KAAKiB,aAAa,QAAU,GAEvCiG,QAAQd,GACJpG,KAAK+B,aAAa,MAAOqE,GAE7BvG,oBACSG,KAAKuK,aAAa,SACnBvK,KAAK+B,aAAa,OAAQ,QAC9B,MAAMkY,EAAUja,KAAKka,cACrB,IAAKD,EACD,OACJ,MAAME,EAAUF,EAAQjZ,cAAc,WAClCmZ,IACAA,EAAQpY,aAAa,gBAAiB,QACjCoY,EAAQ5P,aAAa,SACtB4P,EAAQpY,aAAa,OAAQ,WAErC,MAAMqY,EAAgB,CAClBC,GAAUJ,EAAS,oBAAoBjJ,GAAKpP,GAAiB5B,KAAMgR,KACnEqJ,GAAUJ,EAAS,kBAAkBjJ,GAAKpP,GAAiB5B,KAAMgR,KACjEqJ,GAAUJ,EAAS,SAASjJ,GAAKsJ,GAAaL,EAASjJ,KACvDqJ,GAAUJ,EAAS,UAAUjJ,GAAKsJ,GAAaL,EAASjJ,KACxDqJ,GAAUJ,EAAS,WAAWjJ,GAgK1C,SAAiBiJ,EAASM,EAAM/Z,GAC5B,KAAMA,aAAiBoW,eACnB,OACJ,GAAIqD,EAAQjZ,cAAc,iBACtB,OACJ,MAAMiJ,EAAQuQ,GAAOvR,IAAIsR,GACzB,IAAKtQ,GAASA,EAAMhK,YAChB,OACJ,MAAMwa,EAAmBja,EAAMO,kBAAkBsC,SAAoC,YAAzB7C,EAAMO,OAAO8M,QACzE,OAAQrN,EAAMM,KACV,IAAK,SACGmZ,EAAQ1P,aAAa,UACrBI,GAAMsP,GACNzZ,EAAMY,iBACNZ,EAAMiG,mBAEV,MACJ,IAAK,YACD,CACQgU,IAAqBR,EAAQ1P,aAAa,SAC1C0P,EAAQlY,aAAa,OAAQ,IAEjC,MAAMhB,EAAS2Z,GAAQT,GAAS,GAC5BlZ,GACAA,EAAOiC,QACXxC,EAAMY,iBAEV,MACJ,IAAK,UACD,CACQqZ,IAAqBR,EAAQ1P,aAAa,SAC1C0P,EAAQlY,aAAa,OAAQ,IAEjC,MAAMhB,EAAS2Z,GAAQT,GAAS,GAC5BlZ,GACAA,EAAOiC,QACXxC,EAAMY,iBAEV,MACJ,IAAK,IAEG,GAAI5B,IAAgBgB,EAAMK,QAAS,CAC/B,MAAME,EAAS2Z,GAAQT,GAAS,GAC5BlZ,GACAA,EAAOiC,QACXxC,EAAMY,iBAGd,MACJ,IAAK,IAEG,GAAI5B,IAAgBgB,EAAMK,QAAS,CAC/B,MAAME,EAAS2Z,GAAQT,GAAS,GAC5BlZ,GACAA,EAAOiC,QACXxC,EAAMY,iBAGd,MACJ,IAAK,IACL,IAAK,QACD,CACI,MAAMwF,EAAWlF,SAASiZ,cACtB/T,aAAoBC,aAAe+T,GAAWhU,IAAaA,EAAStD,QAAQ,aAAe2W,IAC3FzZ,EAAMY,iBACNZ,EAAMiG,kBACNG,EAAS1F,WAlOkB8L,CAAQiN,EAASja,KAAMgR,KAC1DqJ,GAAUJ,EAAS,UAAU,IAAMY,GAAaZ,EAASja,OAAO,CAAE8a,MAAM,IACxET,GAAUJ,EAAS,UAAU,IAiEzC,SAA0BA,GACtB,IAAKA,EAAQ1P,aAAa,QACtB,OACJ,IAAK,MAAMgQ,KAAQ7Y,SAASe,iBAAiB,gCAAiC,CAC1E,MAAMsY,EAASR,EAAKjX,QAAQ,WACxByX,GAAUA,IAAWd,IAAYc,EAAOC,SAASf,IACjDc,EAAO9Y,gBAAgB,SAvEYgZ,CAAiBhB,KACpDja,KAAKga,QACCK,GAAUJ,EAAS,aAAa,IAAMY,GAAaZ,EAASja,OAAO,CAAE8a,MAAM,IAC3EI,MACHC,GAAYlB,IAEnBO,GAAOrR,IAAInJ,KAAM,CAAEoa,cAAAA,EAAeR,QAAQ,EAAO3Z,aAAa,IAElEJ,uBACI,MAAMoK,EAAQuQ,GAAOvR,IAAIjJ,MACzB,GAAKiK,EAAL,CAEAuQ,GAAOnR,OAAOrJ,MACd,IAAK,MAAMob,KAAOnR,EAAMmQ,cACpBgB,EAAIC,gBAIhB,MAAMb,GAAS,IAAI7R,QACbuS,GAAmB,CACrBrb,iBAGJ,SAASwa,GAAUtZ,EAAQua,EAAWC,EAAQ5K,GAAU,GAEpD,OADA5P,EAAOmB,iBAAiBoZ,EAAWC,EAAQ5K,GACpC,CACH0K,YAAa,KACTta,EAAOqB,oBAAoBkZ,EAAWC,EAAQ5K,KAI1D,SAASkK,GAAaZ,EAASM,GAC3B,MAAMrT,EAAMqT,EAAKtZ,aAAa,OAC9B,IAAKiG,EACD,OACJ,MAAM+C,EAAQuQ,GAAOvR,IAAIsR,GACzB,IAAKtQ,EACD,OACJ,GAAIA,EAAM2P,OACN,OACJ3P,EAAM2P,QAAS,EACf,MAAM4B,EAASjB,EAAKvZ,cAAc,oBAC9Bwa,IAAWA,EAAOjR,aAAa,SAC/BiR,EAAOtZ,iBAAiB,WAAW,IAAMuZ,GAAUxB,KACnDuB,EAAOzZ,aAAa,MAAOmF,IAGnC,SAASiU,GAAYlB,GACjB,IAAIyB,GAAU,EAWd,MAAO,CACHrB,GAAUJ,EAAS,aAXH,IAAOyB,GAAU,IAYjCrB,GAAUJ,EAAS,WAXL,IAAOyB,GAAU,IAY/BrB,GAAUJ,EAAS,UAXN,KACRA,EAAQ1P,aAAa,UAEtBkR,GAAUxB,IAETyB,GA+Bb,SAAwBzB,GACpB,MAAMrT,EAAWlF,SAASiZ,cAC1B,GAAI/T,GAAYgU,GAAWhU,IAAaqT,EAAQe,SAASpU,GACrD,OACJ,MAAM7F,EAAS2Z,GAAQT,GAAS,GAC5BlZ,GACAA,EAAOiC,QApCH2Y,CAAe1B,QAkB3B,SAASwB,GAAUxB,GACf,IAAKA,EAAQ1P,aAAa,QACtB,OAAO,EACX,MAAMzK,EAAQma,EAAQjZ,cAAc,4BACpC,QAAIlB,IACAA,EAAMkD,SACC,GAcf,SAAS0X,GAAQT,EAAS2B,GACtB,MAAMjL,EAAUpO,MAAMC,KAAKyX,EAAQxX,iBAAiB,iFAC9CmE,EAAWlF,SAASiZ,cACpBlM,EAAQ7H,aAAoBC,YAAc8J,EAAQ7N,QAAQ8D,IAAa,EACvEiV,EAAQD,EAAOjL,EAAQlC,EAAQ,GAAKkC,EAAQlC,EAAQ,GACpDqN,EAAMF,EAAOjL,EAAQ,GAAKA,EAAQA,EAAQ5N,OAAS,GACzD,OAAO8Y,GAASC,EAEpB,MAAMtc,GAAeC,UAAUC,UAAUC,MAAM,aAC/C,SAAS2a,GAAaL,EAASzZ,GAC3B,MAAMO,EAASP,EAAMO,OACrB,GAAMA,aAAkBsC,SAEpBtC,EAAOuC,QAAQ,aAAe2W,EAElC,GAAmB,UAAfzZ,EAAMiB,KAAkB,CACxB,MAAMsa,EAAWhb,EAAOuC,QAAQ,6CAChC,IAAKyY,EACD,OACJ,MAAMjc,EAAQic,EAAS/a,cAAc,SACrC,GAAyB,UAArB+a,EAASlO,SAAuB9M,IAAWjB,EAC3C,OACiD,UAArBic,EAASlO,SAAuB/N,IAAUA,EAAMkc,SAE5E7a,GAAO4a,EAAU9B,QAGpB,GAAmB,WAAfzZ,EAAMiB,KAAmB,CAC9B,MAAMsa,EAAWhb,EAAOuC,QAAQ,qDAC5ByY,GACA5a,GAAO4a,EAAU9B,IAa7B,SAAS9Y,GAAOyF,EAAUqT,GACtB,GAAIrT,EAAS2D,aAAa,aAA0D,SAA3C3D,EAAS3F,aAAa,iBAC3D,OACJ,MAAMsZ,EAAO3T,EAAStD,QAAQ,gBAC9B,IAAKiX,EACD,OACeA,EAAKhX,cAAc,IAAIC,YAAY,sBAAuB,CACzEwL,YAAY,EACZC,OAAQ,CAAExG,cAAe7B,SAiGjC,SAAqBqV,EAAMhC,GACvB,MAAM7N,EAAS6N,EAAQjZ,cAAc,sBACrC,IAAKoL,EACD,OACJ,MAAMX,EAUV,SAAmBtI,GACf,IAAKA,EACD,OAAO,KACX,MAAM+Y,EAAS/Y,EAAGoH,aAAa,yBAA2BpH,EAAKA,EAAGnC,cAAc,2BAChF,OAAKkb,EAEEA,EAAOjb,aAAa,0BAA4Bib,EAAOnV,YADnD,KAfEoV,CAAUF,GACvB,GAAIxQ,EACAW,EAAOrF,YAAc0E,MAEpB,CACD,MAAM5D,EAad,SAAmB1E,GACf,IAAKA,EACD,OAAO,KACX,MAAMiZ,EAAajZ,EAAGoH,aAAa,6BAA+BpH,EAAKA,EAAGnC,cAAc,+BACxF,OAAOob,EAAaA,EAAWtU,UAAY,KAjB1BuU,CAAUJ,GACnBpU,IACAuE,EAAOtE,UAAYD,IAxG3ByU,CAAY1V,EAAUqT,GAtB1B,SAAuBrT,EAAUqT,GAC7B,IAAK,MAAM9W,KAAM8W,EAAQxX,iBAAiB,qDAAsD,CAC5F,MAAM3C,EAAQqD,EAAGnC,cAAc,+CAC/B,IAAIub,GAAcpZ,IAAOyD,GAAUvG,WAC/BP,aAAiB8D,mBACjB2Y,EAAazc,EAAM0c,cAAgB,QAAU1c,EAAMkc,QAAQ3b,YAE/D8C,EAAGpB,aAAa,eAAgBwa,IAgBpCE,CAAc7V,EAAUqT,GACc,qBAAlCrT,EAAS3F,aAAa,SACtB0J,GAAMsP,GACVM,EAAKhX,cAAc,IAAIC,YAAY,wBAAyB,CACxDyL,OAAQ,CAAExG,cAAe7B,OA2EjC,SAASgU,GAAWzX,GAChB,MAAMuZ,EAAOvZ,EAAGlC,aAAa,QAC7B,MAAgB,aAATyb,GAAgC,qBAATA,GAAwC,kBAATA,EAEjE,SAAS/R,GAAMsP,GAEX,IADgBA,EAAQ1P,aAAa,QAEjC,OACJ0P,EAAQhY,gBAAgB,QACxB,MAAMkY,EAAUF,EAAQjZ,cAAc,WAClCmZ,GACAA,EAAQnX,QA8BhB,SAASpB,GAAiB2Y,EAAM/Z,GAC5B,MAAMyJ,EAAQuQ,GAAOvR,IAAIsR,GACpBtQ,IAELA,EAAMhK,YAA6B,qBAAfO,EAAMiB,MClQvB,SAASkb,GAAWC,EAAY7b,EAAQD,EAAK+b,GAChD,IAA2HhK,EAAvHiK,EAAI3S,UAAUpH,OAAQga,EAAID,EAAI,EAAI/b,EAAkB,OAAT8b,EAAgBA,EAAOtJ,OAAOyJ,yBAAyBjc,EAAQD,GAAO+b,EACrH,GAAuB,iBAAZI,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASN,EAAY7b,EAAQD,EAAK+b,QACpH,IAAK,IAAIjH,EAAIgH,EAAW7Z,OAAS,EAAG6S,GAAK,EAAGA,KAAS/C,EAAI+J,EAAWhH,MAAImH,GAAKD,EAAI,EAAIjK,EAAEkK,GAAKD,EAAI,EAAIjK,EAAE9R,EAAQD,EAAKic,GAAKlK,EAAE9R,EAAQD,KAASic,GAChJ,OAAOD,EAAI,GAAKC,GAAKxJ,OAAO4J,eAAepc,EAAQD,EAAKic,GAAIA,EA6KzD,SAASK,GAAuBC,EAAUpT,EAAOqT,EAAMC,GAC1D,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVvT,EAAuBoT,IAAapT,IAAUsT,GAAKtT,EAAM4M,IAAIwG,GAAW,MAAM,IAAIG,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEE,KAAKJ,GAAYE,EAAIA,EAAEnX,MAAQ6D,EAAMhB,IAAIoU,GAGjF,SAASK,GAAuBL,EAAUpT,EAAO7D,EAAOkX,EAAMC,GACjE,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVvT,EAAuBoT,IAAapT,IAAUsT,GAAKtT,EAAM4M,IAAIwG,GAAW,MAAM,IAAIG,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEE,KAAKJ,EAAUjX,GAASmX,EAAIA,EAAEnX,MAAQA,EAAQ6D,EAAMd,IAAIkU,EAAUjX,GAASA,ED0EnG3B,OAAO0I,eAAelE,IAAI,kBAC3BxE,OAAOsV,mBAAqBA,mBAC5BtV,OAAO0I,eAAeC,OAAO,eAAgB2M,qBE7TjD,MAAM4D,GAAc,IAAIC,QAYjB,SAASC,GAAWvR,GACvBwR,GAAaxR,GACbyR,GAAczR,GAElB,MAAM0R,GAAY,IAAIrV,QAQf,SAASoV,GAAc5a,EAAKzB,UAC/B,GAAIsc,GAAUnH,IAAI1T,GACd,OAAO6a,GAAU/U,IAAI9F,GACzB,IAAI8a,GAAS,EACb,MAAMC,EAAW,IAAIC,kBAAiBC,IAClC,IAAK,MAAMC,KAAYD,EACnB,GAAsB,eAAlBC,EAAS5c,MAAyB4c,EAAStd,kBAAkBsC,QAC7Dib,GAAYD,EAAStd,aAEpB,GAAsB,cAAlBsd,EAAS5c,MAAwB4c,EAASE,WAAWxb,OAC1D,IAAK,MAAM8H,KAAQwT,EAASE,WACpB1T,aAAgBxH,SAChBya,GAAajT,MAMjCqT,EAASM,QAAQrb,EAAI,CAAEsb,WAAW,EAAMC,SAAS,EAAMC,gBAAiB,CAAC,iBACzE,MAAMC,EAAe,CACjBX,aACI,OAAOA,GAEXpe,cACIoe,GAAS,EACTD,GAAU3U,OAAOlG,GACjB+a,EAASW,eAIjB,OADAb,GAAU7U,IAAIhG,EAAIyb,GACXA,EAEX,SAASd,GAAaxR,GAClB,IAAK,MAAMnJ,KAAMmJ,EAAK7J,iBAAiB,iBACnC6b,GAAYnb,GAGZmJ,aAAgBjJ,SAAWiJ,EAAK/B,aAAa,gBAC7C+T,GAAYhS,GAIpB,SAASwS,GAAYte,GACjB,MAAM2C,EAAK3C,EAAMuM,cACjB,IAAK,MAAMgS,KAAWC,GAAS7b,GAC3B,GAAI3C,EAAMiB,OAASsd,EAAQtd,KAAM,CAC7B,MAAMwd,EAAa9b,EAAGG,QAAQyb,EAAQG,KAClCvB,GAAY9G,IAAIoI,IAAqD,mBAA/BA,EAAWF,EAAQI,SACzDF,EAAWF,EAAQI,QAAQ3e,GAE/B,MAAM8L,EAAOnJ,EAAGqJ,cAChB,GAAIF,aAAgBK,YAAcgR,GAAY9G,IAAIvK,EAAKkM,OAASlM,EAAKkM,KAAKjK,QAAQwQ,EAAQG,KAAM,CAC5F,MAAME,EAAmB9S,EAAKkM,KACkB,mBAArC4G,EAAiBL,EAAQI,SAChCC,EAAiBL,EAAQI,QAAQ3e,KAMrD,SAAUwe,GAAS7b,GACf,IAAK,MAAMkc,KAAWlc,EAAGlC,aAAa,gBAAkB,IAAIyF,OAAO4Y,MAAM,OAAQ,CAC7E,MAAMC,EAAWF,EAAOG,YAAY,KAC9BC,EAAYtf,KAAKoX,IAAI,EAAG8H,EAAOG,YAAY,OAASH,EAAOtc,YAC3D,CACFtB,KAAM4d,EAAO/e,MAAM,EAAGif,GACtBL,IAAKG,EAAO/e,MAAMif,EAAW,EAAGE,GAChCN,OAAQE,EAAO/e,MAAMmf,EAAY,IAAM,gBACtC,eAGb,SAASnB,GAAYnb,GACjB,IAAK,MAAM4b,KAAWC,GAAS7b,GAC3BA,EAAGjB,iBAAiB6c,EAAQtd,KAAMqd,ICjGnC,MAAMY,GAAaC,GAAQlP,OAAsB,iBAARkP,EAAmBA,EAAIC,YAAcD,GAChFpP,QAAQ,oBAAqB,OAC7BA,QAAQ,MAAO,KACfA,QAAQ,QAAS,IACjBsP,cACQC,GAAgB,CAACH,EAAKle,EAAO,cACtC,MAAMse,EAASL,GAAUC,GACzB,IAAKI,EAAOC,SAAS,KACjB,MAAM,IAAIC,aAAa,GAAGxe,MAASgP,OAAOkP,qBAAuBle,SAAa,eAElF,OAAOse,GCRX,MA8BMG,GAAc,IAAItC,QACjB,SAASuC,GAAgBC,EAAUC,GACtC,GAAIH,GAAYrJ,IAAIuJ,GAChB,OACJF,GAAYrH,IAAIuH,GAChB,MAAME,EAAQ/M,OAAOgN,eAAeH,GAC9BI,EAASF,GAAOG,aAAaC,YAAc,QAC5CL,IACDA,EAAQM,GAAKL,EAtCL,SAuCZ,IAAK,MAAMxf,KAAOuf,EAAO,CACrB,MAAMja,EAAQga,EAAStf,GACjBmE,EAAO6a,GAAc,GAAGU,IAAS1f,KACvC,IAAI8f,EAAa,CACbC,cAAc,EACdhhB,MACI,OAAOG,KAAKiB,aAAagE,IAAS,IAEtCpF,IAAI6K,GACA1K,KAAK+B,aAAakD,EAAMyF,GAAY,MAGvB,iBAAVtE,EACPwa,EAAa,CACTC,cAAc,EACdhhB,MACI,OAAOihB,OAAO9gB,KAAKiB,aAAagE,IAAS,IAE7CpF,IAAI6K,GACA1K,KAAK+B,aAAakD,EAAMyF,KAIV,kBAAVtE,IACZwa,EAAa,CACTC,cAAc,EACdhhB,MACI,OAAOG,KAAKuK,aAAatF,IAE7BpF,IAAI6K,GACA1K,KAAK+gB,gBAAgB9b,EAAMyF,MAIvC6I,OAAO4J,eAAeiD,EAAUtf,EAAK8f,GACjC9f,KAAOsf,IAAaA,EAAS7V,aAAatF,IAC1C2b,EAAWzX,IAAIsU,KAAK2C,EAAUha,ICzE1C,MAAM4a,GAASC,OAAOC,IAAI,YACnB,MAAMC,GACTthB,YAAYuhB,GAER,MAAMC,EAAWrhB,KACXwV,EAAoB4L,EAAY7U,UAAUiJ,kBAChD4L,EAAY7U,UAAUiJ,kBAAoB,WACtC6L,EAAS7L,kBAAkBxV,KAAMwV,IAErC,MAAM8L,EAAuBF,EAAY7U,UAAU+U,qBACnDF,EAAY7U,UAAU+U,qBAAuB,WACzCD,EAASC,qBAAqBthB,KAAMshB,IAExC,MAAM1O,EAA2BwO,EAAY7U,UAAUqG,yBACvDwO,EAAY7U,UAAUqG,yBAA2B,SAAU3N,EAAMwF,EAAUC,GACvE2W,EAASzO,yBAAyB5S,KAAMiF,EAAMwF,EAAUC,EAAUkI,IAEtE,IAAIpI,EAAqB4W,EAAY5W,oBAAsB,GAC3D+I,OAAO4J,eAAeiE,EAAa,qBAAsB,CACrDP,cAAc,EACdhhB,MACI,OAAOwhB,EAAS7W,mBAAmBxK,KAAMwK,IAE7C3K,IAAI0hB,GACA/W,EAAqB+W,KDqD9B,SAAkCH,GACrC,IAAII,EAAWJ,EAAY5W,oBAAsB,GACjD,MAAMgW,EAASY,EAAYV,YAAc,QACnCe,EAAuBxc,GAAS6a,GAAc,GAAGU,IAASvb,KAChEsO,OAAO4J,eAAeiE,EAAa,qBAAsB,CACrDP,cAAc,EACd5X,IAAG,IACQ,IAAI0X,GAAKS,EAAY7U,UAtFxB,SAsF6CmV,IAAID,GAAqBE,OAAOH,GAErF3hB,IAAI0hB,GACAC,EAAWD,KC5DfK,CAAyBR,GCvB1B,SAAkBA,GACrB,MAAMnc,EAAOya,GAAU0B,EAAYnc,MAAMsL,QAAQ,YAAa,IAC9D,IACI9L,OAAO0I,eAAeC,OAAOnI,EAAMmc,GAGnC3c,OAAO2c,EAAYnc,MAAQkI,eAAelE,IAAIhE,GAElD,MAAO+L,GAGH,KAAMA,aAAaiP,cAA2B,sBAAXjP,EAAE/L,MACjC,MAAM+L,GDYV6Q,CAAST,GAEbvhB,mBAAmBugB,EAAU5V,GACzB,OAAOA,EAEX3K,kBAAkBugB,EAAU5K,GACxB4K,EAASW,gBAAgB,iBAAiB,GAC1C5T,eAAe2U,QAAQ1B,GEvCxB,SAAwBpc,GAC3B,IAAK,MAAM+d,KAAY/d,EAAQvB,iBAAiB,6BACxCsf,EAAS7H,gBAAkBlW,GAC3BA,EACKyV,aAAa,CACdC,KAAmD,WAA7CqI,EAAS9gB,aAAa,mBAAkC,SAAW,SAExEyG,OAAOqa,EAASnV,QAAQoV,WAAU,IFiC3CC,CAAe7B,GACfD,GAAgBC,GHpCjB,SAAcnB,GACjBtB,GAAY9E,IAAIoG,GACZA,EAAWzF,YACXqE,GAAWoB,EAAWzF,YAC1BsE,GAAamB,GACblB,GAAckB,EAAWxS,eGgCrB3K,CAAKse,GACL5K,GAAmBiI,KAAK2C,GACpBA,EAAS5G,YACTqE,GAAWuC,EAAS5G,YAE5B3Z,qBAAqBmE,EAASsd,GAC1BA,GAAsB7D,KAAKzZ,GAE/BnE,yBAAyBugB,EAAUnb,EAAMwF,EAAUC,EAAUkI,GACzDuN,GAAgBC,GACH,kBAATnb,GAA4B2N,GAC5BA,EAAyB6K,KAAK2C,EAAUnb,EAAMwF,EAAUC,IAI7D,SAASiW,GAAKL,EAAOrb,GACxB,IAAKsO,OAAOhH,UAAU2V,eAAezE,KAAK6C,EAAOU,IAAS,CACtD,MAAMmB,EAAS7B,EAAMU,IACfU,EAAOpB,EAAMU,IAAU,IAAIoB,IACjC,GAAID,EACA,IAAK,MAAOrhB,EAAKsF,KAAU+b,EACvBT,EAAIvY,IAAIrI,EAAK,IAAIuhB,IAAIjc,IAIjC,MAAMsb,EAAMpB,EAAMU,IAGlB,OAFKU,EAAI7K,IAAI5R,IACTyc,EAAIvY,IAAIlE,EAAM,IAAIod,KACfX,EAAIzY,IAAIhE,GG7DZ,SAASlE,GAAOuf,EAAOxf,GAC1B6f,GAAKL,EAAO,UAAUzH,IAAI/X,GAC1ByS,OAAO4J,eAAemD,EAAOxf,EAAK,CAC9B+f,cAAc,EACdhhB,MACI,OCFL,SAAoBof,EAAYha,GACnC,MAAMia,EAAMD,EAAWpR,QAAQgS,cAC/B,GAAIZ,EAAWzF,WACX,IAAK,MAAMrW,KAAM8b,EAAWzF,WAAW/W,iBAAiB,kBAAkByc,KAAOja,OAC7E,IAAK9B,EAAGG,QAAQ4b,GACZ,OAAO/b,EAGnB,IAAK,MAAMA,KAAM8b,EAAWxc,iBAAiB,kBAAkByc,KAAOja,OAClE,GAAI9B,EAAGG,QAAQ4b,KAASD,EACpB,OAAO9b,EDRAmf,CAAWtiB,KAAMc,MEiB7B,SAAS8E,GAASN,EAAUC,EAAO,GAAG8C,MAAEA,GAAQ,EAAKka,OAAEA,GAAS,EAAKzH,KAAEA,GAAO,GAAU,IAC3F,OAhCG,SAAkBxV,EAAUC,EAAO,GAAG8C,MAAEA,GAAQ,EAAIka,OAAEA,GAAS,EAAIzH,KAAEA,GAAO,GAAU,IACzF,IACI0H,EADAC,EAAO,EAEPC,GAAY,EAChB,SAASC,KAAMC,GACX,GAAIF,EACA,OACJ,MAAM1K,EAAQzG,KAAKsR,MAAQJ,EAC3BA,EAAOlR,KAAKsR,MACRxa,GACAA,GAAQ,EACR/C,EAASwd,MAAM9iB,KAAM4iB,GACjB9H,GACA6H,EAAGI,WAEDR,GAAUvK,EAAQzS,IAAUgd,KAClC7c,aAAa8c,GACbA,EAAQ7c,YAAW,KACf8c,EAAOlR,KAAKsR,MACZvd,EAASwd,MAAM9iB,KAAM4iB,GACjB9H,GACA6H,EAAGI,WACPR,EAAgBhd,EAAOyS,EAAdzS,IAOrB,OAJAod,EAAGI,OAAS,KACRrd,aAAa8c,GACbE,GAAY,GAETC,EAGAK,CAAS1d,EAAUC,EAAM,CAAE8C,MAAAA,EAAOka,OAAAA,EAAQzH,KAAAA,IC/BvC,IAAIvR,SAAQC,IACM,YAAxB9H,SAASuhB,WACTzZ,IAGA9H,SAASQ,iBAAiB,oBAAoB,IAAMsH,KAAW,CAAEsR,MAAM,OAGtD,IAAIvR,SAAQC,IACjC,MAAMyV,EAAa,IAAIiE,gBACvBjE,EAAWkE,OAAOjhB,iBAAiB,SAAS,IAAMsH,MAClD,MAAM4Z,EAAkB,CAAEtI,MAAM,EAAMnC,SAAS,EAAMwK,OAAQlE,EAAWkE,QAClEE,EAAU,IAAMpE,EAAW/V,QACjCxH,SAASQ,iBAAiB,YAAamhB,EAASD,GAEhD1hB,SAASQ,iBAAiB,aAAcmhB,EAASD,GACjD1hB,SAASQ,iBAAiB,UAAWmhB,EAASD,GAC9C1hB,SAASQ,iBAAiB,cAAemhB,EAASD,MCXtD,IAAaE,GAAb,MAAaA,4BAA4Bzc,YAKvCK,UACE,MAAMA,EAAMlH,KAAKiB,aAAa,OAC9B,IAAKiG,EAAK,OAAO,KAEjB,MAAMqc,EAAOvjB,KAAKyM,cAAcd,cAAc,KAE9C,OADA4X,EAAKjc,KAAOJ,EACLqc,EAAKjc,KAGdkc,WACE,MAAMC,EAAczjB,KAAKgB,cAAc,eACvC,OAAOhB,KAAKiB,aAAa,SAAYwiB,aAAuB7f,kBAAoB6f,EAAYrd,OAAU,KAGxGsd,gBAGE,OAAO1jB,KAAKiB,aAAa,eAAiB,qBAG5CpB,WACE,OAAmB,MAAZG,KAAKkH,IAGdrH,SACMG,KAAK2jB,YACP3jB,KAAK4jB,kBACL5jB,KAAK6jB,SAEL7jB,KAAK8jB,gBAITjkB,SACMG,KAAK+jB,eAIT/jB,KAAKgkB,OAAOjiB,aAAa,eAAgB,QACzC/B,KAAK4Y,UAAUC,IAAI,0BAGrBhZ,UACMG,KAAK+jB,eAIT/jB,KAAKgkB,OAAOjiB,aAAa,eAAgB,SACzC/B,KAAK4Y,UAAUQ,OAAO,0BAGxBvZ,OACE,MAAoD,SAA7CG,KAAKgkB,OAAO/iB,aAAa,gBAGlCpB,QACE,OAAQG,KAAKikB,OAGfpkB,aACE,MAAqD,SAA9CG,KAAKgkB,OAAO/iB,aAAa,iBAGlCpB,UACEG,KAAKgkB,OAAOjiB,aAAa,gBAAiB,QAG5ClC,SACEG,KAAKgkB,OAAOjiB,aAAa,gBAAiB,SAGpClC,gBACFG,KAAKikB,OACPjkB,KAAKkkB,UAELlkB,KAAKmkB,SAIDtkB,kBACNG,KAAKokB,UACLpkB,KAAKqkB,UAAUtiB,aAAa,SAAU,UACtC/B,KAAKskB,eAAeriB,gBAAgB,UAG9BpC,kBACNG,KAAKukB,kBAAiB,GAGhB1kB,gBACNG,KAAKukB,kBAAiB,GAGhB1kB,iBAAiB2kB,GACnBA,GACFxkB,KAAKqkB,UAAUpiB,gBAAgB,UAGjCjC,KAAKskB,eAAeviB,aAAa,SAAU,UAC3C/B,KAAKykB,SAIC5kB,cACN,MAAM6L,EAAO,IAAIgZ,SAEb1kB,KAAKwjB,MACP9X,EAAKhE,OAAO1H,KAAK0jB,UAAW1jB,KAAKwjB,MAGnC9X,EAAKhE,OAAO,QAAS1H,KAAKikB,OAAS,IAAM,KAEzC,WACyBU,MAAM3kB,KAAKkH,IAAM,CACtC0d,YAAa,cACbzF,OAAQ,OACRzT,KAAAA,KAEWmZ,IACX7kB,KAAK8kB,kBACL9kB,KAAK8jB,iBAEL9jB,KAAK+kB,gBAEP,MAAOP,GACPxkB,KAAK+kB,mBAjIDpI,GAAA,CAAP5b,IAA0BuiB,GAAA/W,UAAA,cAAA,GACnBoQ,GAAA,CAAP5b,IAAkCuiB,GAAA/W,UAAA,sBAAA,GAC3BoQ,GAAA,CAAP5b,IAA6BuiB,GAAA/W,UAAA,iBAAA,GAyG9BoQ,GAAA,CCxGK,SAAkBpX,EAAO,EAAGyf,EAAO,IACtC,MAAO,CAAC1E,EAAOrb,EAAM2b,KACjB,IAAKA,GAA0C,mBAArBA,EAAWxa,MACjC,MAAM,IAAIyD,MAAM,wCAEpB,MAAM8Y,EAAK/B,EAAWxa,MACtBwa,EAAWxa,MAAQ6e,GAAGtC,EAAIpd,EAAMyf,GAChCzR,OAAO4J,eAAemD,EAAOrb,EAAM2b,IDgGxChb,CAAS,MAyBT0d,GAAA/W,UAAA,QAAA,MApIU+W,GAAmB3G,GAAA,CEAzB,SAAoByE,GACvB,IAAID,GAAiBC,KFDZkC,IGPb,MAAM4B,GAAkB,CACpBC,cAAe,CAAC,iBAAkB,gBAAiB,eAAgB,kBACnEC,iBAAkB,CAAC,cAAe,gBAAiB,eAAgB,kBACnEC,eAAgB,CAAC,gBAAiB,iBAAkB,cAAe,kBACnEC,gBAAiB,CAAC,eAAgB,iBAAkB,cAAe,mBAEjEC,GAAsB,CACxBld,MAAO,CAAC,MAAO,UACfmd,IAAK,CAAC,QAAS,UACfC,OAAQ,CAAC,MAAO,UAEb,SAASC,GAAoBC,EAAiBC,EAAeC,EAAW,IAC3E,MAAM3L,EAWV,SAA6BlW,GACzB,IAAI8hB,EAAa9hB,EAAQ8hB,WACzB,KAAsB,OAAfA,GAAqB,CACxB,GAAIA,aAAsBjf,aAAyD,WAA1Ckf,iBAAiBD,GAAY/Z,SAClE,OAAO+Z,EAEXA,EAAaA,EAAWA,WAE5B,OAAOpkB,SAASgK,KAnBMsa,CAAoBL,GACpCM,EAoBV,SAAyBjiB,GACrB,IAAI8hB,EAAa9hB,EACjB,KAAsB,OAAf8hB,GACCA,IAAepkB,SAASgK,MADJ,CAKxB,GAAiC,YADTqa,iBAAiBD,GACrBI,SAChB,MAEJJ,EAAaA,EAAWA,WAE5B,MAAMK,EAAeL,IAAepkB,SAASgK,MAAUoa,aAAsBjf,YAA+Bif,EAAhBpkB,SAASgK,KAC/F0a,EAAWD,EAAapO,wBACxBsO,EAAYN,iBAAiBI,IAC5BG,EAAWC,EAAYC,EAAaC,GAAgB,CACvDJ,EAAUK,eACVL,EAAUM,gBACVN,EAAUO,iBACVP,EAAUQ,mBACZnF,KAAIoF,GAAKC,SAASD,EAAG,KAAO,IAC9B,MAAO,CACH1iB,IAAKgiB,EAAShiB,IAAMkiB,EACpB5O,KAAM0O,EAAS1O,KAAO6O,EACtB1a,MAAOua,EAASva,MAAQ2a,EAAcD,EACtCza,OAAQ3L,KAAKoX,IAAI6O,EAASta,OAASwa,EAAYG,EAAcN,IAAiBzkB,SAASgK,KAAOjH,OAAOuiB,aAAeC,EAAAA,IA7CnGC,CAAgBhN,GAC/BiN,EAAqBpB,iBAAiB7L,GACtCkN,EAAoBlN,EAAcnC,yBACjCuO,EAAWC,GAAc,CAACY,EAAmBT,eAAgBS,EAAmBR,iBAAiBjF,KAAIoF,GAAKC,SAASD,EAAG,KAAO,IAKpI,OA2DJ,SAAuCO,EAAcC,EAAkBC,EAAcC,GAAYvO,KAAEA,EAAIwO,MAAEA,EAAKC,iBAAEA,EAAgBC,aAAEA,EAAYC,gBAAEA,IAC5I,MAAMC,EAAuB,CACzBzjB,IAAKijB,EAAajjB,IAAMkjB,EAAiBljB,IACzCsT,KAAM2P,EAAa3P,KAAO4P,EAAiB5P,KAC3C7L,MAAOwb,EAAaxb,MACpBC,OAAQub,EAAavb,QAEzB,IAAIiL,EAAM+Q,GAAkBP,EAAcC,EAAYvO,EAAMwO,EAAOE,EAAcC,GAC7EG,EAAa9O,EACb+O,EAAcP,EAGlB,GAFA1Q,EAAI3S,KAAOkjB,EAAiBljB,IAC5B2S,EAAIW,MAAQ4P,EAAiB5P,MACxBgQ,EAAkB,CACnB,MAAMO,EAAiB/C,GAAgBjM,GACvC,IAAIiP,EAAkB,EACtB,GAAID,EAAgB,CAChB,IAAIE,EAAWlP,EACf,KAAOiP,EAAkBD,EAAellB,QACpCqlB,GAA0BD,EAAUpR,EAAK8Q,EAAsBN,IAAe,CAC9E,MAAMc,EAAWJ,EAAeC,KAChCC,EAAWE,EACXtR,EAAM+Q,GAAkBP,EAAcC,EAAYa,EAAUZ,EAAOE,EAAcC,GACjF7Q,EAAI3S,KAAOkjB,EAAiBljB,IAC5B2S,EAAIW,MAAQ4P,EAAiB5P,KAC7BqQ,EAAaM,GAGrB,MAAMC,EAAqB/C,GAAoBkC,GAC/C,IAAIc,EAAmB,EACvB,GAAID,EAAoB,CACpB,IAAIE,EAAYf,EAChB,KAAOc,EAAmBD,EAAmBvlB,QACzC0lB,GAA2BD,EAAWzR,EAAK8Q,EAAsBN,IAAe,CAChF,MAAMmB,EAAYJ,EAAmBC,KACrCC,EAAYE,EACZ3R,EAAM+Q,GAAkBP,EAAcC,EAAYO,EAAYW,EAAWf,EAAcC,GACvF7Q,EAAI3S,KAAOkjB,EAAiBljB,IAC5B2S,EAAIW,MAAQ4P,EAAiB5P,KAC7BsQ,EAAcU,GAGlB3R,EAAI3S,IAAMyjB,EAAqBzjB,MAC/B2S,EAAI3S,IAAMyjB,EAAqBzjB,KAE/B2S,EAAIW,KAAOmQ,EAAqBnQ,OAChCX,EAAIW,KAAOmQ,EAAqBnQ,MAEhCX,EAAIW,KAAO6P,EAAa1b,MAAQwb,EAAaxb,MAAQgc,EAAqBnQ,OAC1EX,EAAIW,KAAO2P,EAAaxb,MAAQgc,EAAqBnQ,KAAO6P,EAAa1b,OAEzEoc,GAAkBC,EAAkBD,EAAellB,QAC/CgU,EAAI3S,IAAMmjB,EAAazb,OAASub,EAAavb,OAAS+b,EAAqBzjB,MAC3E2S,EAAI3S,IAAMijB,EAAavb,OAAS+b,EAAqBzjB,IAAMmjB,EAAazb,QAIpF,OAAOyH,OAAOoV,OAAOpV,OAAOoV,OAAO,GAAI5R,GAAM,CAAEgR,WAAAA,EAAYC,YAAAA,IAnHpDY,CAA8B3C,EAJhB,CACjB7hB,IAAKgjB,EAAkBhjB,IAAMkiB,EAC7B5O,KAAM0P,EAAkB1P,KAAO6O,GAE8BZ,EAAgB5N,wBAAyB6N,aAAyBviB,QAAUuiB,EAAc7N,wBAA0B6N,EA+CzL,SAA4BC,EAAW,IACnC,IAAI/gB,EAAI+jB,EAAIC,EAAIC,EAAIC,EACpB,MAAM/P,EAAgC,QAAxBnU,EAAK+gB,EAAS5M,YAAyB,IAAPnU,EAAgBA,EAAKmkB,GAC7DxB,EAAkC,QAAzBoB,EAAKhD,EAAS4B,aAA0B,IAAPoB,EAAgBA,EAAKI,GACrE,MAAO,CACHhQ,KAAAA,EACAwO,MAAAA,EACAE,aAA+C,QAAhCmB,EAAKjD,EAAS8B,oBAAiC,IAAPmB,EAAgBA,EAAe,kBAAT7P,EAA2B,EAAIgQ,GAC5GrB,gBAAqD,QAAnCmB,EAAKlD,EAAS+B,uBAAoC,IAAPmB,EAAgBA,EAAgB,WAAVtB,GAAsBxO,EAAKiQ,WAAW,UAAYD,GAAmC,EACxKvB,iBAAuD,QAApCsB,EAAKnD,EAAS6B,wBAAqC,IAAPsB,EAAgBA,EAAKC,IAxD4GE,CAAmBtD,IAwC3N,MAAMoD,GACI,iBADJA,GAEK,QAFLA,GAGY,EAHZA,GAIe,EAJfA,IAKgB,EAwEtB,SAASnB,GAAkBsB,EAAmBC,EAAgBpQ,EAAMwO,EAAOE,EAAcC,GACrF,MAAM0B,EAAcD,EAAe3R,KAAO2R,EAAexd,MACnD0d,EAAeF,EAAejlB,IAAMilB,EAAevd,OACzD,IAAI1H,GAAO,EACPsT,GAAQ,EAwEZ,MAvEa,gBAATuB,EACA7U,EAAMilB,EAAejlB,IAAMujB,EAAeyB,EAAkBtd,OAE9C,mBAATmN,EACL7U,EAAMmlB,EAAe5B,EAEP,iBAAT1O,EACLvB,EAAO2R,EAAe3R,KAAOiQ,EAAeyB,EAAkBvd,MAEhD,kBAAToN,IACLvB,EAAO4R,EAAc3B,GAEZ,gBAAT1O,GAAmC,mBAATA,IAEtBvB,EADU,UAAV+P,EACO4B,EAAe3R,KAAOkQ,EAEd,WAAVH,EACE4B,EAAe3R,MAAQ0R,EAAkBvd,MAAQwd,EAAexd,OAAS,EAAI+b,EAG7E0B,EAAcF,EAAkBvd,MAAQ+b,GAG1C,iBAAT3O,GAAoC,kBAATA,IAEvB7U,EADU,UAAVqjB,EACM4B,EAAejlB,IAAMwjB,EAEZ,WAAVH,EACC4B,EAAejlB,KAAOglB,EAAkBtd,OAASud,EAAevd,QAAU,EAAI8b,EAG9E2B,EAAeH,EAAkBtd,OAAS8b,GAG3C,eAAT3O,EACA7U,EAAMilB,EAAejlB,IAAMujB,EAEb,kBAAT1O,EACL7U,EAAMmlB,EAAe5B,EAAeyB,EAAkBtd,OAExC,gBAATmN,EACLvB,EAAO2R,EAAe3R,KAAOiQ,EAEf,iBAAT1O,EACLvB,EAAO4R,EAAc3B,EAAeyB,EAAkBvd,MAExC,kBAAToN,IACLvB,GAAQ4R,EAAcD,EAAe3R,MAAQ,EAAI0R,EAAkBvd,MAAQ,EAAI8b,GAEtE,eAAT1O,GAAkC,kBAATA,EAErBvB,EADU,UAAV+P,EACO4B,EAAe3R,KAAOkQ,EAEd,WAAVH,EACE4B,EAAe3R,MAAQ0R,EAAkBvd,MAAQwd,EAAexd,OAAS,EAAI+b,EAG7E0B,EAAcF,EAAkBvd,MAAQ+b,EAGrC,gBAAT3O,GAAmC,iBAATA,GAAoC,kBAATA,IAEtD7U,EADU,UAAVqjB,EACM4B,EAAejlB,IAAMwjB,EAEZ,WAAVH,EACC4B,EAAejlB,KAAOglB,EAAkBtd,OAASud,EAAevd,QAAU,EAAI8b,EAG9E2B,EAAeH,EAAkBtd,OAAS8b,GAGjD,CAAExjB,IAAAA,EAAKsT,KAAAA,GAElB,SAAS0Q,GAA0BnP,EAAMuQ,EAAYC,EAAqBL,GACtE,MAAa,gBAATnQ,GAAmC,mBAATA,EAClBuQ,EAAWplB,IAAMqlB,EAAoBrlB,KACzColB,EAAWplB,IAAMglB,EAAkBtd,OAAS2d,EAAoB3d,OAAS2d,EAAoBrlB,IAGzFolB,EAAW9R,KAAO+R,EAAoB/R,MAC1C8R,EAAW9R,KAAO0R,EAAkBvd,MAAQ4d,EAAoB5d,MAAQ4d,EAAoB/R,KAGxG,SAAS+Q,GAA2BhB,EAAO+B,EAAYC,EAAqBL,GACxE,MAAc,QAAV3B,EACO+B,EAAW9R,KAAO+R,EAAoB/R,KAE9B,UAAV+P,GAA+B,WAAVA,EAClB+B,EAAW9R,KAAO0R,EAAkBvd,MAAQ4d,EAAoB/R,KAAO+R,EAAoB5d,OAC/F2d,EAAW9R,KAAO+R,EAAoB/R,UAFzC,ECxMF,SAASgS,GAAkB3lB,EAAW4lB,GAAY,GACrD,OA/BG,UAAmC5lB,EAAW4M,EAAU,IAC3D,IAAI7L,EAAI+jB,EACR,MAAMe,EAAmC,QAAzB9kB,EAAK6L,EAAQiZ,cAA2B,IAAP9kB,GAAgBA,EAC3D+kB,EAA4C,QAA/BhB,EAAKlY,EAAQmZ,oBAAiC,IAAPjB,GAAgBA,EAAckB,GAAaC,GAC/FC,EAASvoB,SAASwoB,iBAAiBnmB,EAAWomB,WAAWC,aAAc,CACzEC,WAAYxf,GAAQA,aAAgBhE,aAAegjB,EAAShf,EAAM+e,GAAUO,WAAWG,cAAgBH,WAAWI,cAEtH,IAAIC,EAAW,KAIf,IAHK7Z,EAAQ8Z,SAAWZ,EAAS9lB,EAAW6lB,WAClC7lB,GAEN4M,EAAQ8Z,QAAS,CACjB,IAAId,EAAYM,EAAON,YACvB,KAAOA,GACHa,EAAWb,EACXA,EAAYM,EAAON,iBAIvBa,EAAWP,EAAOS,aAEtB,KAAOF,aAAoB3jB,mBACjB2jB,EACNA,EAAW7Z,EAAQ8Z,QAAUR,EAAOU,eAAiBV,EAAOO,WAE5D7Z,EAAQ8Z,SAAWZ,EAAS9lB,EAAW6lB,WACjC7lB,GAKH6mB,CAAyB7mB,EAAW,CAAE0mB,QAASd,EAAWC,QAAQ,EAAME,cAAc,IAAQlO,OAAOxV,MAEzG,SAAS4jB,GAAYa,EAAMjB,GAAS,GACvC,MAAMkB,EAAoB,CAAC,SAAU,QAAS,SAAU,WAAY,WAAY,SAAU,YAAY9K,SAAS6K,EAAKhd,UAChHgd,EAAKE,SACHC,EAAcH,EAAKlnB,OACnBsnB,EAAmBJ,aAAgBjnB,kBAAkC,WAAdinB,EAAKppB,KAC5DypB,EAAgBL,EAAKjS,UAAUoC,SAAS,YAC9C,GAAI8P,GAAqBE,GAAeC,GAAoBC,EACxD,OAAO,EAEX,GAAItB,EAAQ,CACR,MAAMuB,EAAiC,IAArBN,EAAKhnB,aAA2C,IAAtBgnB,EAAK/mB,aAC3CsnB,EAAkB,CAAC,SAAU,YAAYpL,SAAS+F,iBAAiB8E,GAAMQ,YACzEC,EAAoD,IAAjCT,EAAKU,iBAAiBxoB,OAC/C,GAAIooB,GAAaC,GAAmBE,EAChC,OAAO,EAGf,OAAqC,MAAjCT,EAAK5pB,aAAa,eAGlB4pB,aAAgB/jB,mBAAkD,MAA7B+jB,EAAK5pB,aAAa,WAGjC,IAAnB4pB,EAAKW,SAET,SAASzB,GAAWc,EAAMjB,GAAS,GACtC,OAAOI,GAAYa,EAAMjB,IAA6C,OAAlCiB,EAAK5pB,aAAa,YC3D1D,IAAIwqB,IAAkB,EACtB,SAASC,MACT,IACI,MAAM/a,EAAU4C,OAAOoY,OAAO,GAAI,CAC9BxI,OAAQ,CACJtjB,MACI4rB,IAAkB,MAI9BhnB,OAAOvC,iBAAiB,OAAQwpB,GAAM/a,GACtClM,OAAOrC,oBAAoB,OAAQspB,GAAM/a,GAE7C,MAAOK,IAGIya,KAEX,WACI,GAAsB,oBAAXhnB,OACP,OAEJ,MAAMmnB,EAA2BC,YAAYtf,UAAUrK,iBACvD2pB,YAAYtf,UAAUrK,iBAAmB,SAAU+C,EAAM6mB,EAAkBC,GAQvE,MAPgC,iBAArBA,GACP,WAAYA,GACZA,EAAiB5I,kBAAkB6I,aACnCJ,EAAyBnO,KAAKsO,EAAiB5I,OAAQ,SAAS,KAC5DnjB,KAAKoC,oBAAoB6C,EAAM6mB,EAAkBC,MAGlDH,EAAyBnO,KAAKzd,KAAMiF,EAAM6mB,EAAkBC,IAKnEE,GACAR,IAAkB,GClC1B,MAAMS,GAAqB,GAC3B,IAAIC,GAcG,SAASC,GAAUroB,EAAWsoB,EAAcC,GAC/C,MAAMrN,EAAa,IAAIiE,gBACjBC,EAASmJ,MAAAA,EAAiDA,EAAcrN,EAAWkE,OACzFpf,EAAUhC,aAAa,kBAAmB,UAC1C,MAAMwqB,EAAgB7qB,SAASiK,cAAc,QAC7C4gB,EAAcxqB,aAAa,QAAS,YACpCwqB,EAAcxqB,aAAa,WAAY,KACvCwqB,EAAcxqB,aAAa,cAAe,QAC1CwqB,EAAcC,QAAU,KACpB,MAAMC,EAAqB/C,GAAkB3lB,GAAW,GACxD0oB,MAAAA,GAAwEA,EAAmBzpB,SAE/F,MAAM0pB,EAAchrB,SAASiK,cAAc,QAU3C,IAAIghB,EACJ,SAASC,EAAuBC,GAC5B,GAAIA,aAA0BhmB,aAAenF,SAASsZ,SAASjX,GAAY,CACvE,GAAIA,EAAUiX,SAAS6R,GAEnB,YADAF,EAAmBE,GAInB,GAAIF,GAAoB5C,GAAW4C,IAAqB5oB,EAAUiX,SAAS2R,GAEvE,YADAA,EAAiB3pB,QAGhB,GAAIqpB,GAAgBtoB,EAAUiX,SAASqR,GAExC,YADAA,EAAarpB,QAGZ,CACD,MAAM8pB,EAAsBpD,GAAkB3lB,GAE9C,YADA+oB,MAAAA,GAA0EA,EAAoB9pB,WA3B9G0pB,EAAY3qB,aAAa,QAAS,YAClC2qB,EAAY3qB,aAAa,WAAY,KACrC2qB,EAAY3qB,aAAa,cAAe,QACxC2qB,EAAYF,QAAU,KAClB,MAAMM,EAAsBpD,GAAkB3lB,GAC9C+oB,MAAAA,GAA0EA,EAAoB9pB,SAElGe,EAAUgpB,QAAQR,GAClBxoB,EAAU2D,OAAOglB,GAyBjB,MAAMM,EArDV,SAAsB7J,GAClB,MAAMlE,EAAa,IAAIiE,gBAIvB,OAHAC,EAAOjhB,iBAAiB,SAAS,KAC7B+c,EAAW/V,WAER+V,EAgDoBgO,CAAa9J,GACxC,GAAIgJ,GAAY,CACZ,MAAMe,EAAgBf,GACtBA,GAAWpoB,UAAUhC,aAAa,kBAAmB,aACrDoqB,GAAWlN,WAAW/V,QACtBgjB,GAAmB9W,KAAK8X,GAE5BF,EAAmB7J,OAAOjhB,iBAAiB,SAAS,KAChDiqB,QAAapb,KAEjBoS,EAAOjhB,iBAAiB,SAAS,KAC7B6B,EAAU9B,gBAAgB,mBAC1B,MAAMkrB,EAAYppB,EAAUqpB,uBAAuB,YACnD,KAAOD,EAAUpqB,OAAS,GACtBoqB,EAAU,GAAG/T,SACjB,MAAMiU,EAAqBnB,GAAmBoB,WAAUC,GAAKA,EAAExpB,YAAcA,IACzEspB,GAAsB,GACtBnB,GAAmBxW,OAAO2X,EAAoB,GA5E1D,WACI,MAAMG,EAAmBtB,GAAmBuB,MACxCD,GACApB,GAAUoB,EAAiBzpB,UAAWypB,EAAiBnB,aAAcmB,EAAiBE,gBA2EtFC,MAEJjsB,SAASQ,iBAAiB,SAAS1B,IAC/BosB,EAAuBpsB,EAAMO,UAC9B,CAAEoiB,OAAQ6J,EAAmB7J,OAAQyK,SAAS,IACjDhB,EAAuBlrB,SAASiZ,eAChCwR,GAAa,CACTpoB,UAAAA,EACAkb,WAAY+N,EACZX,aAAAA,EACAqB,eAAgBvK,GAEpB,MAAMkK,EAAqBnB,GAAmBoB,WAAUC,GAAKA,EAAExpB,YAAcA,IAI7E,GAHIspB,GAAsB,GACtBnB,GAAmBxW,OAAO2X,EAAoB,IAE7Cf,EACD,OAAOrN,2BChGf,MAMM4O,GAAoB,CACxB,YACA,YACA,YACA,YACA,aACA,aACA,aACA,cAGF,MAAMC,uBAAuBjnB,YAA7BhH,+CA4HEkuB,GAA6C5kB,IAAAnJ,UAAA,GAC7CguB,GAAA7kB,IAAAnJ,KAA0B,UAC1BiuB,GAAA9kB,IAAAnJ,KAAoB,kBACpBkuB,GAAA/kB,IAAAnJ,MAAuB,GA9HvBH,SACE,MAAO,g+FA+HTsuB,cACE,OAAOnuB,KAAKiB,aAAa,QAAU,GAGrCktB,YAAY/nB,GACVpG,KAAK+B,aAAa,MAAOqE,GAG3B3E,WAEE,MAAgB,UADHzB,KAAKiB,aAAa,aACL,QAAU,cAGtCQ,SAAS2E,GACPpG,KAAK+B,aAAa,YAAaqE,GAGjCsS,gBACE,OAAQ1Y,KAAKiB,aAAa,mBAAqB,IAGjDyX,cAActS,GACZpG,KAAK+B,aAAa,iBAAkBqE,GAGtCgoB,cACE,OAAOpuB,KAAKyM,cAAc9K,eAAe3B,KAAKmuB,SAGhDE,mBAAmBjoB,GACjBpG,KAAK4Y,UAAU0V,OA9KW,UA8KmBloB,GACzCpG,KAAKuuB,aAAanR,GAAApd,KAAIwuB,GAAA,IAAAC,IAAJhR,KAAAzd,MAGxBquB,qBACE,OAAOruB,KAAK4Y,UAAUoC,SAnLI,WAsL5Bnb,0BACE,IAAKG,KAAKwZ,WAAY,CACLxZ,KAAKyZ,aAAa,CAACC,KAAM,SAEjC5R,UAAY,gCAEb9H,KAAK0uB,4DAYb,GAPA1uB,KAAKquB,gBAAiB,EACtB3Q,GAAA1d,KAAIkuB,IAAwB,EAAI,KAE3BluB,KAAKE,KACRF,KAAKE,GAAK,WAAWqR,KAAKsR,UAA0B,IAAhB1iB,KAAKC,UAAkBuuB,QAAQ,OAGhE3uB,KAAKouB,QAAS,OAEnBpuB,KAAK+B,aAAa,OAAQ,WAEH,QAAvB+C,EAAAsY,GAAApd,KAAI+tB,GAAA,YAAmB,IAAAjpB,GAAAA,EAAAoE,QACvBwU,GAAA1d,KAAwB+tB,GAAA,IAAI7K,qBAC5B,MAAMC,OAACA,GAAU/F,GAAApd,aAEjBA,KAAKkC,iBAAiB,aAAclC,KAAM,CAACmjB,OAAAA,IAC3CnjB,KAAKouB,QAAQlsB,iBAAiB,aAAclC,KAAM,CAACmjB,OAAAA,IACnDnjB,KAAKouB,QAAQlsB,iBAAiB,aAAclC,KAAM,CAACmjB,OAAAA,IACnDnjB,KAAKouB,QAAQlsB,iBAAiB,QAASlC,KAAM,CAACmjB,OAAAA,IAC9CnjB,KAAKouB,QAAQlsB,iBAAiB,OAAQlC,KAAM,CAACmjB,OAAAA,IAC7CnjB,KAAKyM,cAAcvK,iBAAiB,UAAWlC,KAAM,CAACmjB,OAAAA,IACtD/F,GAAApd,KAAIwuB,GAAA,IAAAC,IAAJhR,KAAAzd,MAGFH,6BACyB,QAAvBiF,EAAAsY,GAAApd,KAAI+tB,GAAA,YAAmB,IAAAjpB,GAAAA,EAAAoE,QAGzBrJ,YAAYW,GACLR,KAAKouB,UAIU,eAAf5tB,EAAMiB,MAAwC,UAAfjB,EAAMiB,OAAqBzB,KAAKquB,eAE1C,SAAf7tB,EAAMiB,MAGA,eAAfjB,EAAMiB,MACLjB,EAAqBiI,gBAAkBzI,KAAKouB,SAC5C5tB,EAAqBiI,gBAAkBzI,KAJxCA,KAAKquB,gBAAiB,EAOE,YAAf7tB,EAAMiB,MAAuD,WAAhCjB,EAAwBM,KAAqBd,KAAKquB,iBACxFruB,KAAKquB,gBAAiB,GAVtBruB,KAAKquB,gBAAiB,GA4B1BxuB,yBAAyBoF,GACvB,GAAa,OAATA,GAA0B,cAATA,EAAsB,CACzC,IAAKjF,KAAKE,KAAOF,KAAKouB,QAAS,OAC/B,GAAkB,UAAdpuB,KAAKyB,KAAkB,CACzB,IAAImtB,EAAa5uB,KAAKouB,QAAQntB,aAAa,mBAEzC2tB,EADEA,EACW,GAAGA,KAAc5uB,KAAKE,KAEtBF,KAAKE,GAEpBF,KAAKouB,QAAQrsB,aAAa,kBAAmB6sB,GAG7C5uB,KAAK+B,aAAa,cAAe,YAC5B,CACL,IAAI8sB,EAAc7uB,KAAKouB,QAAQntB,aAAa,oBAC7B4tB,EAAfA,EAA6B,GAAGA,KAAe7uB,KAAKE,KAAuBF,KAAKE,GAChFF,KAAKouB,QAAQrsB,aAAa,mBAAoB8sB,SAE3C,GAAa,mBAAT5pB,EAA2B,CACpCjF,KAAK4Y,UAAUQ,UAAUyU,IACzB,MAAMnV,EAAY1Y,KAAK0Y,UACL,MAAdA,GACFgF,GAAA1d,KAAIguB,GAAU,SAAQ,KACtBtQ,GAAA1d,KAAIiuB,GAAS,cAAa,MACH,OAAdvV,GACTgF,GAAA1d,KAAIguB,GAAU,QAAO,KACrBtQ,GAAA1d,KAAIiuB,GAAS,cAAa,MACH,MAAdvV,GACTgF,GAAA1d,KAAIguB,GAAU,SAAQ,KACtBtQ,GAAA1d,KAAIiuB,GAAS,gBAAe,MACL,OAAdvV,GACTgF,GAAA1d,KAAIguB,GAAU,QAAO,KACrBtQ,GAAA1d,KAAIiuB,GAAS,iBAAgB,MACN,MAAdvV,GACTgF,GAAA1d,KAAIguB,GAAU,SAAQ,KACtBtQ,GAAA1d,KAAIiuB,GAAS,iBAAgB,MACN,OAAdvV,GACTgF,GAAA1d,KAAIguB,GAAU,MAAK,KACnBtQ,GAAA1d,KAAIiuB,GAAS,iBAAgB,MACN,MAAdvV,GACTgF,GAAA1d,KAAIguB,GAAU,SAAQ,KACtBtQ,GAAA1d,KAAIiuB,GAAS,eAAc,MACJ,OAAdvV,IACTgF,GAAA1d,KAAIguB,GAAU,MAAK,KACnBtQ,GAAA1d,KAAIiuB,GAAS,cAAa,iCC/SlC,SAASa,GAAcjE,GACjBnpB,SAASiZ,gBAAkBkQ,IAC7BA,MAAAA,GAAAA,EAAM7nB,kGDqPN,GAAIhD,KAAKquB,eACPruB,KAAK4Y,UAAUQ,OAvPM,kBAuPwByU,QACxC,CACL7tB,KAAK4Y,UAAUC,IAzPM,gBA0PrB,IAAK,MAAMkW,KAAW/uB,KAAKyM,cAAchK,iBAAiCzC,KAAK6N,SACzEkhB,IAAY/uB,OAAM+uB,EAAQV,gBAAiB,GAEjDjR,GAAApd,KAAIwuB,GAAA,IAAAQ,IAAJvR,KAAAzd,QAEHgvB,GAAA,WAqDC,IAAKhvB,KAAKouB,QAAS,OACnB,IAAKhR,GAAApd,cAA6BA,KAAKquB,eAAgB,OAIvDruB,KAAK4L,MAAM8L,KAAO,MAElB,MAAM3L,EAAW2Z,GAAoB1lB,KAAMA,KAAKouB,QAAS,CACvDnV,KAAMmE,GAAApd,KAAUiuB,GAAA,KAChBxG,MAAOrK,GAAApd,KAAWguB,GAAA,KAClBrG,aAPqB,KASjBI,EAAahc,EAASgc,WACtBN,EAAQ1b,EAASic,YAEvBhoB,KAAK4L,MAAMxH,IAAM,GAAG2H,EAAS3H,QAC7BpE,KAAK4L,MAAM8L,KAAO,GAAG3L,EAAS2L,SAE9B,IAAIgB,EAAuB,IAGzBA,EADiB,iBAAfqP,EACU,IACY,kBAAfA,EACG,IACY,gBAAfA,EACK,WAAVN,EACU,IACO,UAAVA,EACG,KAEA,KAGA,WAAVA,EACU,IACO,UAAVA,EACG,KAEA,KAIhBznB,KAAK4Y,UAAUC,IAAI,WAAWH,MA3GzBoV,eAAkBtjB,mBAAG,CAAC,YAAa,iBAAkB,MA+GzD/F,OAAO0I,eAAelE,IAAI,cAC7BxE,OAAOqpB,eAAiBA,eACxBrpB,OAAO0I,eAAeC,OAAO,WAAY0gB,iBC/VrC,MAAOmB,2BAA2BpoB,YAAxChH,+CAEEqvB,GAAwB/lB,IAAAnJ,KAAA,IAAIkjB,iBAC5BiM,GAAAhmB,IAAAnJ,KAA2C,MAC3CovB,GAA0CjmB,IAAAnJ,UAAA,GAC1CqvB,GAAAlmB,IAAAnJ,MAA4B,GAE5BsG,WACE,OAAOtG,KAAKuK,aAAa,QAE3BjE,SAASF,eACP,GAAIA,EAAO,CACT,GAAIpG,KAAKsG,KAAM,OACftG,KAAK+B,aAAa,OAAQ,IACH,QAAvB+C,EAAAsY,GAAApd,KAAIsvB,GAAA,IAAAC,WAAmB,IAAAzqB,GAAAA,EAAA8T,UAAUQ,OAAO,mBACxC1X,SAASgK,KAAKE,MAAMsa,SAAW,SAC3B9I,GAAApd,KAAIkvB,GAAA,KAAuB/L,OAAOqM,SACpC9R,GAAA1d,KAA6BkvB,GAAA,IAAIhM,qBAEnCkJ,GAAUpsB,UAAM+Q,EAAWqM,GAAApd,KAA0BkvB,GAAA,KAAC/L,YACjD,CACL,IAAKnjB,KAAKsG,KAAM,OAChBtG,KAAKiC,gBAAgB,QACE,QAAvB4mB,EAAAzL,GAAApd,KAAIsvB,GAAA,IAAAC,WAAmB,IAAA1G,GAAAA,EAAAjQ,UAAUC,IAAI,mBACrCnX,SAASgK,KAAKE,MAAMsa,SAAW,UAC/B9I,GAAApd,KAAIkvB,GAAA,KAAuBhmB,QAG3B,MAAMqR,GAAyB,QAAlBuO,EAAA1L,GAAApd,KAAIovB,GAAA,YAAc,IAAAtG,OAAA,EAAAA,EAAAxlB,QAAQ,cAA8B,QAAhBylB,EAAA3L,GAAApd,KAAgBovB,GAAA,YAAA,IAAArG,OAAA,EAAAA,EAAEzlB,QAAQ,gBAE7EwrB,GADEvU,EACYmP,GAAkBnP,GAElB6C,GAAApd,KAAIovB,GAAA,MAEpB1R,GAAA1d,KAAIovB,QAAere,EAAS,MAYhC0e,kBAEE,OAAO/tB,SAASe,iBAAiB,+BAA+BzC,KAAKE,QAGvEL,oBACOG,KAAKuK,aAAa,SAASvK,KAAK+B,aAAa,OAAQ,UAE1D,MAAMohB,OAACA,GAAWzF,GAAA1d,KAAImvB,GAAoB,IAAIjM,gBAAiB,KAE/DljB,KAAKyM,cAAcvK,iBACjB,SACA1B,IACE,MAAMO,EAASP,EAAMO,OACf2uB,EAAqB3uB,EAAOuC,QAAQtD,KAAK6N,WAAa7N,KACtDoM,EAASrL,MAAAA,OAAM,EAANA,EAAQuC,QAAQ,UAE/B,IAAK8I,EAKH,YAJIsjB,GAEF1vB,KAAK2K,SAKT,IAAIglB,EAAWvjB,EAAOnL,aAAa,wBAC/B0uB,IAAa3vB,KAAKE,IACpBF,KAAK2K,QAGPglB,EAAWvjB,EAAOnL,aAAa,yBAC3B0uB,IAAa3vB,KAAKE,IACpBF,KAAK2K,OAAM,GAGbglB,EAAWvjB,EAAOnL,aAAa,uBAC3B0uB,IAAa3vB,KAAKE,KAEpBM,EAAMiG,kBACNiX,GAAA1d,KAAIovB,GAAehjB,EAAM,KACzBpM,KAAK4vB,UAGT,CAACzM,OAAAA,IAGHnjB,KAAKkC,iBAAiB,WAAW8O,GAAKoM,GAAApd,gBAAAyd,KAAAzd,KAAcgR,KAGtDnR,6BACyB,QAAvBiF,EAAAsY,GAAApd,KAAImvB,GAAA,YAAmB,IAAArqB,GAAAA,EAAAoE,QAGzBrJ,OACEG,KAAKsG,MAAO,EAGdzG,MAAMoe,GAAS,GACb,IAAkB,IAAdje,KAAKsG,KAAgB,OACzB,MACMupB,EAAc,IAAIxpB,MADN4X,EAAS,QAAU,UAErCje,KAAKuD,cAAcssB,GACnB7vB,KAAKsG,MAAO,kGArEZ,eAAIxB,EAAA9E,KAAKka,oCAAe3P,aAAa,8BAC5BvK,KAAKka,cAGP,kBAoEA1Z,GACP,GAAMA,aAAiBoW,gBACnBpW,EAAMP,YAEV,OAAQO,EAAMM,KACZ,IAAK,SACCd,KAAKsG,OACPtG,KAAK2K,QACLnK,EAAMY,iBACNZ,EAAMiG,qBAgBXhC,OAAO0I,eAAelE,IAAI,kBAC7BxE,OAAOwqB,mBAAqBA,mBAC5BxqB,OAAO0I,eAAeC,OAAO,eAAgB6hB"} \ No newline at end of file diff --git a/lib/tasks/docs.rake b/lib/tasks/docs.rake index 80fcb24b91..734f1bef5d 100644 --- a/lib/tasks/docs.rake +++ b/lib/tasks/docs.rake @@ -53,6 +53,7 @@ namespace :docs do Primer::Beta::CloseButton, Primer::Beta::Counter, Primer::Beta::Details, + Primer::Alpha::Dialog, Primer::Dropdown, Primer::DropdownMenuComponent, Primer::Beta::Flash, diff --git a/static/arguments.yml b/static/arguments.yml index a7bb487a1f..a27e7eda93 100644 --- a/static/arguments.yml +++ b/static/arguments.yml @@ -37,6 +37,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 9156a1bde9..78b3af823f 100644 --- a/static/audited_at.json +++ b/static/audited_at.json @@ -3,6 +3,10 @@ "Primer::Alpha::AutoComplete::Item": "", "Primer::Alpha::ButtonMarketing": "", "Primer::Alpha::HiddenTextExpander": "", + "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/constants.json b/static/constants.json index d34fdc0076..9e62e86522 100644 --- a/static/constants.json +++ b/static/constants.json @@ -39,6 +39,31 @@ ] }, "Primer::Alpha::HiddenTextExpander": { + "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", @@ -441,7 +466,8 @@ "Primer::DetailsComponent": { }, "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 bdcf244862..7a226e4b67 100644 --- a/static/statuses.json +++ b/static/statuses.json @@ -3,6 +3,10 @@ "Primer::Alpha::AutoComplete::Item": "deprecated", "Primer::Alpha::ButtonMarketing": "alpha", "Primer::Alpha::HiddenTextExpander": "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 34d5463316..4de201068c 100644 --- a/test/components/component_test.rb +++ b/test/components/component_test.rb @@ -48,6 +48,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 diff --git a/test/previews/primer/alpha/dialog_preview.rb b/test/previews/primer/alpha/dialog_preview.rb new file mode 100644 index 0000000000..f036052a6e --- /dev/null +++ b/test/previews/primer/alpha/dialog_preview.rb @@ -0,0 +1,57 @@ +# frozen_string_literal: true + +module Primer + module Alpha + # @label Dialog + class DialogPreview < ViewComponent::Preview + # @label Default options + # + # @param title [String] text + # @param subtitle [String] text + # @param button_text [String] text + # @param width [Symbol] select [small, medium, large, xlarge, xxlarge] + # @param height [Symbol] select [small, auto, large, xlarge] + def default(title: "Test Dialog", subtitle: nil, width: :medium, height: :auto, button_text: "Show Dialog") + render(Primer::Alpha::Dialog.new(title: title, width: width, height: height, subtitle: subtitle)) do |d| + d.show_button { button_text } + d.body { "Content" } + end + end + + # @label With Footer + # + # @param title [String] text + # @param subtitle [String] text + # @param button_text [String] text + # @param width [Symbol] select [small, medium, large, xlarge, xxlarge] + # @param height [Symbol] select [small, auto, large, xlarge] + def with_footer(title: "Test Dialog", subtitle: nil, width: :medium, height: :auto, button_text: "Show Dialog") + render_with_template(locals: { + title: title, + subtitle: subtitle, + width: width, + height: height, + button_text: button_text + }) + end + + # @label With a Form + # + # @param title [String] text + # @param subtitle [String] text + # @param button_text [String] text + # @param width [Symbol] select [small, medium, large, xlarge, xxlarge] + # @param height [Symbol] select [small, auto, large, xlarge] + def with_form(title: "Test Dialog", subtitle: nil, width: :medium, height: :auto, button_text: "Show Dialog") + render_with_template(locals: { + title: title, + subtitle: subtitle, + width: width, + height: height, + button_text: button_text + }) + end + end + end +end + diff --git a/test/previews/primer/alpha/dialog_preview/test.html.erb b/test/previews/primer/alpha/dialog_preview/test.html.erb new file mode 100644 index 0000000000..78e9d13bcf --- /dev/null +++ b/test/previews/primer/alpha/dialog_preview/test.html.erb @@ -0,0 +1,7 @@ +<%= render(Primer::Alpha::Dialog.new(title: title, width: width, height: height, subtitle: subtitle)) do |d| %> + <% d.show_button { @button_text } %> + <% d.body { "Content" } %> + <% d.footer do %> + render(Primer::ButtonComponent.new(scheme: :primary)) { "Submit" } + <% end %> +<% end %> diff --git a/test/previews/primer/alpha/dialog_preview/with_footer.html.erb b/test/previews/primer/alpha/dialog_preview/with_footer.html.erb new file mode 100644 index 0000000000..56d3143f32 --- /dev/null +++ b/test/previews/primer/alpha/dialog_preview/with_footer.html.erb @@ -0,0 +1,8 @@ +<%= render(Primer::Alpha::Dialog.new(id: "my-dialog", title: title, width: width, height: height, subtitle: subtitle)) do |d| %> + <% d.show_button { button_text } %> + <% d.body { "Content" } %> + <% d.footer do %> + <%= render(Primer::ButtonComponent.new(data: { "close-dialog-id": "my-dialog" })) { "Cancel" } %> + <%= render(Primer::ButtonComponent.new(scheme: :primary)) { "Submit" } %> + <% end %> +<% end %> diff --git a/test/previews/primer/alpha/dialog_preview/with_form.html.erb b/test/previews/primer/alpha/dialog_preview/with_form.html.erb new file mode 100644 index 0000000000..aaecd80cc5 --- /dev/null +++ b/test/previews/primer/alpha/dialog_preview/with_form.html.erb @@ -0,0 +1,12 @@ +<%= render(Primer::Alpha::Dialog.new(id: "my-dialog", title: title, width: width, height: height, subtitle: subtitle)) do |d| %> + <% d.show_button { button_text } %> +
+ <%= render(Primer::Alpha::Dialog::Body.new) do %> + This is a custom dialog with the body and footer wrapped in a form tag. + <% end %> + <%= render(Primer::Alpha::Dialog::Footer.new) do %> + <%= render(Primer::ButtonComponent.new(data: { "close-dialog-id": "my-dialog" })) { "Cancel" } %> + <%= render(Primer::ButtonComponent.new(scheme: :primary)) { "Submit" } %> + <% end %> +
+<% end %> diff --git a/yarn.lock b/yarn.lock index 9c3615fd98..2f1f4e8e02 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,7 +4,7 @@ "@babel/code-frame@^7.0.0": version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz" integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== dependencies: "@babel/highlight" "^7.16.7" @@ -23,7 +23,7 @@ "@babel/helper-validator-identifier@^7.16.7": version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz" integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== "@babel/highlight@^7.10.4": @@ -37,7 +37,7 @@ "@babel/highlight@^7.16.7": version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.9.tgz#61b2ee7f32ea0454612def4fccdae0de232b73e3" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz" integrity sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg== dependencies: "@babel/helper-validator-identifier" "^7.16.7" @@ -46,7 +46,7 @@ "@babel/runtime-corejs3@^7.10.2": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz#7bacecd1cb2dd694eacd32a91fcf7021c20770ae" + resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz" integrity sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A== dependencies: core-js-pure "^3.20.2" @@ -54,21 +54,21 @@ "@babel/runtime@^7.10.2", "@babel/runtime@^7.18.9": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz" integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== dependencies: regenerator-runtime "^0.13.4" "@babel/runtime@^7.10.4", "@babel/runtime@^7.5.5": version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz" integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== dependencies: regenerator-runtime "^0.13.4" "@changesets/apply-release-plan@^6.0.3": version "6.0.3" - resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-6.0.3.tgz#cd1113e57ac58d98ea9a52f2d39304c2d398a9dd" + resolved "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-6.0.3.tgz" integrity sha512-/3JKqtDefs2YSEQI6JQo43/MKTLfhPdrW/BFmqnRpW8UmPB+YXjjQgfjR/2KOaObLOkoixcL3WCK4wNkn/Krmw== dependencies: "@babel/runtime" "^7.10.4" @@ -87,7 +87,7 @@ "@changesets/assemble-release-plan@^5.2.0": version "5.2.0" - resolved "https://registry.yarnpkg.com/@changesets/assemble-release-plan/-/assemble-release-plan-5.2.0.tgz#35158dc9b496a4c108936ae8ad776ef855795ff6" + resolved "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-5.2.0.tgz" integrity sha512-ewY24PEbSec2eKX0+KM7eyENA2hUUp6s4LF9p/iBxTtc+TX2Xbx5rZnlLKZkc8tpuQ3PZbyjLFXWhd1PP6SjCg== dependencies: "@babel/runtime" "^7.10.4" @@ -99,14 +99,14 @@ "@changesets/changelog-git@^0.1.12": version "0.1.12" - resolved "https://registry.yarnpkg.com/@changesets/changelog-git/-/changelog-git-0.1.12.tgz#5393f74ce9591c25d6a632c20184e92ae343db0d" + resolved "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.1.12.tgz" integrity sha512-Xv2CPjTBmwjl8l4ZyQ3xrsXZMq8WafPUpEonDpTmcb24XY8keVzt7ZSCJuDz035EiqrjmDKDhODoQ6XiHudlig== dependencies: "@changesets/types" "^5.1.0" "@changesets/changelog-github@^0.4.6": version "0.4.6" - resolved "https://registry.yarnpkg.com/@changesets/changelog-github/-/changelog-github-0.4.6.tgz#5880448c578a160c06d8bd804872355ec0745dcb" + resolved "https://registry.npmjs.org/@changesets/changelog-github/-/changelog-github-0.4.6.tgz" integrity sha512-ahR/+o3OPodzfG9kucEMU/tEtBgwy6QoJiWi1sDBPme8n3WjT6pBlbhqNYpWAJKilomwfjBGY0MTUTs6r9d1RQ== dependencies: "@changesets/get-github-info" "^0.5.1" @@ -115,7 +115,7 @@ "@changesets/cli@^2.24.1": version "2.24.1" - resolved "https://registry.yarnpkg.com/@changesets/cli/-/cli-2.24.1.tgz#cb4c13c7712a3cb62fa9199cdda04567faf3d3b2" + resolved "https://registry.npmjs.org/@changesets/cli/-/cli-2.24.1.tgz" integrity sha512-7Lz1inqGQjBrXgnXlENtzQ7EmO/9c+09d9oi8XoK4ARqlJe8GpafjqKRobcjcA/TTI7Fn2+cke4CrXFZfVF8Rw== dependencies: "@babel/runtime" "^7.10.4" @@ -154,7 +154,7 @@ "@changesets/config@^2.1.0": version "2.1.0" - resolved "https://registry.yarnpkg.com/@changesets/config/-/config-2.1.0.tgz#bfb663a338fc86e9ea2cb471089aa6dd8dfd7c3d" + resolved "https://registry.npmjs.org/@changesets/config/-/config-2.1.0.tgz" integrity sha512-43potf+DwYHmH7EY19vxtCq6fqj7UUIrZ4DTwM3pVBqCKxFIytm7GPy7wNAsH06UvMw7NRuOu4QK5HN02GsIrw== dependencies: "@changesets/errors" "^0.1.4" @@ -167,14 +167,14 @@ "@changesets/errors@^0.1.4": version "0.1.4" - resolved "https://registry.yarnpkg.com/@changesets/errors/-/errors-0.1.4.tgz#f79851746c43679a66b383fdff4c012f480f480d" + resolved "https://registry.npmjs.org/@changesets/errors/-/errors-0.1.4.tgz" integrity sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q== dependencies: extendable-error "^0.1.5" "@changesets/get-dependents-graph@^1.3.3": version "1.3.3" - resolved "https://registry.yarnpkg.com/@changesets/get-dependents-graph/-/get-dependents-graph-1.3.3.tgz#9b8011d9993979a1f039ee6ce70793c81f780fea" + resolved "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-1.3.3.tgz" integrity sha512-h4fHEIt6X+zbxdcznt1e8QD7xgsXRAXd2qzLlyxoRDFSa6SxJrDAUyh7ZUNdhjBU4Byvp4+6acVWVgzmTy4UNQ== dependencies: "@changesets/types" "^5.1.0" @@ -185,7 +185,7 @@ "@changesets/get-github-info@^0.5.1": version "0.5.1" - resolved "https://registry.yarnpkg.com/@changesets/get-github-info/-/get-github-info-0.5.1.tgz#5a20328b26f301b2193717abb32e73651e8811b7" + resolved "https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.5.1.tgz" integrity sha512-w2yl3AuG+hFuEEmT6j1zDlg7GQLM/J2UxTmk0uJBMdRqHni4zXGe/vUlPfLom5KfX3cRfHc0hzGvloDPjWFNZw== dependencies: dataloader "^1.4.0" @@ -193,7 +193,7 @@ "@changesets/get-release-plan@^3.0.12": version "3.0.12" - resolved "https://registry.yarnpkg.com/@changesets/get-release-plan/-/get-release-plan-3.0.12.tgz#15038a553c7ba9aa764f69cef4705bcfb1be2fdc" + resolved "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-3.0.12.tgz" integrity sha512-TlpEdpxV5ZQmNeHoD6KNKAc01wjRrcu9/CQqzmO4qAlX7ARA4pIuAxd8QZ1AQXv/l4qhHox7SUYH3VLHfarv5w== dependencies: "@babel/runtime" "^7.10.4" @@ -206,12 +206,12 @@ "@changesets/get-version-range-type@^0.3.2": version "0.3.2" - resolved "https://registry.yarnpkg.com/@changesets/get-version-range-type/-/get-version-range-type-0.3.2.tgz#8131a99035edd11aa7a44c341cbb05e668618c67" + resolved "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.3.2.tgz" integrity sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg== "@changesets/git@^1.4.1": version "1.4.1" - resolved "https://registry.yarnpkg.com/@changesets/git/-/git-1.4.1.tgz#3f30330d94e8bcb45c4a221f34897a29cc72cd05" + resolved "https://registry.npmjs.org/@changesets/git/-/git-1.4.1.tgz" integrity sha512-GWwRXEqBsQ3nEYcyvY/u2xUK86EKAevSoKV/IhELoZ13caZ1A1TSak/71vyKILtzuLnFPk5mepP5HjBxr7lZ9Q== dependencies: "@babel/runtime" "^7.10.4" @@ -223,14 +223,14 @@ "@changesets/logger@^0.0.5": version "0.0.5" - resolved "https://registry.yarnpkg.com/@changesets/logger/-/logger-0.0.5.tgz#68305dd5a643e336be16a2369cb17cdd8ed37d4c" + resolved "https://registry.npmjs.org/@changesets/logger/-/logger-0.0.5.tgz" integrity sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw== dependencies: chalk "^2.1.0" "@changesets/parse@^0.3.14": version "0.3.14" - resolved "https://registry.yarnpkg.com/@changesets/parse/-/parse-0.3.14.tgz#97321604206db2572c17a12ed37671d9ee6d5e14" + resolved "https://registry.npmjs.org/@changesets/parse/-/parse-0.3.14.tgz" integrity sha512-SWnNVyC9vz61ueTbuxvA6b4HXcSx2iaWr2VEa37lPg1Vw+cEyQp7lOB219P7uow1xFfdtIEEsxbzXnqLAAaY8w== dependencies: "@changesets/types" "^5.1.0" @@ -238,7 +238,7 @@ "@changesets/pre@^1.0.12": version "1.0.12" - resolved "https://registry.yarnpkg.com/@changesets/pre/-/pre-1.0.12.tgz#1eaeef1a264b32c24d85dc15cf5445c1aa8b87c6" + resolved "https://registry.npmjs.org/@changesets/pre/-/pre-1.0.12.tgz" integrity sha512-RFzWYBZx56MtgMesXjxx7ymyI829/rcIw/41hvz3VJPnY8mDscN7RJyYu7Xm7vts2Fcd+SRcO0T/Ws3I1/6J7g== dependencies: "@babel/runtime" "^7.10.4" @@ -249,7 +249,7 @@ "@changesets/read@^0.5.7": version "0.5.7" - resolved "https://registry.yarnpkg.com/@changesets/read/-/read-0.5.7.tgz#ad2454ba8e2dfceb1230102aacffcbbe4d3d4291" + resolved "https://registry.npmjs.org/@changesets/read/-/read-0.5.7.tgz" integrity sha512-Iteg0ccTPpkJ+qFzY97k7qqdVE5Kz30TqPo9GibpBk2g8tcLFUqf+Qd0iXPLcyhUZpPL1U6Hia1gINHNKIKx4g== dependencies: "@babel/runtime" "^7.10.4" @@ -263,17 +263,17 @@ "@changesets/types@^4.0.1": version "4.1.0" - resolved "https://registry.yarnpkg.com/@changesets/types/-/types-4.1.0.tgz#fb8f7ca2324fd54954824e864f9a61a82cb78fe0" + resolved "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz" integrity sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw== "@changesets/types@^5.1.0": version "5.1.0" - resolved "https://registry.yarnpkg.com/@changesets/types/-/types-5.1.0.tgz#e0733b69ddc3efb68524d374d3c44f53a543c8d5" + resolved "https://registry.npmjs.org/@changesets/types/-/types-5.1.0.tgz" integrity sha512-uUByGATZCdaPkaO9JkBsgGDjEvHyY2Sb0e/J23+cwxBi5h0fxpLF/HObggO/Fw8T2nxK6zDfJbPsdQt5RwYFJA== "@changesets/write@^0.1.9": version "0.1.9" - resolved "https://registry.yarnpkg.com/@changesets/write/-/write-0.1.9.tgz#ac9315d5985f83b251820b8a046155c14a9d21f4" + resolved "https://registry.npmjs.org/@changesets/write/-/write-0.1.9.tgz" integrity sha512-E90ZrsrfJVOOQaP3Mm5Xd7uDwBAqq3z5paVEavTHKA8wxi7NAL8CmjgbGxSFuiP7ubnJA2BuHlrdE4z86voGOg== dependencies: "@babel/runtime" "^7.10.4" @@ -284,7 +284,7 @@ "@csstools/postcss-cascade-layers@^1.0.5": version "1.0.5" - resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.0.5.tgz#f16f2c4396ace855541e1aa693f5f27ec972e6ad" + resolved "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.0.5.tgz" integrity sha512-Id/9wBT7FkgFzdEpiEWrsVd4ltDxN0rI0QS0SChbeQiSuux3z21SJCRLu6h2cvCEUmaRi+VD0mHFj+GJD4GFnw== dependencies: "@csstools/selector-specificity" "^2.0.2" @@ -292,7 +292,7 @@ "@csstools/postcss-color-function@^1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz#2bd36ab34f82d0497cfacdc9b18d34b5e6f64b6b" + resolved "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz" integrity sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" @@ -300,21 +300,21 @@ "@csstools/postcss-font-format-keywords@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz#677b34e9e88ae997a67283311657973150e8b16a" + resolved "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz" integrity sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-hwb-function@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz#ab54a9fce0ac102c754854769962f2422ae8aa8b" + resolved "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz" integrity sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-ic-unit@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz#28237d812a124d1a16a5acc5c3832b040b303e58" + resolved "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz" integrity sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" @@ -322,7 +322,7 @@ "@csstools/postcss-is-pseudo-class@^2.0.7": version "2.0.7" - resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz#846ae6c0d5a1eaa878fce352c544f9c295509cd1" + resolved "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz" integrity sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA== dependencies: "@csstools/selector-specificity" "^2.0.0" @@ -330,21 +330,21 @@ "@csstools/postcss-nested-calc@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz#d7e9d1d0d3d15cf5ac891b16028af2a1044d0c26" + resolved "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz" integrity sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-normalize-display-values@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz#15da54a36e867b3ac5163ee12c1d7f82d4d612c3" + resolved "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz" integrity sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-oklab-function@^1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz#88cee0fbc8d6df27079ebd2fa016ee261eecf844" + resolved "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz" integrity sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" @@ -352,45 +352,45 @@ "@csstools/postcss-progressive-custom-properties@^1.1.0", "@csstools/postcss-progressive-custom-properties@^1.3.0": version "1.3.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz#542292558384361776b45c85226b9a3a34f276fa" + resolved "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz" integrity sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-stepped-value-functions@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz#f8772c3681cc2befed695e2b0b1d68e22f08c4f4" + resolved "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz" integrity sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-text-decoration-shorthand@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz#ea96cfbc87d921eca914d3ad29340d9bcc4c953f" + resolved "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz" integrity sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-trigonometric-functions@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz#94d3e4774c36d35dcdc88ce091336cb770d32756" + resolved "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz" integrity sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-unset-value@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz#c99bb70e2cdc7312948d1eb41df2412330b81f77" + resolved "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz" integrity sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g== "@csstools/selector-specificity@^2.0.0", "@csstools/selector-specificity@^2.0.2": version "2.0.2" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz#1bfafe4b7ed0f3e4105837e056e0a89b108ebe36" + resolved "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz" integrity sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg== "@eslint/eslintrc@^1.3.0": version "1.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz" integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== dependencies: ajv "^6.12.4" @@ -405,14 +405,14 @@ "@github/auto-complete-element@^3.3.4": version "3.3.4" - resolved "https://registry.yarnpkg.com/@github/auto-complete-element/-/auto-complete-element-3.3.4.tgz#b762f13342b8ea5e03609f75b5a8d417080355eb" + resolved "https://registry.npmjs.org/@github/auto-complete-element/-/auto-complete-element-3.3.4.tgz" integrity sha512-b9SBCLIQGfCI3G0pGYE8rBSUDON5iFKUgHXgAtVdgZii0dnLFxNl5tn1R/RaBEFdzBQPDl9vqu41TF/Hs3w8FA== dependencies: "@github/combobox-nav" "^2.0.2" "@github/catalyst@^1.6.0": version "1.6.0" - resolved "https://registry.yarnpkg.com/@github/catalyst/-/catalyst-1.6.0.tgz#378734d1d2b6a85af169d7e66c1a2a604bf1e82c" + resolved "https://registry.npmjs.org/@github/catalyst/-/catalyst-1.6.0.tgz" integrity sha512-u8A+DameixqpeyHzvnJWTGj+wfiskQOYHzSiJscCWVfMkIT3rxnbHMtGh3lMthaRY21nbUOK71WcsCnCrXhBJQ== "@github/clipboard-copy-element@^1.1.2": @@ -427,17 +427,17 @@ "@github/details-menu-element@^1.0.12": version "1.0.12" - resolved "https://registry.yarnpkg.com/@github/details-menu-element/-/details-menu-element-1.0.12.tgz#baf9cd5bcf8e40621a085380364090921eb3fae4" + resolved "https://registry.npmjs.org/@github/details-menu-element/-/details-menu-element-1.0.12.tgz" integrity sha512-Icbq+xw7Qjb6byfRtC5cjk/eAxb+Wc4F/WS+L6VTHLYEfi8q/akDtHgViGeu854IMiJ/qDosfOGXGgSrleud2w== "@github/image-crop-element@^5.0.0": version "5.0.0" - resolved "https://registry.yarnpkg.com/@github/image-crop-element/-/image-crop-element-5.0.0.tgz#6ae2c31f1e7dc355c41c3140554fb76ca7a71ef7" + resolved "https://registry.npmjs.org/@github/image-crop-element/-/image-crop-element-5.0.0.tgz" integrity sha512-Vgm2OwWAs1ESoib/t5sjxsAYo6YTOxxAjWDRxswX7qrqoyCejTZ3hshdo4Ep5e+Mz/GVTZC3rdMtg06dk/eT4g== "@github/mini-throttle@^2.1.0": version "2.1.0" - resolved "https://registry.yarnpkg.com/@github/mini-throttle/-/mini-throttle-2.1.0.tgz#583a1d5e383caa21a1c067a649f15f7ab575dccf" + resolved "https://registry.npmjs.org/@github/mini-throttle/-/mini-throttle-2.1.0.tgz" integrity sha512-iEeR2OdVCPkdIPUszL8gJnKNu4MR8ANh7y0u/LPyaatYezgaWxUZEzhFntloqQq+HE6MZkFy+cl+xzCNuljOdw== "@github/prettier-config@0.0.4": @@ -447,31 +447,36 @@ "@github/tab-container-element@^3.1.2": version "3.1.2" - resolved "https://registry.yarnpkg.com/@github/tab-container-element/-/tab-container-element-3.1.2.tgz#fa5162acb1693f37c28b4a9c3dd8f09d7d20021d" + resolved "https://registry.npmjs.org/@github/tab-container-element/-/tab-container-element-3.1.2.tgz" integrity sha512-tsM5fva0e+tdNRDCZ8Co2Z5MNzJQa/41rFYt4dMgabTU+ljTg58mY2Px9Zc9mC9UCXSC/cyrfcs1Vz51/Q14NQ== "@github/time-elements@^3.1.2": version "3.1.2" - resolved "https://registry.yarnpkg.com/@github/time-elements/-/time-elements-3.1.2.tgz#cc36d7a34ff2033d7f0b216f1a724405b8fbc201" + resolved "https://registry.npmjs.org/@github/time-elements/-/time-elements-3.1.2.tgz" integrity sha512-YVtZVLBikP6I7na22kfB9PKIseISwX41MFJ7lPuNz1VVH2IR5cpRRU6F1X6kcchPChljuvMUR4OiwMWHOJQ8kQ== -"@humanwhocodes/config-array@^0.9.2": - version "0.9.5" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" - integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== +"@humanwhocodes/config-array@^0.10.4": + version "0.10.4" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" + integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" minimatch "^3.0.4" +"@humanwhocodes/gitignore-to-minimatch@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" + integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== + "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@manypkg/find-root@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@manypkg/find-root/-/find-root-1.1.0.tgz#a62d8ed1cd7e7d4c11d9d52a8397460b5d4ad29f" + resolved "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz" integrity sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA== dependencies: "@babel/runtime" "^7.5.5" @@ -481,7 +486,7 @@ "@manypkg/get-packages@^1.1.3": version "1.1.3" - resolved "https://registry.yarnpkg.com/@manypkg/get-packages/-/get-packages-1.1.3.tgz#e184db9bba792fa4693de4658cfb1463ac2c9c47" + resolved "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz" integrity sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A== dependencies: "@babel/runtime" "^7.5.5" @@ -514,7 +519,7 @@ "@primer/behaviors@^1.1.3": version "1.1.3" - resolved "https://registry.yarnpkg.com/@primer/behaviors/-/behaviors-1.1.3.tgz#4945f79c39f8b4495ec868b053264830f687c7bc" + resolved "https://registry.npmjs.org/@primer/behaviors/-/behaviors-1.1.3.tgz" integrity sha512-WpCcjAkXG7Lv3ZbaCUgASWKHnCi/pmuSEiyTmHHb6f5xhwk1mliixNL5ZZHtDN6RCcT3VnXUsyek4GopG2lbZQ== "@primer/css@^20.4.2": @@ -526,12 +531,12 @@ "@primer/primitives@^7.9.0": version "7.9.0" - resolved "https://registry.yarnpkg.com/@primer/primitives/-/primitives-7.9.0.tgz#c8a27287488c8308b1715a7d73214629c331544a" + resolved "https://registry.npmjs.org/@primer/primitives/-/primitives-7.9.0.tgz" integrity sha512-ZHHfwB0z0z6nDJp263gyGIClYDy+rl0nwqyi4qhcv3Cxhkmtf+If2KVjr6FQqBBFfi1wQwUzaax2FBvfEMFBnw== "@rollup/plugin-node-resolve@^13.3.0": version "13.3.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz#da1c5c5ce8316cef96a2f823d111c1e4e498801c" + resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz" integrity sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw== dependencies: "@rollup/pluginutils" "^3.1.0" @@ -543,7 +548,7 @@ "@rollup/plugin-typescript@^8.3.3": version "8.3.3" - resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-8.3.3.tgz#eee7edab9cfc064f1cfd16570492693cf1432215" + resolved "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.3.3.tgz" integrity sha512-55L9SyiYu3r/JtqdjhwcwaECXP7JeJ9h1Sg1VWRJKIutla2MdZQodTgcCNybXLMCnqpNLEhS2vGENww98L1npg== dependencies: "@rollup/pluginutils" "^3.1.0" @@ -560,7 +565,7 @@ "@trysound/sax@0.2.0": version "0.2.0" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== "@types/estree@0.0.39": @@ -570,14 +575,14 @@ "@types/is-ci@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/is-ci/-/is-ci-3.0.0.tgz#7e8910af6857601315592436f030aaa3ed9783c3" + resolved "https://registry.npmjs.org/@types/is-ci/-/is-ci-3.0.0.tgz" integrity sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ== dependencies: ci-info "^3.1.0" "@types/json-schema@^7.0.9": version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/json5@^0.0.29": @@ -587,7 +592,7 @@ "@types/minimist@^1.2.0": version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" + resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz" integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/node@*": @@ -597,12 +602,12 @@ "@types/node@^12.7.1": version "12.20.50" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.50.tgz#14ba5198f1754ffd0472a2f84ab433b45ee0b65e" + resolved "https://registry.npmjs.org/@types/node/-/node-12.20.50.tgz" integrity sha512-+9axpWx2b2JCVovr7Ilgt96uc6C1zBKOQMpGtRbWT9IoR/8ue32GGMfGA4woP8QyP2gBs6GQWEVM3tCybGCxDA== "@types/normalize-package-data@^2.4.0": version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/resolve@1.17.1": @@ -614,12 +619,12 @@ "@types/semver@^6.0.0": version "6.2.3" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.2.3.tgz#5798ecf1bec94eaa64db39ee52808ec0693315aa" + resolved "https://registry.npmjs.org/@types/semver/-/semver-6.2.3.tgz" integrity sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A== "@typescript-eslint/eslint-plugin@^5.1.0", "@typescript-eslint/eslint-plugin@^5.31.0": version "5.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.31.0.tgz#cae1967b1e569e6171bbc6bec2afa4e0c8efccfe" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.31.0.tgz" integrity sha512-VKW4JPHzG5yhYQrQ1AzXgVgX8ZAJEvCz0QI6mLRX4tf7rnFfh5D8SKm0Pq6w5PyNfAWJk6sv313+nEt3ohWMBQ== dependencies: "@typescript-eslint/scope-manager" "5.31.0" @@ -634,7 +639,7 @@ "@typescript-eslint/parser@^5.1.0", "@typescript-eslint/parser@^5.31.0": version "5.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.31.0.tgz#7f42d7dcc68a0a6d80a0f3d9a65063aee7bb8d2c" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.31.0.tgz" integrity sha512-UStjQiZ9OFTFReTrN+iGrC6O/ko9LVDhreEK5S3edmXgR396JGq7CoX2TWIptqt/ESzU2iRKXAHfSF2WJFcWHw== dependencies: "@typescript-eslint/scope-manager" "5.31.0" @@ -644,7 +649,7 @@ "@typescript-eslint/scope-manager@5.31.0": version "5.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.31.0.tgz#f47a794ba84d9b818ab7f8f44fff55a61016c606" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.31.0.tgz" integrity sha512-8jfEzBYDBG88rcXFxajdVavGxb5/XKXyvWgvD8Qix3EEJLCFIdVloJw+r9ww0wbyNLOTYyBsR+4ALNGdlalLLg== dependencies: "@typescript-eslint/types" "5.31.0" @@ -652,7 +657,7 @@ "@typescript-eslint/type-utils@5.31.0": version "5.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.31.0.tgz#70a0b7201360b5adbddb0c36080495aa08f6f3d9" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.31.0.tgz" integrity sha512-7ZYqFbvEvYXFn9ax02GsPcEOmuWNg+14HIf4q+oUuLnMbpJ6eHAivCg7tZMVwzrIuzX3QCeAOqKoyMZCv5xe+w== dependencies: "@typescript-eslint/utils" "5.31.0" @@ -661,12 +666,12 @@ "@typescript-eslint/types@5.31.0": version "5.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.31.0.tgz#7aa389122b64b18e473c1672fb3b8310e5f07a9a" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.31.0.tgz" integrity sha512-/f/rMaEseux+I4wmR6mfpM2wvtNZb1p9hAV77hWfuKc3pmaANp5dLAZSiE3/8oXTYTt3uV9KW5yZKJsMievp6g== "@typescript-eslint/typescript-estree@5.31.0": version "5.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.31.0.tgz#eb92970c9d6e3946690d50c346fb9b1d745ee882" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.31.0.tgz" integrity sha512-3S625TMcARX71wBc2qubHaoUwMEn+l9TCsaIzYI/ET31Xm2c9YQ+zhGgpydjorwQO9pLfR/6peTzS/0G3J/hDw== dependencies: "@typescript-eslint/types" "5.31.0" @@ -679,7 +684,7 @@ "@typescript-eslint/utils@5.31.0": version "5.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.31.0.tgz#e146fa00dca948bfe547d665b2138a2dc1b79acd" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.31.0.tgz" integrity sha512-kcVPdQS6VIpVTQ7QnGNKMFtdJdvnStkqS5LeALr4rcwx11G6OWb2HB17NMPnlRHvaZP38hL9iK8DdE9Fne7NYg== dependencies: "@types/json-schema" "^7.0.9" @@ -691,7 +696,7 @@ "@typescript-eslint/visitor-keys@5.31.0": version "5.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.31.0.tgz#b0eca264df01ce85dceb76aebff3784629258f54" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.31.0.tgz" integrity sha512-ZK0jVxSjS4gnPirpVjXHz7mgdOsZUHzNYSfTw2yPa3agfbt9YfqaBiBZFSSxeBWnpWkzCxTfUpnzA3Vily/CSg== dependencies: "@typescript-eslint/types" "5.31.0" @@ -704,10 +709,10 @@ acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.7.1: +acorn@^8.8.0: version "8.8.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== @@ -729,7 +734,7 @@ ansi-colors@4.1.1, ansi-colors@^4.1.1: ansi-colors@^4.1.3: version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-regex@^5.0.0: @@ -739,7 +744,7 @@ ansi-regex@^5.0.0: ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^3.2.1: @@ -758,7 +763,7 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: anymatch@~3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" @@ -778,7 +783,7 @@ argparse@^2.0.1: aria-query@^4.2.2: version "4.2.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + resolved "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz" integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== dependencies: "@babel/runtime" "^7.10.2" @@ -786,7 +791,7 @@ aria-query@^4.2.2: array-includes@^3.1.4, array-includes@^3.1.5: version "3.1.5" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz" integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== dependencies: call-bind "^1.0.2" @@ -802,7 +807,7 @@ array-union@^2.1.0: array.prototype.flat@^1.2.3, array.prototype.flat@^1.2.5: version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz" integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== dependencies: call-bind "^1.0.2" @@ -812,17 +817,17 @@ array.prototype.flat@^1.2.3, array.prototype.flat@^1.2.5: arrify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= ast-types-flow@^0.0.7: version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz" integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== autoprefixer@^10.4.8: version "10.4.8" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.8.tgz#92c7a0199e1cfb2ad5d9427bd585a3d75895b9e5" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.8.tgz" integrity sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw== dependencies: browserslist "^4.21.3" @@ -834,22 +839,22 @@ autoprefixer@^10.4.8: axe-core@^4.4.3: version "4.4.3" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.3.tgz#11c74d23d5013c0fa5d183796729bc3482bd2f6f" + resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz" integrity sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w== axobject-query@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== better-path-resolve@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/better-path-resolve/-/better-path-resolve-1.0.0.tgz#13a35a1104cdd48a7b74bf8758f96a1ee613f99d" + resolved "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz" integrity sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g== dependencies: is-windows "^1.0.0" @@ -861,7 +866,7 @@ binary-extensions@^2.0.0: boolbase@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== brace-expansion@^1.1.7: @@ -874,7 +879,7 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" @@ -888,7 +893,7 @@ braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: breakword@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/breakword/-/breakword-1.0.5.tgz#fd420a417f55016736b5b615161cae1c8f819810" + resolved "https://registry.npmjs.org/breakword/-/breakword-1.0.5.tgz" integrity sha512-ex5W9DoOQ/LUEU3PMdLs9ua/CYZl1678NUkKOdUSi8Aw5F1idieaiRURCBFJCwVcrD1J8Iy3vfWSloaMwO2qFg== dependencies: wcwidth "^1.0.1" @@ -898,9 +903,9 @@ browser-stdout@1.3.1: resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserslist@^4.0.0, browserslist@^4.16.6, browserslist@^4.20.3, browserslist@^4.21.3: +browserslist@^4.0.0, browserslist@^4.16.6, browserslist@^4.20.3, browserslist@^4.21.0, browserslist@^4.21.3: version "4.21.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz" integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== dependencies: caniuse-lite "^1.0.30001370" @@ -908,16 +913,6 @@ browserslist@^4.0.0, browserslist@^4.16.6, browserslist@^4.20.3, browserslist@^4 node-releases "^2.0.6" update-browserslist-db "^1.0.5" -browserslist@^4.21.0: - version "4.21.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.2.tgz#59a400757465535954946a400b841ed37e2b4ecf" - integrity sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA== - dependencies: - caniuse-lite "^1.0.30001366" - electron-to-chromium "^1.4.188" - node-releases "^2.0.6" - update-browserslist-db "^1.0.4" - buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" @@ -925,7 +920,7 @@ buffer-from@^1.0.0: builtin-modules@^3.0.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== call-bind@^1.0.0, call-bind@^1.0.2: @@ -943,7 +938,7 @@ callsites@^3.0.0: camelcase-keys@^6.2.2: version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== dependencies: camelcase "^5.3.1" @@ -952,7 +947,7 @@ camelcase-keys@^6.2.2: camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelcase@^6.0.0: @@ -962,7 +957,7 @@ camelcase@^6.0.0: caniuse-api@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + resolved "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz" integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== dependencies: browserslist "^4.0.0" @@ -972,14 +967,9 @@ caniuse-api@^3.0.0: caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001370, caniuse-lite@^1.0.30001373: version "1.0.30001377" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001377.tgz#fa446cef27f25decb0c7420759c9ea17a2221a70" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001377.tgz" integrity sha512-I5XeHI1x/mRSGl96LFOaSk528LA/yZG3m3iQgImGujjO8gotd/DL8QaI1R1h1dg5ATeI2jqPblMpKq4Tr5iKfQ== -caniuse-lite@^1.0.30001366: - version "1.0.30001370" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001370.tgz#0a30d4f20d38b9e108cc5ae7cc62df9fe66cd5ba" - integrity sha512-3PDmaP56wz/qz7G508xzjx8C+MC2qEm4SYhSEzC9IBROo+dGXFWRuaXkWti0A9tuI00g+toiriVqxtWMgl350g== - chalk@^2.0.0, chalk@^2.1.0: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" @@ -989,17 +979,9 @@ chalk@^2.0.0, chalk@^2.1.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -1007,12 +989,12 @@ chalk@^4.1.0, chalk@^4.1.2: chardet@^0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== chokidar@3.5.3, chokidar@^3.3.0: version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" @@ -1027,12 +1009,12 @@ chokidar@3.5.3, chokidar@^3.3.0: ci-info@^3.1.0, ci-info@^3.2.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz" integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== cliui@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== dependencies: string-width "^4.2.0" @@ -1050,7 +1032,7 @@ cliui@^7.0.2: clone@^1.0.2: version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= color-convert@^1.9.0: @@ -1079,7 +1061,7 @@ color-name@~1.1.4: colord@^2.9.1: version "2.9.3" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz" integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== commander@^2.20.0: @@ -1089,7 +1071,7 @@ commander@^2.20.0: commander@^7.2.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== concat-map@0.0.1: @@ -1099,12 +1081,12 @@ concat-map@0.0.1: core-js-pure@^3.20.2: version "3.24.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.24.0.tgz#10eeb90dbf0d670a6b22b081aecc7deb2faec7e1" + resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.0.tgz" integrity sha512-uzMmW8cRh7uYw4JQtzqvGWRyC2T5+4zipQLQdi2FmiRqP83k3d6F3stv2iAlNhOs6cXN401FCD5TL0vvleuHgA== cross-spawn@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz" integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= dependencies: lru-cache "^4.0.1" @@ -1122,31 +1104,31 @@ cross-spawn@^7.0.2: css-blank-pseudo@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz#36523b01c12a25d812df343a32c322d2a2324561" + resolved "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz" integrity sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ== dependencies: postcss-selector-parser "^6.0.9" css-declaration-sorter@^6.3.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz#72ebd995c8f4532ff0036631f7365cce9759df14" + resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz" integrity sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og== css-has-pseudo@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz#57f6be91ca242d5c9020ee3e51bbb5b89fc7af73" + resolved "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz" integrity sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw== dependencies: postcss-selector-parser "^6.0.9" css-prefers-color-scheme@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz#ca8a22e5992c10a5b9d315155e7caee625903349" + resolved "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz" integrity sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA== css-select@^4.1.3: version "4.3.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + resolved "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz" integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== dependencies: boolbase "^1.0.0" @@ -1157,7 +1139,7 @@ css-select@^4.1.3: css-tree@^1.1.2, css-tree@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== dependencies: mdn-data "2.0.14" @@ -1165,22 +1147,22 @@ css-tree@^1.1.2, css-tree@^1.1.3: css-what@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== cssdb@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.0.0.tgz#60cd053b0918fbbe859517f6bddf35979a19e1af" + resolved "https://registry.npmjs.org/cssdb/-/cssdb-7.0.0.tgz" integrity sha512-HmRYATZ4Gf8naf6sZmwKEyf7MXAC0ZxjsamtNNgmuWpQgoO973zsE/1JMIohEYsSi5e3n7vQauCLv7TWSrOlrw== cssesc@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== cssnano-preset-default@^5.2.12: version "5.2.12" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz#ebe6596ec7030e62c3eb2b3c09f533c0644a9a97" + resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz" integrity sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew== dependencies: css-declaration-sorter "^6.3.0" @@ -1215,12 +1197,12 @@ cssnano-preset-default@^5.2.12: cssnano-utils@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" + resolved "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz" integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== cssnano@^5.1.13: version "5.1.13" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.13.tgz#83d0926e72955332dc4802a7070296e6258efc0a" + resolved "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz" integrity sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ== dependencies: cssnano-preset-default "^5.2.12" @@ -1229,29 +1211,29 @@ cssnano@^5.1.13: csso@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + resolved "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz" integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== dependencies: css-tree "^1.1.2" csv-generate@^3.4.3: version "3.4.3" - resolved "https://registry.yarnpkg.com/csv-generate/-/csv-generate-3.4.3.tgz#bc42d943b45aea52afa896874291da4b9108ffff" + resolved "https://registry.npmjs.org/csv-generate/-/csv-generate-3.4.3.tgz" integrity sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw== csv-parse@^4.16.3: version "4.16.3" - resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.16.3.tgz#7ca624d517212ebc520a36873c3478fa66efbaf7" + resolved "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz" integrity sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg== csv-stringify@^5.6.5: version "5.6.5" - resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-5.6.5.tgz#c6d74badda4b49a79bf4e72f91cce1e33b94de00" + resolved "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz" integrity sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A== csv@^5.5.0: version "5.5.3" - resolved "https://registry.yarnpkg.com/csv/-/csv-5.5.3.tgz#cd26c1e45eae00ce6a9b7b27dcb94955ec95207d" + resolved "https://registry.npmjs.org/csv/-/csv-5.5.3.tgz" integrity sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g== dependencies: csv-generate "^3.4.3" @@ -1261,17 +1243,17 @@ csv@^5.5.0: damerau-levenshtein@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== dataloader@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-1.4.0.tgz#bca11d867f5d3f1b9ed9f737bd15970c65dff5c8" + resolved "https://registry.npmjs.org/dataloader/-/dataloader-1.4.0.tgz" integrity sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw== -debug@4.3.4, debug@^4.3.2, debug@^4.3.4: +debug@4.3.4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" @@ -1285,21 +1267,14 @@ debug@^2.6.9: debug@^3.2.7: version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -debug@^4.1.1: - version "4.3.1" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - decamelize-keys@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz" integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= dependencies: decamelize "^1.1.0" @@ -1307,7 +1282,7 @@ decamelize-keys@^1.1.0: decamelize@^1.1.0, decamelize@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= decamelize@^4.0.0: @@ -1316,9 +1291,9 @@ decamelize@^4.0.0: integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== deep-is@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: version "4.2.2" @@ -1327,7 +1302,7 @@ deepmerge@^4.2.2: defaults@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= dependencies: clone "^1.0.2" @@ -1341,7 +1316,7 @@ define-properties@^1.1.3: define-properties@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== dependencies: has-property-descriptors "^1.0.0" @@ -1349,12 +1324,12 @@ define-properties@^1.1.4: dependency-graph@^0.11.0: version "0.11.0" - resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" + resolved "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz" integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== detect-indent@^6.0.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== diff@5.0.0: @@ -1371,7 +1346,7 @@ dir-glob@^3.0.1: doctrine@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" @@ -1385,7 +1360,7 @@ doctrine@^3.0.0: dom-serializer@^1.0.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== dependencies: domelementtype "^2.0.1" @@ -1394,19 +1369,19 @@ dom-serializer@^1.0.1: domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== domhandler@^4.2.0, domhandler@^4.3.1: version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: domelementtype "^2.2.0" domutils@^2.8.0: version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" @@ -1415,17 +1390,12 @@ domutils@^2.8.0: dotenv@^8.1.0: version "8.6.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz" integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== -electron-to-chromium@^1.4.188: - version "1.4.200" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.200.tgz#6e4c5266106688965b4ea7caa11f0dd315586854" - integrity sha512-nPyI7oHc8T64oSqRXrAt99gNMpk0SAgPHw/o+hkNKyb5+bcdnFtZcSO9FUJES5cVkVZvo8u4qiZ1gQILl8UXsA== - electron-to-chromium@^1.4.202: version "1.4.222" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.222.tgz#2ba24bef613fc1985dbffea85df8f62f2dec6448" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.222.tgz" integrity sha512-gEM2awN5HZknWdLbngk4uQCVfhucFAfFzuchP3wM3NN6eow1eDU0dFy2kts43FB20ZfhVFF0jmFSTb1h5OhyIg== emoji-regex@^8.0.0: @@ -1435,7 +1405,7 @@ emoji-regex@^8.0.0: emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== enquirer@^2.3.0: @@ -1447,7 +1417,7 @@ enquirer@^2.3.0: entities@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== error-ex@^1.3.1: @@ -1459,7 +1429,7 @@ error-ex@^1.3.1: es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: version "1.20.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz" integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== dependencies: call-bind "^1.0.2" @@ -1488,7 +1458,7 @@ es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19 es-shim-unscopables@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== dependencies: has "^1.0.3" @@ -1519,12 +1489,12 @@ escape-string-regexp@^1.0.5: eslint-config-prettier@>=8.0.0: version "8.5.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== eslint-import-resolver-node@^0.3.6: version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz" integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== dependencies: debug "^3.2.7" @@ -1532,7 +1502,7 @@ eslint-import-resolver-node@^0.3.6: eslint-module-utils@^2.7.3: version "2.7.3" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz" integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== dependencies: debug "^3.2.7" @@ -1540,19 +1510,19 @@ eslint-module-utils@^2.7.3: eslint-plugin-custom-elements@^0.0.6: version "0.0.6" - resolved "https://registry.yarnpkg.com/eslint-plugin-custom-elements/-/eslint-plugin-custom-elements-0.0.6.tgz#2e0f5018af7ac8348f591cec9b5e80d08996f235" + resolved "https://registry.npmjs.org/eslint-plugin-custom-elements/-/eslint-plugin-custom-elements-0.0.6.tgz" integrity sha512-JwPHRSOUe7y8dpC5hg90ySHejsfnQ3yqprv0902VMZ3j8FRZDudj+yzxqqkRDhZTNFUxP3r+0TWuveZhLgJONg== eslint-plugin-escompat@^3.1.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-escompat/-/eslint-plugin-escompat-3.2.0.tgz#7d40efe8721d8fccb5d300f4fbda44f350a27301" + resolved "https://registry.npmjs.org/eslint-plugin-escompat/-/eslint-plugin-escompat-3.2.0.tgz" integrity sha512-obXAKKiZE/wB2fgIw0ZxCmp+8vpDsUw2inkaok1i7OVxY4cEds4Y9YCoky0f5V+q8rqZpTUJDv1R9ykWbXLX8Q== dependencies: browserslist "^4.21.0" eslint-plugin-eslint-comments@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz#9e1cd7b4413526abb313933071d7aba05ca12ffa" + resolved "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz" integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ== dependencies: escape-string-regexp "^1.0.5" @@ -1560,7 +1530,7 @@ eslint-plugin-eslint-comments@^3.2.0: eslint-plugin-filenames@^1.3.2: version "1.3.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-filenames/-/eslint-plugin-filenames-1.3.2.tgz#7094f00d7aefdd6999e3ac19f72cea058e590cf7" + resolved "https://registry.npmjs.org/eslint-plugin-filenames/-/eslint-plugin-filenames-1.3.2.tgz" integrity sha512-tqxJTiEM5a0JmRCUYQmxw23vtTxrb2+a3Q2mMOPhFxvt7ZQQJmdiuMby9B/vUAuVMghyP7oET+nIf6EO6CBd/w== dependencies: lodash.camelcase "4.3.0" @@ -1570,7 +1540,7 @@ eslint-plugin-filenames@^1.3.2: eslint-plugin-github@^4.3.7: version "4.3.7" - resolved "https://registry.yarnpkg.com/eslint-plugin-github/-/eslint-plugin-github-4.3.7.tgz#596416a81240dcd1d3ba1cab6ddfed0a1827bf1a" + resolved "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-4.3.7.tgz" integrity sha512-tYZdXvAEz4JCMrC4NHIUoJTsLUvydCxff5OqB5hgU0vQbLmMkw6VOipN2KNe+T06pEhAWs1KBEwyq9cmMWRe7A== dependencies: "@typescript-eslint/eslint-plugin" "^5.1.0" @@ -1591,12 +1561,12 @@ eslint-plugin-github@^4.3.7: eslint-plugin-i18n-text@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-i18n-text/-/eslint-plugin-i18n-text-1.0.1.tgz#69ce14f9af7d135cbe8114b1b144a57bb83291dc" + resolved "https://registry.npmjs.org/eslint-plugin-i18n-text/-/eslint-plugin-i18n-text-1.0.1.tgz" integrity sha512-3G3UetST6rdqhqW9SfcfzNYMpQXS7wNkJvp6dsXnjzGiku6Iu5hl3B0kmk6lIcFPwYjhQIY+tXVRtK9TlGT7RA== eslint-plugin-import@^2.25.2: version "2.26.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz" integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== dependencies: array-includes "^3.1.4" @@ -1615,7 +1585,7 @@ eslint-plugin-import@^2.25.2: eslint-plugin-jsx-a11y@^6.6.0: version "6.6.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff" + resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz" integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q== dependencies: "@babel/runtime" "^7.18.9" @@ -1634,12 +1604,12 @@ eslint-plugin-jsx-a11y@^6.6.0: eslint-plugin-no-only-tests@^2.6.0: version "2.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-2.6.0.tgz#19f6c9620bda02b9b9221b436c5f070e42628d76" + resolved "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-2.6.0.tgz" integrity sha512-T9SmE/g6UV1uZo1oHAqOvL86XWl7Pl2EpRpnLI8g/bkJu+h7XBCB+1LnubRZ2CUQXj805vh4/CYZdnqtVaEo2Q== eslint-plugin-prettier@^4.0.0, eslint-plugin-prettier@^4.2.1: version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz" integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== dependencies: prettier-linter-helpers "^1.0.0" @@ -1659,7 +1629,7 @@ eslint-scope@^5.1.1: eslint-scope@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: esrecurse "^4.3.0" @@ -1667,28 +1637,29 @@ eslint-scope@^7.1.1: eslint-utils@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: eslint-visitor-keys "^2.0.0" eslint-visitor-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" - integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== eslint-visitor-keys@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint@^8.20.0: - version "8.20.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.20.0.tgz#048ac56aa18529967da8354a478be4ec0a2bc81b" - integrity sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA== + version "8.22.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.22.0.tgz#78fcb044196dfa7eef30a9d65944f6f980402c48" + integrity sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA== dependencies: "@eslint/eslintrc" "^1.3.0" - "@humanwhocodes/config-array" "^0.9.2" + "@humanwhocodes/config-array" "^0.10.4" + "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -1698,14 +1669,17 @@ eslint@^8.20.0: eslint-scope "^7.1.1" eslint-utils "^3.0.0" eslint-visitor-keys "^3.3.0" - espree "^9.3.2" + espree "^9.3.3" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" + find-up "^5.0.0" functional-red-black-tree "^1.0.1" glob-parent "^6.0.1" globals "^13.15.0" + globby "^11.1.0" + grapheme-splitter "^1.0.4" ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" @@ -1723,12 +1697,12 @@ eslint@^8.20.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^9.3.2: - version "9.3.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" - integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== +espree@^9.3.2, espree@^9.3.3: + version "9.3.3" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.3.tgz#2dd37c4162bb05f433ad3c1a52ddf8a49dc08e9d" + integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== dependencies: - acorn "^8.7.1" + acorn "^8.8.0" acorn-jsx "^5.3.2" eslint-visitor-keys "^3.3.0" @@ -1757,9 +1731,9 @@ estraverse@^4.1.1: integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== estree-walker@^1.0.1: version "1.0.1" @@ -1773,12 +1747,12 @@ esutils@^2.0.2: extendable-error@^0.1.5: version "0.1.7" - resolved "https://registry.yarnpkg.com/extendable-error/-/extendable-error-0.1.7.tgz#60b9adf206264ac920058a7395685ae4670c2b96" + resolved "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz" integrity sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg== external-editor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" @@ -1797,7 +1771,7 @@ fast-diff@^1.1.2: fast-glob@^3.2.11, fast-glob@^3.2.9: version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz" integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -1825,7 +1799,7 @@ fastq@^1.6.0: file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" @@ -1854,7 +1828,7 @@ find-up@^2.1.0: find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" @@ -1862,7 +1836,7 @@ find-up@^4.0.0, find-up@^4.1.0: find-yarn-workspace-root2@1.2.16: version "1.2.16" - resolved "https://registry.yarnpkg.com/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz#60287009dd2f324f59646bdb4b7610a6b301c2a9" + resolved "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz" integrity sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA== dependencies: micromatch "^4.0.2" @@ -1882,18 +1856,18 @@ flat@^5.0.2: integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" - integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== fraction.js@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz" integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== fs-extra@^10.0.0: version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" @@ -1902,7 +1876,7 @@ fs-extra@^10.0.0: fs-extra@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== dependencies: graceful-fs "^4.1.2" @@ -1911,7 +1885,7 @@ fs-extra@^7.0.1: fs-extra@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: graceful-fs "^4.2.0" @@ -1935,7 +1909,7 @@ function-bind@^1.1.1: function.prototype.name@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== dependencies: call-bind "^1.0.2" @@ -1950,7 +1924,7 @@ functional-red-black-tree@^1.0.1: functions-have-names@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== get-caller-file@^2.0.1, get-caller-file@^2.0.5: @@ -1969,7 +1943,7 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: get-intrinsic@^1.1.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz" integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== dependencies: function-bind "^1.1.1" @@ -1978,12 +1952,12 @@ get-intrinsic@^1.1.0: get-stdin@^9.0.0: version "9.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz" integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== get-symbol-description@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== dependencies: call-bind "^1.0.2" @@ -1991,21 +1965,21 @@ get-symbol-description@^1.0.0: glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.1: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob@7.2.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" @@ -2016,27 +1990,27 @@ glob@7.2.0: path-is-absolute "^1.0.0" glob@^7.1.3: - version "7.1.6" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" globals@^13.15.0: version "13.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" + resolved "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== dependencies: type-fest "^0.20.2" globby@^11.0.0, globby@^11.1.0: version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -2048,7 +2022,7 @@ globby@^11.0.0, globby@^11.1.0: globby@^13.0.0: version "13.1.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" + resolved "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz" integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== dependencies: dir-glob "^3.0.1" @@ -2057,29 +2031,24 @@ globby@^13.0.0: merge2 "^1.4.1" slash "^4.0.0" -graceful-fs@^4.1.2: - version "4.2.6" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== grapheme-splitter@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== hard-rejection@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: @@ -2094,24 +2063,19 @@ has-flag@^4.0.0: has-property-descriptors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== dependencies: get-intrinsic "^1.1.1" -has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== - -has-symbols@^1.0.2, has-symbols@^1.0.3: +has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: has-symbols "^1.0.2" @@ -2130,29 +2094,24 @@ he@1.2.0: hosted-git-info@^2.1.4: version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== human-id@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/human-id/-/human-id-1.0.2.tgz#e654d4b2b0d8b07e45da9f6020d8af17ec0a5df3" + resolved "https://registry.npmjs.org/human-id/-/human-id-1.0.2.tgz" integrity sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw== iconv-lite@^0.4.24: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -ignore@^5.0.5: - version "5.1.8" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -ignore@^5.2.0: +ignore@^5.0.5, ignore@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== import-fresh@^3.0.0, import-fresh@^3.2.1: @@ -2170,7 +2129,7 @@ imurmurhash@^0.1.4: indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== inflight@^1.0.4: @@ -2188,7 +2147,7 @@ inherits@2: internal-slot@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== dependencies: get-intrinsic "^1.1.0" @@ -2202,7 +2161,7 @@ is-arrayish@^0.2.1: is-bigint@^1.0.1: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== dependencies: has-bigints "^1.0.1" @@ -2216,7 +2175,7 @@ is-binary-path@~2.1.0: is-boolean-object@^1.1.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" @@ -2224,38 +2183,26 @@ is-boolean-object@^1.1.0: is-builtin-module@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.1.0.tgz#6fdb24313b1c03b75f8b9711c0feb8c30b903b00" + resolved "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz" integrity sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg== dependencies: builtin-modules "^3.0.0" -is-callable@^1.1.4: - version "1.2.3" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== - -is-callable@^1.2.4: +is-callable@^1.1.4, is-callable@^1.2.4: version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== is-ci@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz" integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== dependencies: ci-info "^3.2.0" -is-core-module@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== - dependencies: - has "^1.0.3" - -is-core-module@^2.8.1, is-core-module@^2.9.0: +is-core-module@^2.2.0, is-core-module@^2.8.1, is-core-module@^2.9.0: version "2.9.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz" integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== dependencies: has "^1.0.3" @@ -2267,7 +2214,7 @@ is-date-object@^1.0.1: is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-fullwidth-code-point@^3.0.0: @@ -2275,16 +2222,9 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-glob@^4.0.3: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" @@ -2296,12 +2236,12 @@ is-module@^1.0.0: is-negative-zero@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-object@^1.0.4: version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" @@ -2313,7 +2253,7 @@ is-number@^7.0.0: is-plain-obj@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= is-plain-obj@^2.1.0: @@ -2323,7 +2263,7 @@ is-plain-obj@^2.1.0: is-regex@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" @@ -2331,26 +2271,21 @@ is-regex@^1.1.4: is-shared-array-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== dependencies: call-bind "^1.0.2" -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== - -is-string@^1.0.7: +is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== dependencies: has-tostringtag "^1.0.0" is-subdir@^1.1.1: version "1.2.0" - resolved "https://registry.yarnpkg.com/is-subdir/-/is-subdir-1.2.0.tgz#b791cd28fab5202e91a08280d51d9d7254fd20d4" + resolved "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz" integrity sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw== dependencies: better-path-resolve "1.0.0" @@ -2364,26 +2299,26 @@ is-symbol@^1.0.2: is-symbol@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: has-symbols "^1.0.2" is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== is-weakref@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== dependencies: call-bind "^1.0.2" is-windows@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== isexe@^2.0.0: @@ -2407,7 +2342,7 @@ js-tokens@^4.0.0: js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" @@ -2422,7 +2357,7 @@ js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.6.1: json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: @@ -2444,14 +2379,14 @@ json5@^1.0.1: jsonfile@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= optionalDependencies: graceful-fs "^4.1.6" jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" @@ -2460,7 +2395,7 @@ jsonfile@^6.0.1: jsx-ast-utils@^3.3.2: version "3.3.2" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz#afe5efe4332cd3515c065072bd4d6b0aa22152bd" + resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz" integrity sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q== dependencies: array-includes "^3.1.5" @@ -2468,22 +2403,22 @@ jsx-ast-utils@^3.3.2: kind-of@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== kleur@^4.1.4: version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + resolved "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz" integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== language-subtag-registry@~0.3.2: version "0.3.22" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz" integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== language-tags@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + resolved "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz" integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== dependencies: language-subtag-registry "~0.3.2" @@ -2498,17 +2433,17 @@ levn@^0.4.1: lilconfig@^2.0.3, lilconfig@^2.0.5: version "2.0.6" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz" integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== load-yaml-file@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/load-yaml-file/-/load-yaml-file-0.2.0.tgz#af854edaf2bea89346c07549122753c07372f64d" + resolved "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz" integrity sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw== dependencies: graceful-fs "^4.1.5" @@ -2526,7 +2461,7 @@ locate-path@^2.0.0: locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" @@ -2540,47 +2475,47 @@ locate-path@^6.0.0: lodash.camelcase@4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== lodash.kebabcase@4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + resolved "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz" integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== lodash.memoize@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.snakecase@4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz" integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== lodash.startcase@^4.4.0: version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" + resolved "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz" integrity sha1-lDbjTtJgk+1/+uGTYUQ1CRXZrdg= lodash.uniq@^4.5.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== lodash.upperfirst@4.3.1: version "4.3.1" - resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" + resolved "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz" integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== log-symbols@4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" @@ -2588,7 +2523,7 @@ log-symbols@4.1.0: lru-cache@^4.0.1: version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== dependencies: pseudomap "^1.0.2" @@ -2603,22 +2538,22 @@ lru-cache@^6.0.0: map-obj@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= map-obj@^4.0.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz" integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== mdn-data@2.0.14: version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== meow@^6.0.0: version "6.1.1" - resolved "https://registry.yarnpkg.com/meow/-/meow-6.1.1.tgz#1ad64c4b76b2a24dfb2f635fddcadf320d251467" + resolved "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz" integrity sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg== dependencies: "@types/minimist" "^1.2.0" @@ -2653,7 +2588,7 @@ micromatch@^4.0.2: micromatch@^4.0.4: version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -2661,33 +2596,26 @@ micromatch@^4.0.4: min-indent@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== minimatch@5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz" integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== dependencies: brace-expansion "^2.0.1" -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimist-options@^4.0.2: version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== dependencies: arrify "^1.0.1" @@ -2696,17 +2624,17 @@ minimist-options@^4.0.2: minimist@^1.2.0, minimist@^1.2.6: version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== mixme@^0.5.1: version "0.5.4" - resolved "https://registry.yarnpkg.com/mixme/-/mixme-0.5.4.tgz#8cb3bd0cd32a513c161bf1ca99d143f0bcf2eff3" + resolved "https://registry.npmjs.org/mixme/-/mixme-0.5.4.tgz" integrity sha512-3KYa4m4Vlqx98GPdOHghxSdNtTvcP8E0kkaJ5Dlh+h2DRzF7zpuVVcA8B0QpKd11YJeP9QQ7ASkKzOeu195Wzw== mocha@^10.0.0: version "10.0.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.0.0.tgz#205447d8993ec755335c4b13deba3d3a13c4def9" + resolved "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz" integrity sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA== dependencies: "@ungap/promise-all-settled" "1.1.2" @@ -2749,12 +2677,12 @@ ms@2.1.3, ms@^2.1.1: nanoid@3.3.3: version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== nanoid@^3.3.4: version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz" integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== natural-compare@^1.4.0: @@ -2764,14 +2692,14 @@ natural-compare@^1.4.0: node-fetch@^2.5.0: version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" node-releases@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== normalize-package-data@^2.5.0: @@ -2791,31 +2719,26 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: normalize-range@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== normalize-url@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== nth-check@^2.0.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" -object-inspect@^1.12.0: +object-inspect@^1.12.0, object-inspect@^1.9.0: version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== -object-inspect@^1.9.0: - version "1.9.0" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz" - integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== - object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" @@ -2833,7 +2756,7 @@ object.assign@^4.1.2: object.values@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz" integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== dependencies: call-bind "^1.0.2" @@ -2861,17 +2784,17 @@ optionator@^0.9.1: os-tmpdir@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= outdent@^0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.5.0.tgz#9e10982fdc41492bb473ad13840d22f9655be2ff" + resolved "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz" integrity sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q== p-filter@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" + resolved "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz" integrity sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw== dependencies: p-map "^2.0.0" @@ -2885,7 +2808,7 @@ p-limit@^1.1.0: p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" @@ -2906,7 +2829,7 @@ p-locate@^2.0.0: p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" @@ -2920,7 +2843,7 @@ p-locate@^5.0.0: p-map@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + resolved "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== p-try@^1.0.0: @@ -2930,7 +2853,7 @@ p-try@^1.0.0: p-try@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== parent-module@^1.0.0: @@ -2942,7 +2865,7 @@ parent-module@^1.0.0: parse-json@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -2972,7 +2895,7 @@ path-key@^3.1.0: path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-type@^4.0.0: @@ -2982,7 +2905,7 @@ path-type@^4.0.0: picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2: @@ -2992,36 +2915,36 @@ picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2: picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pkg-dir@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" postcss-attribute-case-insensitive@^5.0.2: version "5.0.2" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741" + resolved "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz" integrity sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ== dependencies: postcss-selector-parser "^6.0.10" postcss-calc@^8.2.3: version "8.2.4" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" + resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz" integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== dependencies: postcss-selector-parser "^6.0.9" @@ -3029,14 +2952,14 @@ postcss-calc@^8.2.3: postcss-clamp@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" + resolved "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz" integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== dependencies: postcss-value-parser "^4.2.0" postcss-cli@^10.0.0: version "10.0.0" - resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-10.0.0.tgz#404e468d1ff39fb5ead3f707e2021be7cd3f8c9f" + resolved "https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.0.0.tgz" integrity sha512-Wjy/00wBBEgQqnSToznxLWDnATznokFGXsHtF/3G8glRZpz5KYlfHcBW/VMJmWAeF2x49zjgy4izjM3/Wx1dKA== dependencies: chokidar "^3.3.0" @@ -3054,28 +2977,28 @@ postcss-cli@^10.0.0: postcss-color-functional-notation@^4.2.4: version "4.2.4" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz#21a909e8d7454d3612d1659e471ce4696f28caec" + resolved "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz" integrity sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg== dependencies: postcss-value-parser "^4.2.0" postcss-color-hex-alpha@^8.0.4: version "8.0.4" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz#c66e2980f2fbc1a63f5b079663340ce8b55f25a5" + resolved "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz" integrity sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ== dependencies: postcss-value-parser "^4.2.0" postcss-color-rebeccapurple@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz#63fdab91d878ebc4dd4b7c02619a0c3d6a56ced0" + resolved "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz" integrity sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg== dependencies: postcss-value-parser "^4.2.0" postcss-colormin@^5.3.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz#3cee9e5ca62b2c27e84fce63affc0cfb5901956a" + resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz" integrity sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg== dependencies: browserslist "^4.16.6" @@ -3085,7 +3008,7 @@ postcss-colormin@^5.3.0: postcss-convert-values@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz#31586df4e184c2e8890e8b34a0b9355313f503ab" + resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz" integrity sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g== dependencies: browserslist "^4.20.3" @@ -3093,55 +3016,55 @@ postcss-convert-values@^5.1.2: postcss-custom-media@^8.0.2: version "8.0.2" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz#c8f9637edf45fef761b014c024cee013f80529ea" + resolved "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz" integrity sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg== dependencies: postcss-value-parser "^4.2.0" postcss-custom-properties@^12.1.8: version "12.1.8" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-12.1.8.tgz#aa003e1885c5bd28e2e32496cd597e389ca889e4" + resolved "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.8.tgz" integrity sha512-8rbj8kVu00RQh2fQF81oBqtduiANu4MIxhyf0HbbStgPtnFlWn0yiaYTpLHrPnJbffVY1s9apWsIoVZcc68FxA== dependencies: postcss-value-parser "^4.2.0" postcss-custom-selectors@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz#1ab4684d65f30fed175520f82d223db0337239d9" + resolved "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz" integrity sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg== dependencies: postcss-selector-parser "^6.0.4" postcss-dir-pseudo-class@^6.0.5: version "6.0.5" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz#2bf31de5de76added44e0a25ecf60ae9f7c7c26c" + resolved "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz" integrity sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA== dependencies: postcss-selector-parser "^6.0.10" postcss-discard-comments@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" + resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz" integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== postcss-discard-duplicates@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" + resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz" integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== postcss-discard-empty@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" + resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz" integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== postcss-discard-overridden@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" + resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz" integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== postcss-double-position-gradients@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz#b96318fdb477be95997e86edd29c6e3557a49b91" + resolved "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz" integrity sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" @@ -3149,45 +3072,45 @@ postcss-double-position-gradients@^3.1.2: postcss-env-function@^4.0.6: version "4.0.6" - resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-4.0.6.tgz#7b2d24c812f540ed6eda4c81f6090416722a8e7a" + resolved "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz" integrity sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA== dependencies: postcss-value-parser "^4.2.0" postcss-focus-visible@^6.0.4: version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz#50c9ea9afa0ee657fb75635fabad25e18d76bf9e" + resolved "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz" integrity sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw== dependencies: postcss-selector-parser "^6.0.9" postcss-focus-within@^5.0.4: version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz#5b1d2ec603195f3344b716c0b75f61e44e8d2e20" + resolved "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz" integrity sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ== dependencies: postcss-selector-parser "^6.0.9" postcss-font-variant@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" + resolved "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz" integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== postcss-gap-properties@^3.0.5: version "3.0.5" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz#f7e3cddcf73ee19e94ccf7cb77773f9560aa2fff" + resolved "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz" integrity sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg== postcss-image-set-function@^4.0.7: version "4.0.7" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz#08353bd756f1cbfb3b6e93182c7829879114481f" + resolved "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz" integrity sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw== dependencies: postcss-value-parser "^4.2.0" postcss-import@^14.1.0: version "14.1.0" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0" + resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz" integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== dependencies: postcss-value-parser "^4.0.0" @@ -3196,12 +3119,12 @@ postcss-import@^14.1.0: postcss-initial@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" + resolved "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz" integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== postcss-lab-function@^4.2.1: version "4.2.1" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz#6fe4c015102ff7cd27d1bd5385582f67ebdbdc98" + resolved "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz" integrity sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" @@ -3209,7 +3132,7 @@ postcss-lab-function@^4.2.1: postcss-load-config@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" + resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz" integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== dependencies: lilconfig "^2.0.5" @@ -3217,17 +3140,17 @@ postcss-load-config@^4.0.0: postcss-logical@^5.0.4: version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-5.0.4.tgz#ec75b1ee54421acc04d5921576b7d8db6b0e6f73" + resolved "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz" integrity sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g== postcss-media-minmax@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz#7140bddec173e2d6d657edbd8554a55794e2a5b5" + resolved "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz" integrity sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ== postcss-merge-longhand@^5.1.6: version "5.1.6" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz#f378a8a7e55766b7b644f48e5d8c789ed7ed51ce" + resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz" integrity sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw== dependencies: postcss-value-parser "^4.2.0" @@ -3235,7 +3158,7 @@ postcss-merge-longhand@^5.1.6: postcss-merge-rules@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz#7049a14d4211045412116d79b751def4484473a5" + resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz" integrity sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ== dependencies: browserslist "^4.16.6" @@ -3245,14 +3168,14 @@ postcss-merge-rules@^5.1.2: postcss-minify-font-values@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" + resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz" integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== dependencies: postcss-value-parser "^4.2.0" postcss-minify-gradients@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" + resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz" integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== dependencies: colord "^2.9.1" @@ -3261,7 +3184,7 @@ postcss-minify-gradients@^5.1.1: postcss-minify-params@^5.1.3: version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz#ac41a6465be2db735099bbd1798d85079a6dc1f9" + resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz" integrity sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg== dependencies: browserslist "^4.16.6" @@ -3270,14 +3193,14 @@ postcss-minify-params@^5.1.3: postcss-minify-selectors@^5.2.1: version "5.2.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" + resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz" integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== dependencies: postcss-selector-parser "^6.0.5" postcss-nesting@^10.1.10: version "10.1.10" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-10.1.10.tgz#9c396df3d8232cbedfa95baaac6b765b8fd2a817" + resolved "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.10.tgz" integrity sha512-lqd7LXCq0gWc0wKXtoKDru5wEUNjm3OryLVNRZ8OnW8km6fSNUuFrjEhU3nklxXE2jvd4qrox566acgh+xQt8w== dependencies: "@csstools/selector-specificity" "^2.0.0" @@ -3285,47 +3208,47 @@ postcss-nesting@^10.1.10: postcss-normalize-charset@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" + resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz" integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== postcss-normalize-display-values@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" + resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz" integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-positions@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" + resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz" integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-repeat-style@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" + resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz" integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-string@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" + resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz" integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-timing-functions@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" + resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz" integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-unicode@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz#3d23aede35e160089a285e27bf715de11dc9db75" + resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz" integrity sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ== dependencies: browserslist "^4.16.6" @@ -3333,7 +3256,7 @@ postcss-normalize-unicode@^5.1.0: postcss-normalize-url@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" + resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz" integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== dependencies: normalize-url "^6.0.1" @@ -3341,19 +3264,19 @@ postcss-normalize-url@^5.1.0: postcss-normalize-whitespace@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" + resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz" integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== dependencies: postcss-value-parser "^4.2.0" postcss-opacity-percentage@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz#bd698bb3670a0a27f6d657cc16744b3ebf3b1145" + resolved "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz" integrity sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w== postcss-ordered-values@^5.1.3: version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" + resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz" integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== dependencies: cssnano-utils "^3.1.0" @@ -3361,26 +3284,26 @@ postcss-ordered-values@^5.1.3: postcss-overflow-shorthand@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz#7ed6486fec44b76f0eab15aa4866cda5d55d893e" + resolved "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz" integrity sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A== dependencies: postcss-value-parser "^4.2.0" postcss-page-break@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" + resolved "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz" integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== postcss-place@^7.0.5: version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-7.0.5.tgz#95dbf85fd9656a3a6e60e832b5809914236986c4" + resolved "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz" integrity sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g== dependencies: postcss-value-parser "^4.2.0" postcss-preset-env@^7.8.0: version "7.8.0" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-7.8.0.tgz#5bd3ad53b2ef02edd41645d1ffee1ff8a49f24e5" + resolved "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.0.tgz" integrity sha512-leqiqLOellpLKfbHkD06E04P6d9ZQ24mat6hu4NSqun7WG0UhspHR5Myiv/510qouCjoo4+YJtNOqg5xHaFnCA== dependencies: "@csstools/postcss-cascade-layers" "^1.0.5" @@ -3435,14 +3358,14 @@ postcss-preset-env@^7.8.0: postcss-pseudo-class-any-link@^7.1.6: version "7.1.6" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz#2693b221902da772c278def85a4d9a64b6e617ab" + resolved "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz" integrity sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w== dependencies: postcss-selector-parser "^6.0.10" postcss-reduce-initial@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz#fc31659ea6e85c492fb2a7b545370c215822c5d6" + resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz" integrity sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw== dependencies: browserslist "^4.16.6" @@ -3450,19 +3373,19 @@ postcss-reduce-initial@^5.1.0: postcss-reduce-transforms@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" + resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz" integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== dependencies: postcss-value-parser "^4.2.0" postcss-replace-overflow-wrap@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" + resolved "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz" integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== postcss-reporter@^7.0.0: version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-7.0.5.tgz#e55bd0fdf8d17e4f25fb55e9143fcd79349a2ceb" + resolved "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.5.tgz" integrity sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA== dependencies: picocolors "^1.0.0" @@ -3470,14 +3393,14 @@ postcss-reporter@^7.0.0: postcss-selector-not@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz#8f0a709bf7d4b45222793fc34409be407537556d" + resolved "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz" integrity sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ== dependencies: postcss-selector-parser "^6.0.10" postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: version "6.0.10" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz" integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== dependencies: cssesc "^3.0.0" @@ -3485,7 +3408,7 @@ postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.4, postcss-selecto postcss-svgo@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" + resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz" integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== dependencies: postcss-value-parser "^4.2.0" @@ -3493,19 +3416,19 @@ postcss-svgo@^5.1.0: postcss-unique-selectors@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" + resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz" integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== dependencies: postcss-selector-parser "^6.0.5" postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss@^8.4.16: version "8.4.16" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz" integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== dependencies: nanoid "^3.3.4" @@ -3514,7 +3437,7 @@ postcss@^8.4.16: preferred-pm@^3.0.0: version "3.0.3" - resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.0.3.tgz#1b6338000371e3edbce52ef2e4f65eb2e73586d6" + resolved "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.0.3.tgz" integrity sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ== dependencies: find-up "^5.0.0" @@ -3536,22 +3459,22 @@ prettier-linter-helpers@^1.0.0: prettier@^1.19.1: version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + resolved "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== prettier@^2.2.1: version "2.7.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== pretty-hrtime@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + resolved "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz" integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A== pseudomap@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= punycode@^2.1.0: @@ -3566,7 +3489,7 @@ queue-microtask@^1.2.2: quick-lru@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== randombytes@^2.1.0: @@ -3578,14 +3501,14 @@ randombytes@^2.1.0: read-cache@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== dependencies: pify "^2.3.0" read-pkg-up@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: find-up "^4.1.0" @@ -3594,7 +3517,7 @@ read-pkg-up@^7.0.1: read-pkg@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: "@types/normalize-package-data" "^2.4.0" @@ -3604,7 +3527,7 @@ read-pkg@^5.2.0: read-yaml-file@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/read-yaml-file/-/read-yaml-file-1.1.0.tgz#9362bbcbdc77007cc8ea4519fe1c0b821a7ce0d8" + resolved "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz" integrity sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA== dependencies: graceful-fs "^4.1.5" @@ -3614,14 +3537,14 @@ read-yaml-file@^1.1.0: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" redent@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== dependencies: indent-string "^4.0.0" @@ -3629,12 +3552,12 @@ redent@^3.0.0: regenerator-runtime@^0.13.4: version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== regexp.prototype.flags@^1.4.3: version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== dependencies: call-bind "^1.0.2" @@ -3643,7 +3566,7 @@ regexp.prototype.flags@^1.4.3: regexpp@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== require-directory@^2.1.1: @@ -3653,7 +3576,7 @@ require-directory@^2.1.1: require-main-filename@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== resolve-from@^4.0.0: @@ -3663,12 +3586,12 @@ resolve-from@^4.0.0: resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve@^1.1.7, resolve@^1.20.0, resolve@^1.22.0: version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: is-core-module "^2.9.0" @@ -3707,7 +3630,7 @@ rollup-plugin-terser@^7.0.2: rollup@^2.77.1: version "2.77.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.1.tgz#63463ebdbc04232fc42630ec72d137cd4400975d" + resolved "https://registry.npmjs.org/rollup/-/rollup-2.77.1.tgz" integrity sha512-GhutNJrvTYD6s1moo+kyq7lD9DeR5HDyXo4bDFlDSkepC9kVKY+KK/NSZFzCmeXeia3kEzVuToQmHRdugyZHxw== optionalDependencies: fsevents "~2.3.2" @@ -3726,7 +3649,7 @@ safe-buffer@^5.1.0: "safer-buffer@>= 2.1.2 < 3": version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== "semver@2 || 3 || 4 || 5", semver@^5.4.1: @@ -3736,19 +3659,19 @@ safe-buffer@^5.1.0: semver@^6.3.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.3.7: version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== dependencies: lru-cache "^6.0.0" serialize-javascript@6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== dependencies: randombytes "^2.1.0" @@ -3762,12 +3685,12 @@ serialize-javascript@^4.0.0: set-blocking@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= shebang-command@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" @@ -3781,7 +3704,7 @@ shebang-command@^2.0.0: shebang-regex@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= shebang-regex@^3.0.0: @@ -3791,7 +3714,7 @@ shebang-regex@^3.0.0: side-channel@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: call-bind "^1.0.0" @@ -3800,7 +3723,7 @@ side-channel@^1.0.4: signal-exit@^3.0.2: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== slash@^3.0.0: @@ -3810,12 +3733,12 @@ slash@^3.0.0: slash@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== smartwrap@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/smartwrap/-/smartwrap-2.0.2.tgz#7e25d3dd58b51c6ca4aba3a9e391650ea62698a4" + resolved "https://registry.npmjs.org/smartwrap/-/smartwrap-2.0.2.tgz" integrity sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA== dependencies: array.prototype.flat "^1.2.3" @@ -3827,7 +3750,7 @@ smartwrap@^2.0.2: source-map-js@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== source-map-support@~0.5.19: @@ -3840,7 +3763,7 @@ source-map-support@~0.5.19: source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@~0.7.2: @@ -3850,7 +3773,7 @@ source-map@~0.7.2: spawndamnit@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/spawndamnit/-/spawndamnit-2.0.0.tgz#9f762ac5c3476abb994b42ad592b5ad22bb4b0ad" + resolved "https://registry.npmjs.org/spawndamnit/-/spawndamnit-2.0.0.tgz" integrity sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA== dependencies: cross-spawn "^5.1.0" @@ -3889,12 +3812,12 @@ sprintf-js@~1.0.2: stable@^0.1.8: version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + resolved "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== stream-transform@^2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/stream-transform/-/stream-transform-2.1.3.tgz#a1c3ecd72ddbf500aa8d342b0b9df38f5aa598e3" + resolved "https://registry.npmjs.org/stream-transform/-/stream-transform-2.1.3.tgz" integrity sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ== dependencies: mixme "^0.5.1" @@ -3910,7 +3833,7 @@ string-width@^4.1.0, string-width@^4.2.0: string-width@^4.2.3: version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -3919,7 +3842,7 @@ string-width@^4.2.3: string.prototype.trimend@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== dependencies: call-bind "^1.0.2" @@ -3928,7 +3851,7 @@ string.prototype.trimend@^1.0.5: string.prototype.trimstart@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== dependencies: call-bind "^1.0.2" @@ -3944,7 +3867,7 @@ strip-ansi@^6.0.0: strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" @@ -3956,7 +3879,7 @@ strip-bom@^3.0.0: strip-indent@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== dependencies: min-indent "^1.0.0" @@ -3968,7 +3891,7 @@ strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1. stylehacks@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.0.tgz#a40066490ca0caca04e96c6b02153ddc39913520" + resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz" integrity sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q== dependencies: browserslist "^4.16.6" @@ -3997,17 +3920,17 @@ supports-color@^7.0.0, supports-color@^7.1.0: supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== svg-element-attributes@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/svg-element-attributes/-/svg-element-attributes-1.3.1.tgz#0c55afac6284291ab563d0913c062cf78a8c0ddb" + resolved "https://registry.npmjs.org/svg-element-attributes/-/svg-element-attributes-1.3.1.tgz" integrity sha512-Bh05dSOnJBf3miNMqpsormfNtfidA/GxQVakhtn0T4DECWKeXQRQUceYjJ+OxYiiLdGe4Jo9iFV8wICFapFeIA== svgo@^2.7.0: version "2.8.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + resolved "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz" integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== dependencies: "@trysound/sax" "0.2.0" @@ -4020,7 +3943,7 @@ svgo@^2.7.0: term-size@^2.1.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" + resolved "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz" integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== terser@^5.0.0: @@ -4039,12 +3962,12 @@ text-table@^0.2.0: thenby@^1.3.4: version "1.3.4" - resolved "https://registry.yarnpkg.com/thenby/-/thenby-1.3.4.tgz#81581f6e1bb324c6dedeae9bfc28e59b1a2201cc" + resolved "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz" integrity sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ== tmp@^0.0.33: version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" @@ -4058,17 +3981,17 @@ to-regex-range@^5.0.1: tr46@~0.0.3: version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= trim-newlines@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== tsconfig-paths@^3.14.1: version "3.14.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz" integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== dependencies: "@types/json5" "^0.0.29" @@ -4083,19 +4006,19 @@ tslib@^1.8.1: tslib@^2.4.0: version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== tsutils@^3.21.0: version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" tty-table@^4.1.5: version "4.1.6" - resolved "https://registry.yarnpkg.com/tty-table/-/tty-table-4.1.6.tgz#6bd58338f36c94cce478c3337934d8a65ab40a73" + resolved "https://registry.npmjs.org/tty-table/-/tty-table-4.1.6.tgz" integrity sha512-kRj5CBzOrakV4VRRY5kUWbNYvo/FpOsz65DzI5op9P+cHov3+IqPbo1JE1ZnQGkHdZgNFDsrEjrfqqy/Ply9fw== dependencies: chalk "^4.1.2" @@ -4115,17 +4038,17 @@ type-check@^0.4.0, type-check@~0.4.0: type-fest@^0.13.1: version "0.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz" integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== type-fest@^0.8.1: @@ -4135,12 +4058,12 @@ type-fest@^0.8.1: typescript@^4.7.4: version "4.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz" integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== unbox-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: call-bind "^1.0.2" @@ -4150,17 +4073,17 @@ unbox-primitive@^1.0.2: universalify@^0.1.0: version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== universalify@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -update-browserslist-db@^1.0.4, update-browserslist-db@^1.0.5: +update-browserslist-db@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz" integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== dependencies: escalade "^3.1.1" @@ -4175,13 +4098,13 @@ uri-js@^4.2.2: util-deprecate@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== v8-compile-cache@^2.0.3: - version "2.2.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz" - integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== validate-npm-package-license@^3.0.1: version "3.0.4" @@ -4193,19 +4116,19 @@ validate-npm-package-license@^3.0.1: wcwidth@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= dependencies: defaults "^1.0.3" webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= dependencies: tr46 "~0.0.3" @@ -4213,7 +4136,7 @@ whatwg-url@^5.0.0: which-boxed-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== dependencies: is-bigint "^1.0.1" @@ -4224,12 +4147,12 @@ which-boxed-primitive@^1.0.2: which-module@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= which-pm@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/which-pm/-/which-pm-2.0.0.tgz#8245609ecfe64bf751d0eef2f376d83bf1ddb7ae" + resolved "https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz" integrity sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w== dependencies: load-yaml-file "^0.2.0" @@ -4237,7 +4160,7 @@ which-pm@2.0.0: which@^1.2.9: version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" @@ -4256,12 +4179,12 @@ word-wrap@^1.2.3: workerpool@6.2.1: version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== wrap-ansi@^6.2.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" @@ -4284,7 +4207,7 @@ wrappy@1: y18n@^4.0.0: version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== y18n@^5.0.5: @@ -4294,7 +4217,7 @@ y18n@^5.0.5: yallist@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= yallist@^4.0.0: @@ -4304,12 +4227,12 @@ yallist@^4.0.0: yaml@^1.10.2: version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yaml@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.1.tgz#1e06fb4ca46e60d9da07e4f786ea370ed3c3cfec" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz" integrity sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw== yargs-parser@20.2.4, yargs-parser@^20.2.2: @@ -4319,7 +4242,7 @@ yargs-parser@20.2.4, yargs-parser@^20.2.2: yargs-parser@^18.1.2, yargs-parser@^18.1.3: version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: camelcase "^5.0.0" @@ -4327,7 +4250,7 @@ yargs-parser@^18.1.2, yargs-parser@^18.1.3: yargs-parser@^21.0.0: version "21.0.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== yargs-unparser@2.0.0: @@ -4355,7 +4278,7 @@ yargs@16.2.0: yargs@^15.1.0: version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== dependencies: cliui "^6.0.0" @@ -4372,7 +4295,7 @@ yargs@^15.1.0: yargs@^17.0.0, yargs@^17.1.1: version "17.5.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz" integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== dependencies: cliui "^7.0.2" From e5157cc34855768715e1de10e9b51520d4e18999 Mon Sep 17 00:00:00 2001 From: Actions Auto Build Date: Thu, 18 Aug 2022 17:42:01 +0000 Subject: [PATCH 02/27] docs: build docs --- static/arguments.yml | 40 ++++++++++++++++++++-------------------- static/audited_at.json | 2 +- static/classes.yml | 15 +++++++++++++++ static/constants.json | 19 ++++++++++++++++--- static/statuses.json | 2 +- 5 files changed, 53 insertions(+), 25 deletions(-) diff --git a/static/arguments.yml b/static/arguments.yml index a27e7eda93..10372d2a23 100644 --- a/static/arguments.yml +++ b/static/arguments.yml @@ -22,21 +22,6 @@ type: Hash default: N/A description: "[System arguments](/system-arguments)" -- component: HiddenTextExpander - source: https://github.com/primer/view_components/tree/main/app/components/primer/alpha/hidden_text_expander.rb - parameters: - - name: inline - type: Boolean - default: "`false`" - description: Whether or not the expander is inline. - - name: button_arguments - type: Hash - default: "`{}`" - description: "[System arguments](/system-arguments) for the button element." - - name: system_arguments - 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: @@ -53,16 +38,31 @@ 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: height + type: Symbol + default: "`:auto`" + description: The height of the dialog. One of `:auto`, `:large`, `:small`, or + `:xlarge`. + - name: system_arguments + type: Hash + default: N/A + description: "[System arguments](/system-arguments)" +- component: HiddenTextExpander + source: https://github.com/primer/view_components/tree/main/app/components/primer/alpha/hidden_text_expander.rb + parameters: + - name: inline + type: Boolean + default: "`false`" + description: Whether or not the expander is inline. + - name: button_arguments + type: Hash + default: "`{}`" + description: "[System arguments](/system-arguments) for the button element." - name: system_arguments type: Hash default: N/A diff --git a/static/audited_at.json b/static/audited_at.json index 78b3af823f..752e84c5ec 100644 --- a/static/audited_at.json +++ b/static/audited_at.json @@ -2,11 +2,11 @@ "Primer::Alpha::AutoComplete": "", "Primer::Alpha::AutoComplete::Item": "", "Primer::Alpha::ButtonMarketing": "", - "Primer::Alpha::HiddenTextExpander": "", "Primer::Alpha::Dialog": "", "Primer::Alpha::Dialog::Body": "", "Primer::Alpha::Dialog::Footer": "", "Primer::Alpha::Dialog::Header": "", + "Primer::Alpha::HiddenTextExpander": "", "Primer::Alpha::Layout": "", "Primer::Alpha::Layout::Main": "", "Primer::Alpha::Layout::Sidebar": "", diff --git a/static/classes.yml b/static/classes.yml index 0d0596eb96..f3f79ba622 100644 --- a/static/classes.yml +++ b/static/classes.yml @@ -70,10 +70,25 @@ - ".Link--secondary" - ".Overlay" - ".Overlay--height-auto" +- ".Overlay--hidden" +- ".Overlay--motion-scaleFade" - ".Overlay--width-auto" +- ".Overlay--width-medium" +- ".Overlay-actionWrap" - ".Overlay-backdrop--anchor" +- ".Overlay-backdrop--center" +- ".Overlay-backdrop--full-whenNarrow" - ".Overlay-body" - ".Overlay-body--paddingNone" +- ".Overlay-closeButton" +- ".Overlay-footer" +- ".Overlay-footer--alignEnd" +- ".Overlay-footer--divided" +- ".Overlay-header" +- ".Overlay-header--divided" +- ".Overlay-headerContentWrap" +- ".Overlay-title" +- ".Overlay-titleWrap" - ".Popover" - ".Popover-message" - ".Popover-message--large" diff --git a/static/constants.json b/static/constants.json index 9e62e86522..b2ea31864b 100644 --- a/static/constants.json +++ b/static/constants.json @@ -38,11 +38,23 @@ "large" ] }, - "Primer::Alpha::HiddenTextExpander": { "Primer::Alpha::Dialog": { "Body": "Primer::Alpha::Dialog::Body", + "DEFAULT_HEIGHT": "auto", "DEFAULT_WIDTH": "medium", "Footer": "Primer::Alpha::Dialog::Footer", + "HEIGHT_MAPPINGS": { + "small": "Overlay--height-small", + "auto": "Overlay--height-auto", + "large": "Overlay--height-large", + "xlarge": "Overlay--height-xlarge" + }, + "HEIGHT_OPTIONS": [ + "small", + "auto", + "large", + "xlarge" + ], "Header": "Primer::Alpha::Dialog::Header", "WIDTH_MAPPINGS": { "small": "Overlay--width-small", @@ -65,6 +77,8 @@ }, "Primer::Alpha::Dialog::Header": { }, + "Primer::Alpha::HiddenTextExpander": { + }, "Primer::Alpha::Layout": { "FIRST_IN_SOURCE_DEFAULT": "sidebar", "FIRST_IN_SOURCE_OPTIONS": [ @@ -466,8 +480,7 @@ "Primer::DetailsComponent": { }, "Primer::Dropdown": { - "Menu": "Primer::Dropdown::Menu", - "MenuTest": "Primer::Dropdown::MenuTest" + "Menu": "Primer::Dropdown::Menu" }, "Primer::Dropdown::Menu": { "AS_DEFAULT": "default", diff --git a/static/statuses.json b/static/statuses.json index 7a226e4b67..3342d1f933 100644 --- a/static/statuses.json +++ b/static/statuses.json @@ -2,11 +2,11 @@ "Primer::Alpha::AutoComplete": "deprecated", "Primer::Alpha::AutoComplete::Item": "deprecated", "Primer::Alpha::ButtonMarketing": "alpha", - "Primer::Alpha::HiddenTextExpander": "alpha", "Primer::Alpha::Dialog": "alpha", "Primer::Alpha::Dialog::Body": "alpha", "Primer::Alpha::Dialog::Footer": "alpha", "Primer::Alpha::Dialog::Header": "alpha", + "Primer::Alpha::HiddenTextExpander": "alpha", "Primer::Alpha::Layout": "alpha", "Primer::Alpha::Layout::Main": "alpha", "Primer::Alpha::Layout::Sidebar": "alpha", From e5dcc097faa7b295c0041ee9a1914c6c02fc1e7c Mon Sep 17 00:00:00 2001 From: Jon Rohan Date: Tue, 23 Aug 2022 04:47:00 +0000 Subject: [PATCH 03/27] auto-correcting rubocop spacing violations --- app/components/primer/alpha/dialog.rb | 9 ++-- stories/primer/alpha/dialog_stories.rb | 4 +- test/previews/primer/alpha/dialog_preview.rb | 51 ++++++++++---------- 3 files changed, 29 insertions(+), 35 deletions(-) diff --git a/app/components/primer/alpha/dialog.rb b/app/components/primer/alpha/dialog.rb index 54cc60a45c..78bd8e2a9e 100644 --- a/app/components/primer/alpha/dialog.rb +++ b/app/components/primer/alpha/dialog.rb @@ -33,7 +33,7 @@ class Dialog < Primer::Component :small => "Overlay--height-small", DEFAULT_HEIGHT => "Overlay--height-auto", :large => "Overlay--height-large", - :xlarge => "Overlay--height-xlarge", + :xlarge => "Overlay--height-xlarge" }.freeze HEIGHT_OPTIONS = HEIGHT_MAPPINGS.keys @@ -128,15 +128,12 @@ def initialize( @system_arguments[:aria] ||= {} @system_arguments[:aria][:describedby] ||= "#{@id}-description" end - end def before_render - with_header() unless header? - with_body() unless body? + with_header unless header? + with_body unless body? end - end end end - diff --git a/stories/primer/alpha/dialog_stories.rb b/stories/primer/alpha/dialog_stories.rb index 97dbbb17ae..2cd09082b4 100644 --- a/stories/primer/alpha/dialog_stories.rb +++ b/stories/primer/alpha/dialog_stories.rb @@ -13,8 +13,6 @@ class Primer::Alpha::DialogStories < ViewComponent::Storybook::Stories href "#" end - content do |c| - - end + content end end diff --git a/test/previews/primer/alpha/dialog_preview.rb b/test/previews/primer/alpha/dialog_preview.rb index f036052a6e..6170a2e2f7 100644 --- a/test/previews/primer/alpha/dialog_preview.rb +++ b/test/previews/primer/alpha/dialog_preview.rb @@ -13,27 +13,27 @@ class DialogPreview < ViewComponent::Preview # @param height [Symbol] select [small, auto, large, xlarge] def default(title: "Test Dialog", subtitle: nil, width: :medium, height: :auto, button_text: "Show Dialog") render(Primer::Alpha::Dialog.new(title: title, width: width, height: height, subtitle: subtitle)) do |d| - d.show_button { button_text } - d.body { "Content" } + d.show_button { button_text } + d.body { "Content" } end end - # @label With Footer - # - # @param title [String] text - # @param subtitle [String] text - # @param button_text [String] text - # @param width [Symbol] select [small, medium, large, xlarge, xxlarge] - # @param height [Symbol] select [small, auto, large, xlarge] - def with_footer(title: "Test Dialog", subtitle: nil, width: :medium, height: :auto, button_text: "Show Dialog") - render_with_template(locals: { - title: title, - subtitle: subtitle, - width: width, - height: height, - button_text: button_text - }) - end + # @label With Footer + # + # @param title [String] text + # @param subtitle [String] text + # @param button_text [String] text + # @param width [Symbol] select [small, medium, large, xlarge, xxlarge] + # @param height [Symbol] select [small, auto, large, xlarge] + def with_footer(title: "Test Dialog", subtitle: nil, width: :medium, height: :auto, button_text: "Show Dialog") + render_with_template(locals: { + title: title, + subtitle: subtitle, + width: width, + height: height, + button_text: button_text + }) + end # @label With a Form # @@ -43,15 +43,14 @@ def with_footer(title: "Test Dialog", subtitle: nil, width: :medium, height: :au # @param width [Symbol] select [small, medium, large, xlarge, xxlarge] # @param height [Symbol] select [small, auto, large, xlarge] def with_form(title: "Test Dialog", subtitle: nil, width: :medium, height: :auto, button_text: "Show Dialog") - render_with_template(locals: { - title: title, - subtitle: subtitle, - width: width, - height: height, - button_text: button_text - }) + render_with_template(locals: { + title: title, + subtitle: subtitle, + width: width, + height: height, + button_text: button_text + }) end end end end - From 916230461e97a8209eccfc71963b38557715e05a Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Wed, 24 Aug 2022 17:07:27 +0100 Subject: [PATCH 04/27] add prettier to devdeps to hoist 2.7.1 version --- package.json | 1 + yarn.lock | 143 +++++++++++++++++++++++++++------------------------ 2 files changed, 76 insertions(+), 68 deletions(-) diff --git a/package.json b/package.json index dd5068364f..75e7dbdb59 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,7 @@ "postcss-cli": "^10.0.0", "postcss-import": "^14.1.0", "postcss-preset-env": "^7.8.0", + "prettier": "2.7.1", "rollup": "^2.77.1", "rollup-plugin-terser": "^7.0.2", "tslib": "^2.4.0", diff --git a/yarn.lock b/yarn.lock index 2f1f4e8e02..c422c6e934 100644 --- a/yarn.lock +++ b/yarn.lock @@ -719,7 +719,7 @@ acorn@^8.8.0: ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -778,7 +778,7 @@ argparse@^1.0.7: argparse@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== aria-query@^4.2.2: @@ -871,7 +871,7 @@ boolbase@^1.0.0: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -933,7 +933,7 @@ call-bind@^1.0.0, call-bind@^1.0.2: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase-keys@^6.2.2: @@ -1044,7 +1044,7 @@ color-convert@^1.9.0: color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" @@ -1056,7 +1056,7 @@ color-name@1.1.3: color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== colord@^2.9.1: @@ -1076,8 +1076,8 @@ commander@^7.2.0: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== core-js-pure@^3.20.2: version "3.24.0" @@ -1095,7 +1095,7 @@ cross-spawn@^5.1.0: cross-spawn@^7.0.2: version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -1353,7 +1353,7 @@ doctrine@^2.1.0: doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" @@ -1713,14 +1713,14 @@ esprima@^4.0.0: esquery@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" @@ -1742,7 +1742,7 @@ estree-walker@^1.0.1: esutils@^2.0.2: version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== extendable-error@^0.1.5: @@ -1761,7 +1761,7 @@ external-editor@^3.1.0: fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: @@ -1782,13 +1782,13 @@ fast-glob@^3.2.11, fast-glob@^3.2.9: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: version "1.11.0" @@ -1844,7 +1844,7 @@ find-yarn-workspace-root2@1.2.16: flat-cache@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: flatted "^3.1.0" @@ -1894,8 +1894,8 @@ fs-extra@^8.1.0: fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: version "2.3.2" @@ -1919,8 +1919,8 @@ function.prototype.name@^1.1.5: functional-red-black-tree@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== functions-have-names@^1.2.2: version "1.2.3" @@ -2058,7 +2058,7 @@ has-flag@^3.0.0: has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: @@ -2116,7 +2116,7 @@ ignore@^5.0.5, ignore@^5.2.0: import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -2124,8 +2124,8 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" @@ -2134,15 +2134,15 @@ indent-string@^4.0.0: inflight@^1.0.4: version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" inherits@2: version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== internal-slot@^1.0.3: @@ -2214,21 +2214,28 @@ is-date-object@^1.0.1: is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: +is-glob@^4.0.0, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + is-module@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz" @@ -2323,8 +2330,8 @@ is-windows@^1.0.0: isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== jest-worker@^26.2.1: version "26.6.2" @@ -2362,13 +2369,13 @@ json-parse-even-better-errors@^2.3.0: json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json5@^1.0.1: version "1.0.1" @@ -2425,7 +2432,7 @@ language-tags@^1.0.5: levn@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -2667,7 +2674,7 @@ ms@2.0.0: ms@2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@2.1.3, ms@^2.1.1: @@ -2687,8 +2694,8 @@ nanoid@^3.3.4: natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== node-fetch@^2.5.0: version "2.6.7" @@ -2765,14 +2772,14 @@ object.values@^1.1.5: once@^1.3.0: version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" optionator@^0.9.1: version "0.9.1" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: deep-is "^0.1.3" @@ -2858,7 +2865,7 @@ p-try@^2.0.0: parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" @@ -2885,12 +2892,12 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6, path-parse@^1.0.7: @@ -3447,7 +3454,7 @@ preferred-pm@^3.0.0: prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier-linter-helpers@^1.0.0: @@ -3457,16 +3464,16 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" +prettier@2.7.1, prettier@^2.2.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + prettier@^1.19.1: version "1.19.1" resolved "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== -prettier@^2.2.1: - version "2.7.1" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== - pretty-hrtime@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz" @@ -3479,7 +3486,7 @@ pseudomap@^1.0.2: punycode@^2.1.0: version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== queue-microtask@^1.2.2: @@ -3581,7 +3588,7 @@ require-main-filename@^2.0.0: resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-from@^5.0.0: @@ -3613,7 +3620,7 @@ reusify@^1.0.4: rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" @@ -3697,7 +3704,7 @@ shebang-command@^1.2.0: shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" @@ -3709,7 +3716,7 @@ shebang-regex@^1.0.0: shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== side-channel@^1.0.4: @@ -3913,7 +3920,7 @@ supports-color@^5.3.0: supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" @@ -3957,8 +3964,8 @@ terser@^5.0.0: text-table@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== thenby@^1.3.4: version "1.3.4" @@ -4031,7 +4038,7 @@ tty-table@^4.1.5: type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" @@ -4091,7 +4098,7 @@ update-browserslist-db@^1.0.5: uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" @@ -4167,14 +4174,14 @@ which@^1.2.9: which@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" word-wrap@^1.2.3: version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== workerpool@6.2.1: @@ -4202,8 +4209,8 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== y18n@^4.0.0: version "4.0.3" From b61a05170cf95aebb099efb5466700bd2281fc88 Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Wed, 24 Aug 2022 17:11:16 +0100 Subject: [PATCH 05/27] fix all prettier issues --- app/components/primer/alpha/modal-dialog-element.ts | 1 - app/components/primer/alpha/toggle-switch-element.ts | 3 ++- app/components/primer/alpha/tool-tip-element.ts | 1 - app/components/primer/clipboard_copy_component.ts | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/components/primer/alpha/modal-dialog-element.ts b/app/components/primer/alpha/modal-dialog-element.ts index 8b937dda71..c1383d60e9 100644 --- a/app/components/primer/alpha/modal-dialog-element.ts +++ b/app/components/primer/alpha/modal-dialog-element.ts @@ -147,4 +147,3 @@ if (!window.customElements.get('modal-dialog')) { window.ModalDialogElement = ModalDialogElement window.customElements.define('modal-dialog', ModalDialogElement) } - diff --git a/app/components/primer/alpha/toggle-switch-element.ts b/app/components/primer/alpha/toggle-switch-element.ts index 519149f6c8..5e8822de67 100644 --- a/app/components/primer/alpha/toggle-switch-element.ts +++ b/app/components/primer/alpha/toggle-switch-element.ts @@ -123,7 +123,8 @@ export class ToggleSwitchElement extends HTMLElement { body.append('value', this.isOn() ? '1' : '0') try { - const response = await fetch(this.src!, { + if (!this.src) throw new Error('invalid src') + const response = await fetch(this.src, { credentials: 'same-origin', method: 'POST', body diff --git a/app/components/primer/alpha/tool-tip-element.ts b/app/components/primer/alpha/tool-tip-element.ts index c2523836f6..04a981731d 100644 --- a/app/components/primer/alpha/tool-tip-element.ts +++ b/app/components/primer/alpha/tool-tip-element.ts @@ -1,4 +1,3 @@ -// eslint-disable-next-line prettier/prettier import type {AnchorAlignment, AnchorSide} from '@primer/behaviors' import {getAnchoredPosition} from '@primer/behaviors' diff --git a/app/components/primer/clipboard_copy_component.ts b/app/components/primer/clipboard_copy_component.ts index ee0335b614..8628247fa5 100644 --- a/app/components/primer/clipboard_copy_component.ts +++ b/app/components/primer/clipboard_copy_component.ts @@ -32,7 +32,7 @@ function showCheck(button: HTMLElement) { const clipboardCopyElementTimers = new WeakMap() -document.addEventListener('clipboard-copy', function({target}) { +document.addEventListener('clipboard-copy', function ({target}) { if (!(target instanceof HTMLElement)) return if (!target.hasAttribute('data-view-component')) return From 18b57608624c7c87c313ce88e834661da48222d3 Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Wed, 24 Aug 2022 17:21:01 +0100 Subject: [PATCH 06/27] flip hide_divider to show_divider --- app/assets/javascripts/primer_view_components.js | 2 +- app/assets/javascripts/primer_view_components.js.map | 2 +- app/components/primer/alpha/dialog.rb | 8 ++++---- app/components/primer/alpha/dialog/footer.rb | 6 +++--- app/components/primer/alpha/dialog/header.rb | 6 +++--- test/components/primer/alpha/dialog_test.rb | 2 +- test/previews/primer/alpha/dialog_preview.rb | 12 ++++++++---- .../primer/alpha/dialog_preview/with_footer.html.erb | 2 +- .../primer/alpha/dialog_preview/with_form.html.erb | 2 +- 9 files changed, 23 insertions(+), 19 deletions(-) diff --git a/app/assets/javascripts/primer_view_components.js b/app/assets/javascripts/primer_view_components.js index 7cf3aa115c..f5a6563226 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(o)[0],n=Array.from(this.list.querySelectorAll('[role="option"]')).filter(o),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 i(t,e){(function(t,e){const n=t.scrollTop,o=n+t.clientHeight,i=e.offsetTop,s=i+e.clientHeight;return i>=n&&s<=o})(t,e)||(t.scrollTop=e.offsetTop)}const s=window.testScreenReaderDelay||100;class r{constructor(t,n,o,i=!1){var s;if(this.container=t,this.input=n,this.results=o,this.combobox=new e(n,o),this.feedback=document.getElementById(`${this.results.id}-feedback`),this.autoselectEnabled=i,this.clearButton=document.getElementById(`${this.input.id||this.input.name}-clear`),this.clientOptions=o.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(...o){clearTimeout(n),n=window.setTimeout((()=>{clearTimeout(n),t(...o)}),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),o=new URLSearchParams(n.search.slice(1));o.append("q",t),n.search=o.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,o=e.length,[i]=e,s=null==i?void 0:i.textContent;this.autoselectEnabled&&s?this.updateFeedbackForScreenReaders(`${o} results. ${s} is the top result: Press Enter to activate.`):this.updateFeedbackForScreenReaders(`${o||"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 o=()=>c.delete(t),i=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 i.then(o,o),i}(t,n)}const u=new WeakMap;class AutocompleteElement 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 o="true"===this.getAttribute("data-autoselect");u.set(this,new r(this,e,n,o)),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 o=u.get(this);if(o)switch(t){case"open":null===n?o.close():o.open();break;case"value":null!==n&&(o.input.value=n),this.dispatchEvent(new a("auto-complete-change",{bubbles:!0,relatedTarget:o.input}))}}}function d(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 h(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),d(n),e.removeChild(n),Promise.resolve()}function f(t){const e=t.getAttribute("for"),n=t.getAttribute("value");function o(){t.dispatchEvent(new CustomEvent("clipboard-copy",{bubbles:!0}))}if(n)h(n).then(o);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&&(i=s,i instanceof HTMLInputElement||i instanceof HTMLTextAreaElement?h(i.value):i instanceof HTMLAnchorElement&&i.hasAttribute("href")?h(i.href):d(i)).then(o)}var i}function m(t){const e=t.currentTarget;e instanceof HTMLElement&&f(e)}function p(t){if(" "===t.key||"Enter"===t.key){const e=t.currentTarget;e instanceof HTMLElement&&(t.preventDefault(),f(e))}}function b(t){t.currentTarget.addEventListener("keydown",p)}function g(t){t.currentTarget.removeEventListener("keydown",p)}window.customElements.get("auto-complete")||(window.AutocompleteElement=AutocompleteElement,window.customElements.define("auto-complete",AutocompleteElement));class ClipboardCopyElement extends HTMLElement{constructor(){super(),this.addEventListener("click",m),this.addEventListener("focus",b),this.addEventListener("blur",g)}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=ClipboardCopyElement,window.customElements.define("clipboard-copy",ClipboardCopyElement));function w(t){t.style.display="inline-block"}function v(t){t.style.display="none"}const E=new WeakMap;function y(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=E.get(t);e?(clearTimeout(e),E.delete(t)):function(t){const[e,n]=t.querySelectorAll(".octicon");e&&n&&(v(e),w(n))}(t),E.set(t,setTimeout((()=>{!function(t){const[e,n]=t.querySelectorAll(".octicon");e&&n&&(w(e),v(n))}(t),E.delete(t)}),2e3))}));class TabContainerElement 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=y(this),o=n.indexOf(n.find((t=>t.matches('[aria-selected="true"]'))));if("ArrowRight"===t.code){let t=o+1;t>=n.length&&(t=0),A(this,t)}else if("ArrowLeft"===t.code){let t=o-1;t<0&&(t=n.length-1),A(this,t)}else"Home"===t.code?(A(this,0),t.preventDefault()):"End"===t.code&&(A(this,n.length-1),t.preventDefault())})),this.addEventListener("click",(t=>{const e=y(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;A(this,e.indexOf(n))}))}connectedCallback(){for(const t of y(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 A(t,e){const n=y(t),o=Array.from(t.querySelectorAll('[role="tabpanel"]')).filter((e=>e.closest(t.tagName)===t)),i=n[e],s=o[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 o)t.hidden=!0,t.hasAttribute("tabindex")||t.hasAttribute("data-tab-container-no-tabstop")||t.setAttribute("tabindex","0");i.setAttribute("aria-selected","true"),i.setAttribute("tabindex","0"),i.focus(),s.hidden=!1,t.dispatchEvent(new CustomEvent("tab-container-changed",{bubbles:!0,detail:{relatedTarget:s}}))}}window.customElements.get("tab-container")||(window.TabContainerElement=TabContainerElement,window.customElements.define("tab-container",TabContainerElement));const T=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],k=["January","February","March","April","May","June","July","August","September","October","November","December"];function L(t){return`0${t}`.slice(-2)}function x(t,e){const n=t.getDay(),o=t.getDate(),i=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 k[i].slice(0,3);case"B":return k[i];case"c":return t.toString();case"d":return L(o);case"e":return String(o);case"H":return L(r);case"I":return L(x(t,"%l"));case"l":return String(0===r||12===r?12:(r+12)%12);case"m":return L(i+1);case"M":return L(a);case"p":return r>11?"PM":"AM";case"P":return r>11?"pm":"am";case"S":return L(c);case"w":return String(n);case"y":return L(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 M(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 C=null;const S=M({day:"numeric",month:"short"});function D(){if(null!==C)return C;const t=S();if(t){const e=t.format(new Date(0));return C=!!e.match(/^\d/),C}return!1}let H=null;const F=M({day:"numeric",month:"short",year:"numeric"});function R(t){const e=t.closest("[lang]");return e instanceof HTMLElement&&e.lang?e.lang:"default"}const $=new WeakMap;class ExtendedTimeElement 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 o=this.getFormattedTitle();if("datetime"===t){const t=Date.parse(n);isNaN(t)?$.delete(this):$.set(this,new Date(t))}const i=this.getFormattedTitle(),s=this.getAttribute("title");"title"===t||!i||s&&s!==o||this.setAttribute("title",i);const r=this.getFormattedDate();r&&(this.textContent=r)}get date(){return $.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=M({day:"numeric",month:"short",year:"numeric",hour:"numeric",minute:"2-digit",timeZoneName:"short"}),I=new WeakMap;class LocalTimeElement extends ExtendedTimeElement{attributeChangedCallback(t,e,n){"hour"!==t&&"minute"!==t&&"second"!==t&&"time-zone-name"!==t||I.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 o=D()?"weekday day month year":"weekday month day, year";for(const e in n){const i=n[e][t.getAttribute(e)||""];o=o.replace(e,i||"")}return o=o.replace(/(\s,)|(,\s$)/,""),x(e,o).replace(/\s+/," ").trim()}(this,t)||""} ${function(t,e){const n={},o=t.getAttribute("hour");"numeric"!==o&&"2-digit"!==o||(n.hour=o);const i=t.getAttribute("minute");"numeric"!==i&&"2-digit"!==i||(n.minute=i);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=I.get(t);a||(a=M(n),I.set(t,a));const c=a();if(c)return c.format(e);return x(e,n.second?"%H:%M:%S":"%H:%M")}(this,t)||""}`.trim()}}window.customElements.get("local-time")||(window.LocalTimeElement=LocalTimeElement,window.customElements.define("local-time",LocalTimeElement));class W{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),o=Math.round(n/60),i=Math.round(o/24);return t>=0&&i<30?this.timeAgoFromMs(t):null}timeAhead(){const t=this.date.getTime()-(new Date).getTime(),e=Math.round(t/1e3),n=Math.round(e/60),o=Math.round(n/60),i=Math.round(o/24);return t>=0&&i<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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return t<0||e<10?q(this.locale,0,"second"):e<45?q(this.locale,-e,"second"):e<90||n<45?q(this.locale,-n,"minute"):n<90||o<24?q(this.locale,-o,"hour"):o<36||i<30?q(this.locale,-i,"day"):s<18?q(this.locale,-s,"month"):q(this.locale,-r,"year")}microTimeAgo(){const t=(new Date).getTime()-this.date.getTime(),e=Math.round(t/1e3),n=Math.round(e/60),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return n<1?"1m":n<60?`${n}m`:o<24?`${o}h`:i<365?`${i}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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return s>=18||s>=12?q(this.locale,r,"year"):i>=45||i>=30?q(this.locale,s,"month"):o>=36||o>=24?q(this.locale,i,"day"):n>=90||n>=45?q(this.locale,o,"hour"):e>=90||e>=45?q(this.locale,n,"minute"):q(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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return i>=365?`${r}y`:o>=24?`${i}d`:n>=60?`${o}h`:n>1?`${n}m`:"1m"}formatDate(){let t=D()?"%e %b":"%b %e";var e;return e=this.date,(new Date).getUTCFullYear()!==e.getUTCFullYear()&&(t+=function(){if(null!==H)return H;const t=F();if(t){const e=t.format(new Date(0));return H=!!e.match(/\d,/),H}return!0}()?", %Y":" %Y"),x(this.date,t)}formatTime(){const t=P();return t?t.format(this.date):x(this.date,"%l:%M%P")}}function q(t,e,n){const o=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 o?o.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=M({hour:"numeric",minute:"2-digit"});class RelativeTimeElement extends ExtendedTimeElement{getFormattedDate(){const t=this.date;if(t)return new W(t,R(this)).toString()}connectedCallback(){N.push(this),B||(Y(),B=window.setInterval(Y,6e4)),super.connectedCallback()}disconnectedCallback(){const t=N.indexOf(this);-1!==t&&N.splice(t,1),N.length||B&&(clearInterval(B),B=null)}}const N=[];let B;function Y(){let t,e,n;for(e=0,n=N.length;e=0&&n.classList.add("nwse"),["ne","sw"].indexOf(e)>=0&&n.classList.add("nesw"),U.set(n,{startX:o.offsetLeft+(["se","ne"].indexOf(e)>=0?0:o.offsetWidth),startY:o.offsetTop+(["se","sw"].indexOf(e)>=0?0:o.offsetHeight)}),z(t)}else n.addEventListener("mousemove",j),n.addEventListener("touchmove",j,{passive:!0})}function _(t,e,n,o=!0){let i=Math.max(Math.abs(e),Math.abs(n),10);const s=U.get(t);if(!s)return;const{box:r,image:a}=K.get(t)||{};if(!r||!a)return;i=Math.min(i,n>0?a.height-s.startY:s.startY,e>0?a.width-s.startX:s.startX);const c=o?Math.round(Math.max(0,e>0?s.startX:s.startX-i)):r.offsetLeft,l=o?Math.round(Math.max(0,n>0?s.startY:s.startY-i)):r.offsetTop;r.style.left=`${c}px`,r.style.top=`${l}px`,r.style.width=`${i}px`,r.style.height=`${i}px`,Q(t,{x:c,y:l,width:i,height:i})}function J(t){const{image:e}=K.get(t)||{};if(!e)return;const n=Math.round(e.clientWidth>e.clientHeight?e.clientHeight:e.clientWidth);U.set(t,{startX:(e.clientWidth-n)/2,startY:(e.clientHeight-n)/2}),_(t,n,n)}function G(t){const e=t.currentTarget;e instanceof ImageCropElement&&(X.delete(e),e.classList.remove("nwse","nesw"),e.removeEventListener("mousemove",z),e.removeEventListener("mousemove",j),e.removeEventListener("touchmove",z),e.removeEventListener("touchmove",j))}function Q(t,e){const{image:n}=K.get(t)||{};if(!n)return;const o=n.naturalWidth/n.width;for(const n in e){const i=Math.round(e[n]*o);e[n]=i;const s=t.querySelector(`[data-image-crop-input='${n}']`);s instanceof HTMLInputElement&&(s.value=i.toString())}t.dispatchEvent(new CustomEvent("image-crop-change",{bubbles:!0,detail:e}))}class ImageCropElement extends HTMLElement{connectedCallback(){if(K.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&&(K.set(this,{box:e,image:n}),n.addEventListener("load",(()=>{this.loaded=!0,J(this)})),this.addEventListener("mouseleave",G),this.addEventListener("touchend",G),this.addEventListener("mouseup",G),e.addEventListener("mousedown",Z),e.addEventListener("touchstart",Z,{passive:!0}),this.addEventListener("keydown",j),this.addEventListener("keydown",z),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:o}=K.get(this)||{};"src"===t&&(this.loaded=!1,o&&(o.src=n))}}window.customElements.get("image-crop")||(window.ImageCropElement=ImageCropElement,window.customElements.define("image-crop",ImageCropElement));class DetailsMenuElement 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=[nt(t,"compositionstart",(t=>ht(this,t))),nt(t,"compositionend",(t=>ht(this,t))),nt(t,"click",(e=>ct(t,e))),nt(t,"change",(e=>ct(t,e))),nt(t,"keydown",(e=>function(t,e,n){if(!(n instanceof KeyboardEvent))return;if(t.querySelector("details[open]"))return;const o=tt.get(e);if(!o||o.isComposing)return;const i=n.target instanceof Element&&"SUMMARY"===n.target.tagName;switch(n.key){case"Escape":t.hasAttribute("open")&&(dt(t),n.preventDefault(),n.stopPropagation());break;case"ArrowDown":{i&&!t.hasAttribute("open")&&t.setAttribute("open","");const e=rt(t,!0);e&&e.focus(),n.preventDefault()}break;case"ArrowUp":{i&&!t.hasAttribute("open")&&t.setAttribute("open","");const e=rt(t,!1);e&&e.focus(),n.preventDefault()}break;case"n":if(at&&n.ctrlKey){const e=rt(t,!0);e&&e.focus(),n.preventDefault()}break;case"p":if(at&&n.ctrlKey){const e=rt(t,!1);e&&e.focus(),n.preventDefault()}break;case" ":case"Enter":{const e=document.activeElement;e instanceof HTMLElement&&ut(e)&&e.closest("details")===t&&(n.preventDefault(),n.stopPropagation(),e.click())}}}(t,this,e))),nt(t,"toggle",(()=>ot(t,this)),{once:!0}),nt(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?nt(t,"mouseover",(()=>ot(t,this)),{once:!0}):et,...it(t)];tt.set(this,{subscriptions:n,loaded:!1,isComposing:!1})}disconnectedCallback(){const t=tt.get(this);if(t){tt.delete(this);for(const e of t.subscriptions)e.unsubscribe()}}}const tt=new WeakMap,et={unsubscribe(){}};function nt(t,e,n,o=!1){return t.addEventListener(e,n,o),{unsubscribe:()=>{t.removeEventListener(e,n,o)}}}function ot(t,e){const n=e.getAttribute("src");if(!n)return;const o=tt.get(e);if(!o)return;if(o.loaded)return;o.loaded=!0;const i=e.querySelector("include-fragment");i&&!i.hasAttribute("src")&&(i.addEventListener("loadend",(()=>st(t))),i.setAttribute("src",n))}function it(t){let e=!1;return[nt(t,"mousedown",(()=>e=!0)),nt(t,"keydown",(()=>e=!1)),nt(t,"toggle",(()=>{t.hasAttribute("open")&&(st(t)||e||function(t){const e=document.activeElement;if(e&&ut(e)&&t.contains(e))return;const n=rt(t,!0);n&&n.focus()}(t))}))]}function st(t){if(!t.hasAttribute("open"))return!1;const e=t.querySelector("details-menu [autofocus]");return!!e&&(e.focus(),!0)}function rt(t,e){const n=Array.from(t.querySelectorAll('[role^="menuitem"]:not([hidden]):not([disabled]):not([aria-disabled="true"])')),o=document.activeElement,i=o instanceof HTMLElement?n.indexOf(o):-1,s=e?n[i+1]:n[i-1],r=e?n[0]:n[n.length-1];return s||r}const at=navigator.userAgent.match(/Macintosh/);function ct(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 o=e.querySelector("input");if("LABEL"===e.tagName&&n===o)return;"LABEL"===e.tagName&&o&&!o.checked||lt(e,t)}else if("change"===e.type){const e=n.closest('[role="menuitemradio"], [role="menuitemcheckbox"]');e&<(e,t)}}function lt(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 o=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(o)n.textContent=o;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 o=(n===t).toString();e instanceof HTMLInputElement&&(o=e.indeterminate?"mixed":e.checked.toString()),n.setAttribute("aria-checked",o)}}(t,e),"menuitemcheckbox"!==t.getAttribute("role")&&dt(e),n.dispatchEvent(new CustomEvent("details-menu-selected",{detail:{relatedTarget:t}})))}function ut(t){const e=t.getAttribute("role");return"menuitem"===e||"menuitemcheckbox"===e||"menuitemradio"===e}function dt(t){if(!t.hasAttribute("open"))return;t.removeAttribute("open");const e=t.querySelector("summary");e&&e.focus()}function ht(t,e){const n=tt.get(t);n&&(n.isComposing="compositionstart"===e.type)}function ft(t,e,n,o){var i,s=arguments.length,r=s<3?e:null===o?o=Object.getOwnPropertyDescriptor(e,n):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,n,o);else for(var a=t.length-1;a>=0;a--)(i=t[a])&&(r=(s<3?i(r):s>3?i(e,n,r):i(e,n))||r);return s>3&&r&&Object.defineProperty(e,n,r),r}function mt(t,e,n,o){if("a"===n&&!o)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?o:"a"===n?o.call(t):o?o.value:e.get(t)}function pt(t,e,n,o,i){if("m"===o)throw new TypeError("Private method is not writable");if("a"===o&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===o?i.call(t,n):i?i.value=n:e.set(t,n),n}window.customElements.get("details-menu")||(window.DetailsMenuElement=DetailsMenuElement,window.customElements.define("details-menu",DetailsMenuElement));const bt=new WeakSet;function gt(t){Et(t),vt(t)}const wt=new WeakMap;function vt(t=document){if(wt.has(t))return wt.get(t);let e=!1;const n=new MutationObserver((t=>{for(const e of t)if("attributes"===e.type&&e.target instanceof Element)Tt(e.target);else if("childList"===e.type&&e.addedNodes.length)for(const t of e.addedNodes)t instanceof Element&&Et(t)}));n.observe(t,{childList:!0,subtree:!0,attributeFilter:["data-action"]});const o={get closed(){return e},unsubscribe(){e=!0,wt.delete(t),n.disconnect()}};return wt.set(t,o),o}function Et(t){for(const e of t.querySelectorAll("[data-action]"))Tt(e);t instanceof Element&&t.hasAttribute("data-action")&&Tt(t)}function yt(t){const e=t.currentTarget;for(const n of At(e))if(t.type===n.type){const o=e.closest(n.tag);bt.has(o)&&"function"==typeof o[n.method]&&o[n.method](t);const i=e.getRootNode();if(i instanceof ShadowRoot&&bt.has(i.host)&&i.host.matches(n.tag)){const e=i.host;"function"==typeof e[n.method]&&e[n.method](t)}}}function*At(t){for(const e of(t.getAttribute("data-action")||"").trim().split(/\s+/)){const t=e.lastIndexOf(":"),n=Math.max(0,e.lastIndexOf("#"))||e.length;yield{type:e.slice(0,t),tag:e.slice(t+1,n),method:e.slice(n+1)||"handleEvent"}||"handleEvent"}}function Tt(t){for(const e of At(t))t.addEventListener(e.type,yt)}const kt=t=>String("symbol"==typeof t?t.description:t).replace(/([A-Z]($|[a-z]))/g,"-$1").replace(/--/g,"-").replace(/^-|-$/,"").toLowerCase(),Lt=(t,e="property")=>{const n=kt(t);if(!n.includes("-"))throw new DOMException(`${e}: ${String(t)} is not a valid ${e} name`,"SyntaxError");return n};const xt=new WeakSet;function Mt(t,e){if(xt.has(t))return;xt.add(t);const n=Object.getPrototypeOf(t),o=n?.constructor?.attrPrefix??"data-";e||(e=Dt(n,"attr"));for(const n of e){const e=t[n],i=Lt(`${o}${n}`);let s={configurable:!0,get(){return this.getAttribute(i)||""},set(t){this.setAttribute(i,t||"")}};"number"==typeof e?s={configurable:!0,get(){return Number(this.getAttribute(i)||0)},set(t){this.setAttribute(i,t)}}:"boolean"==typeof e&&(s={configurable:!0,get(){return this.hasAttribute(i)},set(t){this.toggleAttribute(i,t)}}),Object.defineProperty(t,n,s),n in t&&!t.hasAttribute(i)&&s.set.call(t,e)}}const Ct=Symbol.for("catalyst");class St{constructor(t){const e=this,n=t.prototype.connectedCallback;t.prototype.connectedCallback=function(){e.connectedCallback(this,n)};const o=t.prototype.disconnectedCallback;t.prototype.disconnectedCallback=function(){e.disconnectedCallback(this,o)};const i=t.prototype.attributeChangedCallback;t.prototype.attributeChangedCallback=function(t,n,o){e.attributeChangedCallback(this,t,n,o,i)};let s=t.observedAttributes||[];Object.defineProperty(t,"observedAttributes",{configurable:!0,get(){return e.observedAttributes(this,s)},set(t){s=t}}),function(t){let e=t.observedAttributes||[];const n=t.attrPrefix??"data-",o=t=>Lt(`${n}${t}`);Object.defineProperty(t,"observedAttributes",{configurable:!0,get:()=>[...Dt(t.prototype,"attr")].map(o).concat(e),set(t){e=t}})}(t),function(t){const e=kt(t.name).replace(/-element$/,"");try{window.customElements.define(e,t),window[t.name]=customElements.get(e)}catch(t){if(!(t instanceof DOMException&&"NotSupportedError"===t.name))throw t}}(t)}observedAttributes(t,e){return e}connectedCallback(t,e){t.toggleAttribute("data-catalyst",!0),customElements.upgrade(t),function(t){for(const e of t.querySelectorAll("template[data-shadowroot]"))e.parentElement===t&&t.attachShadow({mode:"closed"===e.getAttribute("data-shadowroot")?"closed":"open"}).append(e.content.cloneNode(!0))}(t),Mt(t),function(t){bt.add(t),t.shadowRoot&>(t.shadowRoot),Et(t),vt(t.ownerDocument)}(t),e?.call(t),t.shadowRoot&>(t.shadowRoot)}disconnectedCallback(t,e){e?.call(t)}attributeChangedCallback(t,e,n,o,i){Mt(t),"data-catalyst"!==e&&i&&i.call(t,e,n,o)}}function Dt(t,e){if(!Object.prototype.hasOwnProperty.call(t,Ct)){const e=t[Ct],n=t[Ct]=new Map;if(e)for(const[t,o]of e)n.set(t,new Set(o))}const n=t[Ct];return n.has(e)||n.set(e,new Set),n.get(e)}function Ht(t,e){Dt(t,"target").add(e),Object.defineProperty(t,e,{configurable:!0,get(){return function(t,e){const n=t.tagName.toLowerCase();if(t.shadowRoot)for(const o of t.shadowRoot.querySelectorAll(`[data-target~="${n}.${e}"]`))if(!o.closest(n))return o;for(const o of t.querySelectorAll(`[data-target~="${n}.${e}"]`))if(o.closest(n)===t)return o}(this,e)}})}function Ft(t,e=0,{start:n=!1,middle:o=!1,once:i=!1}={}){return function(t,e=0,{start:n=!0,middle:o=!0,once:i=!1}={}){let s,r=0,a=!1;function c(...l){if(a)return;const u=Date.now()-r;r=Date.now(),n?(n=!1,t.apply(this,l),i&&c.cancel()):(o&&u{r=Date.now(),t.apply(this,l),i&&c.cancel()}),o?e-u:e))}return c.cancel=()=>{clearTimeout(s),a=!0},c}(t,e,{start:n,middle:o,once:i})}new Promise((t=>{"loading"!==document.readyState?t():document.addEventListener("readystatechange",(()=>t()),{once:!0})})),new Promise((t=>{const e=new AbortController;e.signal.addEventListener("abort",(()=>t()));const n={once:!0,passive:!0,signal:e.signal},o=()=>e.abort();document.addEventListener("mousedown",o,n),document.addEventListener("touchstart",o,n),document.addEventListener("keydown",o,n),document.addEventListener("pointerdown",o,n)}));let Rt=class ToggleSwitchElement extends HTMLElement{get src(){const t=this.getAttribute("src");if(!t)return null;const e=this.ownerDocument.createElement("a");return e.href=t,e.href}get csrf(){const t=this.querySelector("[data-csrf]");return this.getAttribute("csrf")||t instanceof HTMLInputElement&&t.value||null}get csrfField(){return this.getAttribute("csrf-field")||"authenticity_token"}isRemote(){return null!=this.src}toggle(){this.isRemote()?(this.setLoadingState(),this.check()):this.performToggle()}turnOn(){this.isDisabled()||(this.switch.setAttribute("aria-checked","true"),this.classList.add("ToggleSwitch--checked"))}turnOff(){this.isDisabled()||(this.switch.setAttribute("aria-checked","false"),this.classList.remove("ToggleSwitch--checked"))}isOn(){return"true"===this.switch.getAttribute("aria-checked")}isOff(){return!this.isOn()}isDisabled(){return"true"===this.switch.getAttribute("aria-disabled")}disable(){this.switch.setAttribute("aria-disabled","true")}enable(){this.switch.setAttribute("aria-disabled","false")}performToggle(){this.isOn()?this.turnOff():this.turnOn()}setLoadingState(){this.disable(),this.errorIcon.setAttribute("hidden","hidden"),this.loadingSpinner.removeAttribute("hidden")}setSuccessState(){this.setFinishedState(!1)}setErrorState(){this.setFinishedState(!0)}setFinishedState(t){t&&this.errorIcon.removeAttribute("hidden"),this.loadingSpinner.setAttribute("hidden","hidden"),this.enable()}async check(){const t=new FormData;this.csrf&&t.append(this.csrfField,this.csrf),t.append("value",this.isOn()?"1":"0");try{(await fetch(this.src,{credentials:"same-origin",method:"POST",body:t})).ok?(this.setSuccessState(),this.performToggle()):this.setErrorState()}catch(t){this.setErrorState()}}};ft([Ht],Rt.prototype,"switch",void 0),ft([Ht],Rt.prototype,"loadingSpinner",void 0),ft([Ht],Rt.prototype,"errorIcon",void 0),ft([function(t=0,e={}){return(n,o,i)=>{if(!i||"function"!=typeof i.value)throw new Error("debounce can only decorate functions");const s=i.value;i.value=Ft(s,t,e),Object.defineProperty(n,o,i)}}(300)],Rt.prototype,"check",null),Rt=ft([function(t){new St(t)}],Rt);const $t={"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"]},Ot={start:["end","center"],end:["start","center"],center:["end","start"]};function It(t,e,n={}){const o=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),i=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,o=n.getBoundingClientRect(),i=getComputedStyle(n),[s,r,a,c]=[i.borderTopWidth,i.borderLeftWidth,i.borderRightWidth,i.borderBottomWidth].map((t=>parseInt(t,10)||0));return{top:o.top+s,left:o.left+r,width:o.width-a-r,height:Math.max(o.height-s-c,n===document.body?window.innerHeight:-1/0)}}(o),s=getComputedStyle(o),r=o.getBoundingClientRect(),[a,c]=[s.borderTopWidth,s.borderLeftWidth].map((t=>parseInt(t,10)||0));return function(t,e,n,o,{side:i,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=Yt(n,o,i,s,a,c),d=i,h=s;if(u.top-=e.top,u.left-=e.left,!r){const r=$t[i];let f=0;if(r){let t=i;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})}(i,{top:r.top+a,left:r.left+c},t.getBoundingClientRect(),e instanceof Element?e.getBoundingClientRect():e,function(t={}){var e,n,o,i,s;const r=null!==(e=t.side)&&void 0!==e?e:Wt,a=null!==(n=t.align)&&void 0!==n?n:qt;return{side:r,align:a,anchorOffset:null!==(o=t.anchorOffset)&&void 0!==o?o:"inside-center"===r?0:Pt,alignmentOffset:null!==(i=t.alignmentOffset)&&void 0!==i?i:"center"!==a&&r.startsWith("inside")?Nt:0,allowOutOfBounds:null!==(s=t.allowOutOfBounds)&&void 0!==s?s:Bt}}(n))}const Wt="outside-bottom",qt="start",Pt=4,Nt=4,Bt=!1;function Yt(t,e,n,o,i,s){const r=e.left+e.width,a=e.top+e.height;let c=-1,l=-1;return"outside-top"===n?c=e.top-i-t.height:"outside-bottom"===n?c=a+i:"outside-left"===n?l=e.left-i-t.width:"outside-right"===n&&(l=r+i),"outside-top"!==n&&"outside-bottom"!==n||(l="start"===o?e.left+s:"center"===o?e.left-(t.width-e.width)/2+s:r-t.width-s),"outside-left"!==n&&"outside-right"!==n||(c="start"===o?e.top+s:"center"===o?e.top-(t.height-e.height)/2+s:a-t.height-s),"inside-top"===n?c=e.top+i:"inside-bottom"===n?c=a-i-t.height:"inside-left"===n?l=e.left+i:"inside-right"===n?l=r-i-t.width:"inside-center"===n&&(l=(r+e.left)/2-t.width/2+i),"inside-top"===n||"inside-bottom"===n?l="start"===o?e.left+s:"center"===o?e.left-(t.width-e.width)/2+s:r-t.width-s:"inside-left"!==n&&"inside-right"!==n&&"inside-center"!==n||(c="start"===o?e.top+s:"center"===o?e.top-(t.height-e.height)/2+s:a-t.height-s),{top:c,left:l}}function Ut(t,e,n,o){return"outside-top"===t||"outside-bottom"===t?e.topn.height+n.top:e.leftn.width+n.left}function Xt(t,e,n,o){return"end"===t?e.leftn.left+n.width||e.leftt instanceof HTMLElement&&s(t,i)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP});let a=null;if(!e.reverse&&s(t,i)&&(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,i)&&(yield t)}(t,{reverse:e,strict:!0,onlyTabbable:!0}).next().value}function jt(t,e=!1){const n=["BUTTON","INPUT","SELECT","TEXTAREA","OPTGROUP","OPTION","FIELDSET"].includes(t.tagName)&&t.disabled,o=t.hidden,i=t instanceof HTMLInputElement&&"hidden"===t.type,s=t.classList.contains("sentinel");if(n||o||i||s)return!1;if(e){const e=0===t.offsetWidth||0===t.offsetHeight,n=["hidden","collapse"].includes(getComputedStyle(t).visibility),o=0===t.getClientRects().length;if(e||n||o)return!1}return null!=t.getAttribute("tabindex")||!(t instanceof HTMLAnchorElement&&null==t.getAttribute("href"))&&-1!==t.tabIndex}function zt(t,e=!1){return jt(t,e)&&"-1"!==t.getAttribute("tabindex")}let Vt=!1;function Zt(){}try{const t=Object.create({},{signal:{get(){Vt=!0}}});window.addEventListener("test",Zt,t),window.removeEventListener("test",Zt,t)}catch(t){}Vt||(function(){if("undefined"==typeof window)return;const t=EventTarget.prototype.addEventListener;EventTarget.prototype.addEventListener=function(e,n,o){return"object"==typeof o&&"signal"in o&&o.signal instanceof AbortSignal&&t.call(o.signal,"abort",(()=>{this.removeEventListener(e,n,o)})),t.call(this,e,n,o)}}(),Vt=!0);const _t=[];let Jt;function Gt(t,e,n){const o=new AbortController,i=null!=n?n:o.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=Kt(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&&zt(a)&&t.contains(a))return void a.focus();if(e&&t.contains(e))return void e.focus();{const e=Kt(t);return void(null==e||e.focus())}}}r.setAttribute("class","sentinel"),r.setAttribute("tabindex","0"),r.setAttribute("aria-hidden","true"),r.onfocus=()=>{const e=Kt(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}(i);if(Jt){const t=Jt;Jt.container.setAttribute("data-focus-trap","suspended"),Jt.controller.abort(),_t.push(t)}l.signal.addEventListener("abort",(()=>{Jt=void 0})),i.addEventListener("abort",(()=>{t.removeAttribute("data-focus-trap");const e=t.getElementsByClassName("sentinel");for(;e.length>0;)e[0].remove();const n=_t.findIndex((e=>e.container===t));n>=0&&_t.splice(n,1),function(){const t=_t.pop();t&&Gt(t.container,t.initialFocus,t.originalSignal)}()})),document.addEventListener("focus",(t=>{c(t.target)}),{signal:l.signal,capture:!0}),c(document.activeElement),Jt={container:t,controller:l,initialFocus:e,originalSignal:i};const u=_t.findIndex((e=>e.container===t));if(u>=0&&_t.splice(u,1),!n)return o}var Qt,te,ee,ne,oe,ie,se;const re=["tooltip-n","tooltip-s","tooltip-e","tooltip-w","tooltip-ne","tooltip-se","tooltip-nw","tooltip-sw"];class ToolTipElement extends HTMLElement{constructor(){super(...arguments),Qt.add(this),te.set(this,void 0),ee.set(this,"center"),ne.set(this,"outside-bottom"),oe.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)}set hiddenFromView(t){this.classList.toggle("sr-only",t),this.isConnected&&mt(this,Qt,"m",ie).call(this)}get hiddenFromView(){return this.classList.contains("sr-only")}connectedCallback(){var t;if(!this.shadowRoot){this.attachShadow({mode:"open"}).innerHTML=`\n \n \n `}if(this.hiddenFromView=!0,pt(this,oe,!0,"f"),this.id||(this.id=`tooltip-${Date.now()}-${(1e4*Math.random()).toFixed(0)}`),!this.control)return;this.setAttribute("role","tooltip"),null===(t=mt(this,te,"f"))||void 0===t||t.abort(),pt(this,te,new AbortController,"f");const{signal:e}=mt(this,te,"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}),mt(this,Qt,"m",ie).call(this)}disconnectedCallback(){var t;null===(t=mt(this,te,"f"))||void 0===t||t.abort()}handleEvent(t){this.control&&("mouseenter"!==t.type&&"focus"!==t.type||!this.hiddenFromView?"blur"===t.type||"mouseleave"===t.type&&t.relatedTarget!==this.control&&t.relatedTarget!==this?this.hiddenFromView=!0:"keydown"!==t.type||"Escape"!==t.key||this.hiddenFromView||(this.hiddenFromView=!0):this.hiddenFromView=!1)}attributeChangedCallback(t){if("id"===t||"data-type"===t){if(!this.id||!this.control)return;if("label"===this.type){let t=this.control.getAttribute("aria-labelledby");t=t?`${t} ${this.id}`:this.id,this.control.setAttribute("aria-labelledby",t),this.setAttribute("aria-hidden","true")}else{let t=this.control.getAttribute("aria-describedby");t=t?`${t} ${this.id}`:this.id,this.control.setAttribute("aria-describedby",t)}}else if("data-direction"===t){this.classList.remove(...re);const t=this.direction;"n"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-top","f")):"ne"===t?(pt(this,ee,"start","f"),pt(this,ne,"outside-top","f")):"e"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-right","f")):"se"===t?(pt(this,ee,"start","f"),pt(this,ne,"outside-bottom","f")):"s"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-bottom","f")):"sw"===t?(pt(this,ee,"end","f"),pt(this,ne,"outside-bottom","f")):"w"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-left","f")):"nw"===t&&(pt(this,ee,"end","f"),pt(this,ne,"outside-top","f"))}}}var ae,ce,le,ue,de,he,fe;function me(t){document.activeElement!==t&&(null==t||t.focus())}te=new WeakMap,ee=new WeakMap,ne=new WeakMap,oe=new WeakMap,Qt=new WeakSet,ie=function(){if(this.hiddenFromView)this.classList.remove("tooltip-open",...re);else{this.classList.add("tooltip-open");for(const t of this.ownerDocument.querySelectorAll(this.tagName))t!==this&&(t.hiddenFromView=!0);mt(this,Qt,"m",se).call(this)}},se=function(){if(!this.control)return;if(!mt(this,oe,"f")||this.hiddenFromView)return;this.style.left="0px";const t=It(this,this.control,{side:mt(this,ne,"f"),align:mt(this,ee,"f"),anchorOffset:10}),e=t.anchorSide,n=t.anchorAlign;this.style.top=`${t.top}px`,this.style.left=`${t.left}px`;let o="s";o="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-${o}`)},ToolTipElement.observedAttributes=["data-type","data-direction","id"],window.customElements.get("tool-tip")||(window.ToolTipElement=ToolTipElement,window.customElements.define("tool-tip",ToolTipElement));class ModalDialogElement extends HTMLElement{constructor(){super(...arguments),ae.add(this),ce.set(this,new AbortController),le.set(this,null),ue.set(this,void 0),de.set(this,!0)}get open(){return this.hasAttribute("open")}set open(t){var e,n,o,i;if(t){if(this.open)return;this.setAttribute("open",""),null===(e=mt(this,ae,"a",he))||void 0===e||e.classList.remove("Overlay--hidden"),document.body.style.overflow="hidden",mt(this,ce,"f").signal.aborted&&pt(this,ce,new AbortController,"f"),Gt(this,void 0,mt(this,ce,"f").signal)}else{if(!this.open)return;this.removeAttribute("open"),null===(n=mt(this,ae,"a",he))||void 0===n||n.classList.add("Overlay--hidden"),document.body.style.overflow="initial",mt(this,ce,"f").abort();const t=(null===(o=mt(this,ue,"f"))||void 0===o?void 0:o.closest("details"))||(null===(i=mt(this,ue,"f"))||void 0===i?void 0:i.closest("action-menu"));me(t?Kt(t):mt(this,ue,"f")),pt(this,ue,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}=pt(this,le,new AbortController,"f");this.ownerDocument.addEventListener("click",(t=>{const e=t.target,n=e.closest(this.tagName)!==this,o=null==e?void 0:e.closest("button");if(!o)return void(n&&this.close());let i=o.getAttribute("data-close-dialog-id");i===this.id&&this.close(),i=o.getAttribute("data-submit-dialog-id"),i===this.id&&this.close(!0),i=o.getAttribute("data-show-dialog-id"),i===this.id&&(t.stopPropagation(),pt(this,ue,o,"f"),this.show())}),{signal:t}),this.addEventListener("keydown",(t=>mt(this,ae,"m",fe).call(this,t)))}disconnectedCallback(){var t;null===(t=mt(this,le,"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}}ce=new WeakMap,le=new WeakMap,ue=new WeakMap,de=new WeakMap,ae=new WeakSet,he=function(){var t;return(null===(t=this.parentElement)||void 0===t?void 0:t.hasAttribute("data-modal-dialog-overlay"))?this.parentElement:null},fe=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=ModalDialogElement,window.customElements.define("modal-dialog",ModalDialogElement)); +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(o)[0],n=Array.from(this.list.querySelectorAll('[role="option"]')).filter(o),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 i(t,e){(function(t,e){const n=t.scrollTop,o=n+t.clientHeight,i=e.offsetTop,s=i+e.clientHeight;return i>=n&&s<=o})(t,e)||(t.scrollTop=e.offsetTop)}const s=window.testScreenReaderDelay||100;class r{constructor(t,n,o,i=!1){var s;if(this.container=t,this.input=n,this.results=o,this.combobox=new e(n,o),this.feedback=document.getElementById(`${this.results.id}-feedback`),this.autoselectEnabled=i,this.clearButton=document.getElementById(`${this.input.id||this.input.name}-clear`),this.clientOptions=o.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(...o){clearTimeout(n),n=window.setTimeout((()=>{clearTimeout(n),t(...o)}),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),o=new URLSearchParams(n.search.slice(1));o.append("q",t),n.search=o.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,o=e.length,[i]=e,s=null==i?void 0:i.textContent;this.autoselectEnabled&&s?this.updateFeedbackForScreenReaders(`${o} results. ${s} is the top result: Press Enter to activate.`):this.updateFeedbackForScreenReaders(`${o||"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 o=()=>c.delete(t),i=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 i.then(o,o),i}(t,n)}const u=new WeakMap;class AutocompleteElement 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 o="true"===this.getAttribute("data-autoselect");u.set(this,new r(this,e,n,o)),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 o=u.get(this);if(o)switch(t){case"open":null===n?o.close():o.open();break;case"value":null!==n&&(o.input.value=n),this.dispatchEvent(new a("auto-complete-change",{bubbles:!0,relatedTarget:o.input}))}}}function d(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 h(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),d(n),e.removeChild(n),Promise.resolve()}function f(t){const e=t.getAttribute("for"),n=t.getAttribute("value");function o(){t.dispatchEvent(new CustomEvent("clipboard-copy",{bubbles:!0}))}if(n)h(n).then(o);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&&(i=s,i instanceof HTMLInputElement||i instanceof HTMLTextAreaElement?h(i.value):i instanceof HTMLAnchorElement&&i.hasAttribute("href")?h(i.href):d(i)).then(o)}var i}function m(t){const e=t.currentTarget;e instanceof HTMLElement&&f(e)}function p(t){if(" "===t.key||"Enter"===t.key){const e=t.currentTarget;e instanceof HTMLElement&&(t.preventDefault(),f(e))}}function b(t){t.currentTarget.addEventListener("keydown",p)}function g(t){t.currentTarget.removeEventListener("keydown",p)}window.customElements.get("auto-complete")||(window.AutocompleteElement=AutocompleteElement,window.customElements.define("auto-complete",AutocompleteElement));class ClipboardCopyElement extends HTMLElement{constructor(){super(),this.addEventListener("click",m),this.addEventListener("focus",b),this.addEventListener("blur",g)}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=ClipboardCopyElement,window.customElements.define("clipboard-copy",ClipboardCopyElement));function w(t){t.style.display="inline-block"}function v(t){t.style.display="none"}const E=new WeakMap;function y(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=E.get(t);e?(clearTimeout(e),E.delete(t)):function(t){const[e,n]=t.querySelectorAll(".octicon");e&&n&&(v(e),w(n))}(t),E.set(t,setTimeout((()=>{!function(t){const[e,n]=t.querySelectorAll(".octicon");e&&n&&(w(e),v(n))}(t),E.delete(t)}),2e3))}));class TabContainerElement 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=y(this),o=n.indexOf(n.find((t=>t.matches('[aria-selected="true"]'))));if("ArrowRight"===t.code){let t=o+1;t>=n.length&&(t=0),A(this,t)}else if("ArrowLeft"===t.code){let t=o-1;t<0&&(t=n.length-1),A(this,t)}else"Home"===t.code?(A(this,0),t.preventDefault()):"End"===t.code&&(A(this,n.length-1),t.preventDefault())})),this.addEventListener("click",(t=>{const e=y(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;A(this,e.indexOf(n))}))}connectedCallback(){for(const t of y(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 A(t,e){const n=y(t),o=Array.from(t.querySelectorAll('[role="tabpanel"]')).filter((e=>e.closest(t.tagName)===t)),i=n[e],s=o[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 o)t.hidden=!0,t.hasAttribute("tabindex")||t.hasAttribute("data-tab-container-no-tabstop")||t.setAttribute("tabindex","0");i.setAttribute("aria-selected","true"),i.setAttribute("tabindex","0"),i.focus(),s.hidden=!1,t.dispatchEvent(new CustomEvent("tab-container-changed",{bubbles:!0,detail:{relatedTarget:s}}))}}window.customElements.get("tab-container")||(window.TabContainerElement=TabContainerElement,window.customElements.define("tab-container",TabContainerElement));const T=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],k=["January","February","March","April","May","June","July","August","September","October","November","December"];function L(t){return`0${t}`.slice(-2)}function x(t,e){const n=t.getDay(),o=t.getDate(),i=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 k[i].slice(0,3);case"B":return k[i];case"c":return t.toString();case"d":return L(o);case"e":return String(o);case"H":return L(r);case"I":return L(x(t,"%l"));case"l":return String(0===r||12===r?12:(r+12)%12);case"m":return L(i+1);case"M":return L(a);case"p":return r>11?"PM":"AM";case"P":return r>11?"pm":"am";case"S":return L(c);case"w":return String(n);case"y":return L(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 M(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 C=null;const S=M({day:"numeric",month:"short"});function D(){if(null!==C)return C;const t=S();if(t){const e=t.format(new Date(0));return C=!!e.match(/^\d/),C}return!1}let H=null;const F=M({day:"numeric",month:"short",year:"numeric"});function R(t){const e=t.closest("[lang]");return e instanceof HTMLElement&&e.lang?e.lang:"default"}const $=new WeakMap;class ExtendedTimeElement 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 o=this.getFormattedTitle();if("datetime"===t){const t=Date.parse(n);isNaN(t)?$.delete(this):$.set(this,new Date(t))}const i=this.getFormattedTitle(),s=this.getAttribute("title");"title"===t||!i||s&&s!==o||this.setAttribute("title",i);const r=this.getFormattedDate();r&&(this.textContent=r)}get date(){return $.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=M({day:"numeric",month:"short",year:"numeric",hour:"numeric",minute:"2-digit",timeZoneName:"short"}),I=new WeakMap;class LocalTimeElement extends ExtendedTimeElement{attributeChangedCallback(t,e,n){"hour"!==t&&"minute"!==t&&"second"!==t&&"time-zone-name"!==t||I.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 o=D()?"weekday day month year":"weekday month day, year";for(const e in n){const i=n[e][t.getAttribute(e)||""];o=o.replace(e,i||"")}return o=o.replace(/(\s,)|(,\s$)/,""),x(e,o).replace(/\s+/," ").trim()}(this,t)||""} ${function(t,e){const n={},o=t.getAttribute("hour");"numeric"!==o&&"2-digit"!==o||(n.hour=o);const i=t.getAttribute("minute");"numeric"!==i&&"2-digit"!==i||(n.minute=i);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=I.get(t);a||(a=M(n),I.set(t,a));const c=a();if(c)return c.format(e);return x(e,n.second?"%H:%M:%S":"%H:%M")}(this,t)||""}`.trim()}}window.customElements.get("local-time")||(window.LocalTimeElement=LocalTimeElement,window.customElements.define("local-time",LocalTimeElement));class W{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),o=Math.round(n/60),i=Math.round(o/24);return t>=0&&i<30?this.timeAgoFromMs(t):null}timeAhead(){const t=this.date.getTime()-(new Date).getTime(),e=Math.round(t/1e3),n=Math.round(e/60),o=Math.round(n/60),i=Math.round(o/24);return t>=0&&i<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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return t<0||e<10?q(this.locale,0,"second"):e<45?q(this.locale,-e,"second"):e<90||n<45?q(this.locale,-n,"minute"):n<90||o<24?q(this.locale,-o,"hour"):o<36||i<30?q(this.locale,-i,"day"):s<18?q(this.locale,-s,"month"):q(this.locale,-r,"year")}microTimeAgo(){const t=(new Date).getTime()-this.date.getTime(),e=Math.round(t/1e3),n=Math.round(e/60),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return n<1?"1m":n<60?`${n}m`:o<24?`${o}h`:i<365?`${i}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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return s>=18||s>=12?q(this.locale,r,"year"):i>=45||i>=30?q(this.locale,s,"month"):o>=36||o>=24?q(this.locale,i,"day"):n>=90||n>=45?q(this.locale,o,"hour"):e>=90||e>=45?q(this.locale,n,"minute"):q(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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return i>=365?`${r}y`:o>=24?`${i}d`:n>=60?`${o}h`:n>1?`${n}m`:"1m"}formatDate(){let t=D()?"%e %b":"%b %e";var e;return e=this.date,(new Date).getUTCFullYear()!==e.getUTCFullYear()&&(t+=function(){if(null!==H)return H;const t=F();if(t){const e=t.format(new Date(0));return H=!!e.match(/\d,/),H}return!0}()?", %Y":" %Y"),x(this.date,t)}formatTime(){const t=P();return t?t.format(this.date):x(this.date,"%l:%M%P")}}function q(t,e,n){const o=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 o?o.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=M({hour:"numeric",minute:"2-digit"});class RelativeTimeElement extends ExtendedTimeElement{getFormattedDate(){const t=this.date;if(t)return new W(t,R(this)).toString()}connectedCallback(){N.push(this),B||(Y(),B=window.setInterval(Y,6e4)),super.connectedCallback()}disconnectedCallback(){const t=N.indexOf(this);-1!==t&&N.splice(t,1),N.length||B&&(clearInterval(B),B=null)}}const N=[];let B;function Y(){let t,e,n;for(e=0,n=N.length;e=0&&n.classList.add("nwse"),["ne","sw"].indexOf(e)>=0&&n.classList.add("nesw"),U.set(n,{startX:o.offsetLeft+(["se","ne"].indexOf(e)>=0?0:o.offsetWidth),startY:o.offsetTop+(["se","sw"].indexOf(e)>=0?0:o.offsetHeight)}),z(t)}else n.addEventListener("mousemove",j),n.addEventListener("touchmove",j,{passive:!0})}function _(t,e,n,o=!0){let i=Math.max(Math.abs(e),Math.abs(n),10);const s=U.get(t);if(!s)return;const{box:r,image:a}=K.get(t)||{};if(!r||!a)return;i=Math.min(i,n>0?a.height-s.startY:s.startY,e>0?a.width-s.startX:s.startX);const c=o?Math.round(Math.max(0,e>0?s.startX:s.startX-i)):r.offsetLeft,l=o?Math.round(Math.max(0,n>0?s.startY:s.startY-i)):r.offsetTop;r.style.left=`${c}px`,r.style.top=`${l}px`,r.style.width=`${i}px`,r.style.height=`${i}px`,Q(t,{x:c,y:l,width:i,height:i})}function J(t){const{image:e}=K.get(t)||{};if(!e)return;const n=Math.round(e.clientWidth>e.clientHeight?e.clientHeight:e.clientWidth);U.set(t,{startX:(e.clientWidth-n)/2,startY:(e.clientHeight-n)/2}),_(t,n,n)}function G(t){const e=t.currentTarget;e instanceof ImageCropElement&&(X.delete(e),e.classList.remove("nwse","nesw"),e.removeEventListener("mousemove",z),e.removeEventListener("mousemove",j),e.removeEventListener("touchmove",z),e.removeEventListener("touchmove",j))}function Q(t,e){const{image:n}=K.get(t)||{};if(!n)return;const o=n.naturalWidth/n.width;for(const n in e){const i=Math.round(e[n]*o);e[n]=i;const s=t.querySelector(`[data-image-crop-input='${n}']`);s instanceof HTMLInputElement&&(s.value=i.toString())}t.dispatchEvent(new CustomEvent("image-crop-change",{bubbles:!0,detail:e}))}class ImageCropElement extends HTMLElement{connectedCallback(){if(K.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&&(K.set(this,{box:e,image:n}),n.addEventListener("load",(()=>{this.loaded=!0,J(this)})),this.addEventListener("mouseleave",G),this.addEventListener("touchend",G),this.addEventListener("mouseup",G),e.addEventListener("mousedown",Z),e.addEventListener("touchstart",Z,{passive:!0}),this.addEventListener("keydown",j),this.addEventListener("keydown",z),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:o}=K.get(this)||{};"src"===t&&(this.loaded=!1,o&&(o.src=n))}}window.customElements.get("image-crop")||(window.ImageCropElement=ImageCropElement,window.customElements.define("image-crop",ImageCropElement));class DetailsMenuElement 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=[nt(t,"compositionstart",(t=>ht(this,t))),nt(t,"compositionend",(t=>ht(this,t))),nt(t,"click",(e=>ct(t,e))),nt(t,"change",(e=>ct(t,e))),nt(t,"keydown",(e=>function(t,e,n){if(!(n instanceof KeyboardEvent))return;if(t.querySelector("details[open]"))return;const o=tt.get(e);if(!o||o.isComposing)return;const i=n.target instanceof Element&&"SUMMARY"===n.target.tagName;switch(n.key){case"Escape":t.hasAttribute("open")&&(dt(t),n.preventDefault(),n.stopPropagation());break;case"ArrowDown":{i&&!t.hasAttribute("open")&&t.setAttribute("open","");const e=rt(t,!0);e&&e.focus(),n.preventDefault()}break;case"ArrowUp":{i&&!t.hasAttribute("open")&&t.setAttribute("open","");const e=rt(t,!1);e&&e.focus(),n.preventDefault()}break;case"n":if(at&&n.ctrlKey){const e=rt(t,!0);e&&e.focus(),n.preventDefault()}break;case"p":if(at&&n.ctrlKey){const e=rt(t,!1);e&&e.focus(),n.preventDefault()}break;case" ":case"Enter":{const e=document.activeElement;e instanceof HTMLElement&&ut(e)&&e.closest("details")===t&&(n.preventDefault(),n.stopPropagation(),e.click())}}}(t,this,e))),nt(t,"toggle",(()=>ot(t,this)),{once:!0}),nt(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?nt(t,"mouseover",(()=>ot(t,this)),{once:!0}):et,...it(t)];tt.set(this,{subscriptions:n,loaded:!1,isComposing:!1})}disconnectedCallback(){const t=tt.get(this);if(t){tt.delete(this);for(const e of t.subscriptions)e.unsubscribe()}}}const tt=new WeakMap,et={unsubscribe(){}};function nt(t,e,n,o=!1){return t.addEventListener(e,n,o),{unsubscribe:()=>{t.removeEventListener(e,n,o)}}}function ot(t,e){const n=e.getAttribute("src");if(!n)return;const o=tt.get(e);if(!o)return;if(o.loaded)return;o.loaded=!0;const i=e.querySelector("include-fragment");i&&!i.hasAttribute("src")&&(i.addEventListener("loadend",(()=>st(t))),i.setAttribute("src",n))}function it(t){let e=!1;return[nt(t,"mousedown",(()=>e=!0)),nt(t,"keydown",(()=>e=!1)),nt(t,"toggle",(()=>{t.hasAttribute("open")&&(st(t)||e||function(t){const e=document.activeElement;if(e&&ut(e)&&t.contains(e))return;const n=rt(t,!0);n&&n.focus()}(t))}))]}function st(t){if(!t.hasAttribute("open"))return!1;const e=t.querySelector("details-menu [autofocus]");return!!e&&(e.focus(),!0)}function rt(t,e){const n=Array.from(t.querySelectorAll('[role^="menuitem"]:not([hidden]):not([disabled]):not([aria-disabled="true"])')),o=document.activeElement,i=o instanceof HTMLElement?n.indexOf(o):-1,s=e?n[i+1]:n[i-1],r=e?n[0]:n[n.length-1];return s||r}const at=navigator.userAgent.match(/Macintosh/);function ct(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 o=e.querySelector("input");if("LABEL"===e.tagName&&n===o)return;"LABEL"===e.tagName&&o&&!o.checked||lt(e,t)}else if("change"===e.type){const e=n.closest('[role="menuitemradio"], [role="menuitemcheckbox"]');e&<(e,t)}}function lt(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 o=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(o)n.textContent=o;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 o=(n===t).toString();e instanceof HTMLInputElement&&(o=e.indeterminate?"mixed":e.checked.toString()),n.setAttribute("aria-checked",o)}}(t,e),"menuitemcheckbox"!==t.getAttribute("role")&&dt(e),n.dispatchEvent(new CustomEvent("details-menu-selected",{detail:{relatedTarget:t}})))}function ut(t){const e=t.getAttribute("role");return"menuitem"===e||"menuitemcheckbox"===e||"menuitemradio"===e}function dt(t){if(!t.hasAttribute("open"))return;t.removeAttribute("open");const e=t.querySelector("summary");e&&e.focus()}function ht(t,e){const n=tt.get(t);n&&(n.isComposing="compositionstart"===e.type)}function ft(t,e,n,o){var i,s=arguments.length,r=s<3?e:null===o?o=Object.getOwnPropertyDescriptor(e,n):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,n,o);else for(var a=t.length-1;a>=0;a--)(i=t[a])&&(r=(s<3?i(r):s>3?i(e,n,r):i(e,n))||r);return s>3&&r&&Object.defineProperty(e,n,r),r}function mt(t,e,n,o){if("a"===n&&!o)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?o:"a"===n?o.call(t):o?o.value:e.get(t)}function pt(t,e,n,o,i){if("m"===o)throw new TypeError("Private method is not writable");if("a"===o&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===o?i.call(t,n):i?i.value=n:e.set(t,n),n}window.customElements.get("details-menu")||(window.DetailsMenuElement=DetailsMenuElement,window.customElements.define("details-menu",DetailsMenuElement));const bt=new WeakSet;function gt(t){Et(t),vt(t)}const wt=new WeakMap;function vt(t=document){if(wt.has(t))return wt.get(t);let e=!1;const n=new MutationObserver((t=>{for(const e of t)if("attributes"===e.type&&e.target instanceof Element)Tt(e.target);else if("childList"===e.type&&e.addedNodes.length)for(const t of e.addedNodes)t instanceof Element&&Et(t)}));n.observe(t,{childList:!0,subtree:!0,attributeFilter:["data-action"]});const o={get closed(){return e},unsubscribe(){e=!0,wt.delete(t),n.disconnect()}};return wt.set(t,o),o}function Et(t){for(const e of t.querySelectorAll("[data-action]"))Tt(e);t instanceof Element&&t.hasAttribute("data-action")&&Tt(t)}function yt(t){const e=t.currentTarget;for(const n of At(e))if(t.type===n.type){const o=e.closest(n.tag);bt.has(o)&&"function"==typeof o[n.method]&&o[n.method](t);const i=e.getRootNode();if(i instanceof ShadowRoot&&bt.has(i.host)&&i.host.matches(n.tag)){const e=i.host;"function"==typeof e[n.method]&&e[n.method](t)}}}function*At(t){for(const e of(t.getAttribute("data-action")||"").trim().split(/\s+/)){const t=e.lastIndexOf(":"),n=Math.max(0,e.lastIndexOf("#"))||e.length;yield{type:e.slice(0,t),tag:e.slice(t+1,n),method:e.slice(n+1)||"handleEvent"}||"handleEvent"}}function Tt(t){for(const e of At(t))t.addEventListener(e.type,yt)}const kt=t=>String("symbol"==typeof t?t.description:t).replace(/([A-Z]($|[a-z]))/g,"-$1").replace(/--/g,"-").replace(/^-|-$/,"").toLowerCase(),Lt=(t,e="property")=>{const n=kt(t);if(!n.includes("-"))throw new DOMException(`${e}: ${String(t)} is not a valid ${e} name`,"SyntaxError");return n};const xt=new WeakSet;function Mt(t,e){if(xt.has(t))return;xt.add(t);const n=Object.getPrototypeOf(t),o=n?.constructor?.attrPrefix??"data-";e||(e=Dt(n,"attr"));for(const n of e){const e=t[n],i=Lt(`${o}${n}`);let s={configurable:!0,get(){return this.getAttribute(i)||""},set(t){this.setAttribute(i,t||"")}};"number"==typeof e?s={configurable:!0,get(){return Number(this.getAttribute(i)||0)},set(t){this.setAttribute(i,t)}}:"boolean"==typeof e&&(s={configurable:!0,get(){return this.hasAttribute(i)},set(t){this.toggleAttribute(i,t)}}),Object.defineProperty(t,n,s),n in t&&!t.hasAttribute(i)&&s.set.call(t,e)}}const Ct=Symbol.for("catalyst");class St{constructor(t){const e=this,n=t.prototype.connectedCallback;t.prototype.connectedCallback=function(){e.connectedCallback(this,n)};const o=t.prototype.disconnectedCallback;t.prototype.disconnectedCallback=function(){e.disconnectedCallback(this,o)};const i=t.prototype.attributeChangedCallback;t.prototype.attributeChangedCallback=function(t,n,o){e.attributeChangedCallback(this,t,n,o,i)};let s=t.observedAttributes||[];Object.defineProperty(t,"observedAttributes",{configurable:!0,get(){return e.observedAttributes(this,s)},set(t){s=t}}),function(t){let e=t.observedAttributes||[];const n=t.attrPrefix??"data-",o=t=>Lt(`${n}${t}`);Object.defineProperty(t,"observedAttributes",{configurable:!0,get:()=>[...Dt(t.prototype,"attr")].map(o).concat(e),set(t){e=t}})}(t),function(t){const e=kt(t.name).replace(/-element$/,"");try{window.customElements.define(e,t),window[t.name]=customElements.get(e)}catch(t){if(!(t instanceof DOMException&&"NotSupportedError"===t.name))throw t}}(t)}observedAttributes(t,e){return e}connectedCallback(t,e){t.toggleAttribute("data-catalyst",!0),customElements.upgrade(t),function(t){for(const e of t.querySelectorAll("template[data-shadowroot]"))e.parentElement===t&&t.attachShadow({mode:"closed"===e.getAttribute("data-shadowroot")?"closed":"open"}).append(e.content.cloneNode(!0))}(t),Mt(t),function(t){bt.add(t),t.shadowRoot&>(t.shadowRoot),Et(t),vt(t.ownerDocument)}(t),e?.call(t),t.shadowRoot&>(t.shadowRoot)}disconnectedCallback(t,e){e?.call(t)}attributeChangedCallback(t,e,n,o,i){Mt(t),"data-catalyst"!==e&&i&&i.call(t,e,n,o)}}function Dt(t,e){if(!Object.prototype.hasOwnProperty.call(t,Ct)){const e=t[Ct],n=t[Ct]=new Map;if(e)for(const[t,o]of e)n.set(t,new Set(o))}const n=t[Ct];return n.has(e)||n.set(e,new Set),n.get(e)}function Ht(t,e){Dt(t,"target").add(e),Object.defineProperty(t,e,{configurable:!0,get(){return function(t,e){const n=t.tagName.toLowerCase();if(t.shadowRoot)for(const o of t.shadowRoot.querySelectorAll(`[data-target~="${n}.${e}"]`))if(!o.closest(n))return o;for(const o of t.querySelectorAll(`[data-target~="${n}.${e}"]`))if(o.closest(n)===t)return o}(this,e)}})}function Ft(t,e=0,{start:n=!1,middle:o=!1,once:i=!1}={}){return function(t,e=0,{start:n=!0,middle:o=!0,once:i=!1}={}){let s,r=0,a=!1;function c(...l){if(a)return;const u=Date.now()-r;r=Date.now(),n?(n=!1,t.apply(this,l),i&&c.cancel()):(o&&u{r=Date.now(),t.apply(this,l),i&&c.cancel()}),o?e-u:e))}return c.cancel=()=>{clearTimeout(s),a=!0},c}(t,e,{start:n,middle:o,once:i})}new Promise((t=>{"loading"!==document.readyState?t():document.addEventListener("readystatechange",(()=>t()),{once:!0})})),new Promise((t=>{const e=new AbortController;e.signal.addEventListener("abort",(()=>t()));const n={once:!0,passive:!0,signal:e.signal},o=()=>e.abort();document.addEventListener("mousedown",o,n),document.addEventListener("touchstart",o,n),document.addEventListener("keydown",o,n),document.addEventListener("pointerdown",o,n)}));let Rt=class ToggleSwitchElement extends HTMLElement{get src(){const t=this.getAttribute("src");if(!t)return null;const e=this.ownerDocument.createElement("a");return e.href=t,e.href}get csrf(){const t=this.querySelector("[data-csrf]");return this.getAttribute("csrf")||t instanceof HTMLInputElement&&t.value||null}get csrfField(){return this.getAttribute("csrf-field")||"authenticity_token"}isRemote(){return null!=this.src}toggle(){this.isRemote()?(this.setLoadingState(),this.check()):this.performToggle()}turnOn(){this.isDisabled()||(this.switch.setAttribute("aria-checked","true"),this.classList.add("ToggleSwitch--checked"))}turnOff(){this.isDisabled()||(this.switch.setAttribute("aria-checked","false"),this.classList.remove("ToggleSwitch--checked"))}isOn(){return"true"===this.switch.getAttribute("aria-checked")}isOff(){return!this.isOn()}isDisabled(){return"true"===this.switch.getAttribute("aria-disabled")}disable(){this.switch.setAttribute("aria-disabled","true")}enable(){this.switch.setAttribute("aria-disabled","false")}performToggle(){this.isOn()?this.turnOff():this.turnOn()}setLoadingState(){this.disable(),this.errorIcon.setAttribute("hidden","hidden"),this.loadingSpinner.removeAttribute("hidden")}setSuccessState(){this.setFinishedState(!1)}setErrorState(){this.setFinishedState(!0)}setFinishedState(t){t&&this.errorIcon.removeAttribute("hidden"),this.loadingSpinner.setAttribute("hidden","hidden"),this.enable()}async check(){const t=new FormData;this.csrf&&t.append(this.csrfField,this.csrf),t.append("value",this.isOn()?"1":"0");try{if(!this.src)throw new Error("invalid src");(await fetch(this.src,{credentials:"same-origin",method:"POST",body:t})).ok?(this.setSuccessState(),this.performToggle()):this.setErrorState()}catch(t){this.setErrorState()}}};ft([Ht],Rt.prototype,"switch",void 0),ft([Ht],Rt.prototype,"loadingSpinner",void 0),ft([Ht],Rt.prototype,"errorIcon",void 0),ft([function(t=0,e={}){return(n,o,i)=>{if(!i||"function"!=typeof i.value)throw new Error("debounce can only decorate functions");const s=i.value;i.value=Ft(s,t,e),Object.defineProperty(n,o,i)}}(300)],Rt.prototype,"check",null),Rt=ft([function(t){new St(t)}],Rt);const $t={"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"]},Ot={start:["end","center"],end:["start","center"],center:["end","start"]};function It(t,e,n={}){const o=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),i=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,o=n.getBoundingClientRect(),i=getComputedStyle(n),[s,r,a,c]=[i.borderTopWidth,i.borderLeftWidth,i.borderRightWidth,i.borderBottomWidth].map((t=>parseInt(t,10)||0));return{top:o.top+s,left:o.left+r,width:o.width-a-r,height:Math.max(o.height-s-c,n===document.body?window.innerHeight:-1/0)}}(o),s=getComputedStyle(o),r=o.getBoundingClientRect(),[a,c]=[s.borderTopWidth,s.borderLeftWidth].map((t=>parseInt(t,10)||0));return function(t,e,n,o,{side:i,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=Yt(n,o,i,s,a,c),d=i,h=s;if(u.top-=e.top,u.left-=e.left,!r){const r=$t[i];let f=0;if(r){let t=i;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})}(i,{top:r.top+a,left:r.left+c},t.getBoundingClientRect(),e instanceof Element?e.getBoundingClientRect():e,function(t={}){var e,n,o,i,s;const r=null!==(e=t.side)&&void 0!==e?e:Wt,a=null!==(n=t.align)&&void 0!==n?n:qt;return{side:r,align:a,anchorOffset:null!==(o=t.anchorOffset)&&void 0!==o?o:"inside-center"===r?0:Pt,alignmentOffset:null!==(i=t.alignmentOffset)&&void 0!==i?i:"center"!==a&&r.startsWith("inside")?Nt:0,allowOutOfBounds:null!==(s=t.allowOutOfBounds)&&void 0!==s?s:Bt}}(n))}const Wt="outside-bottom",qt="start",Pt=4,Nt=4,Bt=!1;function Yt(t,e,n,o,i,s){const r=e.left+e.width,a=e.top+e.height;let c=-1,l=-1;return"outside-top"===n?c=e.top-i-t.height:"outside-bottom"===n?c=a+i:"outside-left"===n?l=e.left-i-t.width:"outside-right"===n&&(l=r+i),"outside-top"!==n&&"outside-bottom"!==n||(l="start"===o?e.left+s:"center"===o?e.left-(t.width-e.width)/2+s:r-t.width-s),"outside-left"!==n&&"outside-right"!==n||(c="start"===o?e.top+s:"center"===o?e.top-(t.height-e.height)/2+s:a-t.height-s),"inside-top"===n?c=e.top+i:"inside-bottom"===n?c=a-i-t.height:"inside-left"===n?l=e.left+i:"inside-right"===n?l=r-i-t.width:"inside-center"===n&&(l=(r+e.left)/2-t.width/2+i),"inside-top"===n||"inside-bottom"===n?l="start"===o?e.left+s:"center"===o?e.left-(t.width-e.width)/2+s:r-t.width-s:"inside-left"!==n&&"inside-right"!==n&&"inside-center"!==n||(c="start"===o?e.top+s:"center"===o?e.top-(t.height-e.height)/2+s:a-t.height-s),{top:c,left:l}}function Ut(t,e,n,o){return"outside-top"===t||"outside-bottom"===t?e.topn.height+n.top:e.leftn.width+n.left}function Xt(t,e,n,o){return"end"===t?e.leftn.left+n.width||e.leftt instanceof HTMLElement&&s(t,i)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP});let a=null;if(!e.reverse&&s(t,i)&&(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,i)&&(yield t)}(t,{reverse:e,strict:!0,onlyTabbable:!0}).next().value}function jt(t,e=!1){const n=["BUTTON","INPUT","SELECT","TEXTAREA","OPTGROUP","OPTION","FIELDSET"].includes(t.tagName)&&t.disabled,o=t.hidden,i=t instanceof HTMLInputElement&&"hidden"===t.type,s=t.classList.contains("sentinel");if(n||o||i||s)return!1;if(e){const e=0===t.offsetWidth||0===t.offsetHeight,n=["hidden","collapse"].includes(getComputedStyle(t).visibility),o=0===t.getClientRects().length;if(e||n||o)return!1}return null!=t.getAttribute("tabindex")||!(t instanceof HTMLAnchorElement&&null==t.getAttribute("href"))&&-1!==t.tabIndex}function zt(t,e=!1){return jt(t,e)&&"-1"!==t.getAttribute("tabindex")}let Vt=!1;function Zt(){}try{const t=Object.create({},{signal:{get(){Vt=!0}}});window.addEventListener("test",Zt,t),window.removeEventListener("test",Zt,t)}catch(t){}Vt||(function(){if("undefined"==typeof window)return;const t=EventTarget.prototype.addEventListener;EventTarget.prototype.addEventListener=function(e,n,o){return"object"==typeof o&&"signal"in o&&o.signal instanceof AbortSignal&&t.call(o.signal,"abort",(()=>{this.removeEventListener(e,n,o)})),t.call(this,e,n,o)}}(),Vt=!0);const _t=[];let Jt;function Gt(t,e,n){const o=new AbortController,i=null!=n?n:o.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=Kt(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&&zt(a)&&t.contains(a))return void a.focus();if(e&&t.contains(e))return void e.focus();{const e=Kt(t);return void(null==e||e.focus())}}}r.setAttribute("class","sentinel"),r.setAttribute("tabindex","0"),r.setAttribute("aria-hidden","true"),r.onfocus=()=>{const e=Kt(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}(i);if(Jt){const t=Jt;Jt.container.setAttribute("data-focus-trap","suspended"),Jt.controller.abort(),_t.push(t)}l.signal.addEventListener("abort",(()=>{Jt=void 0})),i.addEventListener("abort",(()=>{t.removeAttribute("data-focus-trap");const e=t.getElementsByClassName("sentinel");for(;e.length>0;)e[0].remove();const n=_t.findIndex((e=>e.container===t));n>=0&&_t.splice(n,1),function(){const t=_t.pop();t&&Gt(t.container,t.initialFocus,t.originalSignal)}()})),document.addEventListener("focus",(t=>{c(t.target)}),{signal:l.signal,capture:!0}),c(document.activeElement),Jt={container:t,controller:l,initialFocus:e,originalSignal:i};const u=_t.findIndex((e=>e.container===t));if(u>=0&&_t.splice(u,1),!n)return o}var Qt,te,ee,ne,oe,ie,se;const re=["tooltip-n","tooltip-s","tooltip-e","tooltip-w","tooltip-ne","tooltip-se","tooltip-nw","tooltip-sw"];class ToolTipElement extends HTMLElement{constructor(){super(...arguments),Qt.add(this),te.set(this,void 0),ee.set(this,"center"),ne.set(this,"outside-bottom"),oe.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)}set hiddenFromView(t){this.classList.toggle("sr-only",t),this.isConnected&&mt(this,Qt,"m",ie).call(this)}get hiddenFromView(){return this.classList.contains("sr-only")}connectedCallback(){var t;if(!this.shadowRoot){this.attachShadow({mode:"open"}).innerHTML=`\n \n \n `}if(this.hiddenFromView=!0,pt(this,oe,!0,"f"),this.id||(this.id=`tooltip-${Date.now()}-${(1e4*Math.random()).toFixed(0)}`),!this.control)return;this.setAttribute("role","tooltip"),null===(t=mt(this,te,"f"))||void 0===t||t.abort(),pt(this,te,new AbortController,"f");const{signal:e}=mt(this,te,"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}),mt(this,Qt,"m",ie).call(this)}disconnectedCallback(){var t;null===(t=mt(this,te,"f"))||void 0===t||t.abort()}handleEvent(t){this.control&&("mouseenter"!==t.type&&"focus"!==t.type||!this.hiddenFromView?"blur"===t.type||"mouseleave"===t.type&&t.relatedTarget!==this.control&&t.relatedTarget!==this?this.hiddenFromView=!0:"keydown"!==t.type||"Escape"!==t.key||this.hiddenFromView||(this.hiddenFromView=!0):this.hiddenFromView=!1)}attributeChangedCallback(t){if("id"===t||"data-type"===t){if(!this.id||!this.control)return;if("label"===this.type){let t=this.control.getAttribute("aria-labelledby");t=t?`${t} ${this.id}`:this.id,this.control.setAttribute("aria-labelledby",t),this.setAttribute("aria-hidden","true")}else{let t=this.control.getAttribute("aria-describedby");t=t?`${t} ${this.id}`:this.id,this.control.setAttribute("aria-describedby",t)}}else if("data-direction"===t){this.classList.remove(...re);const t=this.direction;"n"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-top","f")):"ne"===t?(pt(this,ee,"start","f"),pt(this,ne,"outside-top","f")):"e"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-right","f")):"se"===t?(pt(this,ee,"start","f"),pt(this,ne,"outside-bottom","f")):"s"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-bottom","f")):"sw"===t?(pt(this,ee,"end","f"),pt(this,ne,"outside-bottom","f")):"w"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-left","f")):"nw"===t&&(pt(this,ee,"end","f"),pt(this,ne,"outside-top","f"))}}}var ae,ce,le,ue,de,he,fe;function me(t){document.activeElement!==t&&(null==t||t.focus())}te=new WeakMap,ee=new WeakMap,ne=new WeakMap,oe=new WeakMap,Qt=new WeakSet,ie=function(){if(this.hiddenFromView)this.classList.remove("tooltip-open",...re);else{this.classList.add("tooltip-open");for(const t of this.ownerDocument.querySelectorAll(this.tagName))t!==this&&(t.hiddenFromView=!0);mt(this,Qt,"m",se).call(this)}},se=function(){if(!this.control)return;if(!mt(this,oe,"f")||this.hiddenFromView)return;this.style.left="0px";const t=It(this,this.control,{side:mt(this,ne,"f"),align:mt(this,ee,"f"),anchorOffset:10}),e=t.anchorSide,n=t.anchorAlign;this.style.top=`${t.top}px`,this.style.left=`${t.left}px`;let o="s";o="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-${o}`)},ToolTipElement.observedAttributes=["data-type","data-direction","id"],window.customElements.get("tool-tip")||(window.ToolTipElement=ToolTipElement,window.customElements.define("tool-tip",ToolTipElement));class ModalDialogElement extends HTMLElement{constructor(){super(...arguments),ae.add(this),ce.set(this,new AbortController),le.set(this,null),ue.set(this,void 0),de.set(this,!0)}get open(){return this.hasAttribute("open")}set open(t){var e,n,o,i;if(t){if(this.open)return;this.setAttribute("open",""),null===(e=mt(this,ae,"a",he))||void 0===e||e.classList.remove("Overlay--hidden"),document.body.style.overflow="hidden",mt(this,ce,"f").signal.aborted&&pt(this,ce,new AbortController,"f"),Gt(this,void 0,mt(this,ce,"f").signal)}else{if(!this.open)return;this.removeAttribute("open"),null===(n=mt(this,ae,"a",he))||void 0===n||n.classList.add("Overlay--hidden"),document.body.style.overflow="initial",mt(this,ce,"f").abort();const t=(null===(o=mt(this,ue,"f"))||void 0===o?void 0:o.closest("details"))||(null===(i=mt(this,ue,"f"))||void 0===i?void 0:i.closest("action-menu"));me(t?Kt(t):mt(this,ue,"f")),pt(this,ue,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}=pt(this,le,new AbortController,"f");this.ownerDocument.addEventListener("click",(t=>{const e=t.target,n=e.closest(this.tagName)!==this,o=null==e?void 0:e.closest("button");if(!o)return void(n&&this.close());let i=o.getAttribute("data-close-dialog-id");i===this.id&&this.close(),i=o.getAttribute("data-submit-dialog-id"),i===this.id&&this.close(!0),i=o.getAttribute("data-show-dialog-id"),i===this.id&&(t.stopPropagation(),pt(this,ue,o,"f"),this.show())}),{signal:t}),this.addEventListener("keydown",(t=>mt(this,ae,"m",fe).call(this,t)))}disconnectedCallback(){var t;null===(t=mt(this,le,"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}}ce=new WeakMap,le=new WeakMap,ue=new WeakMap,de=new WeakMap,ae=new WeakSet,he=function(){var t;return(null===(t=this.parentElement)||void 0===t?void 0:t.hasAttribute("data-modal-dialog-overlay"))?this.parentElement:null},fe=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=ModalDialogElement,window.customElements.define("modal-dialog",ModalDialogElement)); //# 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 90b78716cf..7ec88823cc 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/@github/catalyst/lib/bind.js","../../../node_modules/@github/catalyst/lib/dasherize.js","../../../node_modules/@github/catalyst/lib/attr.js","../../../node_modules/@github/catalyst/lib/core.js","../../../node_modules/@github/catalyst/lib/register.js","../../../node_modules/@github/catalyst/lib/auto-shadow-root.js","../../../node_modules/@github/catalyst/lib/target.js","../../../node_modules/@github/catalyst/lib/findtarget.js","../../../node_modules/@github/mini-throttle/dist/index.js","../../../node_modules/@github/catalyst/lib/lazy-define.js","../../components/primer/alpha/toggle-switch-element.ts","../../../node_modules/@github/mini-throttle/dist/decorators.js","../../../node_modules/@github/catalyst/lib/controller.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 controllers = new WeakSet();\n/*\n * Bind `[data-action]` elements from the DOM to their actions.\n *\n */\nexport function bind(controller) {\n controllers.add(controller);\n if (controller.shadowRoot)\n bindShadow(controller.shadowRoot);\n bindElements(controller);\n listenForBind(controller.ownerDocument);\n}\nexport function bindShadow(root) {\n bindElements(root);\n listenForBind(root);\n}\nconst observers = new WeakMap();\n/**\n * Set up observer that will make sure any actions that are dynamically\n * injected into `el` will be bound to it's controller.\n *\n * This returns a Subscription object which you can call `unsubscribe()` on to\n * stop further live updates.\n */\nexport function listenForBind(el = document) {\n if (observers.has(el))\n return observers.get(el);\n let closed = false;\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.target instanceof Element) {\n bindActions(mutation.target);\n }\n else if (mutation.type === 'childList' && mutation.addedNodes.length) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element) {\n bindElements(node);\n }\n }\n }\n }\n });\n observer.observe(el, { childList: true, subtree: true, attributeFilter: ['data-action'] });\n const subscription = {\n get closed() {\n return closed;\n },\n unsubscribe() {\n closed = true;\n observers.delete(el);\n observer.disconnect();\n }\n };\n observers.set(el, subscription);\n return subscription;\n}\nfunction bindElements(root) {\n for (const el of root.querySelectorAll('[data-action]')) {\n bindActions(el);\n }\n // Also bind the controller to itself\n if (root instanceof Element && root.hasAttribute('data-action')) {\n bindActions(root);\n }\n}\n// Bind a single function to all events to avoid anonymous closure performance penalty.\nfunction handleEvent(event) {\n const el = event.currentTarget;\n for (const binding of bindings(el)) {\n if (event.type === binding.type) {\n const controller = el.closest(binding.tag);\n if (controllers.has(controller) && typeof controller[binding.method] === 'function') {\n controller[binding.method](event);\n }\n const root = el.getRootNode();\n if (root instanceof ShadowRoot && controllers.has(root.host) && root.host.matches(binding.tag)) {\n const shadowController = root.host;\n if (typeof shadowController[binding.method] === 'function') {\n shadowController[binding.method](event);\n }\n }\n }\n }\n}\nfunction* bindings(el) {\n for (const action of (el.getAttribute('data-action') || '').trim().split(/\\s+/)) {\n const eventSep = action.lastIndexOf(':');\n const methodSep = Math.max(0, action.lastIndexOf('#')) || action.length;\n yield {\n type: action.slice(0, eventSep),\n tag: action.slice(eventSep + 1, methodSep),\n method: action.slice(methodSep + 1) || 'handleEvent'\n } || 'handleEvent';\n }\n}\nfunction bindActions(el) {\n for (const binding of bindings(el)) {\n el.addEventListener(binding.type, handleEvent);\n }\n}\n//# sourceMappingURL=bind.js.map","export const dasherize = (str) => String(typeof str === 'symbol' ? str.description : str)\n .replace(/([A-Z]($|[a-z]))/g, '-$1')\n .replace(/--/g, '-')\n .replace(/^-|-$/, '')\n .toLowerCase();\nexport const mustDasherize = (str, type = 'property') => {\n const dashed = dasherize(str);\n if (!dashed.includes('-')) {\n throw new DOMException(`${type}: ${String(str)} is not a valid ${type} name`, 'SyntaxError');\n }\n return dashed;\n};\n//# sourceMappingURL=dasherize.js.map","import { mustDasherize } from './dasherize.js';\nimport { meta } from './core.js';\nconst attrKey = 'attr';\n/**\n * Attr is a decorator which tags a property as one to be initialized via\n * `initializeAttrs`.\n *\n * The signature is typed such that the property must be one of a String,\n * Number or Boolean. This matches the behavior of `initializeAttrs`.\n */\nexport function attr(proto, key) {\n meta(proto, attrKey).add(key);\n}\n/**\n * initializeAttrs is called with a set of class property names (if omitted, it\n * will look for any properties tagged with the `@attr` decorator). With this\n * list it defines property descriptors for each property that map to `data-*`\n * attributes on the HTMLElement instance.\n *\n * It works around Native Class Property semantics - which are equivalent to\n * calling `Object.defineProperty` on the instance upon creation, but before\n * `constructor()` is called.\n *\n * If a class property is assigned to the class body, it will infer the type\n * (using `typeof`) and define an appropriate getter/setter combo that aligns\n * to that type. This means class properties assigned to Numbers can only ever\n * be Numbers, assigned to Booleans can only ever be Booleans, and assigned to\n * Strings can only ever be Strings.\n *\n * This is automatically called as part of `@controller`. If a class uses the\n * `@controller` decorator it should not call this manually.\n */\nconst initialized = new WeakSet();\nexport function initializeAttrs(instance, names) {\n if (initialized.has(instance))\n return;\n initialized.add(instance);\n const proto = Object.getPrototypeOf(instance);\n const prefix = proto?.constructor?.attrPrefix ?? 'data-';\n if (!names)\n names = meta(proto, attrKey);\n for (const key of names) {\n const value = instance[key];\n const name = mustDasherize(`${prefix}${key}`);\n let descriptor = {\n configurable: true,\n get() {\n return this.getAttribute(name) || '';\n },\n set(newValue) {\n this.setAttribute(name, newValue || '');\n }\n };\n if (typeof value === 'number') {\n descriptor = {\n configurable: true,\n get() {\n return Number(this.getAttribute(name) || 0);\n },\n set(newValue) {\n this.setAttribute(name, newValue);\n }\n };\n }\n else if (typeof value === 'boolean') {\n descriptor = {\n configurable: true,\n get() {\n return this.hasAttribute(name);\n },\n set(newValue) {\n this.toggleAttribute(name, newValue);\n }\n };\n }\n Object.defineProperty(instance, key, descriptor);\n if (key in instance && !instance.hasAttribute(name)) {\n descriptor.set.call(instance, value);\n }\n }\n}\nexport function defineObservedAttributes(classObject) {\n let observed = classObject.observedAttributes || [];\n const prefix = classObject.attrPrefix ?? 'data-';\n const attrToAttributeName = (name) => mustDasherize(`${prefix}${name}`);\n Object.defineProperty(classObject, 'observedAttributes', {\n configurable: true,\n get() {\n return [...meta(classObject.prototype, attrKey)].map(attrToAttributeName).concat(observed);\n },\n set(attributes) {\n observed = attributes;\n }\n });\n}\n//# sourceMappingURL=attr.js.map","import { register } from './register.js';\nimport { bind, bindShadow } from './bind.js';\nimport { autoShadowRoot } from './auto-shadow-root.js';\nimport { defineObservedAttributes, initializeAttrs } from './attr.js';\nconst symbol = Symbol.for('catalyst');\nexport class CatalystDelegate {\n constructor(classObject) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const delegate = this;\n const connectedCallback = classObject.prototype.connectedCallback;\n classObject.prototype.connectedCallback = function () {\n delegate.connectedCallback(this, connectedCallback);\n };\n const disconnectedCallback = classObject.prototype.disconnectedCallback;\n classObject.prototype.disconnectedCallback = function () {\n delegate.disconnectedCallback(this, disconnectedCallback);\n };\n const attributeChangedCallback = classObject.prototype.attributeChangedCallback;\n classObject.prototype.attributeChangedCallback = function (name, oldValue, newValue) {\n delegate.attributeChangedCallback(this, name, oldValue, newValue, attributeChangedCallback);\n };\n let observedAttributes = classObject.observedAttributes || [];\n Object.defineProperty(classObject, 'observedAttributes', {\n configurable: true,\n get() {\n return delegate.observedAttributes(this, observedAttributes);\n },\n set(attributes) {\n observedAttributes = attributes;\n }\n });\n defineObservedAttributes(classObject);\n register(classObject);\n }\n observedAttributes(instance, observedAttributes) {\n return observedAttributes;\n }\n connectedCallback(instance, connectedCallback) {\n instance.toggleAttribute('data-catalyst', true);\n customElements.upgrade(instance);\n autoShadowRoot(instance);\n initializeAttrs(instance);\n bind(instance);\n connectedCallback?.call(instance);\n if (instance.shadowRoot)\n bindShadow(instance.shadowRoot);\n }\n disconnectedCallback(element, disconnectedCallback) {\n disconnectedCallback?.call(element);\n }\n attributeChangedCallback(instance, name, oldValue, newValue, attributeChangedCallback) {\n initializeAttrs(instance);\n if (name !== 'data-catalyst' && attributeChangedCallback) {\n attributeChangedCallback.call(instance, name, oldValue, newValue);\n }\n }\n}\nexport function meta(proto, name) {\n if (!Object.prototype.hasOwnProperty.call(proto, symbol)) {\n const parent = proto[symbol];\n const map = (proto[symbol] = new Map());\n if (parent) {\n for (const [key, value] of parent) {\n map.set(key, new Set(value));\n }\n }\n }\n const map = proto[symbol];\n if (!map.has(name))\n map.set(name, new Set());\n return map.get(name);\n}\n//# sourceMappingURL=core.js.map","import { dasherize } from './dasherize.js';\n/**\n * Register the controller as a custom element.\n *\n * The classname is converted to a approriate tag name.\n *\n * Example: HelloController => hello-controller\n */\nexport function register(classObject) {\n const name = dasherize(classObject.name).replace(/-element$/, '');\n try {\n window.customElements.define(name, classObject);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n window[classObject.name] = customElements.get(name);\n }\n catch (e) {\n // The only reason for window.customElements.define to throw a `NotSupportedError`\n // is if the element has already been defined.\n if (!(e instanceof DOMException && e.name === 'NotSupportedError'))\n throw e;\n }\n return classObject;\n}\n//# sourceMappingURL=register.js.map","export function autoShadowRoot(element) {\n for (const template of element.querySelectorAll('template[data-shadowroot]')) {\n if (template.parentElement === element) {\n element\n .attachShadow({\n mode: template.getAttribute('data-shadowroot') === 'closed' ? 'closed' : 'open'\n })\n .append(template.content.cloneNode(true));\n }\n }\n}\n//# sourceMappingURL=auto-shadow-root.js.map","import { findTarget, findTargets } from './findtarget.js';\nimport { meta } from './core.js';\n/**\n * Target is a decorator which - when assigned to a property field on the\n * class - will override that class field, turning it into a Getter which\n * returns a call to `findTarget(this, key)` where `key` is the name of the\n * property field. In other words, `@target foo` becomes a getter for\n * `findTarget(this, 'foo')`.\n */\nexport function target(proto, key) {\n meta(proto, 'target').add(key);\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n return findTarget(this, key);\n }\n });\n}\n/**\n * Targets is a decorator which - when assigned to a property field on the\n * class - will override that class field, turning it into a Getter which\n * returns a call to `findTargets(this, key)` where `key` is the name of the\n * property field. In other words, `@targets foo` becomes a getter for\n * `findTargets(this, 'foo')`.\n */\nexport function targets(proto, key) {\n meta(proto, 'targets').add(key);\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n return findTargets(this, key);\n }\n });\n}\n//# sourceMappingURL=target.js.map","/**\n * findTarget will run `querySelectorAll` against the given controller, plus\n * its shadowRoot, returning any the first child that:\n *\n * - Matches the selector of `[data-target~=\"tag.name\"]` where tag is the\n * tagName of the given HTMLElement, and `name` is the given `name` argument.\n *\n * - Closest ascendant of the element, that matches the tagname of the\n * controller, is the specific instance of the controller itself - in other\n * words it is not nested in other controllers of the same type.\n *\n */\nexport function findTarget(controller, name) {\n const tag = controller.tagName.toLowerCase();\n if (controller.shadowRoot) {\n for (const el of controller.shadowRoot.querySelectorAll(`[data-target~=\"${tag}.${name}\"]`)) {\n if (!el.closest(tag))\n return el;\n }\n }\n for (const el of controller.querySelectorAll(`[data-target~=\"${tag}.${name}\"]`)) {\n if (el.closest(tag) === controller)\n return el;\n }\n}\nexport function findTargets(controller, name) {\n const tag = controller.tagName.toLowerCase();\n const targets = [];\n if (controller.shadowRoot) {\n for (const el of controller.shadowRoot.querySelectorAll(`[data-targets~=\"${tag}.${name}\"]`)) {\n if (!el.closest(tag))\n targets.push(el);\n }\n }\n for (const el of controller.querySelectorAll(`[data-targets~=\"${tag}.${name}\"]`)) {\n if (el.closest(tag) === controller)\n targets.push(el);\n }\n return targets;\n}\n//# sourceMappingURL=findtarget.js.map","export function throttle(callback, wait = 0, { start = true, middle = true, once = false } = {}) {\n let last = 0;\n let timer;\n let cancelled = false;\n function fn(...args) {\n if (cancelled)\n return;\n const delta = Date.now() - last;\n last = Date.now();\n if (start) {\n start = false;\n callback.apply(this, args);\n if (once)\n fn.cancel();\n }\n else if ((middle && delta < wait) || !middle) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n last = Date.now();\n callback.apply(this, args);\n if (once)\n fn.cancel();\n }, !middle ? wait : wait - delta);\n }\n }\n fn.cancel = () => {\n clearTimeout(timer);\n cancelled = true;\n };\n return fn;\n}\nexport function debounce(callback, wait = 0, { start = false, middle = false, once = false } = {}) {\n return throttle(callback, wait, { start, middle, once });\n}\n","const dynamicElements = new Map();\nconst ready = new Promise(resolve => {\n if (document.readyState !== 'loading') {\n resolve();\n }\n else {\n document.addEventListener('readystatechange', () => resolve(), { once: true });\n }\n});\nconst firstInteraction = new Promise(resolve => {\n const controller = new AbortController();\n controller.signal.addEventListener('abort', () => resolve());\n const listenerOptions = { once: true, passive: true, signal: controller.signal };\n const handler = () => controller.abort();\n document.addEventListener('mousedown', handler, listenerOptions);\n // eslint-disable-next-line github/require-passive-events\n document.addEventListener('touchstart', handler, listenerOptions);\n document.addEventListener('keydown', handler, listenerOptions);\n document.addEventListener('pointerdown', handler, listenerOptions);\n});\nconst visible = (tagName) => new Promise(resolve => {\n const observer = new IntersectionObserver(entries => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n resolve();\n observer.disconnect();\n return;\n }\n }\n }, {\n // Currently the threshold is set to 256px from the bottom of the viewport\n // with a threshold of 0.1. This means the element will not load until about\n // 2 keyboard-down-arrow presses away from being visible in the viewport,\n // giving us some time to fetch it before the contents are made visible\n rootMargin: '0px 0px 256px 0px',\n threshold: 0.01\n });\n for (const el of document.querySelectorAll(tagName)) {\n observer.observe(el);\n }\n});\nconst strategies = {\n ready: () => ready,\n firstInteraction: () => firstInteraction,\n visible\n};\nconst timers = new WeakMap();\nfunction scan(node) {\n cancelAnimationFrame(timers.get(node) || 0);\n timers.set(node, requestAnimationFrame(() => {\n for (const tagName of dynamicElements.keys()) {\n const child = node.matches(tagName) ? node : node.querySelector(tagName);\n if (customElements.get(tagName) || child) {\n const strategyName = (child?.getAttribute('data-load-on') || 'ready');\n const strategy = strategyName in strategies ? strategies[strategyName] : strategies.ready;\n // eslint-disable-next-line github/no-then\n for (const cb of dynamicElements.get(tagName) || [])\n strategy(tagName).then(cb);\n dynamicElements.delete(tagName);\n timers.delete(node);\n }\n }\n }));\n}\nlet elementLoader;\nexport function lazyDefine(tagName, callback) {\n if (!dynamicElements.has(tagName))\n dynamicElements.set(tagName, new Set());\n dynamicElements.get(tagName).add(callback);\n scan(document.body);\n if (!elementLoader) {\n elementLoader = new MutationObserver(mutations => {\n if (!dynamicElements.size)\n return;\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element)\n scan(node);\n }\n }\n });\n elementLoader.observe(document, { subtree: true, childList: true });\n }\n}\n//# sourceMappingURL=lazy-define.js.map","/* eslint-disable custom-elements/expose-class-on-global */\n/* eslint-disable custom-elements/define-tag-after-class-definition */\n\nimport {controller, target} from '@github/catalyst'\nimport {debounce} from '@github/mini-throttle/decorators'\n\n@controller\nexport class ToggleSwitchElement extends HTMLElement {\n @target switch: HTMLElement\n @target loadingSpinner: HTMLElement\n @target errorIcon: HTMLElement\n\n get src(): string | null {\n const src = this.getAttribute('src')\n if (!src) return null\n\n const link = this.ownerDocument.createElement('a')\n link.href = src\n return link.href\n }\n\n get csrf(): string | null {\n const csrfElement = this.querySelector('[data-csrf]')\n return this.getAttribute('csrf') || (csrfElement instanceof HTMLInputElement && csrfElement.value) || null\n }\n\n get csrfField(): string {\n // the authenticity token is passed into the element and is not generated in js land\n\n return this.getAttribute('csrf-field') || 'authenticity_token'\n }\n\n isRemote(): boolean {\n return this.src != null\n }\n\n toggle() {\n if (this.isRemote()) {\n this.setLoadingState()\n this.check()\n } else {\n this.performToggle()\n }\n }\n\n turnOn(): void {\n if (this.isDisabled()) {\n return\n }\n\n this.switch.setAttribute('aria-checked', 'true')\n this.classList.add('ToggleSwitch--checked')\n }\n\n turnOff(): void {\n if (this.isDisabled()) {\n return\n }\n\n this.switch.setAttribute('aria-checked', 'false')\n this.classList.remove('ToggleSwitch--checked')\n }\n\n isOn(): boolean {\n return this.switch.getAttribute('aria-checked') === 'true'\n }\n\n isOff(): boolean {\n return !this.isOn()\n }\n\n isDisabled(): boolean {\n return this.switch.getAttribute('aria-disabled') === 'true'\n }\n\n disable(): void {\n this.switch.setAttribute('aria-disabled', 'true')\n }\n\n enable(): void {\n this.switch.setAttribute('aria-disabled', 'false')\n }\n\n private performToggle(): void {\n if (this.isOn()) {\n this.turnOff()\n } else {\n this.turnOn()\n }\n }\n\n private setLoadingState(): void {\n this.disable()\n this.errorIcon.setAttribute('hidden', 'hidden')\n this.loadingSpinner.removeAttribute('hidden')\n }\n\n private setSuccessState(): void {\n this.setFinishedState(false)\n }\n\n private setErrorState(): void {\n this.setFinishedState(true)\n }\n\n private setFinishedState(error: boolean): void {\n if (error) {\n this.errorIcon.removeAttribute('hidden')\n }\n\n this.loadingSpinner.setAttribute('hidden', 'hidden')\n this.enable()\n }\n\n @debounce(300)\n private async check() {\n const body = new FormData()\n\n if (this.csrf) {\n body.append(this.csrfField, this.csrf)\n }\n\n body.append('value', this.isOn() ? '1' : '0')\n\n try {\n const response = await fetch(this.src!, {\n credentials: 'same-origin',\n method: 'POST',\n body\n })\n if (response.ok) {\n this.setSuccessState()\n this.performToggle()\n } else {\n this.setErrorState()\n }\n } catch (error) {\n this.setErrorState()\n }\n }\n}\n\ndeclare global {\n interface Window {\n ToggleSwitchElement: typeof ToggleSwitchElement\n }\n}\n","import { debounce as db, throttle as th } from './index';\nexport function throttle(wait = 0, opts = {}) {\n return (proto, name, descriptor) => {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error('debounce can only decorate functions');\n }\n const fn = descriptor.value;\n descriptor.value = th(fn, wait, opts);\n Object.defineProperty(proto, name, descriptor);\n };\n}\nexport function debounce(wait = 0, opts = {}) {\n return (proto, name, descriptor) => {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error('debounce can only decorate functions');\n }\n const fn = descriptor.value;\n descriptor.value = db(fn, wait, opts);\n Object.defineProperty(proto, name, descriptor);\n };\n}\n","import { CatalystDelegate } from './core.js';\n/**\n * Controller is a decorator to be used over a class that extends HTMLElement.\n * It will automatically `register()` the component in the customElement\n * registry, as well as ensuring `bind(this)` is called on `connectedCallback`,\n * wrapping the classes `connectedCallback` method if needed.\n */\nexport function controller(classObject) {\n new CatalystDelegate(classObject);\n}\n//# sourceMappingURL=controller.js.map","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\nconst TOOLTIP_SR_ONLY_CLASS = 'sr-only'\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 set hiddenFromView(value: true | false) {\n this.classList.toggle(TOOLTIP_SR_ONLY_CLASS, value)\n if (this.isConnected) this.#update()\n }\n\n get hiddenFromView() {\n return this.classList.contains(TOOLTIP_SR_ONLY_CLASS)\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.hiddenFromView = 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.hiddenFromView) {\n this.hiddenFromView = false\n } else if (event.type === 'blur') {\n this.hiddenFromView = true\n } else if (\n event.type === 'mouseleave' &&\n (event as MouseEvent).relatedTarget !== this.control &&\n (event as MouseEvent).relatedTarget !== this\n ) {\n this.hiddenFromView = true\n } else if (event.type === 'keydown' && (event as KeyboardEvent).key === 'Escape' && !this.hiddenFromView) {\n this.hiddenFromView = true\n }\n }\n\n static observedAttributes = ['data-type', 'data-direction', 'id']\n\n #update() {\n if (this.hiddenFromView) {\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.hiddenFromView = 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 let labelledBy = this.control.getAttribute('aria-labelledby')\n if (labelledBy) {\n labelledBy = `${labelledBy} ${this.id}`\n } else {\n labelledBy = this.id\n }\n this.control.setAttribute('aria-labelledby', labelledBy)\n\n // Prevent duplicate accessible name announcements.\n this.setAttribute('aria-hidden', 'true')\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 (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.hiddenFromView) 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","__decorate","decorators","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__classPrivateFieldGet","receiver","kind","f","TypeError","call","__classPrivateFieldSet","controllers","WeakSet","bindShadow","bindElements","listenForBind","observers","closed","observer","MutationObserver","mutations","mutation","bindActions","addedNodes","observe","childList","subtree","attributeFilter","subscription","disconnect","handleEvent","binding","bindings","controller","tag","method","shadowController","action","split","eventSep","lastIndexOf","methodSep","dasherize","str","description","toLowerCase","mustDasherize","dashed","includes","DOMException","initialized","initializeAttrs","instance","names","proto","getPrototypeOf","prefix","constructor","attrPrefix","meta","descriptor","configurable","Number","toggleAttribute","symbol","Symbol","for","CatalystDelegate","classObject","delegate","disconnectedCallback","attributes","observed","attrToAttributeName","map","concat","defineObservedAttributes","register","upgrade","template","cloneNode","autoShadowRoot","hasOwnProperty","parent","Map","Set","findTarget","middle","timer","last","cancelled","fn","args","now","apply","cancel","throttle","readyState","AbortController","signal","listenerOptions","handler","ToggleSwitchElement","link","csrf","csrfElement","csrfField","isRemote","setLoadingState","check","performToggle","isDisabled","switch","isOn","turnOff","turnOn","disable","errorIcon","loadingSpinner","setFinishedState","error","enable","FormData","fetch","credentials","ok","setSuccessState","setErrorState","opts","db","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","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","disabled","hiddenInert","hiddenInputInert","sentinelInert","sizeInert","visibilityInert","visibility","clientRectsInert","getClientRects","tabIndex","signalSupported","noop","create","originalAddEventListener","EventTarget","originalCallback","optionsOrCapture","AbortSignal","monkeyPatch","suspendedTrapStack","activeTrap","focusTrap","initialFocus","abortSignal","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","hiddenFromView","toggle","isConnected","_ToolTipElement_instances","_ToolTipElement_update","styles","toFixed","labelledBy","describedBy","focusIfNeeded","tooltip","_ToolTipElement_updatePosition","ModalDialogElement","_ModalDialogElement_focusAbortController","_ModalDialogElement_abortController","_ModalDialogElement_openButton","_ModalDialogElement_shouldTryLoadingFragment","_ModalDialogElement_instances","_ModalDialogElement_overlayBackdrop_get","aborted","showButtons","clickOutsideDialog","dialogId","show","dialogEvent"],"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/@github/catalyst/lib/bind.js","../../../node_modules/@github/catalyst/lib/dasherize.js","../../../node_modules/@github/catalyst/lib/attr.js","../../../node_modules/@github/catalyst/lib/core.js","../../../node_modules/@github/catalyst/lib/register.js","../../../node_modules/@github/catalyst/lib/auto-shadow-root.js","../../../node_modules/@github/catalyst/lib/target.js","../../../node_modules/@github/catalyst/lib/findtarget.js","../../../node_modules/@github/mini-throttle/dist/index.js","../../../node_modules/@github/catalyst/lib/lazy-define.js","../../components/primer/alpha/toggle-switch-element.ts","../../../node_modules/@github/mini-throttle/dist/decorators.js","../../../node_modules/@github/catalyst/lib/controller.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 controllers = new WeakSet();\n/*\n * Bind `[data-action]` elements from the DOM to their actions.\n *\n */\nexport function bind(controller) {\n controllers.add(controller);\n if (controller.shadowRoot)\n bindShadow(controller.shadowRoot);\n bindElements(controller);\n listenForBind(controller.ownerDocument);\n}\nexport function bindShadow(root) {\n bindElements(root);\n listenForBind(root);\n}\nconst observers = new WeakMap();\n/**\n * Set up observer that will make sure any actions that are dynamically\n * injected into `el` will be bound to it's controller.\n *\n * This returns a Subscription object which you can call `unsubscribe()` on to\n * stop further live updates.\n */\nexport function listenForBind(el = document) {\n if (observers.has(el))\n return observers.get(el);\n let closed = false;\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.target instanceof Element) {\n bindActions(mutation.target);\n }\n else if (mutation.type === 'childList' && mutation.addedNodes.length) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element) {\n bindElements(node);\n }\n }\n }\n }\n });\n observer.observe(el, { childList: true, subtree: true, attributeFilter: ['data-action'] });\n const subscription = {\n get closed() {\n return closed;\n },\n unsubscribe() {\n closed = true;\n observers.delete(el);\n observer.disconnect();\n }\n };\n observers.set(el, subscription);\n return subscription;\n}\nfunction bindElements(root) {\n for (const el of root.querySelectorAll('[data-action]')) {\n bindActions(el);\n }\n // Also bind the controller to itself\n if (root instanceof Element && root.hasAttribute('data-action')) {\n bindActions(root);\n }\n}\n// Bind a single function to all events to avoid anonymous closure performance penalty.\nfunction handleEvent(event) {\n const el = event.currentTarget;\n for (const binding of bindings(el)) {\n if (event.type === binding.type) {\n const controller = el.closest(binding.tag);\n if (controllers.has(controller) && typeof controller[binding.method] === 'function') {\n controller[binding.method](event);\n }\n const root = el.getRootNode();\n if (root instanceof ShadowRoot && controllers.has(root.host) && root.host.matches(binding.tag)) {\n const shadowController = root.host;\n if (typeof shadowController[binding.method] === 'function') {\n shadowController[binding.method](event);\n }\n }\n }\n }\n}\nfunction* bindings(el) {\n for (const action of (el.getAttribute('data-action') || '').trim().split(/\\s+/)) {\n const eventSep = action.lastIndexOf(':');\n const methodSep = Math.max(0, action.lastIndexOf('#')) || action.length;\n yield {\n type: action.slice(0, eventSep),\n tag: action.slice(eventSep + 1, methodSep),\n method: action.slice(methodSep + 1) || 'handleEvent'\n } || 'handleEvent';\n }\n}\nfunction bindActions(el) {\n for (const binding of bindings(el)) {\n el.addEventListener(binding.type, handleEvent);\n }\n}\n//# sourceMappingURL=bind.js.map","export const dasherize = (str) => String(typeof str === 'symbol' ? str.description : str)\n .replace(/([A-Z]($|[a-z]))/g, '-$1')\n .replace(/--/g, '-')\n .replace(/^-|-$/, '')\n .toLowerCase();\nexport const mustDasherize = (str, type = 'property') => {\n const dashed = dasherize(str);\n if (!dashed.includes('-')) {\n throw new DOMException(`${type}: ${String(str)} is not a valid ${type} name`, 'SyntaxError');\n }\n return dashed;\n};\n//# sourceMappingURL=dasherize.js.map","import { mustDasherize } from './dasherize.js';\nimport { meta } from './core.js';\nconst attrKey = 'attr';\n/**\n * Attr is a decorator which tags a property as one to be initialized via\n * `initializeAttrs`.\n *\n * The signature is typed such that the property must be one of a String,\n * Number or Boolean. This matches the behavior of `initializeAttrs`.\n */\nexport function attr(proto, key) {\n meta(proto, attrKey).add(key);\n}\n/**\n * initializeAttrs is called with a set of class property names (if omitted, it\n * will look for any properties tagged with the `@attr` decorator). With this\n * list it defines property descriptors for each property that map to `data-*`\n * attributes on the HTMLElement instance.\n *\n * It works around Native Class Property semantics - which are equivalent to\n * calling `Object.defineProperty` on the instance upon creation, but before\n * `constructor()` is called.\n *\n * If a class property is assigned to the class body, it will infer the type\n * (using `typeof`) and define an appropriate getter/setter combo that aligns\n * to that type. This means class properties assigned to Numbers can only ever\n * be Numbers, assigned to Booleans can only ever be Booleans, and assigned to\n * Strings can only ever be Strings.\n *\n * This is automatically called as part of `@controller`. If a class uses the\n * `@controller` decorator it should not call this manually.\n */\nconst initialized = new WeakSet();\nexport function initializeAttrs(instance, names) {\n if (initialized.has(instance))\n return;\n initialized.add(instance);\n const proto = Object.getPrototypeOf(instance);\n const prefix = proto?.constructor?.attrPrefix ?? 'data-';\n if (!names)\n names = meta(proto, attrKey);\n for (const key of names) {\n const value = instance[key];\n const name = mustDasherize(`${prefix}${key}`);\n let descriptor = {\n configurable: true,\n get() {\n return this.getAttribute(name) || '';\n },\n set(newValue) {\n this.setAttribute(name, newValue || '');\n }\n };\n if (typeof value === 'number') {\n descriptor = {\n configurable: true,\n get() {\n return Number(this.getAttribute(name) || 0);\n },\n set(newValue) {\n this.setAttribute(name, newValue);\n }\n };\n }\n else if (typeof value === 'boolean') {\n descriptor = {\n configurable: true,\n get() {\n return this.hasAttribute(name);\n },\n set(newValue) {\n this.toggleAttribute(name, newValue);\n }\n };\n }\n Object.defineProperty(instance, key, descriptor);\n if (key in instance && !instance.hasAttribute(name)) {\n descriptor.set.call(instance, value);\n }\n }\n}\nexport function defineObservedAttributes(classObject) {\n let observed = classObject.observedAttributes || [];\n const prefix = classObject.attrPrefix ?? 'data-';\n const attrToAttributeName = (name) => mustDasherize(`${prefix}${name}`);\n Object.defineProperty(classObject, 'observedAttributes', {\n configurable: true,\n get() {\n return [...meta(classObject.prototype, attrKey)].map(attrToAttributeName).concat(observed);\n },\n set(attributes) {\n observed = attributes;\n }\n });\n}\n//# sourceMappingURL=attr.js.map","import { register } from './register.js';\nimport { bind, bindShadow } from './bind.js';\nimport { autoShadowRoot } from './auto-shadow-root.js';\nimport { defineObservedAttributes, initializeAttrs } from './attr.js';\nconst symbol = Symbol.for('catalyst');\nexport class CatalystDelegate {\n constructor(classObject) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const delegate = this;\n const connectedCallback = classObject.prototype.connectedCallback;\n classObject.prototype.connectedCallback = function () {\n delegate.connectedCallback(this, connectedCallback);\n };\n const disconnectedCallback = classObject.prototype.disconnectedCallback;\n classObject.prototype.disconnectedCallback = function () {\n delegate.disconnectedCallback(this, disconnectedCallback);\n };\n const attributeChangedCallback = classObject.prototype.attributeChangedCallback;\n classObject.prototype.attributeChangedCallback = function (name, oldValue, newValue) {\n delegate.attributeChangedCallback(this, name, oldValue, newValue, attributeChangedCallback);\n };\n let observedAttributes = classObject.observedAttributes || [];\n Object.defineProperty(classObject, 'observedAttributes', {\n configurable: true,\n get() {\n return delegate.observedAttributes(this, observedAttributes);\n },\n set(attributes) {\n observedAttributes = attributes;\n }\n });\n defineObservedAttributes(classObject);\n register(classObject);\n }\n observedAttributes(instance, observedAttributes) {\n return observedAttributes;\n }\n connectedCallback(instance, connectedCallback) {\n instance.toggleAttribute('data-catalyst', true);\n customElements.upgrade(instance);\n autoShadowRoot(instance);\n initializeAttrs(instance);\n bind(instance);\n connectedCallback?.call(instance);\n if (instance.shadowRoot)\n bindShadow(instance.shadowRoot);\n }\n disconnectedCallback(element, disconnectedCallback) {\n disconnectedCallback?.call(element);\n }\n attributeChangedCallback(instance, name, oldValue, newValue, attributeChangedCallback) {\n initializeAttrs(instance);\n if (name !== 'data-catalyst' && attributeChangedCallback) {\n attributeChangedCallback.call(instance, name, oldValue, newValue);\n }\n }\n}\nexport function meta(proto, name) {\n if (!Object.prototype.hasOwnProperty.call(proto, symbol)) {\n const parent = proto[symbol];\n const map = (proto[symbol] = new Map());\n if (parent) {\n for (const [key, value] of parent) {\n map.set(key, new Set(value));\n }\n }\n }\n const map = proto[symbol];\n if (!map.has(name))\n map.set(name, new Set());\n return map.get(name);\n}\n//# sourceMappingURL=core.js.map","import { dasherize } from './dasherize.js';\n/**\n * Register the controller as a custom element.\n *\n * The classname is converted to a approriate tag name.\n *\n * Example: HelloController => hello-controller\n */\nexport function register(classObject) {\n const name = dasherize(classObject.name).replace(/-element$/, '');\n try {\n window.customElements.define(name, classObject);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n window[classObject.name] = customElements.get(name);\n }\n catch (e) {\n // The only reason for window.customElements.define to throw a `NotSupportedError`\n // is if the element has already been defined.\n if (!(e instanceof DOMException && e.name === 'NotSupportedError'))\n throw e;\n }\n return classObject;\n}\n//# sourceMappingURL=register.js.map","export function autoShadowRoot(element) {\n for (const template of element.querySelectorAll('template[data-shadowroot]')) {\n if (template.parentElement === element) {\n element\n .attachShadow({\n mode: template.getAttribute('data-shadowroot') === 'closed' ? 'closed' : 'open'\n })\n .append(template.content.cloneNode(true));\n }\n }\n}\n//# sourceMappingURL=auto-shadow-root.js.map","import { findTarget, findTargets } from './findtarget.js';\nimport { meta } from './core.js';\n/**\n * Target is a decorator which - when assigned to a property field on the\n * class - will override that class field, turning it into a Getter which\n * returns a call to `findTarget(this, key)` where `key` is the name of the\n * property field. In other words, `@target foo` becomes a getter for\n * `findTarget(this, 'foo')`.\n */\nexport function target(proto, key) {\n meta(proto, 'target').add(key);\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n return findTarget(this, key);\n }\n });\n}\n/**\n * Targets is a decorator which - when assigned to a property field on the\n * class - will override that class field, turning it into a Getter which\n * returns a call to `findTargets(this, key)` where `key` is the name of the\n * property field. In other words, `@targets foo` becomes a getter for\n * `findTargets(this, 'foo')`.\n */\nexport function targets(proto, key) {\n meta(proto, 'targets').add(key);\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n return findTargets(this, key);\n }\n });\n}\n//# sourceMappingURL=target.js.map","/**\n * findTarget will run `querySelectorAll` against the given controller, plus\n * its shadowRoot, returning any the first child that:\n *\n * - Matches the selector of `[data-target~=\"tag.name\"]` where tag is the\n * tagName of the given HTMLElement, and `name` is the given `name` argument.\n *\n * - Closest ascendant of the element, that matches the tagname of the\n * controller, is the specific instance of the controller itself - in other\n * words it is not nested in other controllers of the same type.\n *\n */\nexport function findTarget(controller, name) {\n const tag = controller.tagName.toLowerCase();\n if (controller.shadowRoot) {\n for (const el of controller.shadowRoot.querySelectorAll(`[data-target~=\"${tag}.${name}\"]`)) {\n if (!el.closest(tag))\n return el;\n }\n }\n for (const el of controller.querySelectorAll(`[data-target~=\"${tag}.${name}\"]`)) {\n if (el.closest(tag) === controller)\n return el;\n }\n}\nexport function findTargets(controller, name) {\n const tag = controller.tagName.toLowerCase();\n const targets = [];\n if (controller.shadowRoot) {\n for (const el of controller.shadowRoot.querySelectorAll(`[data-targets~=\"${tag}.${name}\"]`)) {\n if (!el.closest(tag))\n targets.push(el);\n }\n }\n for (const el of controller.querySelectorAll(`[data-targets~=\"${tag}.${name}\"]`)) {\n if (el.closest(tag) === controller)\n targets.push(el);\n }\n return targets;\n}\n//# sourceMappingURL=findtarget.js.map","export function throttle(callback, wait = 0, { start = true, middle = true, once = false } = {}) {\n let last = 0;\n let timer;\n let cancelled = false;\n function fn(...args) {\n if (cancelled)\n return;\n const delta = Date.now() - last;\n last = Date.now();\n if (start) {\n start = false;\n callback.apply(this, args);\n if (once)\n fn.cancel();\n }\n else if ((middle && delta < wait) || !middle) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n last = Date.now();\n callback.apply(this, args);\n if (once)\n fn.cancel();\n }, !middle ? wait : wait - delta);\n }\n }\n fn.cancel = () => {\n clearTimeout(timer);\n cancelled = true;\n };\n return fn;\n}\nexport function debounce(callback, wait = 0, { start = false, middle = false, once = false } = {}) {\n return throttle(callback, wait, { start, middle, once });\n}\n","const dynamicElements = new Map();\nconst ready = new Promise(resolve => {\n if (document.readyState !== 'loading') {\n resolve();\n }\n else {\n document.addEventListener('readystatechange', () => resolve(), { once: true });\n }\n});\nconst firstInteraction = new Promise(resolve => {\n const controller = new AbortController();\n controller.signal.addEventListener('abort', () => resolve());\n const listenerOptions = { once: true, passive: true, signal: controller.signal };\n const handler = () => controller.abort();\n document.addEventListener('mousedown', handler, listenerOptions);\n // eslint-disable-next-line github/require-passive-events\n document.addEventListener('touchstart', handler, listenerOptions);\n document.addEventListener('keydown', handler, listenerOptions);\n document.addEventListener('pointerdown', handler, listenerOptions);\n});\nconst visible = (tagName) => new Promise(resolve => {\n const observer = new IntersectionObserver(entries => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n resolve();\n observer.disconnect();\n return;\n }\n }\n }, {\n // Currently the threshold is set to 256px from the bottom of the viewport\n // with a threshold of 0.1. This means the element will not load until about\n // 2 keyboard-down-arrow presses away from being visible in the viewport,\n // giving us some time to fetch it before the contents are made visible\n rootMargin: '0px 0px 256px 0px',\n threshold: 0.01\n });\n for (const el of document.querySelectorAll(tagName)) {\n observer.observe(el);\n }\n});\nconst strategies = {\n ready: () => ready,\n firstInteraction: () => firstInteraction,\n visible\n};\nconst timers = new WeakMap();\nfunction scan(node) {\n cancelAnimationFrame(timers.get(node) || 0);\n timers.set(node, requestAnimationFrame(() => {\n for (const tagName of dynamicElements.keys()) {\n const child = node.matches(tagName) ? node : node.querySelector(tagName);\n if (customElements.get(tagName) || child) {\n const strategyName = (child?.getAttribute('data-load-on') || 'ready');\n const strategy = strategyName in strategies ? strategies[strategyName] : strategies.ready;\n // eslint-disable-next-line github/no-then\n for (const cb of dynamicElements.get(tagName) || [])\n strategy(tagName).then(cb);\n dynamicElements.delete(tagName);\n timers.delete(node);\n }\n }\n }));\n}\nlet elementLoader;\nexport function lazyDefine(tagName, callback) {\n if (!dynamicElements.has(tagName))\n dynamicElements.set(tagName, new Set());\n dynamicElements.get(tagName).add(callback);\n scan(document.body);\n if (!elementLoader) {\n elementLoader = new MutationObserver(mutations => {\n if (!dynamicElements.size)\n return;\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element)\n scan(node);\n }\n }\n });\n elementLoader.observe(document, { subtree: true, childList: true });\n }\n}\n//# sourceMappingURL=lazy-define.js.map","/* eslint-disable custom-elements/expose-class-on-global */\n/* eslint-disable custom-elements/define-tag-after-class-definition */\n\nimport {controller, target} from '@github/catalyst'\nimport {debounce} from '@github/mini-throttle/decorators'\n\n@controller\nexport class ToggleSwitchElement extends HTMLElement {\n @target switch: HTMLElement\n @target loadingSpinner: HTMLElement\n @target errorIcon: HTMLElement\n\n get src(): string | null {\n const src = this.getAttribute('src')\n if (!src) return null\n\n const link = this.ownerDocument.createElement('a')\n link.href = src\n return link.href\n }\n\n get csrf(): string | null {\n const csrfElement = this.querySelector('[data-csrf]')\n return this.getAttribute('csrf') || (csrfElement instanceof HTMLInputElement && csrfElement.value) || null\n }\n\n get csrfField(): string {\n // the authenticity token is passed into the element and is not generated in js land\n\n return this.getAttribute('csrf-field') || 'authenticity_token'\n }\n\n isRemote(): boolean {\n return this.src != null\n }\n\n toggle() {\n if (this.isRemote()) {\n this.setLoadingState()\n this.check()\n } else {\n this.performToggle()\n }\n }\n\n turnOn(): void {\n if (this.isDisabled()) {\n return\n }\n\n this.switch.setAttribute('aria-checked', 'true')\n this.classList.add('ToggleSwitch--checked')\n }\n\n turnOff(): void {\n if (this.isDisabled()) {\n return\n }\n\n this.switch.setAttribute('aria-checked', 'false')\n this.classList.remove('ToggleSwitch--checked')\n }\n\n isOn(): boolean {\n return this.switch.getAttribute('aria-checked') === 'true'\n }\n\n isOff(): boolean {\n return !this.isOn()\n }\n\n isDisabled(): boolean {\n return this.switch.getAttribute('aria-disabled') === 'true'\n }\n\n disable(): void {\n this.switch.setAttribute('aria-disabled', 'true')\n }\n\n enable(): void {\n this.switch.setAttribute('aria-disabled', 'false')\n }\n\n private performToggle(): void {\n if (this.isOn()) {\n this.turnOff()\n } else {\n this.turnOn()\n }\n }\n\n private setLoadingState(): void {\n this.disable()\n this.errorIcon.setAttribute('hidden', 'hidden')\n this.loadingSpinner.removeAttribute('hidden')\n }\n\n private setSuccessState(): void {\n this.setFinishedState(false)\n }\n\n private setErrorState(): void {\n this.setFinishedState(true)\n }\n\n private setFinishedState(error: boolean): void {\n if (error) {\n this.errorIcon.removeAttribute('hidden')\n }\n\n this.loadingSpinner.setAttribute('hidden', 'hidden')\n this.enable()\n }\n\n @debounce(300)\n private async check() {\n const body = new FormData()\n\n if (this.csrf) {\n body.append(this.csrfField, this.csrf)\n }\n\n body.append('value', this.isOn() ? '1' : '0')\n\n try {\n if (!this.src) throw new Error('invalid src')\n const response = await fetch(this.src, {\n credentials: 'same-origin',\n method: 'POST',\n body\n })\n if (response.ok) {\n this.setSuccessState()\n this.performToggle()\n } else {\n this.setErrorState()\n }\n } catch (error) {\n this.setErrorState()\n }\n }\n}\n\ndeclare global {\n interface Window {\n ToggleSwitchElement: typeof ToggleSwitchElement\n }\n}\n","import { debounce as db, throttle as th } from './index';\nexport function throttle(wait = 0, opts = {}) {\n return (proto, name, descriptor) => {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error('debounce can only decorate functions');\n }\n const fn = descriptor.value;\n descriptor.value = th(fn, wait, opts);\n Object.defineProperty(proto, name, descriptor);\n };\n}\nexport function debounce(wait = 0, opts = {}) {\n return (proto, name, descriptor) => {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error('debounce can only decorate functions');\n }\n const fn = descriptor.value;\n descriptor.value = db(fn, wait, opts);\n Object.defineProperty(proto, name, descriptor);\n };\n}\n","import { CatalystDelegate } from './core.js';\n/**\n * Controller is a decorator to be used over a class that extends HTMLElement.\n * It will automatically `register()` the component in the customElement\n * registry, as well as ensuring `bind(this)` is called on `connectedCallback`,\n * wrapping the classes `connectedCallback` method if needed.\n */\nexport function controller(classObject) {\n new CatalystDelegate(classObject);\n}\n//# sourceMappingURL=controller.js.map","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","import type {AnchorAlignment, AnchorSide} from '@primer/behaviors'\nimport {getAnchoredPosition} from '@primer/behaviors'\n\nconst TOOLTIP_OPEN_CLASS = 'tooltip-open'\nconst TOOLTIP_ARROW_EDGE_OFFSET = 6\nconst TOOLTIP_SR_ONLY_CLASS = 'sr-only'\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 set hiddenFromView(value: true | false) {\n this.classList.toggle(TOOLTIP_SR_ONLY_CLASS, value)\n if (this.isConnected) this.#update()\n }\n\n get hiddenFromView() {\n return this.classList.contains(TOOLTIP_SR_ONLY_CLASS)\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.hiddenFromView = 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.hiddenFromView) {\n this.hiddenFromView = false\n } else if (event.type === 'blur') {\n this.hiddenFromView = true\n } else if (\n event.type === 'mouseleave' &&\n (event as MouseEvent).relatedTarget !== this.control &&\n (event as MouseEvent).relatedTarget !== this\n ) {\n this.hiddenFromView = true\n } else if (event.type === 'keydown' && (event as KeyboardEvent).key === 'Escape' && !this.hiddenFromView) {\n this.hiddenFromView = true\n }\n }\n\n static observedAttributes = ['data-type', 'data-direction', 'id']\n\n #update() {\n if (this.hiddenFromView) {\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.hiddenFromView = 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 let labelledBy = this.control.getAttribute('aria-labelledby')\n if (labelledBy) {\n labelledBy = `${labelledBy} ${this.id}`\n } else {\n labelledBy = this.id\n }\n this.control.setAttribute('aria-labelledby', labelledBy)\n\n // Prevent duplicate accessible name announcements.\n this.setAttribute('aria-hidden', 'true')\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 (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.hiddenFromView) 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"],"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","__decorate","decorators","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__classPrivateFieldGet","receiver","kind","f","TypeError","call","__classPrivateFieldSet","controllers","WeakSet","bindShadow","bindElements","listenForBind","observers","closed","observer","MutationObserver","mutations","mutation","bindActions","addedNodes","observe","childList","subtree","attributeFilter","subscription","disconnect","handleEvent","binding","bindings","controller","tag","method","shadowController","action","split","eventSep","lastIndexOf","methodSep","dasherize","str","description","toLowerCase","mustDasherize","dashed","includes","DOMException","initialized","initializeAttrs","instance","names","proto","getPrototypeOf","prefix","constructor","attrPrefix","meta","descriptor","configurable","Number","toggleAttribute","symbol","Symbol","for","CatalystDelegate","classObject","delegate","disconnectedCallback","attributes","observed","attrToAttributeName","map","concat","defineObservedAttributes","register","upgrade","template","cloneNode","autoShadowRoot","hasOwnProperty","parent","Map","Set","findTarget","middle","timer","last","cancelled","fn","args","now","apply","cancel","throttle","readyState","AbortController","signal","listenerOptions","handler","ToggleSwitchElement","link","csrf","csrfElement","csrfField","isRemote","setLoadingState","check","performToggle","isDisabled","switch","isOn","turnOff","turnOn","disable","errorIcon","loadingSpinner","setFinishedState","error","enable","FormData","fetch","credentials","ok","setSuccessState","setErrorState","opts","db","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","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","disabled","hiddenInert","hiddenInputInert","sentinelInert","sizeInert","visibilityInert","visibility","clientRectsInert","getClientRects","tabIndex","signalSupported","noop","create","originalAddEventListener","EventTarget","originalCallback","optionsOrCapture","AbortSignal","monkeyPatch","suspendedTrapStack","activeTrap","focusTrap","initialFocus","abortSignal","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","hiddenFromView","toggle","isConnected","_ToolTipElement_instances","_ToolTipElement_update","styles","toFixed","labelledBy","describedBy","focusIfNeeded","tooltip","_ToolTipElement_updatePosition","ModalDialogElement","_ModalDialogElement_focusAbortController","_ModalDialogElement_abortController","_ModalDialogElement_openButton","_ModalDialogElement_shouldTryLoadingFragment","_ModalDialogElement_instances","_ModalDialogElement_overlayBackdrop_get","aborted","showButtons","clickOutsideDialog","dialogId","show","dialogEvent"],"mappings":"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"} \ No newline at end of file diff --git a/app/components/primer/alpha/dialog.rb b/app/components/primer/alpha/dialog.rb index 78bd8e2a9e..2b35e48251 100644 --- a/app/components/primer/alpha/dialog.rb +++ b/app/components/primer/alpha/dialog.rb @@ -52,14 +52,14 @@ class Dialog < Primer::Component # Header content. # - # @param hide_divider [Boolean] If true the visual dividing line between the header and body will be hidden + # @param show_divider [Boolean] If true the visual dividing line between the header and body will be visible # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> - renders_one :header, lambda { |hide_divider: false, **system_arguments| + renders_one :header, lambda { |show_divider: true, **system_arguments| Primer::Alpha::Dialog::Header.new( id: @id, title: @title, subtitle: @subtitle, - hide_divider: hide_divider, + show_divider: show_divider, **system_arguments ) } @@ -71,7 +71,7 @@ class Dialog < Primer::Component # Footer content. # - # @param hide_divider [Boolean] If true the visual dividing line between the body and footer will be hidden + # @param show_divider [Boolean] If true the visual dividing line between the body and footer will be visible # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> renders_one :footer, "Footer" diff --git a/app/components/primer/alpha/dialog/footer.rb b/app/components/primer/alpha/dialog/footer.rb index 1cfc2f54ce..b89948f951 100644 --- a/app/components/primer/alpha/dialog/footer.rb +++ b/app/components/primer/alpha/dialog/footer.rb @@ -6,10 +6,10 @@ 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 show_divider [Boolean] If true the visual dividing line between the body and footer will be visible # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> def initialize( - hide_divider: false, + show_divider: true, **system_arguments ) @system_arguments = deny_tag_argument(**system_arguments) @@ -17,7 +17,7 @@ def initialize( @system_arguments[:classes] = class_names( "Overlay-footer", "Overlay-footer--alignEnd", - { "Overlay-footer--divided": !hide_divider }, + { "Overlay-footer--divided": show_divider }, system_arguments[:classes] ) end diff --git a/app/components/primer/alpha/dialog/header.rb b/app/components/primer/alpha/dialog/header.rb index 5192783cf1..140a528e6c 100644 --- a/app/components/primer/alpha/dialog/header.rb +++ b/app/components/primer/alpha/dialog/header.rb @@ -8,14 +8,14 @@ class 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 show_divider [Boolean] If true the visual dividing line between the body and footer will be visible # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> def initialize( id:, title:, subtitle: nil, subtitle_id: nil, - hide_divider: false, + show_divider: true, **system_arguments ) @id = id @@ -25,7 +25,7 @@ def initialize( @system_arguments[:tag] = :header @system_arguments[:classes] = class_names( "Overlay-header", - { "Overlay-header--divided": !hide_divider }, + { "Overlay-header--divided": show_divider }, system_arguments[:classes] ) end diff --git a/test/components/primer/alpha/dialog_test.rb b/test/components/primer/alpha/dialog_test.rb index 516e3ab958..c24aacd69a 100644 --- a/test/components/primer/alpha/dialog_test.rb +++ b/test/components/primer/alpha/dialog_test.rb @@ -65,7 +65,7 @@ def test_renders_footer_with_divider_by_default 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" } + c.footer(show_divider: false) { "footer" } end assert_selector("modal-dialog") do diff --git a/test/previews/primer/alpha/dialog_preview.rb b/test/previews/primer/alpha/dialog_preview.rb index 6170a2e2f7..dd50f1817b 100644 --- a/test/previews/primer/alpha/dialog_preview.rb +++ b/test/previews/primer/alpha/dialog_preview.rb @@ -25,13 +25,15 @@ def default(title: "Test Dialog", subtitle: nil, width: :medium, height: :auto, # @param button_text [String] text # @param width [Symbol] select [small, medium, large, xlarge, xxlarge] # @param height [Symbol] select [small, auto, large, xlarge] - def with_footer(title: "Test Dialog", subtitle: nil, width: :medium, height: :auto, button_text: "Show Dialog") + # @param show_divider [Boolean] toggle + def with_footer(title: "Test Dialog", subtitle: nil, width: :medium, height: :auto, button_text: "Show Dialog", show_divider: true) render_with_template(locals: { title: title, subtitle: subtitle, width: width, height: height, - button_text: button_text + button_text: button_text, + show_divider: show_divider }) end @@ -42,13 +44,15 @@ def with_footer(title: "Test Dialog", subtitle: nil, width: :medium, height: :au # @param button_text [String] text # @param width [Symbol] select [small, medium, large, xlarge, xxlarge] # @param height [Symbol] select [small, auto, large, xlarge] - def with_form(title: "Test Dialog", subtitle: nil, width: :medium, height: :auto, button_text: "Show Dialog") + # @param show_divider [Boolean] toggle + def with_form(title: "Test Dialog", subtitle: nil, width: :medium, height: :auto, button_text: "Show Dialog", show_divider: true) render_with_template(locals: { title: title, subtitle: subtitle, width: width, height: height, - button_text: button_text + button_text: button_text, + show_divider: show_divider }) end end diff --git a/test/previews/primer/alpha/dialog_preview/with_footer.html.erb b/test/previews/primer/alpha/dialog_preview/with_footer.html.erb index 56d3143f32..ee0a458b62 100644 --- a/test/previews/primer/alpha/dialog_preview/with_footer.html.erb +++ b/test/previews/primer/alpha/dialog_preview/with_footer.html.erb @@ -1,7 +1,7 @@ <%= render(Primer::Alpha::Dialog.new(id: "my-dialog", title: title, width: width, height: height, subtitle: subtitle)) do |d| %> <% d.show_button { button_text } %> <% d.body { "Content" } %> - <% d.footer do %> + <% d.footer(show_divider: show_divider) do %> <%= render(Primer::ButtonComponent.new(data: { "close-dialog-id": "my-dialog" })) { "Cancel" } %> <%= render(Primer::ButtonComponent.new(scheme: :primary)) { "Submit" } %> <% end %> diff --git a/test/previews/primer/alpha/dialog_preview/with_form.html.erb b/test/previews/primer/alpha/dialog_preview/with_form.html.erb index aaecd80cc5..77825f695f 100644 --- a/test/previews/primer/alpha/dialog_preview/with_form.html.erb +++ b/test/previews/primer/alpha/dialog_preview/with_form.html.erb @@ -4,7 +4,7 @@ <%= render(Primer::Alpha::Dialog::Body.new) do %> This is a custom dialog with the body and footer wrapped in a form tag. <% end %> - <%= render(Primer::Alpha::Dialog::Footer.new) do %> + <%= render(Primer::Alpha::Dialog::Footer.new(show_divider: show_divider)) do %> <%= render(Primer::ButtonComponent.new(data: { "close-dialog-id": "my-dialog" })) { "Cancel" } %> <%= render(Primer::ButtonComponent.new(scheme: :primary)) { "Submit" } %> <% end %> From fb5c827c958bc819e97a6643cf3508a8ce446dfe Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Wed, 24 Aug 2022 17:24:15 +0100 Subject: [PATCH 07/27] clean up modal-dialog code a little# --- app/assets/javascripts/primer_view_components.js.map | 2 +- app/components/primer/alpha/modal-dialog-element.ts | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/primer_view_components.js.map b/app/assets/javascripts/primer_view_components.js.map index 7ec88823cc..d28aab1656 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/@github/catalyst/lib/bind.js","../../../node_modules/@github/catalyst/lib/dasherize.js","../../../node_modules/@github/catalyst/lib/attr.js","../../../node_modules/@github/catalyst/lib/core.js","../../../node_modules/@github/catalyst/lib/register.js","../../../node_modules/@github/catalyst/lib/auto-shadow-root.js","../../../node_modules/@github/catalyst/lib/target.js","../../../node_modules/@github/catalyst/lib/findtarget.js","../../../node_modules/@github/mini-throttle/dist/index.js","../../../node_modules/@github/catalyst/lib/lazy-define.js","../../components/primer/alpha/toggle-switch-element.ts","../../../node_modules/@github/mini-throttle/dist/decorators.js","../../../node_modules/@github/catalyst/lib/controller.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 controllers = new WeakSet();\n/*\n * Bind `[data-action]` elements from the DOM to their actions.\n *\n */\nexport function bind(controller) {\n controllers.add(controller);\n if (controller.shadowRoot)\n bindShadow(controller.shadowRoot);\n bindElements(controller);\n listenForBind(controller.ownerDocument);\n}\nexport function bindShadow(root) {\n bindElements(root);\n listenForBind(root);\n}\nconst observers = new WeakMap();\n/**\n * Set up observer that will make sure any actions that are dynamically\n * injected into `el` will be bound to it's controller.\n *\n * This returns a Subscription object which you can call `unsubscribe()` on to\n * stop further live updates.\n */\nexport function listenForBind(el = document) {\n if (observers.has(el))\n return observers.get(el);\n let closed = false;\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.target instanceof Element) {\n bindActions(mutation.target);\n }\n else if (mutation.type === 'childList' && mutation.addedNodes.length) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element) {\n bindElements(node);\n }\n }\n }\n }\n });\n observer.observe(el, { childList: true, subtree: true, attributeFilter: ['data-action'] });\n const subscription = {\n get closed() {\n return closed;\n },\n unsubscribe() {\n closed = true;\n observers.delete(el);\n observer.disconnect();\n }\n };\n observers.set(el, subscription);\n return subscription;\n}\nfunction bindElements(root) {\n for (const el of root.querySelectorAll('[data-action]')) {\n bindActions(el);\n }\n // Also bind the controller to itself\n if (root instanceof Element && root.hasAttribute('data-action')) {\n bindActions(root);\n }\n}\n// Bind a single function to all events to avoid anonymous closure performance penalty.\nfunction handleEvent(event) {\n const el = event.currentTarget;\n for (const binding of bindings(el)) {\n if (event.type === binding.type) {\n const controller = el.closest(binding.tag);\n if (controllers.has(controller) && typeof controller[binding.method] === 'function') {\n controller[binding.method](event);\n }\n const root = el.getRootNode();\n if (root instanceof ShadowRoot && controllers.has(root.host) && root.host.matches(binding.tag)) {\n const shadowController = root.host;\n if (typeof shadowController[binding.method] === 'function') {\n shadowController[binding.method](event);\n }\n }\n }\n }\n}\nfunction* bindings(el) {\n for (const action of (el.getAttribute('data-action') || '').trim().split(/\\s+/)) {\n const eventSep = action.lastIndexOf(':');\n const methodSep = Math.max(0, action.lastIndexOf('#')) || action.length;\n yield {\n type: action.slice(0, eventSep),\n tag: action.slice(eventSep + 1, methodSep),\n method: action.slice(methodSep + 1) || 'handleEvent'\n } || 'handleEvent';\n }\n}\nfunction bindActions(el) {\n for (const binding of bindings(el)) {\n el.addEventListener(binding.type, handleEvent);\n }\n}\n//# sourceMappingURL=bind.js.map","export const dasherize = (str) => String(typeof str === 'symbol' ? str.description : str)\n .replace(/([A-Z]($|[a-z]))/g, '-$1')\n .replace(/--/g, '-')\n .replace(/^-|-$/, '')\n .toLowerCase();\nexport const mustDasherize = (str, type = 'property') => {\n const dashed = dasherize(str);\n if (!dashed.includes('-')) {\n throw new DOMException(`${type}: ${String(str)} is not a valid ${type} name`, 'SyntaxError');\n }\n return dashed;\n};\n//# sourceMappingURL=dasherize.js.map","import { mustDasherize } from './dasherize.js';\nimport { meta } from './core.js';\nconst attrKey = 'attr';\n/**\n * Attr is a decorator which tags a property as one to be initialized via\n * `initializeAttrs`.\n *\n * The signature is typed such that the property must be one of a String,\n * Number or Boolean. This matches the behavior of `initializeAttrs`.\n */\nexport function attr(proto, key) {\n meta(proto, attrKey).add(key);\n}\n/**\n * initializeAttrs is called with a set of class property names (if omitted, it\n * will look for any properties tagged with the `@attr` decorator). With this\n * list it defines property descriptors for each property that map to `data-*`\n * attributes on the HTMLElement instance.\n *\n * It works around Native Class Property semantics - which are equivalent to\n * calling `Object.defineProperty` on the instance upon creation, but before\n * `constructor()` is called.\n *\n * If a class property is assigned to the class body, it will infer the type\n * (using `typeof`) and define an appropriate getter/setter combo that aligns\n * to that type. This means class properties assigned to Numbers can only ever\n * be Numbers, assigned to Booleans can only ever be Booleans, and assigned to\n * Strings can only ever be Strings.\n *\n * This is automatically called as part of `@controller`. If a class uses the\n * `@controller` decorator it should not call this manually.\n */\nconst initialized = new WeakSet();\nexport function initializeAttrs(instance, names) {\n if (initialized.has(instance))\n return;\n initialized.add(instance);\n const proto = Object.getPrototypeOf(instance);\n const prefix = proto?.constructor?.attrPrefix ?? 'data-';\n if (!names)\n names = meta(proto, attrKey);\n for (const key of names) {\n const value = instance[key];\n const name = mustDasherize(`${prefix}${key}`);\n let descriptor = {\n configurable: true,\n get() {\n return this.getAttribute(name) || '';\n },\n set(newValue) {\n this.setAttribute(name, newValue || '');\n }\n };\n if (typeof value === 'number') {\n descriptor = {\n configurable: true,\n get() {\n return Number(this.getAttribute(name) || 0);\n },\n set(newValue) {\n this.setAttribute(name, newValue);\n }\n };\n }\n else if (typeof value === 'boolean') {\n descriptor = {\n configurable: true,\n get() {\n return this.hasAttribute(name);\n },\n set(newValue) {\n this.toggleAttribute(name, newValue);\n }\n };\n }\n Object.defineProperty(instance, key, descriptor);\n if (key in instance && !instance.hasAttribute(name)) {\n descriptor.set.call(instance, value);\n }\n }\n}\nexport function defineObservedAttributes(classObject) {\n let observed = classObject.observedAttributes || [];\n const prefix = classObject.attrPrefix ?? 'data-';\n const attrToAttributeName = (name) => mustDasherize(`${prefix}${name}`);\n Object.defineProperty(classObject, 'observedAttributes', {\n configurable: true,\n get() {\n return [...meta(classObject.prototype, attrKey)].map(attrToAttributeName).concat(observed);\n },\n set(attributes) {\n observed = attributes;\n }\n });\n}\n//# sourceMappingURL=attr.js.map","import { register } from './register.js';\nimport { bind, bindShadow } from './bind.js';\nimport { autoShadowRoot } from './auto-shadow-root.js';\nimport { defineObservedAttributes, initializeAttrs } from './attr.js';\nconst symbol = Symbol.for('catalyst');\nexport class CatalystDelegate {\n constructor(classObject) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const delegate = this;\n const connectedCallback = classObject.prototype.connectedCallback;\n classObject.prototype.connectedCallback = function () {\n delegate.connectedCallback(this, connectedCallback);\n };\n const disconnectedCallback = classObject.prototype.disconnectedCallback;\n classObject.prototype.disconnectedCallback = function () {\n delegate.disconnectedCallback(this, disconnectedCallback);\n };\n const attributeChangedCallback = classObject.prototype.attributeChangedCallback;\n classObject.prototype.attributeChangedCallback = function (name, oldValue, newValue) {\n delegate.attributeChangedCallback(this, name, oldValue, newValue, attributeChangedCallback);\n };\n let observedAttributes = classObject.observedAttributes || [];\n Object.defineProperty(classObject, 'observedAttributes', {\n configurable: true,\n get() {\n return delegate.observedAttributes(this, observedAttributes);\n },\n set(attributes) {\n observedAttributes = attributes;\n }\n });\n defineObservedAttributes(classObject);\n register(classObject);\n }\n observedAttributes(instance, observedAttributes) {\n return observedAttributes;\n }\n connectedCallback(instance, connectedCallback) {\n instance.toggleAttribute('data-catalyst', true);\n customElements.upgrade(instance);\n autoShadowRoot(instance);\n initializeAttrs(instance);\n bind(instance);\n connectedCallback?.call(instance);\n if (instance.shadowRoot)\n bindShadow(instance.shadowRoot);\n }\n disconnectedCallback(element, disconnectedCallback) {\n disconnectedCallback?.call(element);\n }\n attributeChangedCallback(instance, name, oldValue, newValue, attributeChangedCallback) {\n initializeAttrs(instance);\n if (name !== 'data-catalyst' && attributeChangedCallback) {\n attributeChangedCallback.call(instance, name, oldValue, newValue);\n }\n }\n}\nexport function meta(proto, name) {\n if (!Object.prototype.hasOwnProperty.call(proto, symbol)) {\n const parent = proto[symbol];\n const map = (proto[symbol] = new Map());\n if (parent) {\n for (const [key, value] of parent) {\n map.set(key, new Set(value));\n }\n }\n }\n const map = proto[symbol];\n if (!map.has(name))\n map.set(name, new Set());\n return map.get(name);\n}\n//# sourceMappingURL=core.js.map","import { dasherize } from './dasherize.js';\n/**\n * Register the controller as a custom element.\n *\n * The classname is converted to a approriate tag name.\n *\n * Example: HelloController => hello-controller\n */\nexport function register(classObject) {\n const name = dasherize(classObject.name).replace(/-element$/, '');\n try {\n window.customElements.define(name, classObject);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n window[classObject.name] = customElements.get(name);\n }\n catch (e) {\n // The only reason for window.customElements.define to throw a `NotSupportedError`\n // is if the element has already been defined.\n if (!(e instanceof DOMException && e.name === 'NotSupportedError'))\n throw e;\n }\n return classObject;\n}\n//# sourceMappingURL=register.js.map","export function autoShadowRoot(element) {\n for (const template of element.querySelectorAll('template[data-shadowroot]')) {\n if (template.parentElement === element) {\n element\n .attachShadow({\n mode: template.getAttribute('data-shadowroot') === 'closed' ? 'closed' : 'open'\n })\n .append(template.content.cloneNode(true));\n }\n }\n}\n//# sourceMappingURL=auto-shadow-root.js.map","import { findTarget, findTargets } from './findtarget.js';\nimport { meta } from './core.js';\n/**\n * Target is a decorator which - when assigned to a property field on the\n * class - will override that class field, turning it into a Getter which\n * returns a call to `findTarget(this, key)` where `key` is the name of the\n * property field. In other words, `@target foo` becomes a getter for\n * `findTarget(this, 'foo')`.\n */\nexport function target(proto, key) {\n meta(proto, 'target').add(key);\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n return findTarget(this, key);\n }\n });\n}\n/**\n * Targets is a decorator which - when assigned to a property field on the\n * class - will override that class field, turning it into a Getter which\n * returns a call to `findTargets(this, key)` where `key` is the name of the\n * property field. In other words, `@targets foo` becomes a getter for\n * `findTargets(this, 'foo')`.\n */\nexport function targets(proto, key) {\n meta(proto, 'targets').add(key);\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n return findTargets(this, key);\n }\n });\n}\n//# sourceMappingURL=target.js.map","/**\n * findTarget will run `querySelectorAll` against the given controller, plus\n * its shadowRoot, returning any the first child that:\n *\n * - Matches the selector of `[data-target~=\"tag.name\"]` where tag is the\n * tagName of the given HTMLElement, and `name` is the given `name` argument.\n *\n * - Closest ascendant of the element, that matches the tagname of the\n * controller, is the specific instance of the controller itself - in other\n * words it is not nested in other controllers of the same type.\n *\n */\nexport function findTarget(controller, name) {\n const tag = controller.tagName.toLowerCase();\n if (controller.shadowRoot) {\n for (const el of controller.shadowRoot.querySelectorAll(`[data-target~=\"${tag}.${name}\"]`)) {\n if (!el.closest(tag))\n return el;\n }\n }\n for (const el of controller.querySelectorAll(`[data-target~=\"${tag}.${name}\"]`)) {\n if (el.closest(tag) === controller)\n return el;\n }\n}\nexport function findTargets(controller, name) {\n const tag = controller.tagName.toLowerCase();\n const targets = [];\n if (controller.shadowRoot) {\n for (const el of controller.shadowRoot.querySelectorAll(`[data-targets~=\"${tag}.${name}\"]`)) {\n if (!el.closest(tag))\n targets.push(el);\n }\n }\n for (const el of controller.querySelectorAll(`[data-targets~=\"${tag}.${name}\"]`)) {\n if (el.closest(tag) === controller)\n targets.push(el);\n }\n return targets;\n}\n//# sourceMappingURL=findtarget.js.map","export function throttle(callback, wait = 0, { start = true, middle = true, once = false } = {}) {\n let last = 0;\n let timer;\n let cancelled = false;\n function fn(...args) {\n if (cancelled)\n return;\n const delta = Date.now() - last;\n last = Date.now();\n if (start) {\n start = false;\n callback.apply(this, args);\n if (once)\n fn.cancel();\n }\n else if ((middle && delta < wait) || !middle) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n last = Date.now();\n callback.apply(this, args);\n if (once)\n fn.cancel();\n }, !middle ? wait : wait - delta);\n }\n }\n fn.cancel = () => {\n clearTimeout(timer);\n cancelled = true;\n };\n return fn;\n}\nexport function debounce(callback, wait = 0, { start = false, middle = false, once = false } = {}) {\n return throttle(callback, wait, { start, middle, once });\n}\n","const dynamicElements = new Map();\nconst ready = new Promise(resolve => {\n if (document.readyState !== 'loading') {\n resolve();\n }\n else {\n document.addEventListener('readystatechange', () => resolve(), { once: true });\n }\n});\nconst firstInteraction = new Promise(resolve => {\n const controller = new AbortController();\n controller.signal.addEventListener('abort', () => resolve());\n const listenerOptions = { once: true, passive: true, signal: controller.signal };\n const handler = () => controller.abort();\n document.addEventListener('mousedown', handler, listenerOptions);\n // eslint-disable-next-line github/require-passive-events\n document.addEventListener('touchstart', handler, listenerOptions);\n document.addEventListener('keydown', handler, listenerOptions);\n document.addEventListener('pointerdown', handler, listenerOptions);\n});\nconst visible = (tagName) => new Promise(resolve => {\n const observer = new IntersectionObserver(entries => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n resolve();\n observer.disconnect();\n return;\n }\n }\n }, {\n // Currently the threshold is set to 256px from the bottom of the viewport\n // with a threshold of 0.1. This means the element will not load until about\n // 2 keyboard-down-arrow presses away from being visible in the viewport,\n // giving us some time to fetch it before the contents are made visible\n rootMargin: '0px 0px 256px 0px',\n threshold: 0.01\n });\n for (const el of document.querySelectorAll(tagName)) {\n observer.observe(el);\n }\n});\nconst strategies = {\n ready: () => ready,\n firstInteraction: () => firstInteraction,\n visible\n};\nconst timers = new WeakMap();\nfunction scan(node) {\n cancelAnimationFrame(timers.get(node) || 0);\n timers.set(node, requestAnimationFrame(() => {\n for (const tagName of dynamicElements.keys()) {\n const child = node.matches(tagName) ? node : node.querySelector(tagName);\n if (customElements.get(tagName) || child) {\n const strategyName = (child?.getAttribute('data-load-on') || 'ready');\n const strategy = strategyName in strategies ? strategies[strategyName] : strategies.ready;\n // eslint-disable-next-line github/no-then\n for (const cb of dynamicElements.get(tagName) || [])\n strategy(tagName).then(cb);\n dynamicElements.delete(tagName);\n timers.delete(node);\n }\n }\n }));\n}\nlet elementLoader;\nexport function lazyDefine(tagName, callback) {\n if (!dynamicElements.has(tagName))\n dynamicElements.set(tagName, new Set());\n dynamicElements.get(tagName).add(callback);\n scan(document.body);\n if (!elementLoader) {\n elementLoader = new MutationObserver(mutations => {\n if (!dynamicElements.size)\n return;\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element)\n scan(node);\n }\n }\n });\n elementLoader.observe(document, { subtree: true, childList: true });\n }\n}\n//# sourceMappingURL=lazy-define.js.map","/* eslint-disable custom-elements/expose-class-on-global */\n/* eslint-disable custom-elements/define-tag-after-class-definition */\n\nimport {controller, target} from '@github/catalyst'\nimport {debounce} from '@github/mini-throttle/decorators'\n\n@controller\nexport class ToggleSwitchElement extends HTMLElement {\n @target switch: HTMLElement\n @target loadingSpinner: HTMLElement\n @target errorIcon: HTMLElement\n\n get src(): string | null {\n const src = this.getAttribute('src')\n if (!src) return null\n\n const link = this.ownerDocument.createElement('a')\n link.href = src\n return link.href\n }\n\n get csrf(): string | null {\n const csrfElement = this.querySelector('[data-csrf]')\n return this.getAttribute('csrf') || (csrfElement instanceof HTMLInputElement && csrfElement.value) || null\n }\n\n get csrfField(): string {\n // the authenticity token is passed into the element and is not generated in js land\n\n return this.getAttribute('csrf-field') || 'authenticity_token'\n }\n\n isRemote(): boolean {\n return this.src != null\n }\n\n toggle() {\n if (this.isRemote()) {\n this.setLoadingState()\n this.check()\n } else {\n this.performToggle()\n }\n }\n\n turnOn(): void {\n if (this.isDisabled()) {\n return\n }\n\n this.switch.setAttribute('aria-checked', 'true')\n this.classList.add('ToggleSwitch--checked')\n }\n\n turnOff(): void {\n if (this.isDisabled()) {\n return\n }\n\n this.switch.setAttribute('aria-checked', 'false')\n this.classList.remove('ToggleSwitch--checked')\n }\n\n isOn(): boolean {\n return this.switch.getAttribute('aria-checked') === 'true'\n }\n\n isOff(): boolean {\n return !this.isOn()\n }\n\n isDisabled(): boolean {\n return this.switch.getAttribute('aria-disabled') === 'true'\n }\n\n disable(): void {\n this.switch.setAttribute('aria-disabled', 'true')\n }\n\n enable(): void {\n this.switch.setAttribute('aria-disabled', 'false')\n }\n\n private performToggle(): void {\n if (this.isOn()) {\n this.turnOff()\n } else {\n this.turnOn()\n }\n }\n\n private setLoadingState(): void {\n this.disable()\n this.errorIcon.setAttribute('hidden', 'hidden')\n this.loadingSpinner.removeAttribute('hidden')\n }\n\n private setSuccessState(): void {\n this.setFinishedState(false)\n }\n\n private setErrorState(): void {\n this.setFinishedState(true)\n }\n\n private setFinishedState(error: boolean): void {\n if (error) {\n this.errorIcon.removeAttribute('hidden')\n }\n\n this.loadingSpinner.setAttribute('hidden', 'hidden')\n this.enable()\n }\n\n @debounce(300)\n private async check() {\n const body = new FormData()\n\n if (this.csrf) {\n body.append(this.csrfField, this.csrf)\n }\n\n body.append('value', this.isOn() ? '1' : '0')\n\n try {\n if (!this.src) throw new Error('invalid src')\n const response = await fetch(this.src, {\n credentials: 'same-origin',\n method: 'POST',\n body\n })\n if (response.ok) {\n this.setSuccessState()\n this.performToggle()\n } else {\n this.setErrorState()\n }\n } catch (error) {\n this.setErrorState()\n }\n }\n}\n\ndeclare global {\n interface Window {\n ToggleSwitchElement: typeof ToggleSwitchElement\n }\n}\n","import { debounce as db, throttle as th } from './index';\nexport function throttle(wait = 0, opts = {}) {\n return (proto, name, descriptor) => {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error('debounce can only decorate functions');\n }\n const fn = descriptor.value;\n descriptor.value = th(fn, wait, opts);\n Object.defineProperty(proto, name, descriptor);\n };\n}\nexport function debounce(wait = 0, opts = {}) {\n return (proto, name, descriptor) => {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error('debounce can only decorate functions');\n }\n const fn = descriptor.value;\n descriptor.value = db(fn, wait, opts);\n Object.defineProperty(proto, name, descriptor);\n };\n}\n","import { CatalystDelegate } from './core.js';\n/**\n * Controller is a decorator to be used over a class that extends HTMLElement.\n * It will automatically `register()` the component in the customElement\n * registry, as well as ensuring `bind(this)` is called on `connectedCallback`,\n * wrapping the classes `connectedCallback` method if needed.\n */\nexport function controller(classObject) {\n new CatalystDelegate(classObject);\n}\n//# sourceMappingURL=controller.js.map","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","import type {AnchorAlignment, AnchorSide} from '@primer/behaviors'\nimport {getAnchoredPosition} from '@primer/behaviors'\n\nconst TOOLTIP_OPEN_CLASS = 'tooltip-open'\nconst TOOLTIP_ARROW_EDGE_OFFSET = 6\nconst TOOLTIP_SR_ONLY_CLASS = 'sr-only'\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 set hiddenFromView(value: true | false) {\n this.classList.toggle(TOOLTIP_SR_ONLY_CLASS, value)\n if (this.isConnected) this.#update()\n }\n\n get hiddenFromView() {\n return this.classList.contains(TOOLTIP_SR_ONLY_CLASS)\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.hiddenFromView = 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.hiddenFromView) {\n this.hiddenFromView = false\n } else if (event.type === 'blur') {\n this.hiddenFromView = true\n } else if (\n event.type === 'mouseleave' &&\n (event as MouseEvent).relatedTarget !== this.control &&\n (event as MouseEvent).relatedTarget !== this\n ) {\n this.hiddenFromView = true\n } else if (event.type === 'keydown' && (event as KeyboardEvent).key === 'Escape' && !this.hiddenFromView) {\n this.hiddenFromView = true\n }\n }\n\n static observedAttributes = ['data-type', 'data-direction', 'id']\n\n #update() {\n if (this.hiddenFromView) {\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.hiddenFromView = 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 let labelledBy = this.control.getAttribute('aria-labelledby')\n if (labelledBy) {\n labelledBy = `${labelledBy} ${this.id}`\n } else {\n labelledBy = this.id\n }\n this.control.setAttribute('aria-labelledby', labelledBy)\n\n // Prevent duplicate accessible name announcements.\n this.setAttribute('aria-hidden', 'true')\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 (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.hiddenFromView) 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"],"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","__decorate","decorators","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__classPrivateFieldGet","receiver","kind","f","TypeError","call","__classPrivateFieldSet","controllers","WeakSet","bindShadow","bindElements","listenForBind","observers","closed","observer","MutationObserver","mutations","mutation","bindActions","addedNodes","observe","childList","subtree","attributeFilter","subscription","disconnect","handleEvent","binding","bindings","controller","tag","method","shadowController","action","split","eventSep","lastIndexOf","methodSep","dasherize","str","description","toLowerCase","mustDasherize","dashed","includes","DOMException","initialized","initializeAttrs","instance","names","proto","getPrototypeOf","prefix","constructor","attrPrefix","meta","descriptor","configurable","Number","toggleAttribute","symbol","Symbol","for","CatalystDelegate","classObject","delegate","disconnectedCallback","attributes","observed","attrToAttributeName","map","concat","defineObservedAttributes","register","upgrade","template","cloneNode","autoShadowRoot","hasOwnProperty","parent","Map","Set","findTarget","middle","timer","last","cancelled","fn","args","now","apply","cancel","throttle","readyState","AbortController","signal","listenerOptions","handler","ToggleSwitchElement","link","csrf","csrfElement","csrfField","isRemote","setLoadingState","check","performToggle","isDisabled","switch","isOn","turnOff","turnOn","disable","errorIcon","loadingSpinner","setFinishedState","error","enable","FormData","fetch","credentials","ok","setSuccessState","setErrorState","opts","db","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","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","disabled","hiddenInert","hiddenInputInert","sentinelInert","sizeInert","visibilityInert","visibility","clientRectsInert","getClientRects","tabIndex","signalSupported","noop","create","originalAddEventListener","EventTarget","originalCallback","optionsOrCapture","AbortSignal","monkeyPatch","suspendedTrapStack","activeTrap","focusTrap","initialFocus","abortSignal","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","hiddenFromView","toggle","isConnected","_ToolTipElement_instances","_ToolTipElement_update","styles","toFixed","labelledBy","describedBy","focusIfNeeded","tooltip","_ToolTipElement_updatePosition","ModalDialogElement","_ModalDialogElement_focusAbortController","_ModalDialogElement_abortController","_ModalDialogElement_openButton","_ModalDialogElement_shouldTryLoadingFragment","_ModalDialogElement_instances","_ModalDialogElement_overlayBackdrop_get","aborted","showButtons","clickOutsideDialog","dialogId","show","dialogEvent"],"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/@github/catalyst/lib/bind.js","../../../node_modules/@github/catalyst/lib/dasherize.js","../../../node_modules/@github/catalyst/lib/attr.js","../../../node_modules/@github/catalyst/lib/core.js","../../../node_modules/@github/catalyst/lib/register.js","../../../node_modules/@github/catalyst/lib/auto-shadow-root.js","../../../node_modules/@github/catalyst/lib/target.js","../../../node_modules/@github/catalyst/lib/findtarget.js","../../../node_modules/@github/mini-throttle/dist/index.js","../../../node_modules/@github/catalyst/lib/lazy-define.js","../../components/primer/alpha/toggle-switch-element.ts","../../../node_modules/@github/mini-throttle/dist/decorators.js","../../../node_modules/@github/catalyst/lib/controller.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 controllers = new WeakSet();\n/*\n * Bind `[data-action]` elements from the DOM to their actions.\n *\n */\nexport function bind(controller) {\n controllers.add(controller);\n if (controller.shadowRoot)\n bindShadow(controller.shadowRoot);\n bindElements(controller);\n listenForBind(controller.ownerDocument);\n}\nexport function bindShadow(root) {\n bindElements(root);\n listenForBind(root);\n}\nconst observers = new WeakMap();\n/**\n * Set up observer that will make sure any actions that are dynamically\n * injected into `el` will be bound to it's controller.\n *\n * This returns a Subscription object which you can call `unsubscribe()` on to\n * stop further live updates.\n */\nexport function listenForBind(el = document) {\n if (observers.has(el))\n return observers.get(el);\n let closed = false;\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.target instanceof Element) {\n bindActions(mutation.target);\n }\n else if (mutation.type === 'childList' && mutation.addedNodes.length) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element) {\n bindElements(node);\n }\n }\n }\n }\n });\n observer.observe(el, { childList: true, subtree: true, attributeFilter: ['data-action'] });\n const subscription = {\n get closed() {\n return closed;\n },\n unsubscribe() {\n closed = true;\n observers.delete(el);\n observer.disconnect();\n }\n };\n observers.set(el, subscription);\n return subscription;\n}\nfunction bindElements(root) {\n for (const el of root.querySelectorAll('[data-action]')) {\n bindActions(el);\n }\n // Also bind the controller to itself\n if (root instanceof Element && root.hasAttribute('data-action')) {\n bindActions(root);\n }\n}\n// Bind a single function to all events to avoid anonymous closure performance penalty.\nfunction handleEvent(event) {\n const el = event.currentTarget;\n for (const binding of bindings(el)) {\n if (event.type === binding.type) {\n const controller = el.closest(binding.tag);\n if (controllers.has(controller) && typeof controller[binding.method] === 'function') {\n controller[binding.method](event);\n }\n const root = el.getRootNode();\n if (root instanceof ShadowRoot && controllers.has(root.host) && root.host.matches(binding.tag)) {\n const shadowController = root.host;\n if (typeof shadowController[binding.method] === 'function') {\n shadowController[binding.method](event);\n }\n }\n }\n }\n}\nfunction* bindings(el) {\n for (const action of (el.getAttribute('data-action') || '').trim().split(/\\s+/)) {\n const eventSep = action.lastIndexOf(':');\n const methodSep = Math.max(0, action.lastIndexOf('#')) || action.length;\n yield {\n type: action.slice(0, eventSep),\n tag: action.slice(eventSep + 1, methodSep),\n method: action.slice(methodSep + 1) || 'handleEvent'\n } || 'handleEvent';\n }\n}\nfunction bindActions(el) {\n for (const binding of bindings(el)) {\n el.addEventListener(binding.type, handleEvent);\n }\n}\n//# sourceMappingURL=bind.js.map","export const dasherize = (str) => String(typeof str === 'symbol' ? str.description : str)\n .replace(/([A-Z]($|[a-z]))/g, '-$1')\n .replace(/--/g, '-')\n .replace(/^-|-$/, '')\n .toLowerCase();\nexport const mustDasherize = (str, type = 'property') => {\n const dashed = dasherize(str);\n if (!dashed.includes('-')) {\n throw new DOMException(`${type}: ${String(str)} is not a valid ${type} name`, 'SyntaxError');\n }\n return dashed;\n};\n//# sourceMappingURL=dasherize.js.map","import { mustDasherize } from './dasherize.js';\nimport { meta } from './core.js';\nconst attrKey = 'attr';\n/**\n * Attr is a decorator which tags a property as one to be initialized via\n * `initializeAttrs`.\n *\n * The signature is typed such that the property must be one of a String,\n * Number or Boolean. This matches the behavior of `initializeAttrs`.\n */\nexport function attr(proto, key) {\n meta(proto, attrKey).add(key);\n}\n/**\n * initializeAttrs is called with a set of class property names (if omitted, it\n * will look for any properties tagged with the `@attr` decorator). With this\n * list it defines property descriptors for each property that map to `data-*`\n * attributes on the HTMLElement instance.\n *\n * It works around Native Class Property semantics - which are equivalent to\n * calling `Object.defineProperty` on the instance upon creation, but before\n * `constructor()` is called.\n *\n * If a class property is assigned to the class body, it will infer the type\n * (using `typeof`) and define an appropriate getter/setter combo that aligns\n * to that type. This means class properties assigned to Numbers can only ever\n * be Numbers, assigned to Booleans can only ever be Booleans, and assigned to\n * Strings can only ever be Strings.\n *\n * This is automatically called as part of `@controller`. If a class uses the\n * `@controller` decorator it should not call this manually.\n */\nconst initialized = new WeakSet();\nexport function initializeAttrs(instance, names) {\n if (initialized.has(instance))\n return;\n initialized.add(instance);\n const proto = Object.getPrototypeOf(instance);\n const prefix = proto?.constructor?.attrPrefix ?? 'data-';\n if (!names)\n names = meta(proto, attrKey);\n for (const key of names) {\n const value = instance[key];\n const name = mustDasherize(`${prefix}${key}`);\n let descriptor = {\n configurable: true,\n get() {\n return this.getAttribute(name) || '';\n },\n set(newValue) {\n this.setAttribute(name, newValue || '');\n }\n };\n if (typeof value === 'number') {\n descriptor = {\n configurable: true,\n get() {\n return Number(this.getAttribute(name) || 0);\n },\n set(newValue) {\n this.setAttribute(name, newValue);\n }\n };\n }\n else if (typeof value === 'boolean') {\n descriptor = {\n configurable: true,\n get() {\n return this.hasAttribute(name);\n },\n set(newValue) {\n this.toggleAttribute(name, newValue);\n }\n };\n }\n Object.defineProperty(instance, key, descriptor);\n if (key in instance && !instance.hasAttribute(name)) {\n descriptor.set.call(instance, value);\n }\n }\n}\nexport function defineObservedAttributes(classObject) {\n let observed = classObject.observedAttributes || [];\n const prefix = classObject.attrPrefix ?? 'data-';\n const attrToAttributeName = (name) => mustDasherize(`${prefix}${name}`);\n Object.defineProperty(classObject, 'observedAttributes', {\n configurable: true,\n get() {\n return [...meta(classObject.prototype, attrKey)].map(attrToAttributeName).concat(observed);\n },\n set(attributes) {\n observed = attributes;\n }\n });\n}\n//# sourceMappingURL=attr.js.map","import { register } from './register.js';\nimport { bind, bindShadow } from './bind.js';\nimport { autoShadowRoot } from './auto-shadow-root.js';\nimport { defineObservedAttributes, initializeAttrs } from './attr.js';\nconst symbol = Symbol.for('catalyst');\nexport class CatalystDelegate {\n constructor(classObject) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const delegate = this;\n const connectedCallback = classObject.prototype.connectedCallback;\n classObject.prototype.connectedCallback = function () {\n delegate.connectedCallback(this, connectedCallback);\n };\n const disconnectedCallback = classObject.prototype.disconnectedCallback;\n classObject.prototype.disconnectedCallback = function () {\n delegate.disconnectedCallback(this, disconnectedCallback);\n };\n const attributeChangedCallback = classObject.prototype.attributeChangedCallback;\n classObject.prototype.attributeChangedCallback = function (name, oldValue, newValue) {\n delegate.attributeChangedCallback(this, name, oldValue, newValue, attributeChangedCallback);\n };\n let observedAttributes = classObject.observedAttributes || [];\n Object.defineProperty(classObject, 'observedAttributes', {\n configurable: true,\n get() {\n return delegate.observedAttributes(this, observedAttributes);\n },\n set(attributes) {\n observedAttributes = attributes;\n }\n });\n defineObservedAttributes(classObject);\n register(classObject);\n }\n observedAttributes(instance, observedAttributes) {\n return observedAttributes;\n }\n connectedCallback(instance, connectedCallback) {\n instance.toggleAttribute('data-catalyst', true);\n customElements.upgrade(instance);\n autoShadowRoot(instance);\n initializeAttrs(instance);\n bind(instance);\n connectedCallback?.call(instance);\n if (instance.shadowRoot)\n bindShadow(instance.shadowRoot);\n }\n disconnectedCallback(element, disconnectedCallback) {\n disconnectedCallback?.call(element);\n }\n attributeChangedCallback(instance, name, oldValue, newValue, attributeChangedCallback) {\n initializeAttrs(instance);\n if (name !== 'data-catalyst' && attributeChangedCallback) {\n attributeChangedCallback.call(instance, name, oldValue, newValue);\n }\n }\n}\nexport function meta(proto, name) {\n if (!Object.prototype.hasOwnProperty.call(proto, symbol)) {\n const parent = proto[symbol];\n const map = (proto[symbol] = new Map());\n if (parent) {\n for (const [key, value] of parent) {\n map.set(key, new Set(value));\n }\n }\n }\n const map = proto[symbol];\n if (!map.has(name))\n map.set(name, new Set());\n return map.get(name);\n}\n//# sourceMappingURL=core.js.map","import { dasherize } from './dasherize.js';\n/**\n * Register the controller as a custom element.\n *\n * The classname is converted to a approriate tag name.\n *\n * Example: HelloController => hello-controller\n */\nexport function register(classObject) {\n const name = dasherize(classObject.name).replace(/-element$/, '');\n try {\n window.customElements.define(name, classObject);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n window[classObject.name] = customElements.get(name);\n }\n catch (e) {\n // The only reason for window.customElements.define to throw a `NotSupportedError`\n // is if the element has already been defined.\n if (!(e instanceof DOMException && e.name === 'NotSupportedError'))\n throw e;\n }\n return classObject;\n}\n//# sourceMappingURL=register.js.map","export function autoShadowRoot(element) {\n for (const template of element.querySelectorAll('template[data-shadowroot]')) {\n if (template.parentElement === element) {\n element\n .attachShadow({\n mode: template.getAttribute('data-shadowroot') === 'closed' ? 'closed' : 'open'\n })\n .append(template.content.cloneNode(true));\n }\n }\n}\n//# sourceMappingURL=auto-shadow-root.js.map","import { findTarget, findTargets } from './findtarget.js';\nimport { meta } from './core.js';\n/**\n * Target is a decorator which - when assigned to a property field on the\n * class - will override that class field, turning it into a Getter which\n * returns a call to `findTarget(this, key)` where `key` is the name of the\n * property field. In other words, `@target foo` becomes a getter for\n * `findTarget(this, 'foo')`.\n */\nexport function target(proto, key) {\n meta(proto, 'target').add(key);\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n return findTarget(this, key);\n }\n });\n}\n/**\n * Targets is a decorator which - when assigned to a property field on the\n * class - will override that class field, turning it into a Getter which\n * returns a call to `findTargets(this, key)` where `key` is the name of the\n * property field. In other words, `@targets foo` becomes a getter for\n * `findTargets(this, 'foo')`.\n */\nexport function targets(proto, key) {\n meta(proto, 'targets').add(key);\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n return findTargets(this, key);\n }\n });\n}\n//# sourceMappingURL=target.js.map","/**\n * findTarget will run `querySelectorAll` against the given controller, plus\n * its shadowRoot, returning any the first child that:\n *\n * - Matches the selector of `[data-target~=\"tag.name\"]` where tag is the\n * tagName of the given HTMLElement, and `name` is the given `name` argument.\n *\n * - Closest ascendant of the element, that matches the tagname of the\n * controller, is the specific instance of the controller itself - in other\n * words it is not nested in other controllers of the same type.\n *\n */\nexport function findTarget(controller, name) {\n const tag = controller.tagName.toLowerCase();\n if (controller.shadowRoot) {\n for (const el of controller.shadowRoot.querySelectorAll(`[data-target~=\"${tag}.${name}\"]`)) {\n if (!el.closest(tag))\n return el;\n }\n }\n for (const el of controller.querySelectorAll(`[data-target~=\"${tag}.${name}\"]`)) {\n if (el.closest(tag) === controller)\n return el;\n }\n}\nexport function findTargets(controller, name) {\n const tag = controller.tagName.toLowerCase();\n const targets = [];\n if (controller.shadowRoot) {\n for (const el of controller.shadowRoot.querySelectorAll(`[data-targets~=\"${tag}.${name}\"]`)) {\n if (!el.closest(tag))\n targets.push(el);\n }\n }\n for (const el of controller.querySelectorAll(`[data-targets~=\"${tag}.${name}\"]`)) {\n if (el.closest(tag) === controller)\n targets.push(el);\n }\n return targets;\n}\n//# sourceMappingURL=findtarget.js.map","export function throttle(callback, wait = 0, { start = true, middle = true, once = false } = {}) {\n let last = 0;\n let timer;\n let cancelled = false;\n function fn(...args) {\n if (cancelled)\n return;\n const delta = Date.now() - last;\n last = Date.now();\n if (start) {\n start = false;\n callback.apply(this, args);\n if (once)\n fn.cancel();\n }\n else if ((middle && delta < wait) || !middle) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n last = Date.now();\n callback.apply(this, args);\n if (once)\n fn.cancel();\n }, !middle ? wait : wait - delta);\n }\n }\n fn.cancel = () => {\n clearTimeout(timer);\n cancelled = true;\n };\n return fn;\n}\nexport function debounce(callback, wait = 0, { start = false, middle = false, once = false } = {}) {\n return throttle(callback, wait, { start, middle, once });\n}\n","const dynamicElements = new Map();\nconst ready = new Promise(resolve => {\n if (document.readyState !== 'loading') {\n resolve();\n }\n else {\n document.addEventListener('readystatechange', () => resolve(), { once: true });\n }\n});\nconst firstInteraction = new Promise(resolve => {\n const controller = new AbortController();\n controller.signal.addEventListener('abort', () => resolve());\n const listenerOptions = { once: true, passive: true, signal: controller.signal };\n const handler = () => controller.abort();\n document.addEventListener('mousedown', handler, listenerOptions);\n // eslint-disable-next-line github/require-passive-events\n document.addEventListener('touchstart', handler, listenerOptions);\n document.addEventListener('keydown', handler, listenerOptions);\n document.addEventListener('pointerdown', handler, listenerOptions);\n});\nconst visible = (tagName) => new Promise(resolve => {\n const observer = new IntersectionObserver(entries => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n resolve();\n observer.disconnect();\n return;\n }\n }\n }, {\n // Currently the threshold is set to 256px from the bottom of the viewport\n // with a threshold of 0.1. This means the element will not load until about\n // 2 keyboard-down-arrow presses away from being visible in the viewport,\n // giving us some time to fetch it before the contents are made visible\n rootMargin: '0px 0px 256px 0px',\n threshold: 0.01\n });\n for (const el of document.querySelectorAll(tagName)) {\n observer.observe(el);\n }\n});\nconst strategies = {\n ready: () => ready,\n firstInteraction: () => firstInteraction,\n visible\n};\nconst timers = new WeakMap();\nfunction scan(node) {\n cancelAnimationFrame(timers.get(node) || 0);\n timers.set(node, requestAnimationFrame(() => {\n for (const tagName of dynamicElements.keys()) {\n const child = node.matches(tagName) ? node : node.querySelector(tagName);\n if (customElements.get(tagName) || child) {\n const strategyName = (child?.getAttribute('data-load-on') || 'ready');\n const strategy = strategyName in strategies ? strategies[strategyName] : strategies.ready;\n // eslint-disable-next-line github/no-then\n for (const cb of dynamicElements.get(tagName) || [])\n strategy(tagName).then(cb);\n dynamicElements.delete(tagName);\n timers.delete(node);\n }\n }\n }));\n}\nlet elementLoader;\nexport function lazyDefine(tagName, callback) {\n if (!dynamicElements.has(tagName))\n dynamicElements.set(tagName, new Set());\n dynamicElements.get(tagName).add(callback);\n scan(document.body);\n if (!elementLoader) {\n elementLoader = new MutationObserver(mutations => {\n if (!dynamicElements.size)\n return;\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element)\n scan(node);\n }\n }\n });\n elementLoader.observe(document, { subtree: true, childList: true });\n }\n}\n//# sourceMappingURL=lazy-define.js.map","/* eslint-disable custom-elements/expose-class-on-global */\n/* eslint-disable custom-elements/define-tag-after-class-definition */\n\nimport {controller, target} from '@github/catalyst'\nimport {debounce} from '@github/mini-throttle/decorators'\n\n@controller\nexport class ToggleSwitchElement extends HTMLElement {\n @target switch: HTMLElement\n @target loadingSpinner: HTMLElement\n @target errorIcon: HTMLElement\n\n get src(): string | null {\n const src = this.getAttribute('src')\n if (!src) return null\n\n const link = this.ownerDocument.createElement('a')\n link.href = src\n return link.href\n }\n\n get csrf(): string | null {\n const csrfElement = this.querySelector('[data-csrf]')\n return this.getAttribute('csrf') || (csrfElement instanceof HTMLInputElement && csrfElement.value) || null\n }\n\n get csrfField(): string {\n // the authenticity token is passed into the element and is not generated in js land\n\n return this.getAttribute('csrf-field') || 'authenticity_token'\n }\n\n isRemote(): boolean {\n return this.src != null\n }\n\n toggle() {\n if (this.isRemote()) {\n this.setLoadingState()\n this.check()\n } else {\n this.performToggle()\n }\n }\n\n turnOn(): void {\n if (this.isDisabled()) {\n return\n }\n\n this.switch.setAttribute('aria-checked', 'true')\n this.classList.add('ToggleSwitch--checked')\n }\n\n turnOff(): void {\n if (this.isDisabled()) {\n return\n }\n\n this.switch.setAttribute('aria-checked', 'false')\n this.classList.remove('ToggleSwitch--checked')\n }\n\n isOn(): boolean {\n return this.switch.getAttribute('aria-checked') === 'true'\n }\n\n isOff(): boolean {\n return !this.isOn()\n }\n\n isDisabled(): boolean {\n return this.switch.getAttribute('aria-disabled') === 'true'\n }\n\n disable(): void {\n this.switch.setAttribute('aria-disabled', 'true')\n }\n\n enable(): void {\n this.switch.setAttribute('aria-disabled', 'false')\n }\n\n private performToggle(): void {\n if (this.isOn()) {\n this.turnOff()\n } else {\n this.turnOn()\n }\n }\n\n private setLoadingState(): void {\n this.disable()\n this.errorIcon.setAttribute('hidden', 'hidden')\n this.loadingSpinner.removeAttribute('hidden')\n }\n\n private setSuccessState(): void {\n this.setFinishedState(false)\n }\n\n private setErrorState(): void {\n this.setFinishedState(true)\n }\n\n private setFinishedState(error: boolean): void {\n if (error) {\n this.errorIcon.removeAttribute('hidden')\n }\n\n this.loadingSpinner.setAttribute('hidden', 'hidden')\n this.enable()\n }\n\n @debounce(300)\n private async check() {\n const body = new FormData()\n\n if (this.csrf) {\n body.append(this.csrfField, this.csrf)\n }\n\n body.append('value', this.isOn() ? '1' : '0')\n\n try {\n if (!this.src) throw new Error('invalid src')\n const response = await fetch(this.src, {\n credentials: 'same-origin',\n method: 'POST',\n body\n })\n if (response.ok) {\n this.setSuccessState()\n this.performToggle()\n } else {\n this.setErrorState()\n }\n } catch (error) {\n this.setErrorState()\n }\n }\n}\n\ndeclare global {\n interface Window {\n ToggleSwitchElement: typeof ToggleSwitchElement\n }\n}\n","import { debounce as db, throttle as th } from './index';\nexport function throttle(wait = 0, opts = {}) {\n return (proto, name, descriptor) => {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error('debounce can only decorate functions');\n }\n const fn = descriptor.value;\n descriptor.value = th(fn, wait, opts);\n Object.defineProperty(proto, name, descriptor);\n };\n}\nexport function debounce(wait = 0, opts = {}) {\n return (proto, name, descriptor) => {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error('debounce can only decorate functions');\n }\n const fn = descriptor.value;\n descriptor.value = db(fn, wait, opts);\n Object.defineProperty(proto, name, descriptor);\n };\n}\n","import { CatalystDelegate } from './core.js';\n/**\n * Controller is a decorator to be used over a class that extends HTMLElement.\n * It will automatically `register()` the component in the customElement\n * registry, as well as ensuring `bind(this)` is called on `connectedCallback`,\n * wrapping the classes `connectedCallback` method if needed.\n */\nexport function controller(classObject) {\n new CatalystDelegate(classObject);\n}\n//# sourceMappingURL=controller.js.map","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","import type {AnchorAlignment, AnchorSide} from '@primer/behaviors'\nimport {getAnchoredPosition} from '@primer/behaviors'\n\nconst TOOLTIP_OPEN_CLASS = 'tooltip-open'\nconst TOOLTIP_ARROW_EDGE_OFFSET = 6\nconst TOOLTIP_SR_ONLY_CLASS = 'sr-only'\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 set hiddenFromView(value: true | false) {\n this.classList.toggle(TOOLTIP_SR_ONLY_CLASS, value)\n if (this.isConnected) this.#update()\n }\n\n get hiddenFromView() {\n return this.classList.contains(TOOLTIP_SR_ONLY_CLASS)\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.hiddenFromView = 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.hiddenFromView) {\n this.hiddenFromView = false\n } else if (event.type === 'blur') {\n this.hiddenFromView = true\n } else if (\n event.type === 'mouseleave' &&\n (event as MouseEvent).relatedTarget !== this.control &&\n (event as MouseEvent).relatedTarget !== this\n ) {\n this.hiddenFromView = true\n } else if (event.type === 'keydown' && (event as KeyboardEvent).key === 'Escape' && !this.hiddenFromView) {\n this.hiddenFromView = true\n }\n }\n\n static observedAttributes = ['data-type', 'data-direction', 'id']\n\n #update() {\n if (this.hiddenFromView) {\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.hiddenFromView = 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 let labelledBy = this.control.getAttribute('aria-labelledby')\n if (labelledBy) {\n labelledBy = `${labelledBy} ${this.id}`\n } else {\n labelledBy = this.id\n }\n this.control.setAttribute('aria-labelledby', labelledBy)\n\n // Prevent duplicate accessible name announcements.\n this.setAttribute('aria-hidden', 'true')\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 (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.hiddenFromView) 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 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(closedNotCancelled = false) {\n if (this.open === false) return\n const eventType = closedNotCancelled ? '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"],"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","__decorate","decorators","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__classPrivateFieldGet","receiver","kind","f","TypeError","call","__classPrivateFieldSet","controllers","WeakSet","bindShadow","bindElements","listenForBind","observers","closed","observer","MutationObserver","mutations","mutation","bindActions","addedNodes","observe","childList","subtree","attributeFilter","subscription","disconnect","handleEvent","binding","bindings","controller","tag","method","shadowController","action","split","eventSep","lastIndexOf","methodSep","dasherize","str","description","toLowerCase","mustDasherize","dashed","includes","DOMException","initialized","initializeAttrs","instance","names","proto","getPrototypeOf","prefix","constructor","attrPrefix","meta","descriptor","configurable","Number","toggleAttribute","symbol","Symbol","for","CatalystDelegate","classObject","delegate","disconnectedCallback","attributes","observed","attrToAttributeName","map","concat","defineObservedAttributes","register","upgrade","template","cloneNode","autoShadowRoot","hasOwnProperty","parent","Map","Set","findTarget","middle","timer","last","cancelled","fn","args","now","apply","cancel","throttle","readyState","AbortController","signal","listenerOptions","handler","ToggleSwitchElement","link","csrf","csrfElement","csrfField","isRemote","setLoadingState","check","performToggle","isDisabled","switch","isOn","turnOff","turnOn","disable","errorIcon","loadingSpinner","setFinishedState","error","enable","FormData","fetch","credentials","ok","setSuccessState","setErrorState","opts","db","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","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","disabled","hiddenInert","hiddenInputInert","sentinelInert","sizeInert","visibilityInert","visibility","clientRectsInert","getClientRects","tabIndex","signalSupported","noop","create","originalAddEventListener","EventTarget","originalCallback","optionsOrCapture","AbortSignal","monkeyPatch","suspendedTrapStack","activeTrap","focusTrap","initialFocus","abortSignal","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","hiddenFromView","toggle","isConnected","_ToolTipElement_instances","_ToolTipElement_update","styles","toFixed","labelledBy","describedBy","focusIfNeeded","tooltip","_ToolTipElement_updatePosition","ModalDialogElement","_ModalDialogElement_focusAbortController","_ModalDialogElement_abortController","_ModalDialogElement_openButton","_ModalDialogElement_shouldTryLoadingFragment","_ModalDialogElement_instances","_ModalDialogElement_overlayBackdrop_get","aborted","showButtons","clickOutsideDialog","dialogId","show","closedNotCancelled","dialogEvent"],"mappings":"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"} \ No newline at end of file diff --git a/app/components/primer/alpha/modal-dialog-element.ts b/app/components/primer/alpha/modal-dialog-element.ts index c1383d60e9..f93ab8abda 100644 --- a/app/components/primer/alpha/modal-dialog-element.ts +++ b/app/components/primer/alpha/modal-dialog-element.ts @@ -90,7 +90,6 @@ export class ModalDialogElement extends HTMLElement { 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() @@ -110,9 +109,9 @@ export class ModalDialogElement extends HTMLElement { this.open = true } - close(closed = false) { + close(closedNotCancelled = false) { if (this.open === false) return - const eventType = closed ? 'close' : 'cancel' + const eventType = closedNotCancelled ? 'close' : 'cancel' const dialogEvent = new Event(eventType) this.dispatchEvent(dialogEvent) this.open = false From f8cf3d19287ff8134bf3718ed065fbd72556196f Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Wed, 24 Aug 2022 17:26:12 +0100 Subject: [PATCH 08/27] clean up if block --- app/components/primer/alpha/dialog.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/components/primer/alpha/dialog.rb b/app/components/primer/alpha/dialog.rb index 2b35e48251..5ad2722c2f 100644 --- a/app/components/primer/alpha/dialog.rb +++ b/app/components/primer/alpha/dialog.rb @@ -124,10 +124,10 @@ def initialize( @title = title @subtitle = subtitle - if subtitle.present? - @system_arguments[:aria] ||= {} - @system_arguments[:aria][:describedby] ||= "#{@id}-description" - end + return if subtitle.present? + + @system_arguments[:aria] ||= {} + @system_arguments[:aria][:describedby] ||= "#{@id}-description" end def before_render From ae81e10bca024f22f749ff35cf6ce094377841b8 Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Wed, 24 Aug 2022 17:26:19 +0100 Subject: [PATCH 09/27] drop unused argument --- app/components/primer/alpha/dialog/header.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/components/primer/alpha/dialog/header.rb b/app/components/primer/alpha/dialog/header.rb index 140a528e6c..d0dd9e03c2 100644 --- a/app/components/primer/alpha/dialog/header.rb +++ b/app/components/primer/alpha/dialog/header.rb @@ -14,7 +14,6 @@ def initialize( id:, title:, subtitle: nil, - subtitle_id: nil, show_divider: true, **system_arguments ) From b5f756dd72d73dc20e8f2f24b48d12393cc28015 Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Wed, 24 Aug 2022 18:25:05 +0100 Subject: [PATCH 10/27] migrate to beta closebutton --- app/components/primer/alpha/dialog/header.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/primer/alpha/dialog/header.html.erb b/app/components/primer/alpha/dialog/header.html.erb index a654ed626d..24c7662869 100644 --- a/app/components/primer/alpha/dialog/header.html.erb +++ b/app/components/primer/alpha/dialog/header.html.erb @@ -7,7 +7,7 @@ <% end %>
- <%= render Primer::CloseButton.new(classes: "Overlay-closeButton", "data-close-dialog-id": @id) %> + <%= render Primer::Beta::CloseButton.new(classes: "Overlay-closeButton", "data-close-dialog-id": @id) %>
<% end %> From 5928bfe63559ee159fc182d385efd0aed1c4ee45 Mon Sep 17 00:00:00 2001 From: Katie Langerman Date: Tue, 30 Aug 2022 07:46:18 -0700 Subject: [PATCH 11/27] Update sizing and position (#1341) * update height/width to size * fix narrow * remove small portrait * update param descriptions, add hide title --- app/components/primer/alpha/dialog.html.erb | 2 +- app/components/primer/alpha/dialog.rb | 72 ++++++++++++------- app/components/primer/alpha/dialog/footer.rb | 4 +- .../primer/alpha/dialog/header.html.erb | 2 +- app/components/primer/alpha/dialog/header.rb | 11 +-- lookbook/Gemfile.lock | 4 +- test/previews/primer/alpha/dialog_preview.rb | 37 ++++++---- .../primer/alpha/dialog_preview/test.html.erb | 2 +- .../alpha/dialog_preview/with_footer.html.erb | 2 +- .../alpha/dialog_preview/with_form.html.erb | 2 +- 10 files changed, 85 insertions(+), 53 deletions(-) diff --git a/app/components/primer/alpha/dialog.html.erb b/app/components/primer/alpha/dialog.html.erb index 865a8ee708..8ebded10ce 100644 --- a/app/components/primer/alpha/dialog.html.erb +++ b/app/components/primer/alpha/dialog.html.erb @@ -1,5 +1,5 @@ <%= show_button %> -
+
<%= render Primer::BaseComponent.new(**@system_arguments) do %> <%= header %> <% if content.present? %> diff --git a/app/components/primer/alpha/dialog.rb b/app/components/primer/alpha/dialog.rb index 5ad2722c2f..0768452f01 100644 --- a/app/components/primer/alpha/dialog.rb +++ b/app/components/primer/alpha/dialog.rb @@ -18,24 +18,34 @@ module Alpha # `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" + DEFAULT_SIZE = :medium + SIZE_MAPPINGS = { + :small => "Overlay--size-small", + :medium_portrait => "Overlay--size-medium-portrait", + DEFAULT_SIZE => "Overlay--size-medium", + :large => "Overlay--size-large", + :xlarge => "Overlay--size-xlarge", }.freeze - WIDTH_OPTIONS = WIDTH_MAPPINGS.keys + SIZE_OPTIONS = SIZE_MAPPINGS.keys - DEFAULT_HEIGHT = :auto - HEIGHT_MAPPINGS = { - :small => "Overlay--height-small", - DEFAULT_HEIGHT => "Overlay--height-auto", - :large => "Overlay--height-large", - :xlarge => "Overlay--height-xlarge" + DEFAULT_POSITION = :center + POSITION_MAPPINGS = { + DEFAULT_POSITION => "Overlay-backdrop--center", + :left => "Overlay-backdrop--side Overlay-backdrop--placement-left", + :right => "Overlay-backdrop--side Overlay-backdrop--placement-right", }.freeze - HEIGHT_OPTIONS = HEIGHT_MAPPINGS.keys + POSITION_OPTIONS = POSITION_MAPPINGS.keys + + DEFAULT_POSITION_NARROW = :inherit + POSITION_NARROW_MAPPINGS = { + DEFAULT_POSITION_NARROW => "", + :bottom => "Overlay-backdrop--side-whenNarrow Overlay-backdrop--placement-bottom-whenNarrow", + :fullscreen => "Overlay-backdrop--full-whenNarrow", + :left => "Overlay-backdrop--side-whenNarrow Overlay-backdrop--placement-left-whenNarrow", + :right => "Overlay-backdrop--side-whenNarrow Overlay-backdrop--placement-right-whenNarrow", + }.freeze + POSITION_NARROW_OPTIONS = POSITION_NARROW_MAPPINGS.keys + # Optional button to open the dialog. # @@ -52,14 +62,16 @@ class Dialog < Primer::Component # Header content. # - # @param show_divider [Boolean] If true the visual dividing line between the header and body will be visible + # @param show_divider [Boolean] Show a divider between the header and body. + # @param visually_hide_title [Boolean] Visually hide the `title` while maintaining a label for assistive technologies. # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> - renders_one :header, lambda { |show_divider: true, **system_arguments| + renders_one :header, lambda { |show_divider: false, visually_hide_title: false, **system_arguments| Primer::Alpha::Dialog::Header.new( id: @id, title: @title, subtitle: @subtitle, show_divider: show_divider, + visually_hide_title: visually_hide_title, **system_arguments ) } @@ -71,7 +83,7 @@ class Dialog < Primer::Component # Footer content. # - # @param show_divider [Boolean] If true the visual dividing line between the body and footer will be visible + # @param show_divider [Boolean] Show a divider between the footer and body. # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> renders_one :footer, "Footer" @@ -93,16 +105,17 @@ class Dialog < Primer::Component # <% 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 height [Symbol] The height of the dialog. <%= one_of(Primer::Alpha::Dialog::HEIGHT_OPTIONS) %> + # @param title [String] Describes the content of the dialog. + # @param subtitle [String] Provides dditional context for the dialog, also setting the `aria-describedby` attribute. + # @param size [Symbol] The size of the dialog. <%= one_of(Primer::Alpha::Dialog::SIZE_OPTIONS) %> # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> def initialize( title:, subtitle: nil, - width: DEFAULT_WIDTH, - height: DEFAULT_HEIGHT, + size: DEFAULT_SIZE, + position: DEFAULT_POSITION, + position_narrow: DEFAULT_POSITION_NARROW, + visually_hide_title: false, id: "dialog-#{(36**3 + rand(36**4)).to_s(36)}", **system_arguments ) @@ -114,14 +127,21 @@ def initialize( @system_arguments[:aria] = { modal: true } @system_arguments[:classes] = class_names( "Overlay", - WIDTH_MAPPINGS[fetch_or_fallback(WIDTH_OPTIONS, width, DEFAULT_WIDTH)], - HEIGHT_MAPPINGS[fetch_or_fallback(HEIGHT_OPTIONS, height, DEFAULT_HEIGHT)], + "Overlay-whenNarrow", + SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, DEFAULT_SIZE)], "Overlay--motion-scaleFade", system_arguments[:classes] ) + @backdrop_classes = class_names( + POSITION_MAPPINGS[fetch_or_fallback(POSITION_OPTIONS, position, DEFAULT_POSITION)], + POSITION_NARROW_MAPPINGS[fetch_or_fallback(POSITION_NARROW_MAPPINGS, position_narrow, DEFAULT_POSITION_NARROW)], + ) @id = id.to_s @title = title + @position = position + @position_narrow = position_narrow + @visually_hide_title = visually_hide_title @subtitle = subtitle return if subtitle.present? diff --git a/app/components/primer/alpha/dialog/footer.rb b/app/components/primer/alpha/dialog/footer.rb index b89948f951..ff9fb977e2 100644 --- a/app/components/primer/alpha/dialog/footer.rb +++ b/app/components/primer/alpha/dialog/footer.rb @@ -6,10 +6,10 @@ 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 show_divider [Boolean] If true the visual dividing line between the body and footer will be visible + # @param show_divider [Boolean] Show a divider between the footer and body. # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> def initialize( - show_divider: true, + show_divider: false, **system_arguments ) @system_arguments = deny_tag_argument(**system_arguments) diff --git a/app/components/primer/alpha/dialog/header.html.erb b/app/components/primer/alpha/dialog/header.html.erb index 24c7662869..aa2de999e4 100644 --- a/app/components/primer/alpha/dialog/header.html.erb +++ b/app/components/primer/alpha/dialog/header.html.erb @@ -1,7 +1,7 @@ <%= render Primer::BaseComponent.new(**@system_arguments) do %>
-

<%= @title %>

+

<%= @title %>

<% if @subtitle.present? %>

<%= @subtitle %>

<% end %> diff --git a/app/components/primer/alpha/dialog/header.rb b/app/components/primer/alpha/dialog/header.rb index d0dd9e03c2..b7c423795d 100644 --- a/app/components/primer/alpha/dialog/header.rb +++ b/app/components/primer/alpha/dialog/header.rb @@ -6,20 +6,23 @@ 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 show_divider [Boolean] If true the visual dividing line between the body and footer will be visible + # @param title [String] Describes the content of the dialog. + # @param subtitle [String] Provides dditional context for the dialog, also setting the `aria-describedby` attribute. + # @param show_divider [Boolean] Show a divider between the header and body. + # @param visually_hide_title [Boolean] Visually hide the `title` while maintaining a label for assistive technologies. # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> def initialize( id:, title:, subtitle: nil, - show_divider: true, + show_divider: false, + visually_hide_title: false, **system_arguments ) @id = id @title = title @subtitle = subtitle + @visually_hide_title = visually_hide_title ? "sr-only" : nil @system_arguments = deny_tag_argument(**system_arguments) @system_arguments[:tag] = :header @system_arguments[:classes] = class_names( diff --git a/lookbook/Gemfile.lock b/lookbook/Gemfile.lock index f5fb5210df..42f89f2417 100644 --- a/lookbook/Gemfile.lock +++ b/lookbook/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: .. specs: - primer_view_components (0.0.88) + primer_view_components (0.0.92) actionview (>= 5.0.0) activesupport (>= 5.0.0) octicons (>= 17.0.0) @@ -160,7 +160,7 @@ GEM racc (~> 1.4) nokogiri (1.13.8-x86_64-linux) racc (~> 1.4) - octicons (17.4.0) + octicons (17.4.1) public_suffix (4.0.7) puma (5.6.4) nio4r (~> 2.0) diff --git a/test/previews/primer/alpha/dialog_preview.rb b/test/previews/primer/alpha/dialog_preview.rb index dd50f1817b..096ab54c95 100644 --- a/test/previews/primer/alpha/dialog_preview.rb +++ b/test/previews/primer/alpha/dialog_preview.rb @@ -9,29 +9,42 @@ class DialogPreview < ViewComponent::Preview # @param title [String] text # @param subtitle [String] text # @param button_text [String] text - # @param width [Symbol] select [small, medium, large, xlarge, xxlarge] - # @param height [Symbol] select [small, auto, large, xlarge] - def default(title: "Test Dialog", subtitle: nil, width: :medium, height: :auto, button_text: "Show Dialog") - render(Primer::Alpha::Dialog.new(title: title, width: width, height: height, subtitle: subtitle)) do |d| + # @param size [Symbol] select [small, medium, medium_portrait, large, xlarge] + # @param position [Symbol] select [center, left, right] + # @param position_narrow [Symbol] select [inherit, bottom, fullscreen, left, right] + # @param visually_hide_title [Boolean] toggle + def default(title: "Test Dialog", subtitle: nil, size: :medium, button_text: "Show Dialog", position: :center, position_narrow: :fullscreen, visually_hide_title: false) + render(Primer::Alpha::Dialog.new(title: title, subtitle: subtitle, size: size, position: position, position_narrow: position_narrow, visually_hide_title: visually_hide_title)) do |d| d.show_button { button_text } d.body { "Content" } end end + # @label Long text + # + # @param title [String] text + # @param subtitle [String] text + # @param button_text [String] text + # @param size [Symbol] select [small, medium, medium_portrait, large, xlarge] + # @param position [Symbol] select [center, left, right] + # @param position_narrow [Symbol] select [inherit, bottom, fullscreen, left, right] + def long_text(title: "Test Dialog", subtitle: nil, size: :medium, button_text: "Show Dialog", position: :center, position_narrow: :fullscreen) + render(Primer::Alpha::Dialog.new(title: title, subtitle: subtitle, size: size, position: position, position_narrow: position_narrow)) do |d| + d.show_button { button_text } + d.body { "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?" } + end + end + # @label With Footer # # @param title [String] text # @param subtitle [String] text # @param button_text [String] text - # @param width [Symbol] select [small, medium, large, xlarge, xxlarge] - # @param height [Symbol] select [small, auto, large, xlarge] # @param show_divider [Boolean] toggle - def with_footer(title: "Test Dialog", subtitle: nil, width: :medium, height: :auto, button_text: "Show Dialog", show_divider: true) + def with_footer(title: "Test Dialog", subtitle: nil, button_text: "Show Dialog", show_divider: true) render_with_template(locals: { title: title, subtitle: subtitle, - width: width, - height: height, button_text: button_text, show_divider: show_divider }) @@ -42,15 +55,11 @@ def with_footer(title: "Test Dialog", subtitle: nil, width: :medium, height: :au # @param title [String] text # @param subtitle [String] text # @param button_text [String] text - # @param width [Symbol] select [small, medium, large, xlarge, xxlarge] - # @param height [Symbol] select [small, auto, large, xlarge] # @param show_divider [Boolean] toggle - def with_form(title: "Test Dialog", subtitle: nil, width: :medium, height: :auto, button_text: "Show Dialog", show_divider: true) + def with_form(title: "Test Dialog", subtitle: nil, button_text: "Show Dialog", show_divider: true) render_with_template(locals: { title: title, subtitle: subtitle, - width: width, - height: height, button_text: button_text, show_divider: show_divider }) diff --git a/test/previews/primer/alpha/dialog_preview/test.html.erb b/test/previews/primer/alpha/dialog_preview/test.html.erb index 78e9d13bcf..b39d9cd7a3 100644 --- a/test/previews/primer/alpha/dialog_preview/test.html.erb +++ b/test/previews/primer/alpha/dialog_preview/test.html.erb @@ -1,4 +1,4 @@ -<%= render(Primer::Alpha::Dialog.new(title: title, width: width, height: height, subtitle: subtitle)) do |d| %> +<%= render(Primer::Alpha::Dialog.new(title: title, subtitle: subtitle)) do |d| %> <% d.show_button { @button_text } %> <% d.body { "Content" } %> <% d.footer do %> diff --git a/test/previews/primer/alpha/dialog_preview/with_footer.html.erb b/test/previews/primer/alpha/dialog_preview/with_footer.html.erb index ee0a458b62..c3d80de706 100644 --- a/test/previews/primer/alpha/dialog_preview/with_footer.html.erb +++ b/test/previews/primer/alpha/dialog_preview/with_footer.html.erb @@ -1,4 +1,4 @@ -<%= render(Primer::Alpha::Dialog.new(id: "my-dialog", title: title, width: width, height: height, subtitle: subtitle)) do |d| %> +<%= render(Primer::Alpha::Dialog.new(id: "my-dialog", title: title, subtitle: subtitle)) do |d| %> <% d.show_button { button_text } %> <% d.body { "Content" } %> <% d.footer(show_divider: show_divider) do %> diff --git a/test/previews/primer/alpha/dialog_preview/with_form.html.erb b/test/previews/primer/alpha/dialog_preview/with_form.html.erb index 77825f695f..245cd7bda3 100644 --- a/test/previews/primer/alpha/dialog_preview/with_form.html.erb +++ b/test/previews/primer/alpha/dialog_preview/with_form.html.erb @@ -1,4 +1,4 @@ -<%= render(Primer::Alpha::Dialog.new(id: "my-dialog", title: title, width: width, height: height, subtitle: subtitle)) do |d| %> +<%= render(Primer::Alpha::Dialog.new(id: "my-dialog", title: title, subtitle: subtitle)) do |d| %> <% d.show_button { button_text } %>
<%= render(Primer::Alpha::Dialog::Body.new) do %> From aec9297c326da0e9563dc192b22416ac9aca4b22 Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Wed, 31 Aug 2022 16:50:38 +0100 Subject: [PATCH 12/27] make small dialog default to portrait Co-authored-by: Katie Langerman --- app/components/primer/alpha/dialog.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/primer/alpha/dialog.rb b/app/components/primer/alpha/dialog.rb index 0768452f01..2a5db3d9e5 100644 --- a/app/components/primer/alpha/dialog.rb +++ b/app/components/primer/alpha/dialog.rb @@ -20,7 +20,7 @@ module Alpha class Dialog < Primer::Component DEFAULT_SIZE = :medium SIZE_MAPPINGS = { - :small => "Overlay--size-small", + :small => "Overlay--size-small-portrait", :medium_portrait => "Overlay--size-medium-portrait", DEFAULT_SIZE => "Overlay--size-medium", :large => "Overlay--size-large", From 4a4a9d80ed0b5a0eb0f760855b49da3444843e35 Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Wed, 31 Aug 2022 16:50:56 +0100 Subject: [PATCH 13/27] pass through visually_hide_title to header Co-authored-by: Katie Langerman --- app/components/primer/alpha/dialog.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/primer/alpha/dialog.rb b/app/components/primer/alpha/dialog.rb index 2a5db3d9e5..6ab1304826 100644 --- a/app/components/primer/alpha/dialog.rb +++ b/app/components/primer/alpha/dialog.rb @@ -65,7 +65,7 @@ class Dialog < Primer::Component # @param show_divider [Boolean] Show a divider between the header and body. # @param visually_hide_title [Boolean] Visually hide the `title` while maintaining a label for assistive technologies. # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> - renders_one :header, lambda { |show_divider: false, visually_hide_title: false, **system_arguments| + renders_one :header, lambda { |show_divider: false, visually_hide_title: @visually_hide_title, **system_arguments| Primer::Alpha::Dialog::Header.new( id: @id, title: @title, From 519ac41ca519f5193ec15524362e0d2e5bcd1a7c Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Wed, 31 Aug 2022 16:51:20 +0100 Subject: [PATCH 14/27] allow content to override title/subtitle in header Co-authored-by: Katie Langerman --- app/components/primer/alpha/dialog/header.html.erb | 6 ++++-- app/components/primer/alpha/dialog/header.rb | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/components/primer/alpha/dialog/header.html.erb b/app/components/primer/alpha/dialog/header.html.erb index aa2de999e4..d655b2eb87 100644 --- a/app/components/primer/alpha/dialog/header.html.erb +++ b/app/components/primer/alpha/dialog/header.html.erb @@ -1,8 +1,10 @@ <%= render Primer::BaseComponent.new(**@system_arguments) do %>
-

<%= @title %>

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

<%= @title %>

+ <% if content.present? %> + <%= content %> + <% elsif @subtitle.present? %>

<%= @subtitle %>

<% end %>
diff --git a/app/components/primer/alpha/dialog/header.rb b/app/components/primer/alpha/dialog/header.rb index b7c423795d..2c2f89ee6b 100644 --- a/app/components/primer/alpha/dialog/header.rb +++ b/app/components/primer/alpha/dialog/header.rb @@ -22,7 +22,7 @@ def initialize( @id = id @title = title @subtitle = subtitle - @visually_hide_title = visually_hide_title ? "sr-only" : nil + @visually_hide_title = visually_hide_title @system_arguments = deny_tag_argument(**system_arguments) @system_arguments[:tag] = :header @system_arguments[:classes] = class_names( From 384f5dd79d92a9ba824d90f1fba92ef7471ea277 Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Wed, 31 Aug 2022 16:51:37 +0100 Subject: [PATCH 15/27] upgrade primer/css Co-authored-by: Katie Langerman --- lookbook/package.json | 2 +- lookbook/yarn.lock | 8 +-- package.json | 2 +- yarn.lock | 142 +++++++++++++++++++++--------------------- 4 files changed, 77 insertions(+), 77 deletions(-) diff --git a/lookbook/package.json b/lookbook/package.json index f7b1f58bf6..34fec64024 100644 --- a/lookbook/package.json +++ b/lookbook/package.json @@ -9,7 +9,7 @@ }, "dependencies": { "@koddsson/postcss-sass": "^5.0.1", - "@primer/css": "^20.3.0", + "@primer/css": "20.4.4", "autoprefixer": "^10.4.5", "postcss": "^8.4.12", "postcss-cli": "^9.1.0", diff --git a/lookbook/yarn.lock b/lookbook/yarn.lock index a461b0b5da..81dee9dd28 100644 --- a/lookbook/yarn.lock +++ b/lookbook/yarn.lock @@ -87,10 +87,10 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@primer/css@^20.3.0": - version "20.3.0" - resolved "https://registry.yarnpkg.com/@primer/css/-/css-20.3.0.tgz#d6a29e12a7906e94062470616cda54e38593e582" - integrity sha512-Jmr8SQ7qGI0YmANj9dKRY7uBd6S0NHcLROdd85JZMDR9rAqNAKjvUqlwd6mwu2ByoyUrEyz75BrQuklxW9YCfw== +"@primer/css@20.4.4": + version "20.4.4" + resolved "https://registry.yarnpkg.com/@primer/css/-/css-20.4.4.tgz#adeb2139f3d497f86d3778154695446d470b5f85" + integrity sha512-zTCNmTblf+A9mjzKMCjYuYfzD8cYRcLcj214qtsoJQ2iYEAPTwgKHCa3SmK5ww1imdQRLfkg79KGzma3qD/wmg== dependencies: "@primer/primitives" "^7.9.0" diff --git a/package.json b/package.json index 38649438d9..753dba5cee 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "@changesets/changelog-github": "^0.4.6", "@changesets/cli": "^2.24.1", "@github/prettier-config": "0.0.4", - "@primer/css": "^20.4.2", + "@primer/css": "20.4.4", "@primer/primitives": "^7.9.0", "@rollup/plugin-node-resolve": "^13.3.0", "@rollup/plugin-typescript": "^8.3.3", diff --git a/yarn.lock b/yarn.lock index a5115d4a12..88ab611845 100644 --- a/yarn.lock +++ b/yarn.lock @@ -457,7 +457,7 @@ "@humanwhocodes/config-array@^0.10.4": version "0.10.4" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz" integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== dependencies: "@humanwhocodes/object-schema" "^1.2.1" @@ -466,7 +466,7 @@ "@humanwhocodes/gitignore-to-minimatch@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" + resolved "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz" integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== "@humanwhocodes/object-schema@^1.2.1": @@ -522,10 +522,10 @@ resolved "https://registry.npmjs.org/@primer/behaviors/-/behaviors-1.1.3.tgz" integrity sha512-WpCcjAkXG7Lv3ZbaCUgASWKHnCi/pmuSEiyTmHHb6f5xhwk1mliixNL5ZZHtDN6RCcT3VnXUsyek4GopG2lbZQ== -"@primer/css@^20.4.2": - version "20.4.3" - resolved "https://registry.yarnpkg.com/@primer/css/-/css-20.4.3.tgz#09e0bb3635267edbca32a4455ba1b961ecc5ec23" - integrity sha512-d2+++ABwTqqO+TW/00lQ4Ddq7pVKf9xcEAhhsDiBTC+xH40mYAwfdAphD2gnzdrslfHEm8bbyPKG5G/681X/mg== +"@primer/css@20.4.4": + version "20.4.4" + resolved "https://registry.yarnpkg.com/@primer/css/-/css-20.4.4.tgz#adeb2139f3d497f86d3778154695446d470b5f85" + integrity sha512-zTCNmTblf+A9mjzKMCjYuYfzD8cYRcLcj214qtsoJQ2iYEAPTwgKHCa3SmK5ww1imdQRLfkg79KGzma3qD/wmg== dependencies: "@primer/primitives" "^7.9.0" @@ -714,12 +714,12 @@ acorn-jsx@^5.3.2: acorn@^8.8.0: version "8.8.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -778,7 +778,7 @@ argparse@^1.0.7: argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== aria-query@^4.2.2: @@ -849,7 +849,7 @@ axobject-query@^2.2.0: balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== better-path-resolve@1.0.0: @@ -871,7 +871,7 @@ boolbase@^1.0.0: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -933,12 +933,12 @@ call-bind@^1.0.0, call-bind@^1.0.2: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase-css@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== camelcase-keys@^6.2.2: @@ -1049,7 +1049,7 @@ color-convert@^1.9.0: color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" @@ -1061,7 +1061,7 @@ color-name@1.1.3: color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== colord@^2.9.1: @@ -1081,7 +1081,7 @@ commander@^7.2.0: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== core-js-pure@^3.20.2: @@ -1100,7 +1100,7 @@ cross-spawn@^5.1.0: cross-spawn@^7.0.2: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -1297,7 +1297,7 @@ decamelize@^4.0.0: deep-is@^0.1.3: version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: @@ -1358,7 +1358,7 @@ doctrine@^2.1.0: doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" @@ -1649,7 +1649,7 @@ eslint-utils@^3.0.0: eslint-visitor-keys@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== eslint-visitor-keys@^3.3.0: @@ -1659,7 +1659,7 @@ eslint-visitor-keys@^3.3.0: eslint@^8.20.0: version "8.22.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.22.0.tgz#78fcb044196dfa7eef30a9d65944f6f980402c48" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz" integrity sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA== dependencies: "@eslint/eslintrc" "^1.3.0" @@ -1704,7 +1704,7 @@ eslint@^8.20.0: espree@^9.3.2, espree@^9.3.3: version "9.3.3" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.3.tgz#2dd37c4162bb05f433ad3c1a52ddf8a49dc08e9d" + resolved "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz" integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== dependencies: acorn "^8.8.0" @@ -1718,14 +1718,14 @@ esprima@^4.0.0: esquery@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" @@ -1737,7 +1737,7 @@ estraverse@^4.1.1: estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== estree-walker@^1.0.1: @@ -1747,7 +1747,7 @@ estree-walker@^1.0.1: esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== extendable-error@^0.1.5: @@ -1766,7 +1766,7 @@ external-editor@^3.1.0: fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: @@ -1787,12 +1787,12 @@ fast-glob@^3.2.11, fast-glob@^3.2.9: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: @@ -1849,7 +1849,7 @@ find-yarn-workspace-root2@1.2.16: flat-cache@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: flatted "^3.1.0" @@ -1862,7 +1862,7 @@ flat@^5.0.2: flatted@^3.1.0: version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== fraction.js@^4.2.0: @@ -1899,7 +1899,7 @@ fs-extra@^8.1.0: fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: @@ -1924,7 +1924,7 @@ function.prototype.name@^1.1.5: functional-red-black-tree@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== functions-have-names@^1.2.2: @@ -1996,7 +1996,7 @@ glob@7.2.0: glob@^7.1.3: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -2063,7 +2063,7 @@ has-flag@^3.0.0: has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: @@ -2121,7 +2121,7 @@ ignore@^5.0.5, ignore@^5.2.0: import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -2129,7 +2129,7 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: @@ -2139,7 +2139,7 @@ indent-string@^4.0.0: inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -2147,7 +2147,7 @@ inflight@^1.0.4: inherits@2: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== internal-slot@^1.0.3: @@ -2219,7 +2219,7 @@ is-date-object@^1.0.1: is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: @@ -2236,7 +2236,7 @@ is-glob@^4.0.0, is-glob@^4.0.3: is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" @@ -2335,7 +2335,7 @@ is-windows@^1.0.0: isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== jest-worker@^26.2.1: @@ -2374,12 +2374,12 @@ json-parse-even-better-errors@^2.3.0: json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json5@^1.0.1: @@ -2437,7 +2437,7 @@ language-tags@^1.0.5: levn@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -2679,7 +2679,7 @@ ms@2.0.0: ms@2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@2.1.3, ms@^2.1.1: @@ -2699,7 +2699,7 @@ nanoid@^3.3.4: natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== node-fetch@^2.5.0: @@ -2777,14 +2777,14 @@ object.values@^1.1.5: once@^1.3.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" optionator@^0.9.1: version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: deep-is "^0.1.3" @@ -2870,7 +2870,7 @@ p-try@^2.0.0: parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" @@ -2897,12 +2897,12 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6, path-parse@^1.0.7: @@ -3136,7 +3136,7 @@ postcss-initial@^4.0.1: postcss-js@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00" + resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz" integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ== dependencies: camelcase-css "^2.0.1" @@ -3219,7 +3219,7 @@ postcss-minify-selectors@^5.2.1: postcss-mixins@^9.0.3: version "9.0.3" - resolved "https://registry.yarnpkg.com/postcss-mixins/-/postcss-mixins-9.0.3.tgz#21a41d30fa53213642d000520237db82313d1a11" + resolved "https://registry.npmjs.org/postcss-mixins/-/postcss-mixins-9.0.3.tgz" integrity sha512-99r5oYtK38cAdGKNYumVHs84u2G6SfbjWo7HCDF6Mxr0o2lFdnRRYwTl6DTqmfRpRvWAUlgav2iJv0fLXZjDKQ== dependencies: fast-glob "^3.2.11" @@ -3437,7 +3437,7 @@ postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.4, postcss-selecto postcss-simple-vars@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-simple-vars/-/postcss-simple-vars-6.0.3.tgz#e66516c7fe980da3498f4a8ad400b9c53861806c" + resolved "https://registry.npmjs.org/postcss-simple-vars/-/postcss-simple-vars-6.0.3.tgz" integrity sha512-fkNn4Zio8vN4vIig9IFdb8lVlxWnYR769RgvxCM6YWlFKie/nQaOcaMMMFz/s4gsfHW4/5bJW+i57zD67mQU7g== postcss-svgo@^5.1.0: @@ -3481,7 +3481,7 @@ preferred-pm@^3.0.0: prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier-linter-helpers@^1.0.0: @@ -3493,7 +3493,7 @@ prettier-linter-helpers@^1.0.0: prettier@2.7.1, prettier@^2.2.1: version "2.7.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== prettier@^1.19.1: @@ -3513,7 +3513,7 @@ pseudomap@^1.0.2: punycode@^2.1.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== queue-microtask@^1.2.2: @@ -3615,7 +3615,7 @@ require-main-filename@^2.0.0: resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-from@^5.0.0: @@ -3647,7 +3647,7 @@ reusify@^1.0.4: rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" @@ -3731,7 +3731,7 @@ shebang-command@^1.2.0: shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" @@ -3743,7 +3743,7 @@ shebang-regex@^1.0.0: shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== side-channel@^1.0.4: @@ -3933,7 +3933,7 @@ stylehacks@^5.1.0: sugarss@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-4.0.1.tgz#128a783ed71ee0fc3b489ce1f7d5a89bc1e24383" + resolved "https://registry.npmjs.org/sugarss/-/sugarss-4.0.1.tgz" integrity sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw== supports-color@8.1.1: @@ -3952,7 +3952,7 @@ supports-color@^5.3.0: supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" @@ -3996,7 +3996,7 @@ terser@^5.0.0: text-table@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== thenby@^1.3.4: @@ -4070,7 +4070,7 @@ tty-table@^4.1.5: type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" @@ -4130,7 +4130,7 @@ update-browserslist-db@^1.0.5: uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" @@ -4142,7 +4142,7 @@ util-deprecate@^1.0.2: v8-compile-cache@^2.0.3: version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== validate-npm-package-license@^3.0.1: @@ -4206,14 +4206,14 @@ which@^1.2.9: which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" word-wrap@^1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== workerpool@6.2.1: @@ -4241,7 +4241,7 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== y18n@^4.0.0: From 48c921646fbf49e8a98e82856fce2876d481ca89 Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Wed, 31 Aug 2022 16:52:02 +0100 Subject: [PATCH 16/27] allow configuring body_text in dialog default preview Co-authored-by: Katie Langerman --- test/previews/primer/alpha/dialog_preview.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/previews/primer/alpha/dialog_preview.rb b/test/previews/primer/alpha/dialog_preview.rb index 096ab54c95..dc80d51200 100644 --- a/test/previews/primer/alpha/dialog_preview.rb +++ b/test/previews/primer/alpha/dialog_preview.rb @@ -8,15 +8,16 @@ class DialogPreview < ViewComponent::Preview # # @param title [String] text # @param subtitle [String] text - # @param button_text [String] text # @param size [Symbol] select [small, medium, medium_portrait, large, xlarge] # @param position [Symbol] select [center, left, right] # @param position_narrow [Symbol] select [inherit, bottom, fullscreen, left, right] # @param visually_hide_title [Boolean] toggle - def default(title: "Test Dialog", subtitle: nil, size: :medium, button_text: "Show Dialog", position: :center, position_narrow: :fullscreen, visually_hide_title: false) + # @param button_text [String] text + # @param body_text [String] text + def default(title: "Test Dialog", subtitle: nil, size: :medium, button_text: "Show Dialog", body_text: "Content", position: :center, position_narrow: :fullscreen, visually_hide_title: false) render(Primer::Alpha::Dialog.new(title: title, subtitle: subtitle, size: size, position: position, position_narrow: position_narrow, visually_hide_title: visually_hide_title)) do |d| d.show_button { button_text } - d.body { "Content" } + d.body { body_text } end end From d65eb7b1faa64f11437e4dec9a0ae0bbc6c0cfb9 Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Wed, 31 Aug 2022 16:52:24 +0100 Subject: [PATCH 17/27] add custom header dialog preview Co-authored-by: Katie Langerman --- test/previews/primer/alpha/dialog_preview.rb | 15 +++++++++++++++ .../alpha/dialog_preview/custom_header.html.erb | 7 +++++++ 2 files changed, 22 insertions(+) create mode 100644 test/previews/primer/alpha/dialog_preview/custom_header.html.erb diff --git a/test/previews/primer/alpha/dialog_preview.rb b/test/previews/primer/alpha/dialog_preview.rb index dc80d51200..727baa97de 100644 --- a/test/previews/primer/alpha/dialog_preview.rb +++ b/test/previews/primer/alpha/dialog_preview.rb @@ -65,6 +65,21 @@ def with_form(title: "Test Dialog", subtitle: nil, button_text: "Show Dialog", s show_divider: show_divider }) end + + # @label Custom Header + # + # @param title [String] text + # @param subtitle [String] text + # @param button_text [String] text + # @param show_divider [Boolean] toggle + def custom_header(title: "Test Dialog", subtitle: nil, button_text: "Show Dialog", show_divider: true) + render_with_template(locals: { + title: title, + subtitle: subtitle, + button_text: button_text, + show_divider: show_divider + }) + end end end end diff --git a/test/previews/primer/alpha/dialog_preview/custom_header.html.erb b/test/previews/primer/alpha/dialog_preview/custom_header.html.erb new file mode 100644 index 0000000000..3d45b9eba2 --- /dev/null +++ b/test/previews/primer/alpha/dialog_preview/custom_header.html.erb @@ -0,0 +1,7 @@ +<%= render(Primer::Alpha::Dialog.new(id: "my-dialog", title: title, subtitle: subtitle, visually_hide_title: false)) do |d| %> + <% d.header(show_divider: show_divider) do %> + + <% end %> + <% d.show_button { button_text } %> + <% d.body { "Hello World" } %> +<% end %> From 20fe3e2ade68b77a2a6ab047a088974b52bfa303 Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Wed, 31 Aug 2022 17:04:27 +0100 Subject: [PATCH 18/27] add missing Yard types --- app/components/primer/alpha/dialog.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/components/primer/alpha/dialog.rb b/app/components/primer/alpha/dialog.rb index 6ab1304826..d429f5c7a4 100644 --- a/app/components/primer/alpha/dialog.rb +++ b/app/components/primer/alpha/dialog.rb @@ -108,6 +108,9 @@ class Dialog < Primer::Component # @param title [String] Describes the content of the dialog. # @param subtitle [String] Provides dditional context for the dialog, also setting the `aria-describedby` attribute. # @param size [Symbol] The size of the dialog. <%= one_of(Primer::Alpha::Dialog::SIZE_OPTIONS) %> + # @param position [Symbol] The size of the dialog. <%= one_of(Primer::Alpha::Dialog::POSITION_OPTIONS) %> + # @param position_narrow [Symbol] The size of the dialog. <%= one_of(Primer::Alpha::Dialog::POSITION_NARROW_OPTIONS) %> + # @param visually_hide_title [Boolean] If true will hide the heading title, while still making it available to Screen Readers. # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> def initialize( title:, From 2f0ce6dd69715a36681bc3176fbeb49289b5b8e9 Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Wed, 31 Aug 2022 17:06:38 +0100 Subject: [PATCH 19/27] fix up dialog header component test --- test/components/component_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/components/component_test.rb b/test/components/component_test.rb index 3921dfae51..23c0977909 100644 --- a/test/components/component_test.rb +++ b/test/components/component_test.rb @@ -55,7 +55,7 @@ class PrimerComponentTest < Minitest::Test component.body { "Foo" } component.footer { "Foo" } }], - [Primer::Alpha::Dialog::Header, { title: "Test" }], + [Primer::Alpha::Dialog::Header, { title: "Test", id: "foo" }], [Primer::Alpha::Dialog::Body], [Primer::Alpha::Dialog::Footer], [Primer::Dropdown, {}, lambda do |component| From c7dbe6a98af4cbdf51d01f1359c1cc85fe4cb4ce Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Wed, 31 Aug 2022 17:08:40 +0100 Subject: [PATCH 20/27] fix lint --- app/components/primer/alpha/dialog.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/components/primer/alpha/dialog.rb b/app/components/primer/alpha/dialog.rb index d429f5c7a4..813c531490 100644 --- a/app/components/primer/alpha/dialog.rb +++ b/app/components/primer/alpha/dialog.rb @@ -24,7 +24,7 @@ class Dialog < Primer::Component :medium_portrait => "Overlay--size-medium-portrait", DEFAULT_SIZE => "Overlay--size-medium", :large => "Overlay--size-large", - :xlarge => "Overlay--size-xlarge", + :xlarge => "Overlay--size-xlarge" }.freeze SIZE_OPTIONS = SIZE_MAPPINGS.keys @@ -32,7 +32,7 @@ class Dialog < Primer::Component POSITION_MAPPINGS = { DEFAULT_POSITION => "Overlay-backdrop--center", :left => "Overlay-backdrop--side Overlay-backdrop--placement-left", - :right => "Overlay-backdrop--side Overlay-backdrop--placement-right", + :right => "Overlay-backdrop--side Overlay-backdrop--placement-right" }.freeze POSITION_OPTIONS = POSITION_MAPPINGS.keys @@ -42,7 +42,7 @@ class Dialog < Primer::Component :bottom => "Overlay-backdrop--side-whenNarrow Overlay-backdrop--placement-bottom-whenNarrow", :fullscreen => "Overlay-backdrop--full-whenNarrow", :left => "Overlay-backdrop--side-whenNarrow Overlay-backdrop--placement-left-whenNarrow", - :right => "Overlay-backdrop--side-whenNarrow Overlay-backdrop--placement-right-whenNarrow", + :right => "Overlay-backdrop--side-whenNarrow Overlay-backdrop--placement-right-whenNarrow" }.freeze POSITION_NARROW_OPTIONS = POSITION_NARROW_MAPPINGS.keys @@ -137,7 +137,7 @@ def initialize( ) @backdrop_classes = class_names( POSITION_MAPPINGS[fetch_or_fallback(POSITION_OPTIONS, position, DEFAULT_POSITION)], - POSITION_NARROW_MAPPINGS[fetch_or_fallback(POSITION_NARROW_MAPPINGS, position_narrow, DEFAULT_POSITION_NARROW)], + POSITION_NARROW_MAPPINGS[fetch_or_fallback(POSITION_NARROW_MAPPINGS, position_narrow, DEFAULT_POSITION_NARROW)] ) @id = id.to_s From 4edecc317b2c4ef74c14d54f6f76df6e16790556 Mon Sep 17 00:00:00 2001 From: Actions Auto Build Date: Wed, 31 Aug 2022 16:11:39 +0000 Subject: [PATCH 21/27] docs: build docs --- static/arguments.yml | 27 +++++++++++++------- static/constants.json | 59 ++++++++++++++++++++++++++----------------- 2 files changed, 54 insertions(+), 32 deletions(-) diff --git a/static/arguments.yml b/static/arguments.yml index 5b081a85bc..c64235f2f8 100644 --- a/static/arguments.yml +++ b/static/arguments.yml @@ -32,22 +32,31 @@ - name: title type: String default: N/A - description: The title of the dialog. + description: Describes the content of the dialog. - name: subtitle type: String default: "`nil`" - description: The subtitle of the dialog. This will also set the `aria-describedby` + description: Provides dditional context for the dialog, also setting the `aria-describedby` attribute. - - name: width + - name: size type: Symbol default: "`:medium`" - description: The width of the dialog. One of `:large`, `:medium`, `:small`, `:xlarge`, - or `:xxlarge`. - - name: height + description: The size of the dialog. One of `:large`, `:medium`, `:medium_portrait`, + `:small`, or `:xlarge`. + - name: position + type: Symbol + default: "`:center`" + description: The size of the dialog. One of `:center`, `:left`, or `:right`. + - name: position_narrow type: Symbol - default: "`:auto`" - description: The height of the dialog. One of `:auto`, `:large`, `:small`, or - `:xlarge`. + default: "`:inherit`" + description: The size of the dialog. One of `:bottom`, `:fullscreen`, `:inherit`, + `:left`, or `:right`. + - name: visually_hide_title + type: Boolean + default: "`false`" + description: If true will hide the heading title, while still making it available + to Screen Readers. - name: system_arguments type: Hash default: N/A diff --git a/static/constants.json b/static/constants.json index ddf552f165..3b62957db7 100644 --- a/static/constants.json +++ b/static/constants.json @@ -40,35 +40,48 @@ }, "Primer::Alpha::Dialog": { "Body": "Primer::Alpha::Dialog::Body", - "DEFAULT_HEIGHT": "auto", - "DEFAULT_WIDTH": "medium", + "DEFAULT_POSITION": "center", + "DEFAULT_POSITION_NARROW": "inherit", + "DEFAULT_SIZE": "medium", "Footer": "Primer::Alpha::Dialog::Footer", - "HEIGHT_MAPPINGS": { - "small": "Overlay--height-small", - "auto": "Overlay--height-auto", - "large": "Overlay--height-large", - "xlarge": "Overlay--height-xlarge" - }, - "HEIGHT_OPTIONS": [ - "small", - "auto", - "large", - "xlarge" - ], "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" + "POSITION_MAPPINGS": { + "center": "Overlay-backdrop--center", + "left": "Overlay-backdrop--side Overlay-backdrop--placement-left", + "right": "Overlay-backdrop--side Overlay-backdrop--placement-right" + }, + "POSITION_NARROW_MAPPINGS": { + "inherit": "", + "bottom": "Overlay-backdrop--side-whenNarrow Overlay-backdrop--placement-bottom-whenNarrow", + "fullscreen": "Overlay-backdrop--full-whenNarrow", + "left": "Overlay-backdrop--side-whenNarrow Overlay-backdrop--placement-left-whenNarrow", + "right": "Overlay-backdrop--side-whenNarrow Overlay-backdrop--placement-right-whenNarrow" + }, + "POSITION_NARROW_OPTIONS": [ + "inherit", + "bottom", + "fullscreen", + "left", + "right" + ], + "POSITION_OPTIONS": [ + "center", + "left", + "right" + ], + "SIZE_MAPPINGS": { + "small": "Overlay--size-small-portrait", + "medium_portrait": "Overlay--size-medium-portrait", + "medium": "Overlay--size-medium", + "large": "Overlay--size-large", + "xlarge": "Overlay--size-xlarge" }, - "WIDTH_OPTIONS": [ + "SIZE_OPTIONS": [ "small", + "medium_portrait", "medium", "large", - "xlarge", - "xxlarge" + "xlarge" ] }, "Primer::Alpha::Dialog::Body": { From a552a8408a83bc8470f1b8f56fa58dae0fded7d7 Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Wed, 31 Aug 2022 17:20:29 +0100 Subject: [PATCH 22/27] remove uneeded files --- app/assets/javascripts/primer_view_components.js | 2 -- app/assets/javascripts/primer_view_components.js.map | 1 - 2 files changed, 3 deletions(-) delete mode 100644 app/assets/javascripts/primer_view_components.js delete mode 100644 app/assets/javascripts/primer_view_components.js.map diff --git a/app/assets/javascripts/primer_view_components.js b/app/assets/javascripts/primer_view_components.js deleted file mode 100644 index f5a6563226..0000000000 --- a/app/assets/javascripts/primer_view_components.js +++ /dev/null @@ -1,2 +0,0 @@ -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(o)[0],n=Array.from(this.list.querySelectorAll('[role="option"]')).filter(o),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 i(t,e){(function(t,e){const n=t.scrollTop,o=n+t.clientHeight,i=e.offsetTop,s=i+e.clientHeight;return i>=n&&s<=o})(t,e)||(t.scrollTop=e.offsetTop)}const s=window.testScreenReaderDelay||100;class r{constructor(t,n,o,i=!1){var s;if(this.container=t,this.input=n,this.results=o,this.combobox=new e(n,o),this.feedback=document.getElementById(`${this.results.id}-feedback`),this.autoselectEnabled=i,this.clearButton=document.getElementById(`${this.input.id||this.input.name}-clear`),this.clientOptions=o.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(...o){clearTimeout(n),n=window.setTimeout((()=>{clearTimeout(n),t(...o)}),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),o=new URLSearchParams(n.search.slice(1));o.append("q",t),n.search=o.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,o=e.length,[i]=e,s=null==i?void 0:i.textContent;this.autoselectEnabled&&s?this.updateFeedbackForScreenReaders(`${o} results. ${s} is the top result: Press Enter to activate.`):this.updateFeedbackForScreenReaders(`${o||"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 o=()=>c.delete(t),i=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 i.then(o,o),i}(t,n)}const u=new WeakMap;class AutocompleteElement 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 o="true"===this.getAttribute("data-autoselect");u.set(this,new r(this,e,n,o)),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 o=u.get(this);if(o)switch(t){case"open":null===n?o.close():o.open();break;case"value":null!==n&&(o.input.value=n),this.dispatchEvent(new a("auto-complete-change",{bubbles:!0,relatedTarget:o.input}))}}}function d(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 h(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),d(n),e.removeChild(n),Promise.resolve()}function f(t){const e=t.getAttribute("for"),n=t.getAttribute("value");function o(){t.dispatchEvent(new CustomEvent("clipboard-copy",{bubbles:!0}))}if(n)h(n).then(o);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&&(i=s,i instanceof HTMLInputElement||i instanceof HTMLTextAreaElement?h(i.value):i instanceof HTMLAnchorElement&&i.hasAttribute("href")?h(i.href):d(i)).then(o)}var i}function m(t){const e=t.currentTarget;e instanceof HTMLElement&&f(e)}function p(t){if(" "===t.key||"Enter"===t.key){const e=t.currentTarget;e instanceof HTMLElement&&(t.preventDefault(),f(e))}}function b(t){t.currentTarget.addEventListener("keydown",p)}function g(t){t.currentTarget.removeEventListener("keydown",p)}window.customElements.get("auto-complete")||(window.AutocompleteElement=AutocompleteElement,window.customElements.define("auto-complete",AutocompleteElement));class ClipboardCopyElement extends HTMLElement{constructor(){super(),this.addEventListener("click",m),this.addEventListener("focus",b),this.addEventListener("blur",g)}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=ClipboardCopyElement,window.customElements.define("clipboard-copy",ClipboardCopyElement));function w(t){t.style.display="inline-block"}function v(t){t.style.display="none"}const E=new WeakMap;function y(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=E.get(t);e?(clearTimeout(e),E.delete(t)):function(t){const[e,n]=t.querySelectorAll(".octicon");e&&n&&(v(e),w(n))}(t),E.set(t,setTimeout((()=>{!function(t){const[e,n]=t.querySelectorAll(".octicon");e&&n&&(w(e),v(n))}(t),E.delete(t)}),2e3))}));class TabContainerElement 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=y(this),o=n.indexOf(n.find((t=>t.matches('[aria-selected="true"]'))));if("ArrowRight"===t.code){let t=o+1;t>=n.length&&(t=0),A(this,t)}else if("ArrowLeft"===t.code){let t=o-1;t<0&&(t=n.length-1),A(this,t)}else"Home"===t.code?(A(this,0),t.preventDefault()):"End"===t.code&&(A(this,n.length-1),t.preventDefault())})),this.addEventListener("click",(t=>{const e=y(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;A(this,e.indexOf(n))}))}connectedCallback(){for(const t of y(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 A(t,e){const n=y(t),o=Array.from(t.querySelectorAll('[role="tabpanel"]')).filter((e=>e.closest(t.tagName)===t)),i=n[e],s=o[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 o)t.hidden=!0,t.hasAttribute("tabindex")||t.hasAttribute("data-tab-container-no-tabstop")||t.setAttribute("tabindex","0");i.setAttribute("aria-selected","true"),i.setAttribute("tabindex","0"),i.focus(),s.hidden=!1,t.dispatchEvent(new CustomEvent("tab-container-changed",{bubbles:!0,detail:{relatedTarget:s}}))}}window.customElements.get("tab-container")||(window.TabContainerElement=TabContainerElement,window.customElements.define("tab-container",TabContainerElement));const T=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],k=["January","February","March","April","May","June","July","August","September","October","November","December"];function L(t){return`0${t}`.slice(-2)}function x(t,e){const n=t.getDay(),o=t.getDate(),i=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 k[i].slice(0,3);case"B":return k[i];case"c":return t.toString();case"d":return L(o);case"e":return String(o);case"H":return L(r);case"I":return L(x(t,"%l"));case"l":return String(0===r||12===r?12:(r+12)%12);case"m":return L(i+1);case"M":return L(a);case"p":return r>11?"PM":"AM";case"P":return r>11?"pm":"am";case"S":return L(c);case"w":return String(n);case"y":return L(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 M(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 C=null;const S=M({day:"numeric",month:"short"});function D(){if(null!==C)return C;const t=S();if(t){const e=t.format(new Date(0));return C=!!e.match(/^\d/),C}return!1}let H=null;const F=M({day:"numeric",month:"short",year:"numeric"});function R(t){const e=t.closest("[lang]");return e instanceof HTMLElement&&e.lang?e.lang:"default"}const $=new WeakMap;class ExtendedTimeElement 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 o=this.getFormattedTitle();if("datetime"===t){const t=Date.parse(n);isNaN(t)?$.delete(this):$.set(this,new Date(t))}const i=this.getFormattedTitle(),s=this.getAttribute("title");"title"===t||!i||s&&s!==o||this.setAttribute("title",i);const r=this.getFormattedDate();r&&(this.textContent=r)}get date(){return $.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=M({day:"numeric",month:"short",year:"numeric",hour:"numeric",minute:"2-digit",timeZoneName:"short"}),I=new WeakMap;class LocalTimeElement extends ExtendedTimeElement{attributeChangedCallback(t,e,n){"hour"!==t&&"minute"!==t&&"second"!==t&&"time-zone-name"!==t||I.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 o=D()?"weekday day month year":"weekday month day, year";for(const e in n){const i=n[e][t.getAttribute(e)||""];o=o.replace(e,i||"")}return o=o.replace(/(\s,)|(,\s$)/,""),x(e,o).replace(/\s+/," ").trim()}(this,t)||""} ${function(t,e){const n={},o=t.getAttribute("hour");"numeric"!==o&&"2-digit"!==o||(n.hour=o);const i=t.getAttribute("minute");"numeric"!==i&&"2-digit"!==i||(n.minute=i);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=I.get(t);a||(a=M(n),I.set(t,a));const c=a();if(c)return c.format(e);return x(e,n.second?"%H:%M:%S":"%H:%M")}(this,t)||""}`.trim()}}window.customElements.get("local-time")||(window.LocalTimeElement=LocalTimeElement,window.customElements.define("local-time",LocalTimeElement));class W{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),o=Math.round(n/60),i=Math.round(o/24);return t>=0&&i<30?this.timeAgoFromMs(t):null}timeAhead(){const t=this.date.getTime()-(new Date).getTime(),e=Math.round(t/1e3),n=Math.round(e/60),o=Math.round(n/60),i=Math.round(o/24);return t>=0&&i<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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return t<0||e<10?q(this.locale,0,"second"):e<45?q(this.locale,-e,"second"):e<90||n<45?q(this.locale,-n,"minute"):n<90||o<24?q(this.locale,-o,"hour"):o<36||i<30?q(this.locale,-i,"day"):s<18?q(this.locale,-s,"month"):q(this.locale,-r,"year")}microTimeAgo(){const t=(new Date).getTime()-this.date.getTime(),e=Math.round(t/1e3),n=Math.round(e/60),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return n<1?"1m":n<60?`${n}m`:o<24?`${o}h`:i<365?`${i}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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return s>=18||s>=12?q(this.locale,r,"year"):i>=45||i>=30?q(this.locale,s,"month"):o>=36||o>=24?q(this.locale,i,"day"):n>=90||n>=45?q(this.locale,o,"hour"):e>=90||e>=45?q(this.locale,n,"minute"):q(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),o=Math.round(n/60),i=Math.round(o/24),s=Math.round(i/30),r=Math.round(s/12);return i>=365?`${r}y`:o>=24?`${i}d`:n>=60?`${o}h`:n>1?`${n}m`:"1m"}formatDate(){let t=D()?"%e %b":"%b %e";var e;return e=this.date,(new Date).getUTCFullYear()!==e.getUTCFullYear()&&(t+=function(){if(null!==H)return H;const t=F();if(t){const e=t.format(new Date(0));return H=!!e.match(/\d,/),H}return!0}()?", %Y":" %Y"),x(this.date,t)}formatTime(){const t=P();return t?t.format(this.date):x(this.date,"%l:%M%P")}}function q(t,e,n){const o=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 o?o.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=M({hour:"numeric",minute:"2-digit"});class RelativeTimeElement extends ExtendedTimeElement{getFormattedDate(){const t=this.date;if(t)return new W(t,R(this)).toString()}connectedCallback(){N.push(this),B||(Y(),B=window.setInterval(Y,6e4)),super.connectedCallback()}disconnectedCallback(){const t=N.indexOf(this);-1!==t&&N.splice(t,1),N.length||B&&(clearInterval(B),B=null)}}const N=[];let B;function Y(){let t,e,n;for(e=0,n=N.length;e=0&&n.classList.add("nwse"),["ne","sw"].indexOf(e)>=0&&n.classList.add("nesw"),U.set(n,{startX:o.offsetLeft+(["se","ne"].indexOf(e)>=0?0:o.offsetWidth),startY:o.offsetTop+(["se","sw"].indexOf(e)>=0?0:o.offsetHeight)}),z(t)}else n.addEventListener("mousemove",j),n.addEventListener("touchmove",j,{passive:!0})}function _(t,e,n,o=!0){let i=Math.max(Math.abs(e),Math.abs(n),10);const s=U.get(t);if(!s)return;const{box:r,image:a}=K.get(t)||{};if(!r||!a)return;i=Math.min(i,n>0?a.height-s.startY:s.startY,e>0?a.width-s.startX:s.startX);const c=o?Math.round(Math.max(0,e>0?s.startX:s.startX-i)):r.offsetLeft,l=o?Math.round(Math.max(0,n>0?s.startY:s.startY-i)):r.offsetTop;r.style.left=`${c}px`,r.style.top=`${l}px`,r.style.width=`${i}px`,r.style.height=`${i}px`,Q(t,{x:c,y:l,width:i,height:i})}function J(t){const{image:e}=K.get(t)||{};if(!e)return;const n=Math.round(e.clientWidth>e.clientHeight?e.clientHeight:e.clientWidth);U.set(t,{startX:(e.clientWidth-n)/2,startY:(e.clientHeight-n)/2}),_(t,n,n)}function G(t){const e=t.currentTarget;e instanceof ImageCropElement&&(X.delete(e),e.classList.remove("nwse","nesw"),e.removeEventListener("mousemove",z),e.removeEventListener("mousemove",j),e.removeEventListener("touchmove",z),e.removeEventListener("touchmove",j))}function Q(t,e){const{image:n}=K.get(t)||{};if(!n)return;const o=n.naturalWidth/n.width;for(const n in e){const i=Math.round(e[n]*o);e[n]=i;const s=t.querySelector(`[data-image-crop-input='${n}']`);s instanceof HTMLInputElement&&(s.value=i.toString())}t.dispatchEvent(new CustomEvent("image-crop-change",{bubbles:!0,detail:e}))}class ImageCropElement extends HTMLElement{connectedCallback(){if(K.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&&(K.set(this,{box:e,image:n}),n.addEventListener("load",(()=>{this.loaded=!0,J(this)})),this.addEventListener("mouseleave",G),this.addEventListener("touchend",G),this.addEventListener("mouseup",G),e.addEventListener("mousedown",Z),e.addEventListener("touchstart",Z,{passive:!0}),this.addEventListener("keydown",j),this.addEventListener("keydown",z),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:o}=K.get(this)||{};"src"===t&&(this.loaded=!1,o&&(o.src=n))}}window.customElements.get("image-crop")||(window.ImageCropElement=ImageCropElement,window.customElements.define("image-crop",ImageCropElement));class DetailsMenuElement 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=[nt(t,"compositionstart",(t=>ht(this,t))),nt(t,"compositionend",(t=>ht(this,t))),nt(t,"click",(e=>ct(t,e))),nt(t,"change",(e=>ct(t,e))),nt(t,"keydown",(e=>function(t,e,n){if(!(n instanceof KeyboardEvent))return;if(t.querySelector("details[open]"))return;const o=tt.get(e);if(!o||o.isComposing)return;const i=n.target instanceof Element&&"SUMMARY"===n.target.tagName;switch(n.key){case"Escape":t.hasAttribute("open")&&(dt(t),n.preventDefault(),n.stopPropagation());break;case"ArrowDown":{i&&!t.hasAttribute("open")&&t.setAttribute("open","");const e=rt(t,!0);e&&e.focus(),n.preventDefault()}break;case"ArrowUp":{i&&!t.hasAttribute("open")&&t.setAttribute("open","");const e=rt(t,!1);e&&e.focus(),n.preventDefault()}break;case"n":if(at&&n.ctrlKey){const e=rt(t,!0);e&&e.focus(),n.preventDefault()}break;case"p":if(at&&n.ctrlKey){const e=rt(t,!1);e&&e.focus(),n.preventDefault()}break;case" ":case"Enter":{const e=document.activeElement;e instanceof HTMLElement&&ut(e)&&e.closest("details")===t&&(n.preventDefault(),n.stopPropagation(),e.click())}}}(t,this,e))),nt(t,"toggle",(()=>ot(t,this)),{once:!0}),nt(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?nt(t,"mouseover",(()=>ot(t,this)),{once:!0}):et,...it(t)];tt.set(this,{subscriptions:n,loaded:!1,isComposing:!1})}disconnectedCallback(){const t=tt.get(this);if(t){tt.delete(this);for(const e of t.subscriptions)e.unsubscribe()}}}const tt=new WeakMap,et={unsubscribe(){}};function nt(t,e,n,o=!1){return t.addEventListener(e,n,o),{unsubscribe:()=>{t.removeEventListener(e,n,o)}}}function ot(t,e){const n=e.getAttribute("src");if(!n)return;const o=tt.get(e);if(!o)return;if(o.loaded)return;o.loaded=!0;const i=e.querySelector("include-fragment");i&&!i.hasAttribute("src")&&(i.addEventListener("loadend",(()=>st(t))),i.setAttribute("src",n))}function it(t){let e=!1;return[nt(t,"mousedown",(()=>e=!0)),nt(t,"keydown",(()=>e=!1)),nt(t,"toggle",(()=>{t.hasAttribute("open")&&(st(t)||e||function(t){const e=document.activeElement;if(e&&ut(e)&&t.contains(e))return;const n=rt(t,!0);n&&n.focus()}(t))}))]}function st(t){if(!t.hasAttribute("open"))return!1;const e=t.querySelector("details-menu [autofocus]");return!!e&&(e.focus(),!0)}function rt(t,e){const n=Array.from(t.querySelectorAll('[role^="menuitem"]:not([hidden]):not([disabled]):not([aria-disabled="true"])')),o=document.activeElement,i=o instanceof HTMLElement?n.indexOf(o):-1,s=e?n[i+1]:n[i-1],r=e?n[0]:n[n.length-1];return s||r}const at=navigator.userAgent.match(/Macintosh/);function ct(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 o=e.querySelector("input");if("LABEL"===e.tagName&&n===o)return;"LABEL"===e.tagName&&o&&!o.checked||lt(e,t)}else if("change"===e.type){const e=n.closest('[role="menuitemradio"], [role="menuitemcheckbox"]');e&<(e,t)}}function lt(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 o=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(o)n.textContent=o;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 o=(n===t).toString();e instanceof HTMLInputElement&&(o=e.indeterminate?"mixed":e.checked.toString()),n.setAttribute("aria-checked",o)}}(t,e),"menuitemcheckbox"!==t.getAttribute("role")&&dt(e),n.dispatchEvent(new CustomEvent("details-menu-selected",{detail:{relatedTarget:t}})))}function ut(t){const e=t.getAttribute("role");return"menuitem"===e||"menuitemcheckbox"===e||"menuitemradio"===e}function dt(t){if(!t.hasAttribute("open"))return;t.removeAttribute("open");const e=t.querySelector("summary");e&&e.focus()}function ht(t,e){const n=tt.get(t);n&&(n.isComposing="compositionstart"===e.type)}function ft(t,e,n,o){var i,s=arguments.length,r=s<3?e:null===o?o=Object.getOwnPropertyDescriptor(e,n):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,n,o);else for(var a=t.length-1;a>=0;a--)(i=t[a])&&(r=(s<3?i(r):s>3?i(e,n,r):i(e,n))||r);return s>3&&r&&Object.defineProperty(e,n,r),r}function mt(t,e,n,o){if("a"===n&&!o)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?o:"a"===n?o.call(t):o?o.value:e.get(t)}function pt(t,e,n,o,i){if("m"===o)throw new TypeError("Private method is not writable");if("a"===o&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===o?i.call(t,n):i?i.value=n:e.set(t,n),n}window.customElements.get("details-menu")||(window.DetailsMenuElement=DetailsMenuElement,window.customElements.define("details-menu",DetailsMenuElement));const bt=new WeakSet;function gt(t){Et(t),vt(t)}const wt=new WeakMap;function vt(t=document){if(wt.has(t))return wt.get(t);let e=!1;const n=new MutationObserver((t=>{for(const e of t)if("attributes"===e.type&&e.target instanceof Element)Tt(e.target);else if("childList"===e.type&&e.addedNodes.length)for(const t of e.addedNodes)t instanceof Element&&Et(t)}));n.observe(t,{childList:!0,subtree:!0,attributeFilter:["data-action"]});const o={get closed(){return e},unsubscribe(){e=!0,wt.delete(t),n.disconnect()}};return wt.set(t,o),o}function Et(t){for(const e of t.querySelectorAll("[data-action]"))Tt(e);t instanceof Element&&t.hasAttribute("data-action")&&Tt(t)}function yt(t){const e=t.currentTarget;for(const n of At(e))if(t.type===n.type){const o=e.closest(n.tag);bt.has(o)&&"function"==typeof o[n.method]&&o[n.method](t);const i=e.getRootNode();if(i instanceof ShadowRoot&&bt.has(i.host)&&i.host.matches(n.tag)){const e=i.host;"function"==typeof e[n.method]&&e[n.method](t)}}}function*At(t){for(const e of(t.getAttribute("data-action")||"").trim().split(/\s+/)){const t=e.lastIndexOf(":"),n=Math.max(0,e.lastIndexOf("#"))||e.length;yield{type:e.slice(0,t),tag:e.slice(t+1,n),method:e.slice(n+1)||"handleEvent"}||"handleEvent"}}function Tt(t){for(const e of At(t))t.addEventListener(e.type,yt)}const kt=t=>String("symbol"==typeof t?t.description:t).replace(/([A-Z]($|[a-z]))/g,"-$1").replace(/--/g,"-").replace(/^-|-$/,"").toLowerCase(),Lt=(t,e="property")=>{const n=kt(t);if(!n.includes("-"))throw new DOMException(`${e}: ${String(t)} is not a valid ${e} name`,"SyntaxError");return n};const xt=new WeakSet;function Mt(t,e){if(xt.has(t))return;xt.add(t);const n=Object.getPrototypeOf(t),o=n?.constructor?.attrPrefix??"data-";e||(e=Dt(n,"attr"));for(const n of e){const e=t[n],i=Lt(`${o}${n}`);let s={configurable:!0,get(){return this.getAttribute(i)||""},set(t){this.setAttribute(i,t||"")}};"number"==typeof e?s={configurable:!0,get(){return Number(this.getAttribute(i)||0)},set(t){this.setAttribute(i,t)}}:"boolean"==typeof e&&(s={configurable:!0,get(){return this.hasAttribute(i)},set(t){this.toggleAttribute(i,t)}}),Object.defineProperty(t,n,s),n in t&&!t.hasAttribute(i)&&s.set.call(t,e)}}const Ct=Symbol.for("catalyst");class St{constructor(t){const e=this,n=t.prototype.connectedCallback;t.prototype.connectedCallback=function(){e.connectedCallback(this,n)};const o=t.prototype.disconnectedCallback;t.prototype.disconnectedCallback=function(){e.disconnectedCallback(this,o)};const i=t.prototype.attributeChangedCallback;t.prototype.attributeChangedCallback=function(t,n,o){e.attributeChangedCallback(this,t,n,o,i)};let s=t.observedAttributes||[];Object.defineProperty(t,"observedAttributes",{configurable:!0,get(){return e.observedAttributes(this,s)},set(t){s=t}}),function(t){let e=t.observedAttributes||[];const n=t.attrPrefix??"data-",o=t=>Lt(`${n}${t}`);Object.defineProperty(t,"observedAttributes",{configurable:!0,get:()=>[...Dt(t.prototype,"attr")].map(o).concat(e),set(t){e=t}})}(t),function(t){const e=kt(t.name).replace(/-element$/,"");try{window.customElements.define(e,t),window[t.name]=customElements.get(e)}catch(t){if(!(t instanceof DOMException&&"NotSupportedError"===t.name))throw t}}(t)}observedAttributes(t,e){return e}connectedCallback(t,e){t.toggleAttribute("data-catalyst",!0),customElements.upgrade(t),function(t){for(const e of t.querySelectorAll("template[data-shadowroot]"))e.parentElement===t&&t.attachShadow({mode:"closed"===e.getAttribute("data-shadowroot")?"closed":"open"}).append(e.content.cloneNode(!0))}(t),Mt(t),function(t){bt.add(t),t.shadowRoot&>(t.shadowRoot),Et(t),vt(t.ownerDocument)}(t),e?.call(t),t.shadowRoot&>(t.shadowRoot)}disconnectedCallback(t,e){e?.call(t)}attributeChangedCallback(t,e,n,o,i){Mt(t),"data-catalyst"!==e&&i&&i.call(t,e,n,o)}}function Dt(t,e){if(!Object.prototype.hasOwnProperty.call(t,Ct)){const e=t[Ct],n=t[Ct]=new Map;if(e)for(const[t,o]of e)n.set(t,new Set(o))}const n=t[Ct];return n.has(e)||n.set(e,new Set),n.get(e)}function Ht(t,e){Dt(t,"target").add(e),Object.defineProperty(t,e,{configurable:!0,get(){return function(t,e){const n=t.tagName.toLowerCase();if(t.shadowRoot)for(const o of t.shadowRoot.querySelectorAll(`[data-target~="${n}.${e}"]`))if(!o.closest(n))return o;for(const o of t.querySelectorAll(`[data-target~="${n}.${e}"]`))if(o.closest(n)===t)return o}(this,e)}})}function Ft(t,e=0,{start:n=!1,middle:o=!1,once:i=!1}={}){return function(t,e=0,{start:n=!0,middle:o=!0,once:i=!1}={}){let s,r=0,a=!1;function c(...l){if(a)return;const u=Date.now()-r;r=Date.now(),n?(n=!1,t.apply(this,l),i&&c.cancel()):(o&&u{r=Date.now(),t.apply(this,l),i&&c.cancel()}),o?e-u:e))}return c.cancel=()=>{clearTimeout(s),a=!0},c}(t,e,{start:n,middle:o,once:i})}new Promise((t=>{"loading"!==document.readyState?t():document.addEventListener("readystatechange",(()=>t()),{once:!0})})),new Promise((t=>{const e=new AbortController;e.signal.addEventListener("abort",(()=>t()));const n={once:!0,passive:!0,signal:e.signal},o=()=>e.abort();document.addEventListener("mousedown",o,n),document.addEventListener("touchstart",o,n),document.addEventListener("keydown",o,n),document.addEventListener("pointerdown",o,n)}));let Rt=class ToggleSwitchElement extends HTMLElement{get src(){const t=this.getAttribute("src");if(!t)return null;const e=this.ownerDocument.createElement("a");return e.href=t,e.href}get csrf(){const t=this.querySelector("[data-csrf]");return this.getAttribute("csrf")||t instanceof HTMLInputElement&&t.value||null}get csrfField(){return this.getAttribute("csrf-field")||"authenticity_token"}isRemote(){return null!=this.src}toggle(){this.isRemote()?(this.setLoadingState(),this.check()):this.performToggle()}turnOn(){this.isDisabled()||(this.switch.setAttribute("aria-checked","true"),this.classList.add("ToggleSwitch--checked"))}turnOff(){this.isDisabled()||(this.switch.setAttribute("aria-checked","false"),this.classList.remove("ToggleSwitch--checked"))}isOn(){return"true"===this.switch.getAttribute("aria-checked")}isOff(){return!this.isOn()}isDisabled(){return"true"===this.switch.getAttribute("aria-disabled")}disable(){this.switch.setAttribute("aria-disabled","true")}enable(){this.switch.setAttribute("aria-disabled","false")}performToggle(){this.isOn()?this.turnOff():this.turnOn()}setLoadingState(){this.disable(),this.errorIcon.setAttribute("hidden","hidden"),this.loadingSpinner.removeAttribute("hidden")}setSuccessState(){this.setFinishedState(!1)}setErrorState(){this.setFinishedState(!0)}setFinishedState(t){t&&this.errorIcon.removeAttribute("hidden"),this.loadingSpinner.setAttribute("hidden","hidden"),this.enable()}async check(){const t=new FormData;this.csrf&&t.append(this.csrfField,this.csrf),t.append("value",this.isOn()?"1":"0");try{if(!this.src)throw new Error("invalid src");(await fetch(this.src,{credentials:"same-origin",method:"POST",body:t})).ok?(this.setSuccessState(),this.performToggle()):this.setErrorState()}catch(t){this.setErrorState()}}};ft([Ht],Rt.prototype,"switch",void 0),ft([Ht],Rt.prototype,"loadingSpinner",void 0),ft([Ht],Rt.prototype,"errorIcon",void 0),ft([function(t=0,e={}){return(n,o,i)=>{if(!i||"function"!=typeof i.value)throw new Error("debounce can only decorate functions");const s=i.value;i.value=Ft(s,t,e),Object.defineProperty(n,o,i)}}(300)],Rt.prototype,"check",null),Rt=ft([function(t){new St(t)}],Rt);const $t={"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"]},Ot={start:["end","center"],end:["start","center"],center:["end","start"]};function It(t,e,n={}){const o=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),i=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,o=n.getBoundingClientRect(),i=getComputedStyle(n),[s,r,a,c]=[i.borderTopWidth,i.borderLeftWidth,i.borderRightWidth,i.borderBottomWidth].map((t=>parseInt(t,10)||0));return{top:o.top+s,left:o.left+r,width:o.width-a-r,height:Math.max(o.height-s-c,n===document.body?window.innerHeight:-1/0)}}(o),s=getComputedStyle(o),r=o.getBoundingClientRect(),[a,c]=[s.borderTopWidth,s.borderLeftWidth].map((t=>parseInt(t,10)||0));return function(t,e,n,o,{side:i,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=Yt(n,o,i,s,a,c),d=i,h=s;if(u.top-=e.top,u.left-=e.left,!r){const r=$t[i];let f=0;if(r){let t=i;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})}(i,{top:r.top+a,left:r.left+c},t.getBoundingClientRect(),e instanceof Element?e.getBoundingClientRect():e,function(t={}){var e,n,o,i,s;const r=null!==(e=t.side)&&void 0!==e?e:Wt,a=null!==(n=t.align)&&void 0!==n?n:qt;return{side:r,align:a,anchorOffset:null!==(o=t.anchorOffset)&&void 0!==o?o:"inside-center"===r?0:Pt,alignmentOffset:null!==(i=t.alignmentOffset)&&void 0!==i?i:"center"!==a&&r.startsWith("inside")?Nt:0,allowOutOfBounds:null!==(s=t.allowOutOfBounds)&&void 0!==s?s:Bt}}(n))}const Wt="outside-bottom",qt="start",Pt=4,Nt=4,Bt=!1;function Yt(t,e,n,o,i,s){const r=e.left+e.width,a=e.top+e.height;let c=-1,l=-1;return"outside-top"===n?c=e.top-i-t.height:"outside-bottom"===n?c=a+i:"outside-left"===n?l=e.left-i-t.width:"outside-right"===n&&(l=r+i),"outside-top"!==n&&"outside-bottom"!==n||(l="start"===o?e.left+s:"center"===o?e.left-(t.width-e.width)/2+s:r-t.width-s),"outside-left"!==n&&"outside-right"!==n||(c="start"===o?e.top+s:"center"===o?e.top-(t.height-e.height)/2+s:a-t.height-s),"inside-top"===n?c=e.top+i:"inside-bottom"===n?c=a-i-t.height:"inside-left"===n?l=e.left+i:"inside-right"===n?l=r-i-t.width:"inside-center"===n&&(l=(r+e.left)/2-t.width/2+i),"inside-top"===n||"inside-bottom"===n?l="start"===o?e.left+s:"center"===o?e.left-(t.width-e.width)/2+s:r-t.width-s:"inside-left"!==n&&"inside-right"!==n&&"inside-center"!==n||(c="start"===o?e.top+s:"center"===o?e.top-(t.height-e.height)/2+s:a-t.height-s),{top:c,left:l}}function Ut(t,e,n,o){return"outside-top"===t||"outside-bottom"===t?e.topn.height+n.top:e.leftn.width+n.left}function Xt(t,e,n,o){return"end"===t?e.leftn.left+n.width||e.leftt instanceof HTMLElement&&s(t,i)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP});let a=null;if(!e.reverse&&s(t,i)&&(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,i)&&(yield t)}(t,{reverse:e,strict:!0,onlyTabbable:!0}).next().value}function jt(t,e=!1){const n=["BUTTON","INPUT","SELECT","TEXTAREA","OPTGROUP","OPTION","FIELDSET"].includes(t.tagName)&&t.disabled,o=t.hidden,i=t instanceof HTMLInputElement&&"hidden"===t.type,s=t.classList.contains("sentinel");if(n||o||i||s)return!1;if(e){const e=0===t.offsetWidth||0===t.offsetHeight,n=["hidden","collapse"].includes(getComputedStyle(t).visibility),o=0===t.getClientRects().length;if(e||n||o)return!1}return null!=t.getAttribute("tabindex")||!(t instanceof HTMLAnchorElement&&null==t.getAttribute("href"))&&-1!==t.tabIndex}function zt(t,e=!1){return jt(t,e)&&"-1"!==t.getAttribute("tabindex")}let Vt=!1;function Zt(){}try{const t=Object.create({},{signal:{get(){Vt=!0}}});window.addEventListener("test",Zt,t),window.removeEventListener("test",Zt,t)}catch(t){}Vt||(function(){if("undefined"==typeof window)return;const t=EventTarget.prototype.addEventListener;EventTarget.prototype.addEventListener=function(e,n,o){return"object"==typeof o&&"signal"in o&&o.signal instanceof AbortSignal&&t.call(o.signal,"abort",(()=>{this.removeEventListener(e,n,o)})),t.call(this,e,n,o)}}(),Vt=!0);const _t=[];let Jt;function Gt(t,e,n){const o=new AbortController,i=null!=n?n:o.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=Kt(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&&zt(a)&&t.contains(a))return void a.focus();if(e&&t.contains(e))return void e.focus();{const e=Kt(t);return void(null==e||e.focus())}}}r.setAttribute("class","sentinel"),r.setAttribute("tabindex","0"),r.setAttribute("aria-hidden","true"),r.onfocus=()=>{const e=Kt(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}(i);if(Jt){const t=Jt;Jt.container.setAttribute("data-focus-trap","suspended"),Jt.controller.abort(),_t.push(t)}l.signal.addEventListener("abort",(()=>{Jt=void 0})),i.addEventListener("abort",(()=>{t.removeAttribute("data-focus-trap");const e=t.getElementsByClassName("sentinel");for(;e.length>0;)e[0].remove();const n=_t.findIndex((e=>e.container===t));n>=0&&_t.splice(n,1),function(){const t=_t.pop();t&&Gt(t.container,t.initialFocus,t.originalSignal)}()})),document.addEventListener("focus",(t=>{c(t.target)}),{signal:l.signal,capture:!0}),c(document.activeElement),Jt={container:t,controller:l,initialFocus:e,originalSignal:i};const u=_t.findIndex((e=>e.container===t));if(u>=0&&_t.splice(u,1),!n)return o}var Qt,te,ee,ne,oe,ie,se;const re=["tooltip-n","tooltip-s","tooltip-e","tooltip-w","tooltip-ne","tooltip-se","tooltip-nw","tooltip-sw"];class ToolTipElement extends HTMLElement{constructor(){super(...arguments),Qt.add(this),te.set(this,void 0),ee.set(this,"center"),ne.set(this,"outside-bottom"),oe.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)}set hiddenFromView(t){this.classList.toggle("sr-only",t),this.isConnected&&mt(this,Qt,"m",ie).call(this)}get hiddenFromView(){return this.classList.contains("sr-only")}connectedCallback(){var t;if(!this.shadowRoot){this.attachShadow({mode:"open"}).innerHTML=`\n \n \n `}if(this.hiddenFromView=!0,pt(this,oe,!0,"f"),this.id||(this.id=`tooltip-${Date.now()}-${(1e4*Math.random()).toFixed(0)}`),!this.control)return;this.setAttribute("role","tooltip"),null===(t=mt(this,te,"f"))||void 0===t||t.abort(),pt(this,te,new AbortController,"f");const{signal:e}=mt(this,te,"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}),mt(this,Qt,"m",ie).call(this)}disconnectedCallback(){var t;null===(t=mt(this,te,"f"))||void 0===t||t.abort()}handleEvent(t){this.control&&("mouseenter"!==t.type&&"focus"!==t.type||!this.hiddenFromView?"blur"===t.type||"mouseleave"===t.type&&t.relatedTarget!==this.control&&t.relatedTarget!==this?this.hiddenFromView=!0:"keydown"!==t.type||"Escape"!==t.key||this.hiddenFromView||(this.hiddenFromView=!0):this.hiddenFromView=!1)}attributeChangedCallback(t){if("id"===t||"data-type"===t){if(!this.id||!this.control)return;if("label"===this.type){let t=this.control.getAttribute("aria-labelledby");t=t?`${t} ${this.id}`:this.id,this.control.setAttribute("aria-labelledby",t),this.setAttribute("aria-hidden","true")}else{let t=this.control.getAttribute("aria-describedby");t=t?`${t} ${this.id}`:this.id,this.control.setAttribute("aria-describedby",t)}}else if("data-direction"===t){this.classList.remove(...re);const t=this.direction;"n"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-top","f")):"ne"===t?(pt(this,ee,"start","f"),pt(this,ne,"outside-top","f")):"e"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-right","f")):"se"===t?(pt(this,ee,"start","f"),pt(this,ne,"outside-bottom","f")):"s"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-bottom","f")):"sw"===t?(pt(this,ee,"end","f"),pt(this,ne,"outside-bottom","f")):"w"===t?(pt(this,ee,"center","f"),pt(this,ne,"outside-left","f")):"nw"===t&&(pt(this,ee,"end","f"),pt(this,ne,"outside-top","f"))}}}var ae,ce,le,ue,de,he,fe;function me(t){document.activeElement!==t&&(null==t||t.focus())}te=new WeakMap,ee=new WeakMap,ne=new WeakMap,oe=new WeakMap,Qt=new WeakSet,ie=function(){if(this.hiddenFromView)this.classList.remove("tooltip-open",...re);else{this.classList.add("tooltip-open");for(const t of this.ownerDocument.querySelectorAll(this.tagName))t!==this&&(t.hiddenFromView=!0);mt(this,Qt,"m",se).call(this)}},se=function(){if(!this.control)return;if(!mt(this,oe,"f")||this.hiddenFromView)return;this.style.left="0px";const t=It(this,this.control,{side:mt(this,ne,"f"),align:mt(this,ee,"f"),anchorOffset:10}),e=t.anchorSide,n=t.anchorAlign;this.style.top=`${t.top}px`,this.style.left=`${t.left}px`;let o="s";o="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-${o}`)},ToolTipElement.observedAttributes=["data-type","data-direction","id"],window.customElements.get("tool-tip")||(window.ToolTipElement=ToolTipElement,window.customElements.define("tool-tip",ToolTipElement));class ModalDialogElement extends HTMLElement{constructor(){super(...arguments),ae.add(this),ce.set(this,new AbortController),le.set(this,null),ue.set(this,void 0),de.set(this,!0)}get open(){return this.hasAttribute("open")}set open(t){var e,n,o,i;if(t){if(this.open)return;this.setAttribute("open",""),null===(e=mt(this,ae,"a",he))||void 0===e||e.classList.remove("Overlay--hidden"),document.body.style.overflow="hidden",mt(this,ce,"f").signal.aborted&&pt(this,ce,new AbortController,"f"),Gt(this,void 0,mt(this,ce,"f").signal)}else{if(!this.open)return;this.removeAttribute("open"),null===(n=mt(this,ae,"a",he))||void 0===n||n.classList.add("Overlay--hidden"),document.body.style.overflow="initial",mt(this,ce,"f").abort();const t=(null===(o=mt(this,ue,"f"))||void 0===o?void 0:o.closest("details"))||(null===(i=mt(this,ue,"f"))||void 0===i?void 0:i.closest("action-menu"));me(t?Kt(t):mt(this,ue,"f")),pt(this,ue,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}=pt(this,le,new AbortController,"f");this.ownerDocument.addEventListener("click",(t=>{const e=t.target,n=e.closest(this.tagName)!==this,o=null==e?void 0:e.closest("button");if(!o)return void(n&&this.close());let i=o.getAttribute("data-close-dialog-id");i===this.id&&this.close(),i=o.getAttribute("data-submit-dialog-id"),i===this.id&&this.close(!0),i=o.getAttribute("data-show-dialog-id"),i===this.id&&(t.stopPropagation(),pt(this,ue,o,"f"),this.show())}),{signal:t}),this.addEventListener("keydown",(t=>mt(this,ae,"m",fe).call(this,t)))}disconnectedCallback(){var t;null===(t=mt(this,le,"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}}ce=new WeakMap,le=new WeakMap,ue=new WeakMap,de=new WeakMap,ae=new WeakSet,he=function(){var t;return(null===(t=this.parentElement)||void 0===t?void 0:t.hasAttribute("data-modal-dialog-overlay"))?this.parentElement:null},fe=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=ModalDialogElement,window.customElements.define("modal-dialog",ModalDialogElement)); -//# 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 deleted file mode 100644 index d28aab1656..0000000000 --- a/app/assets/javascripts/primer_view_components.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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/@github/catalyst/lib/bind.js","../../../node_modules/@github/catalyst/lib/dasherize.js","../../../node_modules/@github/catalyst/lib/attr.js","../../../node_modules/@github/catalyst/lib/core.js","../../../node_modules/@github/catalyst/lib/register.js","../../../node_modules/@github/catalyst/lib/auto-shadow-root.js","../../../node_modules/@github/catalyst/lib/target.js","../../../node_modules/@github/catalyst/lib/findtarget.js","../../../node_modules/@github/mini-throttle/dist/index.js","../../../node_modules/@github/catalyst/lib/lazy-define.js","../../components/primer/alpha/toggle-switch-element.ts","../../../node_modules/@github/mini-throttle/dist/decorators.js","../../../node_modules/@github/catalyst/lib/controller.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 controllers = new WeakSet();\n/*\n * Bind `[data-action]` elements from the DOM to their actions.\n *\n */\nexport function bind(controller) {\n controllers.add(controller);\n if (controller.shadowRoot)\n bindShadow(controller.shadowRoot);\n bindElements(controller);\n listenForBind(controller.ownerDocument);\n}\nexport function bindShadow(root) {\n bindElements(root);\n listenForBind(root);\n}\nconst observers = new WeakMap();\n/**\n * Set up observer that will make sure any actions that are dynamically\n * injected into `el` will be bound to it's controller.\n *\n * This returns a Subscription object which you can call `unsubscribe()` on to\n * stop further live updates.\n */\nexport function listenForBind(el = document) {\n if (observers.has(el))\n return observers.get(el);\n let closed = false;\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.target instanceof Element) {\n bindActions(mutation.target);\n }\n else if (mutation.type === 'childList' && mutation.addedNodes.length) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element) {\n bindElements(node);\n }\n }\n }\n }\n });\n observer.observe(el, { childList: true, subtree: true, attributeFilter: ['data-action'] });\n const subscription = {\n get closed() {\n return closed;\n },\n unsubscribe() {\n closed = true;\n observers.delete(el);\n observer.disconnect();\n }\n };\n observers.set(el, subscription);\n return subscription;\n}\nfunction bindElements(root) {\n for (const el of root.querySelectorAll('[data-action]')) {\n bindActions(el);\n }\n // Also bind the controller to itself\n if (root instanceof Element && root.hasAttribute('data-action')) {\n bindActions(root);\n }\n}\n// Bind a single function to all events to avoid anonymous closure performance penalty.\nfunction handleEvent(event) {\n const el = event.currentTarget;\n for (const binding of bindings(el)) {\n if (event.type === binding.type) {\n const controller = el.closest(binding.tag);\n if (controllers.has(controller) && typeof controller[binding.method] === 'function') {\n controller[binding.method](event);\n }\n const root = el.getRootNode();\n if (root instanceof ShadowRoot && controllers.has(root.host) && root.host.matches(binding.tag)) {\n const shadowController = root.host;\n if (typeof shadowController[binding.method] === 'function') {\n shadowController[binding.method](event);\n }\n }\n }\n }\n}\nfunction* bindings(el) {\n for (const action of (el.getAttribute('data-action') || '').trim().split(/\\s+/)) {\n const eventSep = action.lastIndexOf(':');\n const methodSep = Math.max(0, action.lastIndexOf('#')) || action.length;\n yield {\n type: action.slice(0, eventSep),\n tag: action.slice(eventSep + 1, methodSep),\n method: action.slice(methodSep + 1) || 'handleEvent'\n } || 'handleEvent';\n }\n}\nfunction bindActions(el) {\n for (const binding of bindings(el)) {\n el.addEventListener(binding.type, handleEvent);\n }\n}\n//# sourceMappingURL=bind.js.map","export const dasherize = (str) => String(typeof str === 'symbol' ? str.description : str)\n .replace(/([A-Z]($|[a-z]))/g, '-$1')\n .replace(/--/g, '-')\n .replace(/^-|-$/, '')\n .toLowerCase();\nexport const mustDasherize = (str, type = 'property') => {\n const dashed = dasherize(str);\n if (!dashed.includes('-')) {\n throw new DOMException(`${type}: ${String(str)} is not a valid ${type} name`, 'SyntaxError');\n }\n return dashed;\n};\n//# sourceMappingURL=dasherize.js.map","import { mustDasherize } from './dasherize.js';\nimport { meta } from './core.js';\nconst attrKey = 'attr';\n/**\n * Attr is a decorator which tags a property as one to be initialized via\n * `initializeAttrs`.\n *\n * The signature is typed such that the property must be one of a String,\n * Number or Boolean. This matches the behavior of `initializeAttrs`.\n */\nexport function attr(proto, key) {\n meta(proto, attrKey).add(key);\n}\n/**\n * initializeAttrs is called with a set of class property names (if omitted, it\n * will look for any properties tagged with the `@attr` decorator). With this\n * list it defines property descriptors for each property that map to `data-*`\n * attributes on the HTMLElement instance.\n *\n * It works around Native Class Property semantics - which are equivalent to\n * calling `Object.defineProperty` on the instance upon creation, but before\n * `constructor()` is called.\n *\n * If a class property is assigned to the class body, it will infer the type\n * (using `typeof`) and define an appropriate getter/setter combo that aligns\n * to that type. This means class properties assigned to Numbers can only ever\n * be Numbers, assigned to Booleans can only ever be Booleans, and assigned to\n * Strings can only ever be Strings.\n *\n * This is automatically called as part of `@controller`. If a class uses the\n * `@controller` decorator it should not call this manually.\n */\nconst initialized = new WeakSet();\nexport function initializeAttrs(instance, names) {\n if (initialized.has(instance))\n return;\n initialized.add(instance);\n const proto = Object.getPrototypeOf(instance);\n const prefix = proto?.constructor?.attrPrefix ?? 'data-';\n if (!names)\n names = meta(proto, attrKey);\n for (const key of names) {\n const value = instance[key];\n const name = mustDasherize(`${prefix}${key}`);\n let descriptor = {\n configurable: true,\n get() {\n return this.getAttribute(name) || '';\n },\n set(newValue) {\n this.setAttribute(name, newValue || '');\n }\n };\n if (typeof value === 'number') {\n descriptor = {\n configurable: true,\n get() {\n return Number(this.getAttribute(name) || 0);\n },\n set(newValue) {\n this.setAttribute(name, newValue);\n }\n };\n }\n else if (typeof value === 'boolean') {\n descriptor = {\n configurable: true,\n get() {\n return this.hasAttribute(name);\n },\n set(newValue) {\n this.toggleAttribute(name, newValue);\n }\n };\n }\n Object.defineProperty(instance, key, descriptor);\n if (key in instance && !instance.hasAttribute(name)) {\n descriptor.set.call(instance, value);\n }\n }\n}\nexport function defineObservedAttributes(classObject) {\n let observed = classObject.observedAttributes || [];\n const prefix = classObject.attrPrefix ?? 'data-';\n const attrToAttributeName = (name) => mustDasherize(`${prefix}${name}`);\n Object.defineProperty(classObject, 'observedAttributes', {\n configurable: true,\n get() {\n return [...meta(classObject.prototype, attrKey)].map(attrToAttributeName).concat(observed);\n },\n set(attributes) {\n observed = attributes;\n }\n });\n}\n//# sourceMappingURL=attr.js.map","import { register } from './register.js';\nimport { bind, bindShadow } from './bind.js';\nimport { autoShadowRoot } from './auto-shadow-root.js';\nimport { defineObservedAttributes, initializeAttrs } from './attr.js';\nconst symbol = Symbol.for('catalyst');\nexport class CatalystDelegate {\n constructor(classObject) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const delegate = this;\n const connectedCallback = classObject.prototype.connectedCallback;\n classObject.prototype.connectedCallback = function () {\n delegate.connectedCallback(this, connectedCallback);\n };\n const disconnectedCallback = classObject.prototype.disconnectedCallback;\n classObject.prototype.disconnectedCallback = function () {\n delegate.disconnectedCallback(this, disconnectedCallback);\n };\n const attributeChangedCallback = classObject.prototype.attributeChangedCallback;\n classObject.prototype.attributeChangedCallback = function (name, oldValue, newValue) {\n delegate.attributeChangedCallback(this, name, oldValue, newValue, attributeChangedCallback);\n };\n let observedAttributes = classObject.observedAttributes || [];\n Object.defineProperty(classObject, 'observedAttributes', {\n configurable: true,\n get() {\n return delegate.observedAttributes(this, observedAttributes);\n },\n set(attributes) {\n observedAttributes = attributes;\n }\n });\n defineObservedAttributes(classObject);\n register(classObject);\n }\n observedAttributes(instance, observedAttributes) {\n return observedAttributes;\n }\n connectedCallback(instance, connectedCallback) {\n instance.toggleAttribute('data-catalyst', true);\n customElements.upgrade(instance);\n autoShadowRoot(instance);\n initializeAttrs(instance);\n bind(instance);\n connectedCallback?.call(instance);\n if (instance.shadowRoot)\n bindShadow(instance.shadowRoot);\n }\n disconnectedCallback(element, disconnectedCallback) {\n disconnectedCallback?.call(element);\n }\n attributeChangedCallback(instance, name, oldValue, newValue, attributeChangedCallback) {\n initializeAttrs(instance);\n if (name !== 'data-catalyst' && attributeChangedCallback) {\n attributeChangedCallback.call(instance, name, oldValue, newValue);\n }\n }\n}\nexport function meta(proto, name) {\n if (!Object.prototype.hasOwnProperty.call(proto, symbol)) {\n const parent = proto[symbol];\n const map = (proto[symbol] = new Map());\n if (parent) {\n for (const [key, value] of parent) {\n map.set(key, new Set(value));\n }\n }\n }\n const map = proto[symbol];\n if (!map.has(name))\n map.set(name, new Set());\n return map.get(name);\n}\n//# sourceMappingURL=core.js.map","import { dasherize } from './dasherize.js';\n/**\n * Register the controller as a custom element.\n *\n * The classname is converted to a approriate tag name.\n *\n * Example: HelloController => hello-controller\n */\nexport function register(classObject) {\n const name = dasherize(classObject.name).replace(/-element$/, '');\n try {\n window.customElements.define(name, classObject);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n window[classObject.name] = customElements.get(name);\n }\n catch (e) {\n // The only reason for window.customElements.define to throw a `NotSupportedError`\n // is if the element has already been defined.\n if (!(e instanceof DOMException && e.name === 'NotSupportedError'))\n throw e;\n }\n return classObject;\n}\n//# sourceMappingURL=register.js.map","export function autoShadowRoot(element) {\n for (const template of element.querySelectorAll('template[data-shadowroot]')) {\n if (template.parentElement === element) {\n element\n .attachShadow({\n mode: template.getAttribute('data-shadowroot') === 'closed' ? 'closed' : 'open'\n })\n .append(template.content.cloneNode(true));\n }\n }\n}\n//# sourceMappingURL=auto-shadow-root.js.map","import { findTarget, findTargets } from './findtarget.js';\nimport { meta } from './core.js';\n/**\n * Target is a decorator which - when assigned to a property field on the\n * class - will override that class field, turning it into a Getter which\n * returns a call to `findTarget(this, key)` where `key` is the name of the\n * property field. In other words, `@target foo` becomes a getter for\n * `findTarget(this, 'foo')`.\n */\nexport function target(proto, key) {\n meta(proto, 'target').add(key);\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n return findTarget(this, key);\n }\n });\n}\n/**\n * Targets is a decorator which - when assigned to a property field on the\n * class - will override that class field, turning it into a Getter which\n * returns a call to `findTargets(this, key)` where `key` is the name of the\n * property field. In other words, `@targets foo` becomes a getter for\n * `findTargets(this, 'foo')`.\n */\nexport function targets(proto, key) {\n meta(proto, 'targets').add(key);\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n return findTargets(this, key);\n }\n });\n}\n//# sourceMappingURL=target.js.map","/**\n * findTarget will run `querySelectorAll` against the given controller, plus\n * its shadowRoot, returning any the first child that:\n *\n * - Matches the selector of `[data-target~=\"tag.name\"]` where tag is the\n * tagName of the given HTMLElement, and `name` is the given `name` argument.\n *\n * - Closest ascendant of the element, that matches the tagname of the\n * controller, is the specific instance of the controller itself - in other\n * words it is not nested in other controllers of the same type.\n *\n */\nexport function findTarget(controller, name) {\n const tag = controller.tagName.toLowerCase();\n if (controller.shadowRoot) {\n for (const el of controller.shadowRoot.querySelectorAll(`[data-target~=\"${tag}.${name}\"]`)) {\n if (!el.closest(tag))\n return el;\n }\n }\n for (const el of controller.querySelectorAll(`[data-target~=\"${tag}.${name}\"]`)) {\n if (el.closest(tag) === controller)\n return el;\n }\n}\nexport function findTargets(controller, name) {\n const tag = controller.tagName.toLowerCase();\n const targets = [];\n if (controller.shadowRoot) {\n for (const el of controller.shadowRoot.querySelectorAll(`[data-targets~=\"${tag}.${name}\"]`)) {\n if (!el.closest(tag))\n targets.push(el);\n }\n }\n for (const el of controller.querySelectorAll(`[data-targets~=\"${tag}.${name}\"]`)) {\n if (el.closest(tag) === controller)\n targets.push(el);\n }\n return targets;\n}\n//# sourceMappingURL=findtarget.js.map","export function throttle(callback, wait = 0, { start = true, middle = true, once = false } = {}) {\n let last = 0;\n let timer;\n let cancelled = false;\n function fn(...args) {\n if (cancelled)\n return;\n const delta = Date.now() - last;\n last = Date.now();\n if (start) {\n start = false;\n callback.apply(this, args);\n if (once)\n fn.cancel();\n }\n else if ((middle && delta < wait) || !middle) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n last = Date.now();\n callback.apply(this, args);\n if (once)\n fn.cancel();\n }, !middle ? wait : wait - delta);\n }\n }\n fn.cancel = () => {\n clearTimeout(timer);\n cancelled = true;\n };\n return fn;\n}\nexport function debounce(callback, wait = 0, { start = false, middle = false, once = false } = {}) {\n return throttle(callback, wait, { start, middle, once });\n}\n","const dynamicElements = new Map();\nconst ready = new Promise(resolve => {\n if (document.readyState !== 'loading') {\n resolve();\n }\n else {\n document.addEventListener('readystatechange', () => resolve(), { once: true });\n }\n});\nconst firstInteraction = new Promise(resolve => {\n const controller = new AbortController();\n controller.signal.addEventListener('abort', () => resolve());\n const listenerOptions = { once: true, passive: true, signal: controller.signal };\n const handler = () => controller.abort();\n document.addEventListener('mousedown', handler, listenerOptions);\n // eslint-disable-next-line github/require-passive-events\n document.addEventListener('touchstart', handler, listenerOptions);\n document.addEventListener('keydown', handler, listenerOptions);\n document.addEventListener('pointerdown', handler, listenerOptions);\n});\nconst visible = (tagName) => new Promise(resolve => {\n const observer = new IntersectionObserver(entries => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n resolve();\n observer.disconnect();\n return;\n }\n }\n }, {\n // Currently the threshold is set to 256px from the bottom of the viewport\n // with a threshold of 0.1. This means the element will not load until about\n // 2 keyboard-down-arrow presses away from being visible in the viewport,\n // giving us some time to fetch it before the contents are made visible\n rootMargin: '0px 0px 256px 0px',\n threshold: 0.01\n });\n for (const el of document.querySelectorAll(tagName)) {\n observer.observe(el);\n }\n});\nconst strategies = {\n ready: () => ready,\n firstInteraction: () => firstInteraction,\n visible\n};\nconst timers = new WeakMap();\nfunction scan(node) {\n cancelAnimationFrame(timers.get(node) || 0);\n timers.set(node, requestAnimationFrame(() => {\n for (const tagName of dynamicElements.keys()) {\n const child = node.matches(tagName) ? node : node.querySelector(tagName);\n if (customElements.get(tagName) || child) {\n const strategyName = (child?.getAttribute('data-load-on') || 'ready');\n const strategy = strategyName in strategies ? strategies[strategyName] : strategies.ready;\n // eslint-disable-next-line github/no-then\n for (const cb of dynamicElements.get(tagName) || [])\n strategy(tagName).then(cb);\n dynamicElements.delete(tagName);\n timers.delete(node);\n }\n }\n }));\n}\nlet elementLoader;\nexport function lazyDefine(tagName, callback) {\n if (!dynamicElements.has(tagName))\n dynamicElements.set(tagName, new Set());\n dynamicElements.get(tagName).add(callback);\n scan(document.body);\n if (!elementLoader) {\n elementLoader = new MutationObserver(mutations => {\n if (!dynamicElements.size)\n return;\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element)\n scan(node);\n }\n }\n });\n elementLoader.observe(document, { subtree: true, childList: true });\n }\n}\n//# sourceMappingURL=lazy-define.js.map","/* eslint-disable custom-elements/expose-class-on-global */\n/* eslint-disable custom-elements/define-tag-after-class-definition */\n\nimport {controller, target} from '@github/catalyst'\nimport {debounce} from '@github/mini-throttle/decorators'\n\n@controller\nexport class ToggleSwitchElement extends HTMLElement {\n @target switch: HTMLElement\n @target loadingSpinner: HTMLElement\n @target errorIcon: HTMLElement\n\n get src(): string | null {\n const src = this.getAttribute('src')\n if (!src) return null\n\n const link = this.ownerDocument.createElement('a')\n link.href = src\n return link.href\n }\n\n get csrf(): string | null {\n const csrfElement = this.querySelector('[data-csrf]')\n return this.getAttribute('csrf') || (csrfElement instanceof HTMLInputElement && csrfElement.value) || null\n }\n\n get csrfField(): string {\n // the authenticity token is passed into the element and is not generated in js land\n\n return this.getAttribute('csrf-field') || 'authenticity_token'\n }\n\n isRemote(): boolean {\n return this.src != null\n }\n\n toggle() {\n if (this.isRemote()) {\n this.setLoadingState()\n this.check()\n } else {\n this.performToggle()\n }\n }\n\n turnOn(): void {\n if (this.isDisabled()) {\n return\n }\n\n this.switch.setAttribute('aria-checked', 'true')\n this.classList.add('ToggleSwitch--checked')\n }\n\n turnOff(): void {\n if (this.isDisabled()) {\n return\n }\n\n this.switch.setAttribute('aria-checked', 'false')\n this.classList.remove('ToggleSwitch--checked')\n }\n\n isOn(): boolean {\n return this.switch.getAttribute('aria-checked') === 'true'\n }\n\n isOff(): boolean {\n return !this.isOn()\n }\n\n isDisabled(): boolean {\n return this.switch.getAttribute('aria-disabled') === 'true'\n }\n\n disable(): void {\n this.switch.setAttribute('aria-disabled', 'true')\n }\n\n enable(): void {\n this.switch.setAttribute('aria-disabled', 'false')\n }\n\n private performToggle(): void {\n if (this.isOn()) {\n this.turnOff()\n } else {\n this.turnOn()\n }\n }\n\n private setLoadingState(): void {\n this.disable()\n this.errorIcon.setAttribute('hidden', 'hidden')\n this.loadingSpinner.removeAttribute('hidden')\n }\n\n private setSuccessState(): void {\n this.setFinishedState(false)\n }\n\n private setErrorState(): void {\n this.setFinishedState(true)\n }\n\n private setFinishedState(error: boolean): void {\n if (error) {\n this.errorIcon.removeAttribute('hidden')\n }\n\n this.loadingSpinner.setAttribute('hidden', 'hidden')\n this.enable()\n }\n\n @debounce(300)\n private async check() {\n const body = new FormData()\n\n if (this.csrf) {\n body.append(this.csrfField, this.csrf)\n }\n\n body.append('value', this.isOn() ? '1' : '0')\n\n try {\n if (!this.src) throw new Error('invalid src')\n const response = await fetch(this.src, {\n credentials: 'same-origin',\n method: 'POST',\n body\n })\n if (response.ok) {\n this.setSuccessState()\n this.performToggle()\n } else {\n this.setErrorState()\n }\n } catch (error) {\n this.setErrorState()\n }\n }\n}\n\ndeclare global {\n interface Window {\n ToggleSwitchElement: typeof ToggleSwitchElement\n }\n}\n","import { debounce as db, throttle as th } from './index';\nexport function throttle(wait = 0, opts = {}) {\n return (proto, name, descriptor) => {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error('debounce can only decorate functions');\n }\n const fn = descriptor.value;\n descriptor.value = th(fn, wait, opts);\n Object.defineProperty(proto, name, descriptor);\n };\n}\nexport function debounce(wait = 0, opts = {}) {\n return (proto, name, descriptor) => {\n if (!descriptor || typeof descriptor.value !== 'function') {\n throw new Error('debounce can only decorate functions');\n }\n const fn = descriptor.value;\n descriptor.value = db(fn, wait, opts);\n Object.defineProperty(proto, name, descriptor);\n };\n}\n","import { CatalystDelegate } from './core.js';\n/**\n * Controller is a decorator to be used over a class that extends HTMLElement.\n * It will automatically `register()` the component in the customElement\n * registry, as well as ensuring `bind(this)` is called on `connectedCallback`,\n * wrapping the classes `connectedCallback` method if needed.\n */\nexport function controller(classObject) {\n new CatalystDelegate(classObject);\n}\n//# sourceMappingURL=controller.js.map","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","import type {AnchorAlignment, AnchorSide} from '@primer/behaviors'\nimport {getAnchoredPosition} from '@primer/behaviors'\n\nconst TOOLTIP_OPEN_CLASS = 'tooltip-open'\nconst TOOLTIP_ARROW_EDGE_OFFSET = 6\nconst TOOLTIP_SR_ONLY_CLASS = 'sr-only'\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 set hiddenFromView(value: true | false) {\n this.classList.toggle(TOOLTIP_SR_ONLY_CLASS, value)\n if (this.isConnected) this.#update()\n }\n\n get hiddenFromView() {\n return this.classList.contains(TOOLTIP_SR_ONLY_CLASS)\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.hiddenFromView = 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.hiddenFromView) {\n this.hiddenFromView = false\n } else if (event.type === 'blur') {\n this.hiddenFromView = true\n } else if (\n event.type === 'mouseleave' &&\n (event as MouseEvent).relatedTarget !== this.control &&\n (event as MouseEvent).relatedTarget !== this\n ) {\n this.hiddenFromView = true\n } else if (event.type === 'keydown' && (event as KeyboardEvent).key === 'Escape' && !this.hiddenFromView) {\n this.hiddenFromView = true\n }\n }\n\n static observedAttributes = ['data-type', 'data-direction', 'id']\n\n #update() {\n if (this.hiddenFromView) {\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.hiddenFromView = 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 let labelledBy = this.control.getAttribute('aria-labelledby')\n if (labelledBy) {\n labelledBy = `${labelledBy} ${this.id}`\n } else {\n labelledBy = this.id\n }\n this.control.setAttribute('aria-labelledby', labelledBy)\n\n // Prevent duplicate accessible name announcements.\n this.setAttribute('aria-hidden', 'true')\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 (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.hiddenFromView) 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 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(closedNotCancelled = false) {\n if (this.open === false) return\n const eventType = closedNotCancelled ? '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"],"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","__decorate","decorators","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__classPrivateFieldGet","receiver","kind","f","TypeError","call","__classPrivateFieldSet","controllers","WeakSet","bindShadow","bindElements","listenForBind","observers","closed","observer","MutationObserver","mutations","mutation","bindActions","addedNodes","observe","childList","subtree","attributeFilter","subscription","disconnect","handleEvent","binding","bindings","controller","tag","method","shadowController","action","split","eventSep","lastIndexOf","methodSep","dasherize","str","description","toLowerCase","mustDasherize","dashed","includes","DOMException","initialized","initializeAttrs","instance","names","proto","getPrototypeOf","prefix","constructor","attrPrefix","meta","descriptor","configurable","Number","toggleAttribute","symbol","Symbol","for","CatalystDelegate","classObject","delegate","disconnectedCallback","attributes","observed","attrToAttributeName","map","concat","defineObservedAttributes","register","upgrade","template","cloneNode","autoShadowRoot","hasOwnProperty","parent","Map","Set","findTarget","middle","timer","last","cancelled","fn","args","now","apply","cancel","throttle","readyState","AbortController","signal","listenerOptions","handler","ToggleSwitchElement","link","csrf","csrfElement","csrfField","isRemote","setLoadingState","check","performToggle","isDisabled","switch","isOn","turnOff","turnOn","disable","errorIcon","loadingSpinner","setFinishedState","error","enable","FormData","fetch","credentials","ok","setSuccessState","setErrorState","opts","db","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","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","disabled","hiddenInert","hiddenInputInert","sentinelInert","sizeInert","visibilityInert","visibility","clientRectsInert","getClientRects","tabIndex","signalSupported","noop","create","originalAddEventListener","EventTarget","originalCallback","optionsOrCapture","AbortSignal","monkeyPatch","suspendedTrapStack","activeTrap","focusTrap","initialFocus","abortSignal","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","hiddenFromView","toggle","isConnected","_ToolTipElement_instances","_ToolTipElement_update","styles","toFixed","labelledBy","describedBy","focusIfNeeded","tooltip","_ToolTipElement_updatePosition","ModalDialogElement","_ModalDialogElement_focusAbortController","_ModalDialogElement_abortController","_ModalDialogElement_openButton","_ModalDialogElement_shouldTryLoadingFragment","_ModalDialogElement_instances","_ModalDialogElement_overlayBackdrop_get","aborted","showButtons","clickOutsideDialog","dialogId","show","closedNotCancelled","dialogEvent"],"mappings":"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"} \ No newline at end of file From 1434aab35448b29b01356385ac4a6c9a34d8e622 Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Wed, 31 Aug 2022 17:22:34 +0100 Subject: [PATCH 23/27] remove blank line --- app/components/primer/alpha/dialog.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/components/primer/alpha/dialog.rb b/app/components/primer/alpha/dialog.rb index 813c531490..5d943e4907 100644 --- a/app/components/primer/alpha/dialog.rb +++ b/app/components/primer/alpha/dialog.rb @@ -46,7 +46,6 @@ class Dialog < Primer::Component }.freeze POSITION_NARROW_OPTIONS = POSITION_NARROW_MAPPINGS.keys - # Optional button to open the dialog. # # @param system_arguments [Hash] The same arguments as <%= link_to_component(Primer::ButtonComponent) %>. From 0ec07933d9d843a17ee7d70063527d0b33920487 Mon Sep 17 00:00:00 2001 From: Jon Rohan Date: Wed, 31 Aug 2022 09:29:46 -0700 Subject: [PATCH 24/27] Create clever-crabs-raise.md --- .changeset/clever-crabs-raise.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/clever-crabs-raise.md diff --git a/.changeset/clever-crabs-raise.md b/.changeset/clever-crabs-raise.md new file mode 100644 index 0000000000..6df941d815 --- /dev/null +++ b/.changeset/clever-crabs-raise.md @@ -0,0 +1,5 @@ +--- +"@primer/view-components": patch +--- + +Adding Primer Dialog Component From d2f8ced8684e8f8d59b7dd61fa714171d4f4bcae Mon Sep 17 00:00:00 2001 From: Keith Cirkel Date: Wed, 31 Aug 2022 17:41:49 +0100 Subject: [PATCH 25/27] remove useless tests --- stories/primer/alpha/dialog_stories.rb | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 stories/primer/alpha/dialog_stories.rb diff --git a/stories/primer/alpha/dialog_stories.rb b/stories/primer/alpha/dialog_stories.rb deleted file mode 100644 index 2cd09082b4..0000000000 --- a/stories/primer/alpha/dialog_stories.rb +++ /dev/null @@ -1,18 +0,0 @@ -# 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 - end -end From 30fb2ff351d550831fbccda6e36186b0553ccfca Mon Sep 17 00:00:00 2001 From: Jon Rohan Date: Wed, 31 Aug 2022 20:28:35 +0000 Subject: [PATCH 26/27] Fix component test --- test/components/component_test.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/components/component_test.rb b/test/components/component_test.rb index 23c0977909..3634917485 100644 --- a/test/components/component_test.rb +++ b/test/components/component_test.rb @@ -55,9 +55,9 @@ class PrimerComponentTest < Minitest::Test component.body { "Foo" } component.footer { "Foo" } }], - [Primer::Alpha::Dialog::Header, { title: "Test", id: "foo" }], - [Primer::Alpha::Dialog::Body], - [Primer::Alpha::Dialog::Footer], + [Primer::Alpha::Dialog::Header, { title: "Test", id: "test" }], + [Primer::Alpha::Dialog::Body, {}], + [Primer::Alpha::Dialog::Footer, {}], [Primer::Dropdown, {}, lambda do |component| component.button { "Foo" } component.menu do |m| From 7ad9af3b420e295ef8685efe7f2c8f1a9daac059 Mon Sep 17 00:00:00 2001 From: Jon Rohan Date: Wed, 31 Aug 2022 20:42:40 +0000 Subject: [PATCH 27/27] Fixing dialog_test --- app/components/primer/alpha/dialog.rb | 5 ++- test/components/primer/alpha/dialog_test.rb | 32 ++++++++++---------- test/previews/primer/alpha/dialog_preview.rb | 8 ++--- 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/app/components/primer/alpha/dialog.rb b/app/components/primer/alpha/dialog.rb index 5d943e4907..04db36e912 100644 --- a/app/components/primer/alpha/dialog.rb +++ b/app/components/primer/alpha/dialog.rb @@ -94,8 +94,8 @@ class Dialog < Primer::Component # title: "Dialog Example", # id: "my-dialog", # )) do |d| %> - # <% d.show_button { "Show Dialog" } %> - # <% d.body do %> + # <% d.with_show_button { "Show Dialog" } %> + # <% d.with_body do %> #

Some content

# <% end %> # <% d.footer do %> @@ -146,7 +146,6 @@ def initialize( @visually_hide_title = visually_hide_title @subtitle = subtitle - return if subtitle.present? @system_arguments[:aria] ||= {} @system_arguments[:aria][:describedby] ||= "#{@id}-description" diff --git a/test/components/primer/alpha/dialog_test.rb b/test/components/primer/alpha/dialog_test.rb index c24aacd69a..00652ec3f6 100644 --- a/test/components/primer/alpha/dialog_test.rb +++ b/test/components/primer/alpha/dialog_test.rb @@ -6,8 +6,8 @@ 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" } + render_inline(Primer::Alpha::Dialog.new(title: "Title")) do |c| + c.with_body { "Hello" } end assert_selector("modal-dialog[role='dialog']") do @@ -27,7 +27,7 @@ def test_raises_on_missing_title def test_renders_provided_id render_inline(Primer::Alpha::Dialog.new(title: "Title", id: "my-id")) do |c| - c.body { "content" } + c.with_body { "content" } end assert_selector("modal-dialog[id='my-id']") @@ -35,41 +35,41 @@ def test_renders_provided_id def test_renders_random_id render_inline(Primer::Alpha::Dialog.new(title: "Title")) do |c| - c.body { "content" } + c.with_body { "content" } end - assert_selector("modal-dialog[id^='dialog_']") + 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" } + c.with_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") + assert_selector("modal-dialog[id='my-dialog'][aria-describedby='my-dialog-description']") do + assert_selector("h2[id='my-dialog-description']", text: "Subtitle") end end - def test_renders_footer_with_divider_by_default + def test_renders_footer_without_divider_by_default render_inline(Primer::Alpha::Dialog.new(title: "Title", id: "my-dialog", subtitle: "Subtitle")) do |c| - c.body { "content" } - c.footer { "footer" } + c.with_body { "content" } + c.with_footer { "footer" } end assert_selector("modal-dialog") do - assert_selector(".Overlay-footer.Overlay-footer--divided", text: "footer") + assert_selector(".Overlay-footer:not(.Overlay-footer--divided)") end end - def test_renders_footer_without_divider_if_hide_divider + def test_renders_footer_with_divider_if_show_divider_is_true render_inline(Primer::Alpha::Dialog.new(title: "Title", id: "my-dialog", subtitle: "Subtitle")) do |c| - c.body { "content" } - c.footer(show_divider: false) { "footer" } + c.with_body { "content" } + c.with_footer(show_divider: true) { "footer" } end assert_selector("modal-dialog") do - assert_selector(".Overlay-footer:not(.Overlay-footer--divided)", text: "footer") + assert_selector(".Overlay-footer.Overlay-footer--divided") end end end diff --git a/test/previews/primer/alpha/dialog_preview.rb b/test/previews/primer/alpha/dialog_preview.rb index 727baa97de..e303664418 100644 --- a/test/previews/primer/alpha/dialog_preview.rb +++ b/test/previews/primer/alpha/dialog_preview.rb @@ -16,8 +16,8 @@ class DialogPreview < ViewComponent::Preview # @param body_text [String] text def default(title: "Test Dialog", subtitle: nil, size: :medium, button_text: "Show Dialog", body_text: "Content", position: :center, position_narrow: :fullscreen, visually_hide_title: false) render(Primer::Alpha::Dialog.new(title: title, subtitle: subtitle, size: size, position: position, position_narrow: position_narrow, visually_hide_title: visually_hide_title)) do |d| - d.show_button { button_text } - d.body { body_text } + d.with_show_button { button_text } + d.with_body { body_text } end end @@ -31,8 +31,8 @@ def default(title: "Test Dialog", subtitle: nil, size: :medium, button_text: "Sh # @param position_narrow [Symbol] select [inherit, bottom, fullscreen, left, right] def long_text(title: "Test Dialog", subtitle: nil, size: :medium, button_text: "Show Dialog", position: :center, position_narrow: :fullscreen) render(Primer::Alpha::Dialog.new(title: title, subtitle: subtitle, size: size, position: position, position_narrow: position_narrow)) do |d| - d.show_button { button_text } - d.body { "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?" } + d.with_show_button { button_text } + d.with_body { "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?" } end end