UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 5.93 kB
import*as i18n from"../../core/i18n/i18n.js";import*as Platform from"../../core/platform/platform.js";import*as Utils from"./utils/utils.js";import*as ARIAUtils from"./ARIAUtils.js";import{Size}from"./Geometry.js";import{GlassPane}from"./GlassPane.js";import{ListControl,ListMode}from"./ListControl.js";import{ListModel}from"./ListModel.js";import{measurePreferredSize}from"./UIUtils.js";import suggestBoxStyles from"./suggestBox.css.legacy.js";const UIStrings={sSuggestionSOfS:"{PH1}, suggestion {PH2} of {PH3}",sSuggestionSSelected:"{PH1}, suggestion selected"},str_=i18n.i18n.registerUIStrings("ui/legacy/SuggestBox.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export class SuggestBox{suggestBoxDelegate;maxItemsHeight;rowHeight;userEnteredText;defaultSelectionIsDimmed;onlyCompletion;items;list;element;glassPane;constructor(t,e){this.suggestBoxDelegate=t,this.maxItemsHeight=e,this.rowHeight=17,this.userEnteredText="",this.defaultSelectionIsDimmed=!1,this.onlyCompletion=null,this.items=new ListModel,this.list=new ListControl(this.items,this,ListMode.EqualHeightItems),this.element=this.list.element,this.element.classList.add("suggest-box"),this.element.addEventListener("mousedown",(t=>t.preventDefault()),!0),this.element.addEventListener("click",this.onClick.bind(this),!1),this.glassPane=new GlassPane,this.glassPane.setAnchorBehavior("PreferBottom"),this.glassPane.setOutsideClickCallback(this.hide.bind(this));Utils.createShadowRootWithCoreStyles(this.glassPane.contentElement,{cssFile:suggestBoxStyles,delegatesFocus:void 0}).appendChild(this.element)}visible(){return this.glassPane.isShowing()}setPosition(t){this.glassPane.setContentAnchorBox(t)}setAnchorBehavior(t){this.glassPane.setAnchorBehavior(t)}updateMaxSize(t){const e=this.maxWidth(t),s=(this.maxItemsHeight?Math.min(this.maxItemsHeight,t.length):t.length)*this.rowHeight;this.glassPane.setMaxContentSize(new Size(e,s))}maxWidth(t){if(!t.length)return 300;let e,s=-1/0;for(let i=0;i<t.length;i++){const n=(t[i].title||t[i].text).length+(t[i].subtitle||"").length;n>s&&(s=n,e=t[i])}const i=this.createElementForItem(e),n=measurePreferredSize(i,this.element).width+Utils.measuredScrollbarWidth(this.element.ownerDocument);return Math.min(300,n)}show(){if(this.visible())return;this.glassPane.show(document);this.rowHeight=measurePreferredSize(this.createElementForItem({text:"1",subtitle:"12"}),this.element).height,ARIAUtils.setControls(this.suggestBoxDelegate.ariaControlledBy(),this.element),ARIAUtils.setExpanded(this.suggestBoxDelegate.ariaControlledBy(),!0)}hide(){this.visible()&&(this.glassPane.hide(),ARIAUtils.setControls(this.suggestBoxDelegate.ariaControlledBy(),null),ARIAUtils.setExpanded(this.suggestBoxDelegate.ariaControlledBy(),!1))}applySuggestion(t){if(this.onlyCompletion)return t?ARIAUtils.alert(i18nString(UIStrings.sSuggestionSOfS,{PH1:this.onlyCompletion.text,PH2:this.list.selectedIndex()+1,PH3:this.items.length})):ARIAUtils.alert(i18nString(UIStrings.sSuggestionSSelected,{PH1:this.onlyCompletion.text})),this.suggestBoxDelegate.applySuggestion(this.onlyCompletion,t),!0;const e=this.list.selectedItem();return e&&e.text&&(t?ARIAUtils.alert(i18nString(UIStrings.sSuggestionSOfS,{PH1:e.title||e.text,PH2:this.list.selectedIndex()+1,PH3:this.items.length})):ARIAUtils.alert(i18nString(UIStrings.sSuggestionSSelected,{PH1:e.title||e.text}))),this.suggestBoxDelegate.applySuggestion(e,t),this.visible()&&Boolean(e)}acceptSuggestion(){const t=this.applySuggestion();return this.hide(),!!t&&(this.suggestBoxDelegate.acceptSuggestion(),!0)}createElementForItem(t){const e=this.userEnteredText,s=document.createElement("div");s.classList.add("suggest-box-content-item"),s.classList.add("source-code"),t.isSecondary&&s.classList.add("secondary"),s.tabIndex=-1;const i=50+e.length,n=Platform.StringUtilities.trimEndWithMaxLength((t.title||t.text).trim(),i).replace(/\n/g,"↵"),l=s.createChild("span","suggestion-title"),o=n.toLowerCase().indexOf(e.toLowerCase());if(o>0&&(l.createChild("span").textContent=n.substring(0,o)),o>-1&&(l.createChild("span","query").textContent=n.substring(o,o+e.length)),l.createChild("span").textContent=n.substring(o>-1?o+e.length:0),l.createChild("span","spacer"),t.subtitleRenderer){const e=t.subtitleRenderer.call(null);e.classList.add("suggestion-subtitle"),s.appendChild(e)}else if(t.subtitle){s.createChild("span","suggestion-subtitle").textContent=Platform.StringUtilities.trimEndWithMaxLength(t.subtitle,i-n.length)}return t.iconElement&&s.appendChild(t.iconElement),s}heightForItem(t){return this.rowHeight}isItemSelectable(t){return!0}selectedItemChanged(t,e,s,i){s&&s.classList.remove("selected","force-white-icons"),i&&(i.classList.add("selected"),i.classList.add("force-white-icons")),this.applySuggestion(!0)}updateSelectedItemARIA(t,e){return!1}onClick(t){const e=this.list.itemForNode(t.target);e&&(this.list.selectItem(e),this.acceptSuggestion(),t.consume(!0))}canShowBox(t,e,s,i){return!(!t||!t.length)&&(t.length>1||(!(e&&!e.isSecondary&&e.text.startsWith(i))||s&&e.text!==i))}updateSuggestions(t,e,s,i,n){this.onlyCompletion=null;const l=s?e.reduce(((t,e)=>(t.priority||0)>=(e.priority||0)?t:e)):null;this.canShowBox(e,l,i,n)?(this.userEnteredText=n,this.show(),this.updateMaxSize(e),this.glassPane.setContentAnchorBox(t),this.list.invalidateItemHeight(),this.items.replaceAll(e),l&&!l.isSecondary?this.list.selectItem(l,!0):this.list.selectItem(null)):(1===e.length&&(this.onlyCompletion=e[0],this.applySuggestion(!0)),this.hide())}keyPressed(t){switch(t.key){case"Enter":return this.enterKeyPressed();case"ArrowUp":return this.list.selectPreviousItem(!0,!1);case"ArrowDown":return this.list.selectNextItem(!0,!1);case"PageUp":return this.list.selectItemPreviousPage(!1);case"PageDown":return this.list.selectItemNextPage(!1)}return!1}enterKeyPressed(){const t=Boolean(this.list.selectedItem())||Boolean(this.onlyCompletion);return this.acceptSuggestion(),t}}