diff --git a/src/vs/editor/browser/controller/coreCommands.ts b/src/vs/editor/browser/controller/coreCommands.ts index 238b9b74d5c079f6b980462c7c384f53668432a1..0a28820cc9eb842fcda3015f982748b08e2f2ded 100644 --- a/src/vs/editor/browser/controller/coreCommands.ts +++ b/src/vs/editor/browser/controller/coreCommands.ts @@ -1651,7 +1651,7 @@ class EditorOrNativeTextInputCommand extends Command { let focusedEditor = findFocusedEditor(accessor); // Only if editor text focus (i.e. not if editor has widget focus). - if (focusedEditor && focusedEditor.isFocused()) { + if (focusedEditor && focusedEditor.hasTextFocus()) { return this._runEditorHandler(focusedEditor, args); } diff --git a/src/vs/editor/browser/editorBrowser.ts b/src/vs/editor/browser/editorBrowser.ts index ff442f819c5aeaf5a7e446bd76c63a4c3929f3a4..104653a4ecae82c8de0c2bf81bc80c9d4b2a4840 100644 --- a/src/vs/editor/browser/editorBrowser.ts +++ b/src/vs/editor/browser/editorBrowser.ts @@ -365,12 +365,12 @@ export interface ICodeEditor extends editorCommon.IEditor { */ onDidChangeModelDecorations(listener: (e: IModelDecorationsChangedEvent) => void): IDisposable; /** - * An event emitted when the text inside this editor gained focus (i.e. cursor blinking). + * An event emitted when the text inside this editor gained focus (i.e. cursor starts blinking). * @event */ onDidFocusEditorText(listener: () => void): IDisposable; /** - * An event emitted when the text inside this editor lost focus. + * An event emitted when the text inside this editor lost focus (i.e. cursor stops blinking). * @event */ onDidBlurEditorText(listener: () => void): IDisposable; @@ -378,12 +378,12 @@ export interface ICodeEditor extends editorCommon.IEditor { * An event emitted when the text inside this editor or an editor widget gained focus. * @event */ - onDidFocusEditor(listener: () => void): IDisposable; + onDidFocusEditorWidget(listener: () => void): IDisposable; /** * An event emitted when the text inside this editor or an editor widget lost focus. * @event */ - onDidBlurEditor(listener: () => void): IDisposable; + onDidBlurEditorWidget(listener: () => void): IDisposable; /** * An event emitted before interpreting typed characters (on the keyboard). * @event @@ -477,7 +477,7 @@ export interface ICodeEditor extends editorCommon.IEditor { restoreViewState(state: editorCommon.ICodeEditorViewState): void; /** - * Returns true if this editor or one of its widgets has keyboard focus. + * Returns true if the text inside this editor or an editor widget has focus. */ hasWidgetFocus(): boolean; diff --git a/src/vs/editor/browser/services/abstractCodeEditorService.ts b/src/vs/editor/browser/services/abstractCodeEditorService.ts index 29650ada77ddf42fa8f52209ed06481b49864769..fe2161aebb50e5929f382e6e3bd6451db1d6d46c 100644 --- a/src/vs/editor/browser/services/abstractCodeEditorService.ts +++ b/src/vs/editor/browser/services/abstractCodeEditorService.ts @@ -84,7 +84,7 @@ export abstract class AbstractCodeEditorService implements ICodeEditorService { for (let i = 0; i < editors.length; i++) { let editor = editors[i]; - if (editor.isFocused()) { + if (editor.hasTextFocus()) { // bingo! return editor; } diff --git a/src/vs/editor/browser/widget/codeEditorWidget.ts b/src/vs/editor/browser/widget/codeEditorWidget.ts index 096a4eec1404a824572ec1982f9c5834eabc317a..03840a1669f40f6705b3487965505be39052772a 100644 --- a/src/vs/editor/browser/widget/codeEditorWidget.ts +++ b/src/vs/editor/browser/widget/codeEditorWidget.ts @@ -115,9 +115,9 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE public readonly onDidFocusEditorText: Event = this._editorTextFocus.onDidChangeToTrue; public readonly onDidBlurEditorText: Event = this._editorTextFocus.onDidChangeToFalse; - private _editorFocus: BooleanEventEmitter = this._register(new BooleanEventEmitter()); - public readonly onDidFocusEditor: Event = this._editorFocus.onDidChangeToTrue; - public readonly onDidBlurEditor: Event = this._editorFocus.onDidChangeToFalse; + private _editorWidgetFocus: BooleanEventEmitter = this._register(new BooleanEventEmitter()); + public readonly onDidFocusEditorWidget: Event = this._editorWidgetFocus.onDidChangeToTrue; + public readonly onDidBlurEditorWidget: Event = this._editorWidgetFocus.onDidChangeToFalse; private readonly _onWillType: Emitter = this._register(new Emitter()); public readonly onWillType = this._onWillType.event; @@ -246,7 +246,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE this._focusTracker = new CodeEditorWidgetFocusTracker(domElement); this._focusTracker.onChange(() => { - this._editorFocus.setValue(this._focusTracker.hasFocus()); + this._editorWidgetFocus.setValue(this._focusTracker.hasFocus()); }); this.contentWidgets = {}; @@ -1109,7 +1109,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE this._view.focus(); } - public isFocused(): boolean { + public hasTextFocus(): boolean { return this.hasView && this._view.isFocused(); } @@ -1418,7 +1418,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE viewEventBus.onDidGainFocus = () => { this._editorTextFocus.setValue(true); // In IE, the focus is not synchronous, so we give it a little help - this._editorFocus.setValue(true); + this._editorWidgetFocus.setValue(true); }; viewEventBus.onDidScroll = (e) => this._onDidScrollChange.fire(e); @@ -1563,8 +1563,8 @@ class EditorContextKeysManager extends Disposable { this._register(this._editor.onDidChangeConfiguration(() => this._updateFromConfig())); this._register(this._editor.onDidChangeCursorSelection(() => this._updateFromSelection())); - this._register(this._editor.onDidFocusEditor(() => this._updateFromFocus())); - this._register(this._editor.onDidBlurEditor(() => this._updateFromFocus())); + this._register(this._editor.onDidFocusEditorWidget(() => this._updateFromFocus())); + this._register(this._editor.onDidBlurEditorWidget(() => this._updateFromFocus())); this._register(this._editor.onDidFocusEditorText(() => this._updateFromFocus())); this._register(this._editor.onDidBlurEditorText(() => this._updateFromFocus())); @@ -1593,8 +1593,8 @@ class EditorContextKeysManager extends Disposable { private _updateFromFocus(): void { this._editorFocus.set(this._editor.hasWidgetFocus() && !this._editor.isSimpleWidget); - this._editorTextFocus.set(this._editor.isFocused() && !this._editor.isSimpleWidget); - this._textInputFocus.set(this._editor.isFocused()); + this._editorTextFocus.set(this._editor.hasTextFocus() && !this._editor.isSimpleWidget); + this._textInputFocus.set(this._editor.hasTextFocus()); } } diff --git a/src/vs/editor/browser/widget/diffEditorWidget.ts b/src/vs/editor/browser/widget/diffEditorWidget.ts index c3b05628b1f3e789d540d1f3274ebbb1ad0781a9..452fcbd521c09b5f386dd7fb9a857c76d277d6eb 100644 --- a/src/vs/editor/browser/widget/diffEditorWidget.ts +++ b/src/vs/editor/browser/widget/diffEditorWidget.ts @@ -749,8 +749,8 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE this.modifiedEditor.focus(); } - public isFocused(): boolean { - return this.originalEditor.isFocused() || this.modifiedEditor.isFocused(); + public hasTextFocus(): boolean { + return this.originalEditor.hasTextFocus() || this.modifiedEditor.hasTextFocus(); } public onVisible(): void { diff --git a/src/vs/editor/browser/widget/diffReview.ts b/src/vs/editor/browser/widget/diffReview.ts index 1270769cdca46f6371aab9461450a77d3035b1a9..c06799df4c5cb8bc401262437e2502b9d738538f 100644 --- a/src/vs/editor/browser/widget/diffReview.ts +++ b/src/vs/editor/browser/widget/diffReview.ts @@ -124,12 +124,12 @@ export class DiffReview extends Disposable { } this._render(); })); - this._register(diffEditor.getOriginalEditor().onDidFocusEditor(() => { + this._register(diffEditor.getOriginalEditor().onDidFocusEditorWidget(() => { if (this._isVisible) { this.hide(); } })); - this._register(diffEditor.getModifiedEditor().onDidFocusEditor(() => { + this._register(diffEditor.getModifiedEditor().onDidFocusEditorWidget(() => { if (this._isVisible) { this.hide(); } diff --git a/src/vs/editor/common/editorCommon.ts b/src/vs/editor/common/editorCommon.ts index bb9f0a7745f6e126d89d91dc91b60058154960be..cfe5c01986fbd7a8db73168e902e68386d7cc7f7 100644 --- a/src/vs/editor/common/editorCommon.ts +++ b/src/vs/editor/common/editorCommon.ts @@ -291,9 +291,9 @@ export interface IEditor { focus(): void; /** - * Returns true if this editor has keyboard focus (e.g. cursor is blinking). + * Returns true if the text inside this editor is focused (i.e. cursor is blinking). */ - isFocused(): boolean; + hasTextFocus(): boolean; /** * Returns all actions associated with this editor. diff --git a/src/vs/editor/contrib/clipboard/clipboard.ts b/src/vs/editor/contrib/clipboard/clipboard.ts index f325b649cccd76af24a24a50593dec917212e382..97f62935e1fc41f01232e4ca306143de58b04579 100644 --- a/src/vs/editor/contrib/clipboard/clipboard.ts +++ b/src/vs/editor/contrib/clipboard/clipboard.ts @@ -42,7 +42,7 @@ abstract class ExecCommandAction extends EditorAction { public runCommand(accessor: ServicesAccessor, args: any): void { let focusedEditor = accessor.get(ICodeEditorService).getFocusedCodeEditor(); // Only if editor text focus (i.e. not if editor has widget focus). - if (focusedEditor && focusedEditor.isFocused()) { + if (focusedEditor && focusedEditor.hasTextFocus()) { focusedEditor.trigger('keyboard', this.id, args); return; } diff --git a/src/vs/editor/contrib/find/findWidget.ts b/src/vs/editor/contrib/find/findWidget.ts index 83ff2daa50abf8f41f5c22461bb50ec88443bb74..ead58a2cef749315adf24b38ce08725295b5b2f9 100644 --- a/src/vs/editor/contrib/find/findWidget.ts +++ b/src/vs/editor/contrib/find/findWidget.ts @@ -155,7 +155,7 @@ export class FindWidget extends Widget implements IOverlayWidget, IHorizontalSas this._updateToggleSelectionFindButton(); } })); - this._register(this._codeEditor.onDidFocusEditor(() => { + this._register(this._codeEditor.onDidFocusEditorWidget(() => { if (this._isVisible) { let globalBufferTerm = this._controller.getGlobalBufferTerm(); if (globalBufferTerm && globalBufferTerm !== this._state.searchString) { diff --git a/src/vs/editor/contrib/multicursor/multicursor.ts b/src/vs/editor/contrib/multicursor/multicursor.ts index f13b5d6167fb777891ac911abe85feb76d37105c..b4101a208ae8b2d37c71dee331580f9069194508 100644 --- a/src/vs/editor/contrib/multicursor/multicursor.ts +++ b/src/vs/editor/contrib/multicursor/multicursor.ts @@ -156,7 +156,7 @@ export class MultiCursorSession { // - focus is not in the editor (i.e. it is in the find widget) // - and the search widget is visible // - and the search string is non-empty - if (!editor.isFocused() && findState.isRevealed && findState.searchString.length > 0) { + if (!editor.hasTextFocus() && findState.isRevealed && findState.searchString.length > 0) { // Find widget owns what is searched for return new MultiCursorSession(editor, findController, false, findState.searchString, findState.wholeWord, findState.matchCase, null); } diff --git a/src/vs/editor/contrib/referenceSearch/referencesController.ts b/src/vs/editor/contrib/referenceSearch/referencesController.ts index 51d82fbc443d3d419a85c0688712f0997d04d104..cf2eccf0595be18618e02bb7a796d20ed466257c 100644 --- a/src/vs/editor/contrib/referenceSearch/referencesController.ts +++ b/src/vs/editor/contrib/referenceSearch/referencesController.ts @@ -179,7 +179,7 @@ export abstract class ReferencesController implements editorCommon.IEditorContri if (this._model) { // can be called while still resolving... let source = this._model.nearestReference(this._editor.getModel().uri, this._widget.position); let target = this._model.nextOrPreviousReference(source, fwd); - let editorFocus = this._editor.isFocused(); + let editorFocus = this._editor.hasTextFocus(); await this._widget.setSelection(target); await this._gotoReference(target); if (editorFocus) { diff --git a/src/vs/editor/contrib/rename/renameInputField.ts b/src/vs/editor/contrib/rename/renameInputField.ts index e7f6c7df33a25fb9d055ad578048fa204523c9c5..c297a5ea47b606f9872c2ff2cd57fa260107b8d9 100644 --- a/src/vs/editor/contrib/rename/renameInputField.ts +++ b/src/vs/editor/contrib/rename/renameInputField.ts @@ -167,7 +167,7 @@ export default class RenameInputField implements IContentWidget, IDisposable { }; disposeOnDone.push(this._editor.onDidChangeCursorSelection(onCursorChanged)); - disposeOnDone.push(this._editor.onDidBlurEditor(() => this.cancelInput(false))); + disposeOnDone.push(this._editor.onDidBlurEditorWidget(() => this.cancelInput(false))); this._show(); diff --git a/src/vs/editor/contrib/suggest/suggestWidget.ts b/src/vs/editor/contrib/suggest/suggestWidget.ts index 7e4de6946ac9742557e1d279b5e22e9353f7ad5c..c5c8d20d48b649041cd019194bbdcf7944d1a466 100644 --- a/src/vs/editor/contrib/suggest/suggestWidget.ts +++ b/src/vs/editor/contrib/suggest/suggestWidget.ts @@ -481,7 +481,7 @@ export class SuggestWidget implements IContentWidget, IDelegate } this.editorBlurTimeout = TPromise.timeout(150).then(() => { - if (!this.editor.isFocused()) { + if (!this.editor.hasTextFocus()) { this.setState(State.Hidden); } }); diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index 982c5add923120a7b0182c0c0dded2fb864bcaf6..953562ce66b007fde1e883ab89b52fed8b4dcfe1 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -2014,9 +2014,9 @@ declare namespace monaco.editor { */ focus(): void; /** - * Returns true if this editor has keyboard focus (e.g. cursor is blinking). + * Returns true if the text inside this editor is focused (i.e. cursor is blinking). */ - isFocused(): boolean; + hasTextFocus(): boolean; /** * Returns all actions associated with this editor. */ @@ -3639,12 +3639,12 @@ declare namespace monaco.editor { */ onDidChangeModelDecorations(listener: (e: IModelDecorationsChangedEvent) => void): IDisposable; /** - * An event emitted when the text inside this editor gained focus (i.e. cursor blinking). + * An event emitted when the text inside this editor gained focus (i.e. cursor starts blinking). * @event */ onDidFocusEditorText(listener: () => void): IDisposable; /** - * An event emitted when the text inside this editor lost focus. + * An event emitted when the text inside this editor lost focus (i.e. cursor stops blinking). * @event */ onDidBlurEditorText(listener: () => void): IDisposable; @@ -3652,12 +3652,12 @@ declare namespace monaco.editor { * An event emitted when the text inside this editor or an editor widget gained focus. * @event */ - onDidFocusEditor(listener: () => void): IDisposable; + onDidFocusEditorWidget(listener: () => void): IDisposable; /** * An event emitted when the text inside this editor or an editor widget lost focus. * @event */ - onDidBlurEditor(listener: () => void): IDisposable; + onDidBlurEditorWidget(listener: () => void): IDisposable; /** * An event emitted on a "mouseup". * @event @@ -3712,7 +3712,7 @@ declare namespace monaco.editor { */ restoreViewState(state: ICodeEditorViewState): void; /** - * Returns true if this editor or one of its widgets has keyboard focus. + * Returns true if the text inside this editor or an editor widget has focus. */ hasWidgetFocus(): boolean; /** diff --git a/src/vs/workbench/api/electron-browser/mainThreadDocumentsAndEditors.ts b/src/vs/workbench/api/electron-browser/mainThreadDocumentsAndEditors.ts index a73d3d648515452e6ead8c864c5830b07191176c..d7a0e67b58bdf2a6b76e8172f5c45cdc96a81dd6 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadDocumentsAndEditors.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadDocumentsAndEditors.ts @@ -244,7 +244,7 @@ class MainThreadDocumentAndEditorStateComputer { ) { const apiEditor = new TextEditorSnapshot(editor); editors.set(apiEditor.id, apiEditor); - if (editor.isFocused()) { + if (editor.hasTextFocus()) { activeEditor = apiEditor.id; } } diff --git a/src/vs/workbench/api/electron-browser/mainThreadEditor.ts b/src/vs/workbench/api/electron-browser/mainThreadEditor.ts index 93c992810587a4213594b05ca4f94bf94a31f9ce..a938797cc00ccbf7286d36d46152c0fe5138841f 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadEditor.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadEditor.ts @@ -266,10 +266,10 @@ export class MainThreadTextEditor { this.setCodeEditor(null); })); - this._codeEditorListeners.push(this._codeEditor.onDidFocusEditor(() => { + this._codeEditorListeners.push(this._codeEditor.onDidFocusEditorWidget(() => { this._focusTracker.onGainedFocus(); })); - this._codeEditorListeners.push(this._codeEditor.onDidBlurEditor(() => { + this._codeEditorListeners.push(this._codeEditor.onDidBlurEditorWidget(() => { this._focusTracker.onLostFocus(); })); @@ -423,7 +423,7 @@ export class MainThreadTextEditor { public isFocused(): boolean { if (this._codeEditor) { - return this._codeEditor.isFocused(); + return this._codeEditor.hasTextFocus(); } return false; } diff --git a/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.ts b/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.ts index 6dfc3b4cce7885ad20f8ec6d31f5ca6c24a1e5fa..1ee118c579d83494904d207555075f4a29125f16 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.ts @@ -92,7 +92,7 @@ function findEditor(model: ITextModel, codeEditorService: ICodeEditorService): I if (model.isAttachedToEditor()) { for (const editor of codeEditorService.listCodeEditors()) { if (editor.getModel() === model) { - if (editor.isFocused()) { + if (editor.hasTextFocus()) { return editor; // favour focused editor if there are multiple } diff --git a/src/vs/workbench/browser/parts/editor/textEditor.ts b/src/vs/workbench/browser/parts/editor/textEditor.ts index 5e78e04749948ceb9e7c168e6ecb61640576a228..266e11fb960635efb0a060dbabc49c4e7cb1dc45 100644 --- a/src/vs/workbench/browser/parts/editor/textEditor.ts +++ b/src/vs/workbench/browser/parts/editor/textEditor.ts @@ -140,10 +140,10 @@ export abstract class BaseTextEditor extends BaseEditor { // Application & Editor focus change to respect auto save settings if (isCodeEditor(this.editorControl)) { - this.toUnbind.push(this.editorControl.onDidBlurEditor(() => this.onEditorFocusLost())); + this.toUnbind.push(this.editorControl.onDidBlurEditorWidget(() => this.onEditorFocusLost())); } else if (isDiffEditor(this.editorControl)) { - this.toUnbind.push(this.editorControl.getOriginalEditor().onDidBlurEditor(() => this.onEditorFocusLost())); - this.toUnbind.push(this.editorControl.getModifiedEditor().onDidBlurEditor(() => this.onEditorFocusLost())); + this.toUnbind.push(this.editorControl.getOriginalEditor().onDidBlurEditorWidget(() => this.onEditorFocusLost())); + this.toUnbind.push(this.editorControl.getModifiedEditor().onDidBlurEditorWidget(() => this.onEditorFocusLost())); } this.toUnbind.push(this.editorGroupService.onEditorsChanged(() => this.onEditorFocusLost())); diff --git a/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts b/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts index 70fd701d488b6e95285d679d696a2aa546f45677..7b56fa20acbb67eb37f8d14bde9a6288d64594a6 100644 --- a/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts +++ b/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts @@ -782,7 +782,7 @@ class SideBySidePreferencesWidget extends Widget { this.defaultPreferencesEditor = this._register(this.instantiationService.createInstance(DefaultPreferencesEditor)); this.defaultPreferencesEditor.create(this.defaultPreferencesEditorContainer); this.defaultPreferencesEditor.setVisible(true); - (this.defaultPreferencesEditor.getControl()).onDidFocusEditor(() => this.lastFocusedEditor = this.defaultPreferencesEditor); + (this.defaultPreferencesEditor.getControl()).onDidFocusEditorWidget(() => this.lastFocusedEditor = this.defaultPreferencesEditor); this.editablePreferencesEditorContainer = DOM.append(parentElement, DOM.$('.editable-preferences-editor-container')); this.editablePreferencesEditorContainer.style.position = 'absolute'; @@ -879,7 +879,7 @@ class SideBySidePreferencesWidget extends Widget { this.editablePreferencesEditor = editor; this.editablePreferencesEditor.create(this.editablePreferencesEditorContainer); this.editablePreferencesEditor.setVisible(true); - (this.editablePreferencesEditor.getControl()).onDidFocusEditor(() => this.lastFocusedEditor = this.editablePreferencesEditor); + (this.editablePreferencesEditor.getControl()).onDidFocusEditorWidget(() => this.lastFocusedEditor = this.editablePreferencesEditor); this.lastFocusedEditor = this.editablePreferencesEditor; return editor; diff --git a/src/vs/workbench/parts/scm/electron-browser/dirtydiffDecorator.ts b/src/vs/workbench/parts/scm/electron-browser/dirtydiffDecorator.ts index a05a680fef96a5245eb6fcfd2a17f3d889b9bee3..d2af1af179f2cd1822f8b9a9bf61e3d55b893783 100644 --- a/src/vs/workbench/parts/scm/electron-browser/dirtydiffDecorator.ts +++ b/src/vs/workbench/parts/scm/electron-browser/dirtydiffDecorator.ts @@ -172,7 +172,7 @@ function getOuterEditorFromDiffEditor(accessor: ServicesAccessor): ICodeEditor { const diffEditors = accessor.get(ICodeEditorService).listDiffEditors(); for (const diffEditor of diffEditors) { - if (diffEditor.isFocused() && diffEditor instanceof EmbeddedDiffEditorWidget) { + if (diffEditor.hasTextFocus() && diffEditor instanceof EmbeddedDiffEditorWidget) { return diffEditor.getParentEditor(); } } diff --git a/src/vs/workbench/parts/search/browser/searchView.ts b/src/vs/workbench/parts/search/browser/searchView.ts index 678cc60421d6c816993e66042068161e33ca1c5a..9de89c56f91d5a22e50839eea2dfb87695faeb18 100644 --- a/src/vs/workbench/parts/search/browser/searchView.ts +++ b/src/vs/workbench/parts/search/browser/searchView.ts @@ -891,7 +891,7 @@ export class SearchView extends Viewlet implements IViewlet, IPanel { let editorControl = this.editorService.getActiveEditor().getControl(); if (isDiffEditor(editorControl)) { - if (editorControl.getOriginalEditor().isFocused()) { + if (editorControl.getOriginalEditor().hasTextFocus()) { editorControl = editorControl.getOriginalEditor(); } else { editorControl = editorControl.getModifiedEditor();