@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 28.1 kB
JavaScript
import*as Host from"../../core/host/host.js";import*as i18n from"../../core/i18n/i18n.js";import*as Platform from"../../core/platform/platform.js";import*as TextUtils from"../../models/text_utils/text_utils.js";import*as IconButton from"../components/icon_button/icon_button.js";import*as ARIAUtils from"./ARIAUtils.js";import{Dialog}from"./Dialog.js";import{Size}from"./Geometry.js";import{GlassPane}from"./GlassPane.js";import{Icon}from"./Icon.js";import{KeyboardShortcut}from"./KeyboardShortcut.js";import*as Utils from"./utils/utils.js";import{Toolbar}from"./Toolbar.js";import{Tooltip}from"./Tooltip.js";import checkboxTextLabelStyles from"./checkboxTextLabel.css.legacy.js";import closeButtonStyles from"./closeButton.css.legacy.js";import confirmDialogStyles from"./confirmDialog.css.legacy.js";import inlineButtonStyles from"./inlineButton.css.legacy.js";import radioButtonStyles from"./radioButton.css.legacy.js";import sliderStyles from"./slider.css.legacy.js";import smallBubbleStyles from"./smallBubble.css.legacy.js";const UIStrings={openInNewTab:"Open in new tab",copyLinkAddress:"Copy link address",copyFileName:"Copy file name",anotherProfilerIsAlreadyActive:"Another profiler is already active",promiseResolvedAsync:"Promise resolved (async)",promiseRejectedAsync:"Promise rejected (async)",sAsync:"{PH1} (async)",asyncCall:"Async Call",anonymous:"(anonymous)",close:"Close",ok:"OK",cancel:"Cancel"},str_=i18n.i18n.registerUIStrings("ui/legacy/UIUtils.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export const highlightedSearchResultClassName="highlighted-search-result";export const highlightedCurrentSearchResultClassName="current-search-result";export function installDragHandle(e,t,n,o,r,s,i){let l;e.addEventListener("pointerdown",(function(s){const a=new DragHandler,c=()=>a.elementDragStart(e,t,n,o,r,s);i?l=window.setTimeout(c,i):c()}),!1),i&&e.addEventListener("pointerup",(function(){l&&window.clearTimeout(l),l=null}),!1),null!==s&&(e.style.cursor=s||r||"")}export function elementDragStart(e,t,n,o,r,s){(new DragHandler).elementDragStart(e,t,n,o,r,s)}class DragHandler{glassPaneInUse;elementDraggingEventListener;elementEndDraggingEventListener;dragEventsTargetDocument;dragEventsTargetDocumentTop;restoreCursorAfterDrag;constructor(){this.elementDragMove=this.elementDragMove.bind(this),this.elementDragEnd=this.elementDragEnd.bind(this),this.mouseOutWhileDragging=this.mouseOutWhileDragging.bind(this)}createGlassPane(){this.glassPaneInUse=!0,DragHandler.glassPaneUsageCount++||(DragHandler.glassPane=new GlassPane,DragHandler.glassPane.setPointerEventsBehavior("BlockedByGlassPane"),DragHandler.documentForMouseOut&&DragHandler.glassPane.show(DragHandler.documentForMouseOut))}disposeGlassPane(){this.glassPaneInUse&&(this.glassPaneInUse=!1,--DragHandler.glassPaneUsageCount||(DragHandler.glassPane&&(DragHandler.glassPane.hide(),DragHandler.glassPane=null),DragHandler.documentForMouseOut=null,DragHandler.rootForMouseOut=null))}elementDragStart(e,t,n,o,r,s){const i=s;if(i.button||Host.Platform.isMac()&&i.ctrlKey)return;if(this.elementDraggingEventListener)return;if(t&&!t(i))return;const l=i.target instanceof Node&&i.target.ownerDocument;this.elementDraggingEventListener=n,this.elementEndDraggingEventListener=o,console.assert((DragHandler.documentForMouseOut||l)===l,"Dragging on multiple documents."),DragHandler.documentForMouseOut=l,DragHandler.rootForMouseOut=i.target instanceof Node&&i.target.getRootNode()||null,this.dragEventsTargetDocument=l;try{l.defaultView&&l.defaultView.top&&(this.dragEventsTargetDocumentTop=l.defaultView.top.document)}catch(e){this.dragEventsTargetDocumentTop=this.dragEventsTargetDocument}l.addEventListener("pointermove",this.elementDragMove,!0),l.addEventListener("pointerup",this.elementDragEnd,!0),DragHandler.rootForMouseOut&&DragHandler.rootForMouseOut.addEventListener("pointerout",this.mouseOutWhileDragging,{capture:!0}),this.dragEventsTargetDocumentTop&&l!==this.dragEventsTargetDocumentTop&&this.dragEventsTargetDocumentTop.addEventListener("pointerup",this.elementDragEnd,!0);const a=e;"string"==typeof r&&(this.restoreCursorAfterDrag=function(e){l.body.style.removeProperty("cursor"),a.style.cursor=e,this.restoreCursorAfterDrag=void 0}.bind(this,a.style.cursor),a.style.cursor=r,l.body.style.cursor=r),i.preventDefault()}mouseOutWhileDragging(){this.unregisterMouseOutWhileDragging(),this.createGlassPane()}unregisterMouseOutWhileDragging(){DragHandler.rootForMouseOut&&DragHandler.rootForMouseOut.removeEventListener("pointerout",this.mouseOutWhileDragging,{capture:!0})}unregisterDragEvents(){this.dragEventsTargetDocument&&(this.dragEventsTargetDocument.removeEventListener("pointermove",this.elementDragMove,!0),this.dragEventsTargetDocument.removeEventListener("pointerup",this.elementDragEnd,!0),this.dragEventsTargetDocumentTop&&this.dragEventsTargetDocument!==this.dragEventsTargetDocumentTop&&this.dragEventsTargetDocumentTop.removeEventListener("pointerup",this.elementDragEnd,!0),delete this.dragEventsTargetDocument,delete this.dragEventsTargetDocumentTop)}elementDragMove(e){1===e.buttons?this.elementDraggingEventListener&&this.elementDraggingEventListener(e)&&this.cancelDragEvents(e):this.elementDragEnd(e)}cancelDragEvents(e){this.unregisterDragEvents(),this.unregisterMouseOutWhileDragging(),this.restoreCursorAfterDrag&&this.restoreCursorAfterDrag(),this.disposeGlassPane(),delete this.elementDraggingEventListener,delete this.elementEndDraggingEventListener}elementDragEnd(e){const t=this.elementEndDraggingEventListener;this.cancelDragEvents(e),e.preventDefault(),t&&t(e)}static glassPaneUsageCount=0;static glassPane=null;static documentForMouseOut=null;static rootForMouseOut=null}export function isBeingEdited(e){if(!e||e.nodeType!==Node.ELEMENT_NODE)return!1;const t=e;if(t.classList.contains("text-prompt")||"INPUT"===t.nodeName||"TEXTAREA"===t.nodeName)return!0;if(!elementsBeingEdited.size)return!1;let n=t;for(;n;){if(elementsBeingEdited.has(t))return!0;n=n.parentElementOrShadowHost()}return!1}export function isEditing(){if(elementsBeingEdited.size)return!0;const e=Platform.DOMUtilities.deepActiveElement(document);return!!e&&(e.classList.contains("text-prompt")||"INPUT"===e.nodeName||"TEXTAREA"===e.nodeName||"true"===e.contentEditable||"plaintext-only"===e.contentEditable)}export function markBeingEdited(e,t){if(t){if(elementsBeingEdited.has(e))return!1;e.classList.add("being-edited"),elementsBeingEdited.add(e)}else{if(!elementsBeingEdited.has(e))return!1;e.classList.remove("being-edited"),elementsBeingEdited.delete(e)}return!0}const elementsBeingEdited=new Set,numberRegex=/^(-?(?:\d+(?:\.\d+)?|\.\d+))$/;export const StyleValueDelimiters=" \t\n\"':;,/()";export function getValueModificationDirection(e){let t=null;if("wheel"===e.type){const n=e;n.deltaY<0||n.deltaX<0?t="Up":(n.deltaY>0||n.deltaX>0)&&(t="Down")}else{const n=e;"ArrowUp"===n.key||"PageUp"===n.key?t="Up":"ArrowDown"!==n.key&&"PageDown"!==n.key||(t="Down")}return t}function modifiedHexValue(e,t){const n=getValueModificationDirection(t);if(!n)return null;const o=t,r=parseInt(e,16);if(isNaN(r)||!isFinite(r))return null;const s=e.length,i=s/3;if(1!==i&&2!==i)return null;let l=0;KeyboardShortcut.eventHasCtrlEquivalentKey(o)&&(l+=Math.pow(16,2*i)),o.shiftKey&&(l+=Math.pow(16,i)),o.altKey&&(l+=1),0===l&&(l=1),"Down"===n&&(l*=-1);const a=Math.pow(16,s)-1;let c=Platform.NumberUtilities.clamp(r+l,0,a).toString(16).toUpperCase();for(let e=0,t=s-c.length;e<t;++e)c="0"+c;return c}export function modifiedFloatNumber(e,t,n){const o=getValueModificationDirection(t);if(!o)return null;const r=t;let s=1;KeyboardShortcut.eventHasCtrlEquivalentKey(r)?s=100:r.shiftKey?s=10:r.altKey&&(s=.1),"Down"===o&&(s*=-1),n&&(s*=n);const i=Number((e+s).toFixed(6));return String(i).match(numberRegex)?i:null}export function createReplacementString(e,t,n){let o,r,s,i=null,l=/(.*#)([\da-fA-F]+)(.*)/.exec(e);return l&&l.length?(o=l[1],r=l[3],s=modifiedHexValue(l[2],t),null!==s&&(i=o+s+r)):(l=/(.*?)(-?(?:\d+(?:\.\d+)?|\.\d+))(.*)/.exec(e),l&&l.length&&(o=l[1],r=l[3],s=modifiedFloatNumber(parseFloat(l[2]),t),null!==s&&(i=n?n(o,s,r):o+s+r))),i}export function handleElementValueModifications(e,t,n,o,r){const s="ArrowUp"===e.key||"ArrowDown"===e.key||"wheel"===e.type,i="PageUp"===e.key||"PageDown"===e.key;if(!s&&!i)return!1;const l=t.getComponentSelection();if(!l||!l.rangeCount)return!1;const a=l.getRangeAt(0);if(!a.commonAncestorContainer.isSelfOrDescendant(t))return!1;const c=t.textContent,d=Platform.DOMUtilities.rangeOfWord(a.startContainer,a.startOffset," \t\n\"':;,/()",t),u=d.toString();if(o&&o(u))return!1;const m=createReplacementString(u,e,r);if(m){const t=document.createTextNode(m);d.deleteContents(),d.insertNode(t);const o=document.createRange();return o.setStart(t,0),o.setEnd(t,m.length),l.removeAllRanges(),l.addRange(o),e.handled=!0,e.preventDefault(),n&&n(c||"",m),!0}return!1}export function openLinkExternallyLabel(){return i18nString(UIStrings.openInNewTab)}export function copyLinkAddressLabel(){return i18nString(UIStrings.copyLinkAddress)}export function copyFileNameLabel(){return i18nString(UIStrings.copyFileName)}export function anotherProfilerActiveLabel(){return i18nString(UIStrings.anotherProfilerIsAlreadyActive)}export function asyncStackTraceLabel(e,t){if(e){if("Promise.resolve"===e)return i18nString(UIStrings.promiseResolvedAsync);if("Promise.reject"===e)return i18nString(UIStrings.promiseRejectedAsync);if(("await"===e||"async function"===e)&&0!==t.length){e=`await in ${beautifyFunctionName(t[t.length-1].functionName)}`}return i18nString(UIStrings.sAsync,{PH1:e})}return i18nString(UIStrings.asyncCall)}export function installComponentRootStyles(e){Utils.injectCoreStyles(e),e.classList.add("platform-"+Host.Platform.platform()),Host.Platform.isMac()||0!==Utils.measuredScrollbarWidth(e.ownerDocument)||e.classList.add("overlay-scrollbar-enabled")}function windowFocused(e,t){t.target instanceof Window&&t.target.document.nodeType===Node.DOCUMENT_NODE&&e.body.classList.remove("inactive")}function windowBlurred(e,t){t.target instanceof Window&&t.target.document.nodeType===Node.DOCUMENT_NODE&&e.body.classList.add("inactive")}export class ElementFocusRestorer{element;previous;constructor(e){this.element=e,this.previous=Platform.DOMUtilities.deepActiveElement(e.ownerDocument),e.focus()}restore(){this.element&&(this.element.hasFocus()&&this.previous&&this.previous.focus(),this.previous=null,this.element=null)}}export function highlightSearchResult(e,t,n,o){const r=highlightSearchResults(e,[new TextUtils.TextRange.SourceRange(t,n)],o);return r.length?r[0]:null}export function highlightSearchResults(e,t,n){return highlightRangesWithStyleClass(e,t,highlightedSearchResultClassName,n)}export function runCSSAnimationOnce(e,t){e.classList.contains(t)&&e.classList.remove(t),e.addEventListener("webkitAnimationEnd",(function n(){e.classList.remove(t),e.removeEventListener("webkitAnimationEnd",n,!1)}),!1),e.classList.add(t)}export function highlightRangesWithStyleClass(e,t,n,o){o=o||[];const r=[],s=e.childTextNodes(),i=s.map((function(e){return e.textContent})).join(""),l=e.ownerDocument;if(0===s.length)return r;const a=[];let c=0;for(const e of s){const t=new TextUtils.TextRange.SourceRange(c,e.textContent?e.textContent.length:0);c=t.offset+t.length,a.push(t)}let d=0;for(let e=0;e<t.length;++e){const c=t[e].offset,u=c+t[e].length;for(;d<s.length&&a[d].offset+a[d].length<=c;)d++;let m=d;for(;m<s.length&&a[m].offset+a[m].length<u;)m++;if(m===s.length)break;const h=l.createElement("span");h.className=n,h.textContent=i.substring(c,u);const g=s[m],p=g.textContent||"";if(g.textContent=p.substring(u-a[m].offset),o.push({node:g,type:"changed",oldText:p,newText:g.textContent,nextSibling:void 0,parent:void 0}),d===m&&g.parentElement){g.parentElement.insertBefore(h,g),o.push({node:h,type:"added",nextSibling:g,parent:g.parentElement,oldText:void 0,newText:void 0}),r.push(h);const e=l.createTextNode(p.substring(0,c-a[d].offset));g.parentElement.insertBefore(e,h),o.push({node:e,type:"added",nextSibling:h,parent:g.parentElement,oldText:void 0,newText:void 0})}else{const e=s[d],t=e.textContent||"",n=e.nextSibling;e.parentElement&&(e.parentElement.insertBefore(h,n),o.push({node:h,type:"added",nextSibling:n||void 0,parent:e.parentElement,oldText:void 0,newText:void 0}),r.push(h)),e.textContent=t.substring(0,c-a[d].offset),o.push({node:e,type:"changed",oldText:t,newText:e.textContent,nextSibling:void 0,parent:void 0});for(let e=d+1;e<m;e++){const t=s[e],n=t.textContent;t.textContent="",o.push({node:t,type:"changed",oldText:n||void 0,newText:t.textContent,nextSibling:void 0,parent:void 0})}}d=m,a[d].offset=u,a[d].length=g.textContent.length}return r}export function applyDomChanges(e){for(let t=0,n=e.length;t<n;++t){const n=e[t];switch(n.type){case"added":n.parent?.insertBefore(n.node,n.nextSibling??null);break;case"changed":n.node.textContent=n.newText??null}}}export function revertDomChanges(e){for(let t=e.length-1;t>=0;--t){const n=e[t];switch(n.type){case"added":n.node.remove();break;case"changed":n.node.textContent=n.oldText??null}}}export function measurePreferredSize(e,t){const n=e.parentElement,o=e.nextSibling;(t=t||e.ownerDocument.body).appendChild(e),e.positionAt(0,0);const r=e.getBoundingClientRect();return e.positionAt(void 0,void 0),n?n.insertBefore(e,o):e.remove(),new Size(r.width,r.height)}class InvokeOnceHandlers{handlers;autoInvoke;constructor(e){this.handlers=null,this.autoInvoke=e}add(e,t){this.handlers||(this.handlers=new Map,this.autoInvoke&&this.scheduleInvoke());let n=this.handlers.get(e);n||(n=new Set,this.handlers.set(e,n)),n.add(t)}scheduleInvoke(){this.handlers&&requestAnimationFrame(this.invoke.bind(this))}invoke(){const e=this.handlers;if(this.handlers=null,e)for(const[t,n]of e)for(const e of n)e.call(t)}}let coalescingLevel=0,postUpdateHandlers=null;export function startBatchUpdate(){coalescingLevel++||(postUpdateHandlers=new InvokeOnceHandlers(!1))}export function endBatchUpdate(){--coalescingLevel||postUpdateHandlers&&(postUpdateHandlers.scheduleInvoke(),postUpdateHandlers=null)}export function invokeOnceAfterBatchUpdate(e,t){postUpdateHandlers||(postUpdateHandlers=new InvokeOnceHandlers(!0)),postUpdateHandlers.add(e,t)}export function animateFunction(e,t,n,o,r){const s=e.performance.now();let i=e.requestAnimationFrame((function l(a){const c=Platform.NumberUtilities.clamp((a-s)/o,0,1);t(...n.map((e=>e.from+(e.to-e.from)*c))),c<1?i=e.requestAnimationFrame(l):r&&r()}));return()=>e.cancelAnimationFrame(i)}export class LongClickController{element;callback;editKey;longClickData;longClickInterval;constructor(e,t,n=(e=>Platform.KeyboardUtilities.isEnterOrSpaceKey(e))){this.element=e,this.callback=t,this.editKey=n,this.enable()}reset(){this.longClickInterval&&(clearInterval(this.longClickInterval),delete this.longClickInterval)}enable(){if(this.longClickData)return;const e=function(e){if(this.editKey(e)){const t=this.callback;this.longClickInterval=window.setTimeout(t.bind(null,e),LongClickController.TIME_MS)}}.bind(this),t=function(e){this.editKey(e)&&this.reset()}.bind(this),n=function(e){if(1!==e.which)return;const t=this.callback;this.longClickInterval=window.setTimeout(t.bind(null,e),LongClickController.TIME_MS)}.bind(this),o=function(e){if(1!==e.which)return;this.reset()}.bind(this),r=this.reset.bind(this);this.element.addEventListener("keydown",e,!1),this.element.addEventListener("keyup",t,!1),this.element.addEventListener("pointerdown",n,!1),this.element.addEventListener("pointerout",r,!1),this.element.addEventListener("pointerup",o,!1),this.element.addEventListener("click",r,!0),this.longClickData={mouseUp:o,mouseDown:n,reset:r}}dispose(){this.longClickData&&(this.element.removeEventListener("pointerdown",this.longClickData.mouseDown,!1),this.element.removeEventListener("pointerout",this.longClickData.reset,!1),this.element.removeEventListener("pointerup",this.longClickData.mouseUp,!1),this.element.addEventListener("click",this.longClickData.reset,!0),delete this.longClickData)}static TIME_MS=200}export function initializeUIUtils(e){e.body.classList.toggle("inactive",!e.hasFocus()),e.defaultView&&(e.defaultView.addEventListener("focus",windowFocused.bind(void 0,e),!1),e.defaultView.addEventListener("blur",windowBlurred.bind(void 0,e),!1)),e.addEventListener("focus",Utils.focusChanged.bind(void 0),!0);const t=e.body;GlassPane.setContainer(t)}export function beautifyFunctionName(e){return e||i18nString(UIStrings.anonymous)}export const createTextChild=(e,t)=>{const n=e.ownerDocument.createTextNode(t);return e.appendChild(n),n};export const createTextChildren=(e,...t)=>{for(const n of t)createTextChild(e,n)};export function createTextButton(e,t,n,o,r){const s=document.createElement("button");return n&&(s.className=n),s.textContent=e,s.classList.add("text-button"),o&&s.classList.add("primary-button"),t&&s.addEventListener(r||"click",t),s.type="button",s}export function createInput(e,t){const n=document.createElement("input");return e&&(n.className=e),n.spellcheck=!1,n.classList.add("harmony-input"),t&&(n.type=t),n}export function createSelect(e,t){const n=document.createElement("select");n.classList.add("chrome-select"),ARIAUtils.setLabel(n,e);for(const e of t)if(e instanceof Map)for(const[t,o]of e){const e=n.createChild("optgroup");e.label=t;for(const t of o)"string"==typeof t&&e.appendChild(new Option(t,t))}else"string"==typeof e&&n.add(new Option(e,e));return n}export function createLabel(e,t,n){const o=document.createElement("label");return t&&(o.className=t),o.textContent=e,n&&ARIAUtils.bindLabelToControl(o,n),o}export function createRadioLabel(e,t,n){const o=document.createElement("span",{is:"dt-radio"});return o.radioElement.name=e,o.radioElement.checked=Boolean(n),createTextChild(o.labelElement,t),o}export function createIconLabel(e){const t=document.createElement("span",{is:"dt-icon-label"});return e.title&&(t.createChild("span").textContent=e.title),t.data={iconName:e.iconName,color:e.color??"var(--icon-default)",width:e.width??"14px",height:e.height??"14px"},t}export function createSlider(e,t,n){const o=document.createElement("span",{is:"dt-slider"});return o.sliderElement.min=String(e),o.sliderElement.max=String(t),o.sliderElement.step=String(1),o.sliderElement.tabIndex=n,o}export function setTitle(e,t){ARIAUtils.setLabel(e,t),Tooltip.install(e,t)}export class CheckboxLabel extends HTMLSpanElement{shadowRootInternal;checkboxElement;textElement;constructor(){super(),CheckboxLabel.lastId=CheckboxLabel.lastId+1;const e="ui-checkbox-label"+CheckboxLabel.lastId;this.shadowRootInternal=Utils.createShadowRootWithCoreStyles(this,{cssFile:checkboxTextLabelStyles,delegatesFocus:void 0}),this.checkboxElement=this.shadowRootInternal.createChild("input"),this.checkboxElement.type="checkbox",this.checkboxElement.setAttribute("id",e),this.textElement=this.shadowRootInternal.createChild("label","dt-checkbox-text"),this.textElement.setAttribute("for",e),this.shadowRootInternal.createChild("slot")}static create(e,t,n){CheckboxLabel.constructorInternal||(CheckboxLabel.constructorInternal=Utils.registerCustomElement("span","dt-checkbox",CheckboxLabel));const o=CheckboxLabel.constructorInternal();return o.checkboxElement.checked=Boolean(t),void 0!==e&&(o.textElement.textContent=e,o.checkboxElement.title=e,void 0!==n&&(o.textElement.createChild("div","dt-checkbox-subtitle").textContent=n)),o}static lastId=0;static constructorInternal=null}export class DevToolsIconLabel extends HTMLSpanElement{#e;constructor(){super();const e=Utils.createShadowRootWithCoreStyles(this,{cssFile:void 0,delegatesFocus:void 0});this.#e=new IconButton.Icon.Icon,this.#e.style.setProperty("margin-right","4px"),e.appendChild(this.#e),e.createChild("slot")}set data(e){this.#e.data=e,"14px"===e.height?this.#e.style.setProperty("margin-bottom","-2px"):"20px"===e.height&&this.#e.style.setProperty("margin-bottom","2px")}}let labelId=0;export class DevToolsRadioButton extends HTMLSpanElement{radioElement;labelElement;constructor(){super(),this.radioElement=this.createChild("input","dt-radio-button"),this.labelElement=this.createChild("label");const e="dt-radio-button-id"+ ++labelId;this.radioElement.id=e,this.radioElement.type="radio",this.labelElement.htmlFor=e;Utils.createShadowRootWithCoreStyles(this,{cssFile:radioButtonStyles,delegatesFocus:void 0}).createChild("slot"),this.addEventListener("click",this.radioClickHandler.bind(this),!1)}radioClickHandler(){this.radioElement.checked||this.radioElement.disabled||(this.radioElement.checked=!0,this.radioElement.dispatchEvent(new Event("change")))}}Utils.registerCustomElement("span","dt-radio",DevToolsRadioButton),Utils.registerCustomElement("span","dt-icon-label",DevToolsIconLabel);export class DevToolsSlider extends HTMLSpanElement{sliderElement;constructor(){super();const e=Utils.createShadowRootWithCoreStyles(this,{cssFile:sliderStyles,delegatesFocus:void 0});this.sliderElement=document.createElement("input"),this.sliderElement.classList.add("dt-range-input"),this.sliderElement.type="range",e.appendChild(this.sliderElement)}set value(e){this.sliderElement.value=String(e)}get value(){return Number(this.sliderElement.value)}}Utils.registerCustomElement("span","dt-slider",DevToolsSlider);export class DevToolsSmallBubble extends HTMLSpanElement{textElement;constructor(){super();const e=Utils.createShadowRootWithCoreStyles(this,{cssFile:smallBubbleStyles,delegatesFocus:void 0});this.textElement=e.createChild("div"),this.textElement.className="info",this.textElement.createChild("slot")}set type(e){this.textElement.className=e}}Utils.registerCustomElement("span","dt-small-bubble",DevToolsSmallBubble);export class DevToolsCloseButton extends HTMLDivElement{buttonElement;constructor(){super();const e=Utils.createShadowRootWithCoreStyles(this,{cssFile:closeButtonStyles,delegatesFocus:void 0});this.buttonElement=e.createChild("div","close-button"),Tooltip.install(this.buttonElement,i18nString(UIStrings.close)),ARIAUtils.setLabel(this.buttonElement,i18nString(UIStrings.close)),ARIAUtils.markAsButton(this.buttonElement);const t=Icon.create("cross","default-icon");this.buttonElement.appendChild(t)}setAccessibleName(e){ARIAUtils.setLabel(this.buttonElement,e)}setTabbable(e){this.buttonElement.tabIndex=e?0:-1}}Utils.registerCustomElement("div","dt-close-button",DevToolsCloseButton);export function bindInput(e,t,n,o,r){return e.addEventListener("change",(function(){const{valid:o}=n(e.value);e.classList.toggle("error-input",!o),o&&t(e.value)}),!1),e.addEventListener("input",(function(){e.classList.toggle("error-input",!n(e.value))}),!1),e.addEventListener("keydown",(function(s){if("Enter"===s.key){const{valid:o}=n(e.value);return o&&t(e.value),void s.preventDefault()}if(!o)return;const i=modifiedFloatNumber(parseFloat(e.value),s,r),l=i?String(i):"",{valid:a}=n(l);if(!a||!i)return;e.value=l,t(e.value),s.preventDefault()}),!1),e.addEventListener("focus",e.select.bind(e),!1),function(t){if(t===e.value)return;const{valid:o}=n(t);e.classList.toggle("error-input",!o),e.value=t}}export function trimText(e,t,n,o){if(n<=10)return"";t.length>200&&(t=o(t,200));const r=measureTextWidth(e,t);if(r<=n)return t;let s=0,i=t.length,l=0,a=r;for(;s<i&&l!==a&&l!==n;){const r=Math.ceil(s+(i-s)*(n-l)/(a-l)),c=measureTextWidth(e,o(t,r));c<=n?(s=r,l=c):(i=r-1,a=c)}return"…"!==(t=o(t,s))?t:""}export function trimTextMiddle(e,t,n){return trimText(e,t,n,((e,t)=>Platform.StringUtilities.trimMiddle(e,t)))}export function trimTextEnd(e,t,n){return trimText(e,t,n,((e,t)=>Platform.StringUtilities.trimEndWithMaxLength(e,t)))}export function measureTextWidth(e,t){if(t.length>200)return e.measureText(t).width;measureTextWidthCache||(measureTextWidthCache=new Map);const n=e.font;let o=measureTextWidthCache.get(n);o||(o=new Map,measureTextWidthCache.set(n,o));let r=o.get(t);return r||(r=e.measureText(t).width,o.set(t,r)),r}let measureTextWidthCache=null;export function addReferrerToURL(e){return/(\?|&)utm_source=devtools/.test(e)?e:-1===e.indexOf("?")?e.replace(/^([^#]*)(#.*)?$/g,"$1?utm_source=devtools$2"):e.replace(/^([^#]*)(#.*)?$/g,"$1&utm_source=devtools$2")}export function addReferrerToURLIfNecessary(e){return/(\/\/developers.google.com\/|\/\/web.dev\/|\/\/developer.chrome.com\/)/.test(e)?addReferrerToURL(e):e}export function loadImage(e){return new Promise((t=>{const n=new Image;n.addEventListener("load",(()=>t(n))),n.addEventListener("error",(()=>t(null))),n.src=e}))}export function loadImageFromData(e){return e?loadImage("data:image/jpg;base64,"+e):Promise.resolve(null)}export function createFileSelectorElement(e){const t=document.createElement("input");return t.type="file",t.style.display="none",t.tabIndex=-1,t.onchange=()=>{t.files&&e(t.files[0])},t}export const MaxLengthForDisplayedURLs=150;export class MessageDialog{static async show(e,t){const n=new Dialog;n.setSizeBehavior("MeasureContent"),n.setDimmed(!0);const o=Utils.createShadowRootWithCoreStyles(n.contentElement,{cssFile:confirmDialogStyles,delegatesFocus:void 0}).createChild("div","widget");await new Promise((r=>{const s=createTextButton(i18nString(UIStrings.ok),r,"",!0);o.createChild("div","message").createChild("span").textContent=e,o.createChild("div","button").appendChild(s),n.setOutsideClickCallback((e=>{e.consume(),r(void 0)})),n.show(t),s.focus()})),n.hide()}}export class ConfirmDialog{static async show(e,t,n){const o=new Dialog;o.setSizeBehavior("MeasureContent"),o.setDimmed(!0),ARIAUtils.setLabel(o.contentElement,e);const r=Utils.createShadowRootWithCoreStyles(o.contentElement,{cssFile:confirmDialogStyles,delegatesFocus:void 0}).createChild("div","widget");r.createChild("div","message").createChild("span").textContent=e;const s=r.createChild("div","button"),i=await new Promise((e=>{const r=createTextButton(n?.okButtonLabel||i18nString(UIStrings.ok),(()=>e(!0)),"",!0);s.appendChild(r),s.appendChild(createTextButton(n?.cancelButtonLabel||i18nString(UIStrings.cancel),(()=>e(!1)))),o.setOutsideClickCallback((t=>{t.consume(),e(!1)})),o.show(t),r.focus()}));return o.hide(),i}}export function createInlineButton(e){const t=document.createElement("span"),n=Utils.createShadowRootWithCoreStyles(t,{cssFile:inlineButtonStyles,delegatesFocus:void 0});t.classList.add("inline-button");const o=new Toolbar("");return o.appendToolbarItem(e),n.appendChild(o.element),t}export class Renderer{static async render(e,t){if(!e)throw new Error("Can't render "+e);const n=getApplicableRegisteredRenderers(e)[0];if(!n)return null;return(await n.loadRenderer()).render(e,t)}}export function formatTimestamp(e,t){const n=new Date(e),o=n.getFullYear()+"-"+s(n.getMonth()+1,2)+"-"+s(n.getDate(),2),r=s(n.getHours(),2)+":"+s(n.getMinutes(),2)+":"+s(n.getSeconds(),2)+"."+s(n.getMilliseconds(),3);return t?o+" "+r:r;function s(e,t){return String(e).padStart(t,"0")}}export const isScrolledToBottom=e=>Math.abs(e.scrollTop+e.clientHeight-e.scrollHeight)<=2;export function createSVGChild(e,t,n){const o=e.ownerDocument.createElementNS("http://www.w3.org/2000/svg",t);return n&&o.setAttribute("class",n),e.appendChild(o),o}export const enclosingNodeOrSelfWithNodeNameInArray=(e,t)=>{let n=e;for(;n&&n!==e.ownerDocument;n=n.parentNodeOrShadowHost())for(let e=0;e<t.length;++e)if(n.nodeName.toLowerCase()===t[e].toLowerCase())return n;return null};export const enclosingNodeOrSelfWithNodeName=function(e,t){return enclosingNodeOrSelfWithNodeNameInArray(e,[t])};export const deepElementFromPoint=(e,t,n)=>{let o=e,r=null;for(;o;){const e=o.elementFromPoint(t,n);if(!e||r===e)break;r=e,o=r.shadowRoot}return r};export const deepElementFromEvent=e=>{const t=e;if(!(t.which||t.pageX||t.pageY||t.clientX||t.clientY||t.movementX||t.movementY))return null;const n=t.target&&t.target.getComponentRoot();return n?deepElementFromPoint(n,t.pageX,t.pageY):null};const registeredRenderers=[];export function registerRenderer(e){registeredRenderers.push(e)}export function getApplicableRegisteredRenderers(e){return registeredRenderers.filter((function(t){if(!t.contextTypes)return!0;for(const n of t.contextTypes())if(e instanceof n)return!0;return!1}))}