@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 22.6 kB
JavaScript
import*as Common from"../../../../core/common/common.js";import*as i18n from"../../../../core/i18n/i18n.js";import*as Platform from"../../../../core/platform/platform.js";import*as Formatter from"../../../../models/formatter/formatter.js";import*as TextUtils from"../../../../models/text_utils/text_utils.js";import*as CodeMirror from"../../../../third_party/codemirror.next/codemirror.next.js";import*as CodeHighlighter from"../../../components/code_highlighter/code_highlighter.js";import*as TextEditor from"../../../components/text_editor/text_editor.js";import*as UI from"../../legacy.js";const UIStrings={source:"Source",prettyPrint:"Pretty print",loading:"Loading…",dSelectionRegions:"{PH1} selection regions",bytecodePositionXs:"Bytecode position `0x`{PH1}",lineSColumnS:"Line {PH1}, Column {PH2}",dCharactersSelected:"{PH1} characters selected",dLinesDCharactersSelected:"{PH1} lines, {PH2} characters selected"},str_=i18n.i18n.registerUIStrings("ui/legacy/components/source_frame/SourceFrame.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export class SourceFrameImpl extends(Common.ObjectWrapper.eventMixin(UI.View.SimpleView)){options;lazyContent;prettyInternal;rawContent;formattedMap;prettyToggle;shouldAutoPrettyPrint;progressToolbarItem;textEditorInternal;baseDoc;prettyBaseDoc=null;displayedSelection=null;searchConfig;delayedFindSearchMatches;currentSearchResultIndex;searchResults;searchRegex;loadError;muteChangeEventsForSetContent;sourcePosition;searchableView;editable;positionToReveal;lineToScrollTo;selectionToSet;loadedInternal;contentRequested;wasmDisassemblyInternal;contentSet;constructor(e,t={}){super(i18nString(UIStrings.source)),this.options=t,this.lazyContent=e,this.prettyInternal=!1,this.rawContent=null,this.formattedMap=null,this.prettyToggle=new UI.Toolbar.ToolbarToggle(i18nString(UIStrings.prettyPrint),"brackets"),this.prettyToggle.addEventListener(UI.Toolbar.ToolbarButton.Events.Click,(()=>{this.setPretty(!this.prettyToggle.toggled())})),this.shouldAutoPrettyPrint=!1,this.prettyToggle.setVisible(!1),this.progressToolbarItem=new UI.Toolbar.ToolbarItem(document.createElement("div")),this.textEditorInternal=new TextEditor.TextEditor.TextEditor(this.placeholderEditorState("")),this.textEditorInternal.style.flexGrow="1",this.element.appendChild(this.textEditorInternal),this.element.addEventListener("keydown",(e=>{e.defaultPrevented&&e.stopPropagation()})),this.baseDoc=this.textEditorInternal.state.doc,this.searchConfig=null,this.delayedFindSearchMatches=null,this.currentSearchResultIndex=-1,this.searchResults=[],this.searchRegex=null,this.loadError=!1,this.muteChangeEventsForSetContent=!1,this.sourcePosition=new UI.Toolbar.ToolbarText,this.searchableView=null,this.editable=!1,this.positionToReveal=null,this.lineToScrollTo=null,this.selectionToSet=null,this.loadedInternal=!1,this.contentRequested=!1,this.wasmDisassemblyInternal=null,this.contentSet=!1,Common.Settings.Settings.instance().moduleSetting("textEditorIndent").addChangeListener(this.#e,this)}disposeView(){Common.Settings.Settings.instance().moduleSetting("textEditorIndent").removeChangeListener(this.#e,this)}async#e(){this.prettyInternal&&(await this.setPretty(!1),await this.setPretty(!0))}placeholderEditorState(e){return CodeMirror.EditorState.create({doc:e,extensions:[CodeMirror.EditorState.readOnly.of(!0),!1!==this.options.lineNumbers?CodeMirror.lineNumbers():[],TextEditor.Config.theme()]})}editorConfiguration(e){return[CodeMirror.EditorView.updateListener.of((e=>this.dispatchEventToListeners("EditorUpdate",e))),TextEditor.Config.baseConfiguration(e),TextEditor.Config.closeBrackets,TextEditor.Config.autocompletion.instance(),TextEditor.Config.showWhitespace.instance(),TextEditor.Config.allowScrollPastEof.instance(),CodeMirror.Prec.lowest(TextEditor.Config.codeFolding.instance()),TextEditor.Config.autoDetectIndent.instance(),sourceFrameTheme,CodeMirror.EditorView.domEventHandlers({focus:()=>this.onFocus(),blur:()=>this.onBlur(),scroll:()=>this.dispatchEventToListeners("EditorScroll"),contextmenu:e=>this.onContextMenu(e)}),CodeMirror.lineNumbers({domEventHandlers:{contextmenu:(e,t,r)=>this.onLineGutterContextMenu(t.from,r)}}),CodeMirror.EditorView.updateListener.of((e=>{(e.selectionSet||e.docChanged)&&this.updateSourcePosition(),e.docChanged&&this.onTextChanged()})),activeSearchState,CodeMirror.Prec.lowest(searchHighlighter),config.language.of([]),this.wasmDisassemblyInternal?markNonBreakableLines(this.wasmDisassemblyInternal):nonBreakableLines,this.options.lineWrapping?CodeMirror.EditorView.lineWrapping:[],!1!==this.options.lineNumbers?CodeMirror.lineNumbers():[]]}onBlur(){}onFocus(){this.resetCurrentSearchResultIndex()}get wasmDisassembly(){return this.wasmDisassemblyInternal}editorLocationToUILocation(e,t){return this.wasmDisassemblyInternal?(t=this.wasmDisassemblyInternal.lineNumberToBytecodeOffset(e),e=0):this.prettyInternal&&([e,t]=this.prettyToRawLocation(e,t)),{lineNumber:e,columnNumber:t}}uiLocationToEditorLocation(e,t=0){return this.wasmDisassemblyInternal?(e=this.wasmDisassemblyInternal.bytecodeOffsetToLineNumber(t),t=0):this.prettyInternal&&([e,t]=this.rawToPrettyLocation(e,t)),{lineNumber:e,columnNumber:t}}setCanPrettyPrint(e,t){this.shouldAutoPrettyPrint=e&&Boolean(t),this.prettyToggle.setVisible(e)}setEditable(e){this.editable=e,this.loaded&&e!==!this.textEditor.state.readOnly&&this.textEditor.dispatch({effects:config.editable.reconfigure(CodeMirror.EditorState.readOnly.of(!e))})}async setPretty(e){this.prettyInternal=e,this.prettyToggle.setEnabled(!1);const t=this.loaded,{textEditor:r}=this,o=r.state.selection.main,s=r.toLineColumn(o.from),i=r.toLineColumn(o.to);let n;if(this.prettyInternal){const e=this.rawContent instanceof CodeMirror.Text?this.rawContent.sliceString(0):this.rawContent||"",t=await Formatter.ScriptFormatter.formatScriptContent(this.contentType,e);this.formattedMap=t.formattedMapping,await this.setContent(t.formattedContent),this.prettyBaseDoc=r.state.doc;const o=this.rawToPrettyLocation(s.lineNumber,s.columnNumber),a=this.rawToPrettyLocation(i.lineNumber,i.columnNumber);n=r.createSelection({lineNumber:o[0],columnNumber:o[1]},{lineNumber:a[0],columnNumber:a[1]})}else{await this.setContent(this.rawContent||""),this.baseDoc=r.state.doc;const e=this.prettyToRawLocation(s.lineNumber,s.columnNumber),t=this.prettyToRawLocation(i.lineNumber,i.columnNumber);n=r.createSelection({lineNumber:e[0],columnNumber:e[1]},{lineNumber:t[0],columnNumber:t[1]})}t&&r.revealPosition(n,!1),this.prettyToggle.setEnabled(!0),this.updatePrettyPrintState()}getLineNumberFormatter(){if(!1===this.options.lineNumbers)return[];let e=null;if(this.wasmDisassemblyInternal){const t=this.wasmDisassemblyInternal,r=t.lineNumberToBytecodeOffset(t.lineNumbers-1).toString(16).length+1;e=e=>`0x${t.lineNumberToBytecodeOffset(Math.min(t.lineNumbers,e)-1).toString(16).padStart(r,"0")}`}else this.prettyInternal&&(e=e=>{const t=this.prettyToRawLocation(e-1,0)[0]+1;return 1===e||t!==this.prettyToRawLocation(e-2,0)[0]+1?String(t):"-"});return e?CodeMirror.lineNumbers({formatNumber:e}):[]}updateLineNumberFormatter(){this.textEditor.dispatch({effects:config.lineNumbers.reconfigure(this.getLineNumberFormatter())})}updatePrettyPrintState(){this.prettyToggle.setToggled(this.prettyInternal),this.textEditorInternal.classList.toggle("pretty-printed",this.prettyInternal),this.updateLineNumberFormatter()}prettyToRawLocation(e,t=0){return this.formattedMap?this.formattedMap.formattedToOriginal(e,t):[e,t]}rawToPrettyLocation(e,t){return this.formattedMap?this.formattedMap.originalToFormatted(e,t):[e,t]}hasLoadError(){return this.loadError}wasShown(){this.ensureContentLoaded(),this.wasShownOrLoaded()}willHide(){super.willHide(),this.clearPositionToReveal()}async toolbarItems(){return[this.prettyToggle,this.sourcePosition,this.progressToolbarItem]}get loaded(){return this.loadedInternal}get textEditor(){return this.textEditorInternal}get pretty(){return this.prettyInternal}get contentType(){return this.loadError?"":this.getContentType()}getContentType(){return""}async ensureContentLoaded(){this.contentRequested||(this.contentRequested=!0,await this.setDeferredContent(this.lazyContent()),this.contentSet=!0)}async setDeferredContent(e){const t=new UI.ProgressIndicator.ProgressIndicator;t.setTitle(i18nString(UIStrings.loading)),t.setTotalWork(100),this.progressToolbarItem.element.appendChild(t.element),t.setWorked(1);const r=await e;let o,s;if(null===r.content)o=r.error,this.rawContent=r.error;else if(s=r.content,r.isEncoded){const e=new DataView(Common.Base64.decode(r.content)),t=new TextDecoder;this.rawContent=t.decode(e,{stream:!0})}else if("wasmDisassemblyInfo"in r&&r.wasmDisassemblyInfo){const{wasmDisassemblyInfo:e}=r;this.rawContent=CodeMirror.Text.of(e.lines),this.wasmDisassemblyInternal=e}else this.rawContent=s,this.wasmDisassemblyInternal=null;if(s&&"application/wasm"===this.contentType&&!this.wasmDisassemblyInternal){const e=Common.Worker.WorkerWrapper.fromURL(new URL("../../../../entrypoints/wasmparser_worker/wasmparser_worker-entrypoint.js",import.meta.url)),r=new Promise(((r,o)=>{e.onmessage=({data:e})=>{if("event"in e){if("progress"===e.event)t?.setWorked(e.params.percentage)}else if("method"in e&&"disassemble"===e.method)"error"in e?o(e.error):"result"in e&&r(e.result)},e.onerror=o}));e.postMessage({method:"disassemble",params:{content:s}});try{const{lines:e,offsets:t,functionBodyOffsets:o}=await r;this.rawContent=s=CodeMirror.Text.of(e),this.wasmDisassemblyInternal=new Common.WasmDisassembly.WasmDisassembly(e,t,o)}catch(e){this.rawContent=s=o=e.message}finally{e.terminate()}}t.setWorked(100),t.done(),this.formattedMap=null,this.prettyToggle.setEnabled(!0),o?(this.loadError=!0,this.textEditor.state=this.placeholderEditorState(o),this.prettyToggle.setEnabled(!1)):this.shouldAutoPrettyPrint&&TextUtils.TextUtils.isMinified(s||"")?await this.setPretty(!0):await this.setContent(this.rawContent||"")}revealPosition(e,t){this.lineToScrollTo=null,this.selectionToSet=null;let r=0,o=0;if("number"==typeof e){const{doc:t}=this.textEditor.state;if(e>t.length)r=t.lines-1;else if(e>=0){const s=t.lineAt(e);r=s.number-1,o=e-s.from}}else r=e.lineNumber,o=e.columnNumber??0;this.positionToReveal={line:r,column:o,shouldHighlight:t},this.innerRevealPositionIfNeeded()}innerRevealPositionIfNeeded(){if(!this.positionToReveal)return;if(!this.loaded||!this.isShowing())return;const e=this.uiLocationToEditorLocation(this.positionToReveal.line,this.positionToReveal.column),{textEditor:t}=this;t.revealPosition(t.createSelection(e),this.positionToReveal.shouldHighlight),this.positionToReveal=null}clearPositionToReveal(){this.positionToReveal=null}scrollToLine(e){this.clearPositionToReveal(),this.lineToScrollTo=e,this.innerScrollToLineIfNeeded()}innerScrollToLineIfNeeded(){if(null!==this.lineToScrollTo&&this.loaded&&this.isShowing()){const{textEditor:e}=this,t=e.toOffset({lineNumber:this.lineToScrollTo,columnNumber:0});e.dispatch({effects:CodeMirror.EditorView.scrollIntoView(t,{y:"start",yMargin:0})}),this.lineToScrollTo=null}}setSelection(e){this.selectionToSet=e,this.innerSetSelectionIfNeeded()}innerSetSelectionIfNeeded(){const e=this.selectionToSet;if(e&&this.loaded&&this.isShowing()){const{textEditor:t}=this;t.dispatch({selection:t.createSelection({lineNumber:e.startLine,columnNumber:e.startColumn},{lineNumber:e.endLine,columnNumber:e.endColumn})}),this.selectionToSet=null}}wasShownOrLoaded(){this.innerRevealPositionIfNeeded(),this.innerSetSelectionIfNeeded(),this.innerScrollToLineIfNeeded()}onTextChanged(){const e=this.pretty;this.prettyInternal=Boolean(this.prettyBaseDoc&&this.textEditor.state.doc.eq(this.prettyBaseDoc)),this.prettyInternal!==e&&this.updatePrettyPrintState(),this.prettyToggle.setEnabled(this.isClean()),this.searchConfig&&this.searchableView&&this.performSearch(this.searchConfig,!1,!1)}isClean(){return this.textEditor.state.doc.eq(this.baseDoc)||null!==this.prettyBaseDoc&&this.textEditor.state.doc.eq(this.prettyBaseDoc)}contentCommitted(){this.baseDoc=this.textEditorInternal.state.doc,this.prettyBaseDoc=null,this.rawContent=this.textEditor.state.doc.toString(),this.formattedMap=null,this.prettyInternal&&(this.prettyInternal=!1,this.updatePrettyPrintState()),this.prettyToggle.setEnabled(!0)}async getLanguageSupport(e){let{contentType:t}=this;"text/x.vue"===t&&((e="string"==typeof e?e:e.sliceString(0)).trimStart().startsWith("<")||(t="text/javascript"));const r=await CodeHighlighter.CodeHighlighter.languageFromMIME(t);return r?[r,CodeMirror.javascript.javascriptLanguage.data.of({autocomplete:CodeMirror.completeAnyWord})]:[]}async updateLanguageMode(e){const t=await this.getLanguageSupport(e);this.textEditor.dispatch({effects:config.language.reconfigure(t)})}async setContent(e){this.muteChangeEventsForSetContent=!0;const{textEditor:t}=this,r=this.loadedInternal,o=t.editor.scrollDOM.scrollTop;this.loadedInternal=!0;const s=await this.getLanguageSupport(e),i=CodeMirror.EditorState.create({doc:e,extensions:[this.editorConfiguration(e),s,config.lineNumbers.of(this.getLineNumberFormatter()),config.editable.of(this.editable?[]:CodeMirror.EditorState.readOnly.of(!0))]});this.baseDoc=i.doc,t.state=i,r&&(t.editor.scrollDOM.scrollTop=o),this.wasShownOrLoaded(),this.delayedFindSearchMatches&&(this.delayedFindSearchMatches(),this.delayedFindSearchMatches=null),this.muteChangeEventsForSetContent=!1}setSearchableView(e){this.searchableView=e}doFindSearchMatches(e,t,r){this.currentSearchResultIndex=-1,this.searchRegex=e.toSearchRegex(!0),this.searchResults=this.collectRegexMatches(this.searchRegex),this.searchableView&&this.searchableView.updateSearchMatchesCount(this.searchResults.length);const o=this.textEditor;this.searchResults.length?t&&r?this.jumpToPreviousSearchResult():t?this.jumpToNextSearchResult():o.dispatch({effects:setActiveSearch.of(new ActiveSearch(this.searchRegex,null))}):o.state.field(activeSearchState)&&o.dispatch({effects:setActiveSearch.of(null)})}performSearch(e,t,r){this.searchableView&&this.searchableView.updateSearchMatchesCount(0),this.resetSearch(),this.searchConfig=e,this.loaded?this.doFindSearchMatches(e,t,Boolean(r)):this.delayedFindSearchMatches=this.doFindSearchMatches.bind(this,e,t,Boolean(r)),this.ensureContentLoaded()}resetCurrentSearchResultIndex(){if(!this.searchResults.length)return;this.currentSearchResultIndex=-1,this.searchableView&&this.searchableView.updateCurrentMatchIndex(this.currentSearchResultIndex);const e=this.textEditor,t=e.state.field(activeSearchState);t&&t.currentRange&&e.dispatch({effects:setActiveSearch.of(new ActiveSearch(t.regexp,null))})}resetSearch(){this.searchConfig=null,this.delayedFindSearchMatches=null,this.currentSearchResultIndex=-1,this.searchResults=[],this.searchRegex=null}onSearchCanceled(){const e=-1!==this.currentSearchResultIndex?this.searchResults[this.currentSearchResultIndex]:null;if(this.resetSearch(),!this.loaded)return;this.textEditor.dispatch({effects:setActiveSearch.of(null),selection:e?{anchor:e.from,head:e.to}:void 0,scrollIntoView:!0,userEvent:"select.search.cancel"})}jumpToLastSearchResult(){this.jumpToSearchResult(this.searchResults.length-1)}searchResultIndexForCurrentSelection(){return Platform.ArrayUtilities.lowerBound(this.searchResults,this.textEditor.state.selection.main,((e,t)=>e.to-t.to))}jumpToNextSearchResult(){const e=this.searchResultIndexForCurrentSelection(),t=-1===this.currentSearchResultIndex?e:e+1;this.jumpToSearchResult(t)}jumpToPreviousSearchResult(){const e=this.searchResultIndexForCurrentSelection();this.jumpToSearchResult(e-1)}supportsCaseSensitiveSearch(){return!0}supportsRegexSearch(){return!0}jumpToSearchResult(e){if(!this.loaded||!this.searchResults.length||!this.searchRegex)return;this.currentSearchResultIndex=(e+this.searchResults.length)%this.searchResults.length,this.searchableView&&this.searchableView.updateCurrentMatchIndex(this.currentSearchResultIndex);const t=this.textEditor,r=this.searchResults[this.currentSearchResultIndex];t.dispatch({effects:setActiveSearch.of(new ActiveSearch(this.searchRegex,r)),selection:{anchor:r.from,head:r.to},scrollIntoView:!0,userEvent:"select.search"})}replaceSelectionWith(e,t){const r=this.searchResults[this.currentSearchResultIndex];if(!r)return;const o=this.searchRegex?.fromQuery?r.insertPlaceholders(t):t,s=this.textEditor,i=s.state.changes({from:r.from,to:r.to,insert:o});s.dispatch({changes:i,selection:{anchor:i.mapPos(s.state.selection.main.to,1)},userEvent:"input.replace"})}replaceAllWith(e,t){this.resetCurrentSearchResultIndex();const r=e.toSearchRegex(!0),o=this.collectRegexMatches(r);if(!o.length)return;const s=r.fromQuery,i=o.map((e=>({from:e.from,to:e.to,insert:s?e.insertPlaceholders(t):t})));this.textEditor.dispatch({changes:i,scrollIntoView:!0,userEvent:"input.replace.all"})}collectRegexMatches({regex:e}){const t=[];let r=0;for(const o of this.textEditor.state.doc.iterLines()){for(e.lastIndex=0;;){const s=e.exec(o);if(!s)break;if(s[0].length){const e=r+s.index;t.push(new SearchMatch(e,e+s[0].length,s))}else e.lastIndex=s.index+1}r+=o.length+1}return t}canEditSource(){return this.editable}updateSourcePosition(){const{textEditor:e}=this,{state:t}=e,{selection:r}=t;if(this.displayedSelection?.eq(r))return;if(this.displayedSelection=r,r.ranges.length>1)return void this.sourcePosition.setText(i18nString(UIStrings.dSelectionRegions,{PH1:r.ranges.length}));const{main:o}=t.selection;if(o.empty){const{lineNumber:t,columnNumber:r}=e.toLineColumn(o.head),s=this.prettyToRawLocation(t,r);if(this.wasmDisassemblyInternal){const e=this.wasmDisassemblyInternal,t=e.lineNumberToBytecodeOffset(e.lineNumbers-1).toString(16).length,r=e.lineNumberToBytecodeOffset(s[0]);this.sourcePosition.setText(i18nString(UIStrings.bytecodePositionXs,{PH1:r.toString(16).padStart(t,"0")}))}else this.sourcePosition.setText(i18nString(UIStrings.lineSColumnS,{PH1:s[0]+1,PH2:s[1]+1}))}else{const e=t.doc.lineAt(o.from),r=t.doc.lineAt(o.to);e.number===r.number?this.sourcePosition.setText(i18nString(UIStrings.dCharactersSelected,{PH1:o.to-o.from})):this.sourcePosition.setText(i18nString(UIStrings.dLinesDCharactersSelected,{PH1:r.number-e.number+1,PH2:o.to-o.from}))}}onContextMenu(e){e.consume(!0);const t=new UI.ContextMenu.ContextMenu(e),{state:r}=this.textEditor,o=r.selection.main.from,s=r.doc.lineAt(o);return this.populateTextAreaContextMenu(t,s.number-1,o-s.from),t.appendApplicableItems(this),t.show(),!0}populateTextAreaContextMenu(e,t,r){}onLineGutterContextMenu(e,t){t.consume(!0);const r=new UI.ContextMenu.ContextMenu(t),o=this.textEditor.state.doc.lineAt(e).number-1;return this.populateLineGutterContextMenu(r,o),r.appendApplicableItems(this),r.show(),!0}populateLineGutterContextMenu(e,t){}focus(){this.textEditor.focus()}}class SearchMatch{from;to;match;constructor(e,t,r){this.from=e,this.to=t,this.match=r}insertPlaceholders(e){return e.replace(/\$(\$|&|\d+|<[^>]+>)/g,((e,t)=>"$"===t?"$":"&"===t?this.match[0]:"<"===t[0]?this.match.groups&&this.match.groups[t.slice(1,t.length-1)]||"":this.match[Number.parseInt(t,10)]||""))}}export var DecoratorType;!function(e){e.PERFORMANCE="performance",e.MEMORY="memory",e.COVERAGE="coverage"}(DecoratorType||(DecoratorType={}));const config={editable:new CodeMirror.Compartment,language:new CodeMirror.Compartment,lineNumbers:new CodeMirror.Compartment};class ActiveSearch{regexp;currentRange;constructor(e,t){this.regexp=e,this.currentRange=t}map(e){return e.empty||!this.currentRange?this:new ActiveSearch(this.regexp,{from:e.mapPos(this.currentRange.from),to:e.mapPos(this.currentRange.to)})}static eq(e,t){return Boolean(e===t||e&&t&&e.currentRange?.from===t.currentRange?.from&&e.currentRange?.to===t.currentRange?.to&&e.regexp.regex.source===t.regexp.regex.source&&e.regexp.regex.flags===t.regexp.regex.flags)}}const setActiveSearch=CodeMirror.StateEffect.define({map:(e,t)=>e&&e.map(t)}),activeSearchState=CodeMirror.StateField.define({create:()=>null,update:(e,t)=>t.effects.reduce(((e,t)=>t.is(setActiveSearch)?t.value:e),e&&e.map(t.changes))}),searchMatchDeco=CodeMirror.Decoration.mark({class:"cm-searchMatch"}),currentSearchMatchDeco=CodeMirror.Decoration.mark({class:"cm-searchMatch cm-searchMatch-selected"}),searchHighlighter=CodeMirror.ViewPlugin.fromClass(class{decorations;constructor(e){this.decorations=this.computeDecorations(e)}update(e){const t=e.state.field(activeSearchState);(!ActiveSearch.eq(t,e.startState.field(activeSearchState))||t&&(e.viewportChanged||e.docChanged))&&(this.decorations=this.computeDecorations(e.view))}computeDecorations(e){const t=e.state.field(activeSearchState);if(!t)return CodeMirror.Decoration.none;const r=new CodeMirror.RangeSetBuilder,{doc:o}=e.state;for(const{from:s,to:i}of e.visibleRanges){let e=s;for(const n of o.iterRange(s,i)){if("\n"!==n)for(t.regexp.regex.lastIndex=0;;){const o=t.regexp.regex.exec(n);if(!o)break;if(o[0].length){const s=e+o.index,i=s+o[0].length,n=t.currentRange&&t.currentRange.from===s&&t.currentRange.to===i;r.add(s,i,n?currentSearchMatchDeco:searchMatchDeco)}else t.regexp.regex.lastIndex=o.index+1}e+=n.length}}return r.finish()}},{decorations:e=>e.decorations}),nonBreakableLineMark=new class extends CodeMirror.GutterMarker{elementClass="cm-nonBreakableLine"};export const addNonBreakableLines=CodeMirror.StateEffect.define();const nonBreakableLines=CodeMirror.StateField.define({create:()=>CodeMirror.RangeSet.empty,update:(e,t)=>t.effects.reduce(((e,t)=>t.is(addNonBreakableLines)?e.update({add:t.value.map((e=>nonBreakableLineMark.range(e)))}):e),e.map(t.changes)),provide:e=>CodeMirror.lineNumberMarkers.from(e)});export function isBreakableLine(e,t){const r=e.field(nonBreakableLines);if(!r.size)return!0;let o=!1;return r.between(t.from,t.from,(()=>{o=!0})),!o}function markNonBreakableLines(e){return nonBreakableLines.init((t=>{const r=[];for(const o of e.nonBreakableLineNumbers())o<t.doc.lines&&r.push(nonBreakableLineMark.range(t.doc.line(o+1).from));return CodeMirror.RangeSet.of(r)}))}const sourceFrameTheme=CodeMirror.EditorView.theme({"&.cm-editor":{height:"100%"},".cm-scroller":{overflow:"auto"},".cm-lineNumbers .cm-gutterElement.cm-nonBreakableLine":{color:"var(--color-non-breakable-line) !important"},".cm-searchMatch":{border:"1px solid var(--color-search-match-border)",borderRadius:"3px",margin:"0 -1px","&.cm-searchMatch-selected":{borderRadius:"1px",backgroundColor:"var(--color-selected-search-match-background)",borderColor:"var(--color-selected-search-match-background)","&, & *":{color:"var(--color-selected-search-match) !important"}}},":host-context(.pretty-printed) & .cm-lineNumbers .cm-gutterElement":{color:"var(--color-primary-old)"}});