UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 4.24 kB
import*as i18n from"../../core/i18n/i18n.js";import*as Utils from"./utils/utils.js";import*as ARIAUtils from"./ARIAUtils.js";import{Keys}from"./KeyboardShortcut.js";import{createTextButton}from"./UIUtils.js";import infobarStyles from"./infobar.css.legacy.js";const UIStrings={dontShowAgain:"Don't show again",showMore:"Show more",close:"Close"},str_=i18n.i18n.registerUIStrings("ui/legacy/Infobar.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export class Infobar{element;shadowRoot;contentElement;mainRow;detailsRows;hasDetails;detailsMessage;infoContainer;infoMessage;infoText;actionContainer;disableSetting;closeContainer;toggleElement;closeButton;closeCallback;#t=null;parentView;constructor(t,e,i,s){if(this.element=document.createElement("div"),this.element.classList.add("flex-none"),this.shadowRoot=Utils.createShadowRootWithCoreStyles(this.element,{cssFile:infobarStyles,delegatesFocus:void 0}),this.contentElement=this.shadowRoot.createChild("div","infobar infobar-"+t),this.mainRow=this.contentElement.createChild("div","infobar-main-row"),this.detailsRows=this.contentElement.createChild("div","infobar-details-rows hidden"),this.hasDetails=!1,this.detailsMessage="",this.infoContainer=this.mainRow.createChild("div","infobar-info-container"),this.infoMessage=this.infoContainer.createChild("div","infobar-info-message"),this.infoMessage.createChild("div",t+"-icon icon"),this.infoText=this.infoMessage.createChild("div","infobar-info-text"),this.infoText.textContent=e,ARIAUtils.markAsAlert(this.infoText),this.actionContainer=this.infoContainer.createChild("div","infobar-info-actions"),i){this.contentElement.setAttribute("role","group");for(const t of i){const e=this.actionCallbackFactory(t);let i="infobar-button";t.highlight&&(i+=" primary-button");const s=createTextButton(t.text,e,i);t.highlight&&!this.#t&&(this.#t=s),this.actionContainer.appendChild(s)}}if(this.disableSetting=s||null,s){const t=createTextButton(i18nString(UIStrings.dontShowAgain),this.onDisable.bind(this),"infobar-button");this.actionContainer.appendChild(t)}this.closeContainer=this.mainRow.createChild("div","infobar-close-container"),this.toggleElement=createTextButton(i18nString(UIStrings.showMore),this.onToggleDetails.bind(this),"link-style devtools-link hidden"),this.toggleElement.setAttribute("role","link"),this.closeContainer.appendChild(this.toggleElement),this.closeButton=this.closeContainer.createChild("div","close-button","dt-close-button"),this.closeButton.setTabbable(!0),ARIAUtils.setDescription(this.closeButton,i18nString(UIStrings.close)),self.onInvokeElement(this.closeButton,this.dispose.bind(this)),t!==Type.Issue&&(this.contentElement.tabIndex=0),ARIAUtils.setLabel(this.contentElement,e),this.contentElement.addEventListener("keydown",(t=>t.keyCode===Keys.Esc.code?(this.dispose(),void t.consume()):t.target===this.contentElement&&"Enter"===t.key&&this.hasDetails?(this.onToggleDetails(),void t.consume()):void 0)),this.closeCallback=null}static create(t,e,i,s){return s&&s.get()?null:new Infobar(t,e,i,s)}dispose(){this.element.remove(),this.onResize(),this.closeCallback&&this.closeCallback.call(null)}setText(t){this.infoText.textContent=t,this.onResize()}setCloseCallback(t){this.closeCallback=t}setParentView(t){this.parentView=t}actionCallbackFactory(t){return t.delegate?t.dismiss?(()=>{t.delegate&&t.delegate(),this.dispose()}).bind(this):t.delegate:t.dismiss?this.dispose.bind(this):()=>{}}onResize(){this.parentView&&this.parentView.doResize()}onDisable(){this.disableSetting&&this.disableSetting.set(!0),this.dispose()}onToggleDetails(){this.detailsRows.classList.remove("hidden"),this.toggleElement.remove(),this.onResize(),ARIAUtils.alert("string"==typeof this.detailsMessage?this.detailsMessage:this.detailsMessage.textContent||""),this.#t?this.#t.focus():this.closeButton.focus()}createDetailsRowMessage(t){this.hasDetails=!0,this.detailsMessage=t,this.toggleElement.classList.remove("hidden");const e=this.detailsRows.createChild("div","infobar-details-row").createChild("span","infobar-row-message");return"string"==typeof t?e.textContent=t:e.appendChild(t),e}}export var Type;!function(t){t.Warning="warning",t.Info="info",t.Issue="issue",t.Error="error"}(Type||(Type={}));