Path: blob/main/src/vs/workbench/contrib/notebook/browser/view/notebookRenderingCommon.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { FastDomNode } from '../../../../../base/browser/fastDomNode.js';6import { IMouseWheelEvent } from '../../../../../base/browser/mouseEvent.js';7import { IListContextMenuEvent, IListEvent, IListMouseEvent } from '../../../../../base/browser/ui/list/list.js';8import { IListStyles } from '../../../../../base/browser/ui/list/listWidget.js';9import { Event } from '../../../../../base/common/event.js';10import { DisposableStore } from '../../../../../base/common/lifecycle.js';11import { ScrollEvent } from '../../../../../base/common/scrollable.js';12import { ICodeEditor } from '../../../../../editor/browser/editorBrowser.js';13import { Range } from '../../../../../editor/common/core/range.js';14import { Selection } from '../../../../../editor/common/core/selection.js';15import { IContextKeyService } from '../../../../../platform/contextkey/common/contextkey.js';16import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';17import { IWorkbenchListOptionsUpdate } from '../../../../../platform/list/browser/listService.js';18import { CellRevealRangeType, CellRevealType, ICellOutputViewModel, ICellViewModel, INotebookCellOverlayChangeAccessor, INotebookViewZoneChangeAccessor } from '../notebookBrowser.js';19import { CellPartsCollection } from './cellPart.js';20import { CellViewModel, NotebookViewModel } from '../viewModel/notebookViewModelImpl.js';21import { ICellRange } from '../../common/notebookRange.js';22import { createTrustedTypesPolicy } from '../../../../../base/browser/trustedTypes.js';232425export interface INotebookCellList extends ICoordinatesConverter {26isDisposed: boolean;27inRenderingTransaction: boolean;28viewModel: NotebookViewModel | null;29webviewElement: FastDomNode<HTMLElement> | null;30readonly contextKeyService: IContextKeyService;31element(index: number): ICellViewModel | undefined;32elementAt(position: number): ICellViewModel | undefined;33elementHeight(element: ICellViewModel): number;34onWillScroll: Event<ScrollEvent>;35onDidScroll: Event<ScrollEvent>;36onDidChangeFocus: Event<IListEvent<ICellViewModel>>;37onDidChangeContentHeight: Event<number>;38onDidChangeVisibleRanges: Event<void>;39visibleRanges: ICellRange[];40scrollTop: number;41scrollHeight: number;42scrollLeft: number;43length: number;44rowsContainer: HTMLElement;45scrollableElement: HTMLElement;46ariaLabel: string;47readonly onDidRemoveOutputs: Event<readonly ICellOutputViewModel[]>;48readonly onDidHideOutputs: Event<readonly ICellOutputViewModel[]>;49readonly onDidRemoveCellsFromView: Event<readonly ICellViewModel[]>;50readonly onMouseUp: Event<IListMouseEvent<CellViewModel>>;51readonly onMouseDown: Event<IListMouseEvent<CellViewModel>>;52readonly onContextMenu: Event<IListContextMenuEvent<CellViewModel>>;53detachViewModel(): void;54attachViewModel(viewModel: NotebookViewModel): void;55attachWebview(element: HTMLElement): void;56clear(): void;57focusElement(element: ICellViewModel): void;58selectElements(elements: ICellViewModel[]): void;59getFocusedElements(): ICellViewModel[];60getSelectedElements(): ICellViewModel[];61scrollToBottom(): void;62revealCell(cell: ICellViewModel, revealType: CellRevealType): Promise<void>;63revealCells(range: ICellRange): void;64revealRangeInCell(cell: ICellViewModel, range: Selection | Range, revealType: CellRevealRangeType): Promise<void>;65revealCellOffsetInCenter(element: ICellViewModel, offset: number): void;66revealOffsetInCenterIfOutsideViewport(offset: number): void;67setHiddenAreas(_ranges: ICellRange[], triggerViewUpdate: boolean): boolean;68changeViewZones(callback: (accessor: INotebookViewZoneChangeAccessor) => void): void;69changeCellOverlays(callback: (accessor: INotebookCellOverlayChangeAccessor) => void): void;70getViewZoneLayoutInfo(viewZoneId: string): { height: number; top: number } | null;71domElementOfElement(element: ICellViewModel): HTMLElement | null;72focusView(): void;73triggerScrollFromMouseWheelEvent(browserEvent: IMouseWheelEvent): void;74updateElementHeight2(element: ICellViewModel, size: number, anchorElementIndex?: number | null): void;75domFocus(): void;76focusContainer(clearSelection: boolean): void;77setCellEditorSelection(element: ICellViewModel, range: Range): void;78style(styles: IListStyles): void;79getRenderHeight(): number;80getScrollHeight(): number;81updateOptions(options: IWorkbenchListOptionsUpdate): void;82layout(height?: number, width?: number): void;83dispose(): void;84}8586export interface BaseCellRenderTemplate {87readonly rootContainer: HTMLElement;88readonly editorPart: HTMLElement;89readonly cellInputCollapsedContainer: HTMLElement;90readonly instantiationService: IInstantiationService;91readonly container: HTMLElement;92readonly cellContainer: HTMLElement;93readonly templateDisposables: DisposableStore;94readonly elementDisposables: DisposableStore;95currentRenderedCell?: ICellViewModel;96cellParts: CellPartsCollection;97toJSON: () => object;98}99100export interface MarkdownCellRenderTemplate extends BaseCellRenderTemplate {101readonly editorContainer: HTMLElement;102readonly foldingIndicator: HTMLElement;103currentEditor?: ICodeEditor;104}105106export interface CodeCellRenderTemplate extends BaseCellRenderTemplate {107outputContainer: FastDomNode<HTMLElement>;108cellOutputCollapsedContainer: HTMLElement;109outputShowMoreContainer: FastDomNode<HTMLElement>;110focusSinkElement: HTMLElement;111editor: ICodeEditor;112}113114export interface ICoordinatesConverter {115getCellViewScrollTop(cell: ICellViewModel): number;116getCellViewScrollBottom(cell: ICellViewModel): number;117getViewIndex(cell: ICellViewModel): number | undefined;118getViewIndex2(modelIndex: number): number | undefined;119getModelIndex(cell: CellViewModel): number | undefined;120getModelIndex2(viewIndex: number): number | undefined;121getVisibleRangesPlusViewportAboveAndBelow(): ICellRange[];122modelIndexIsVisible(modelIndex: number): boolean;123convertModelIndexToViewIndex(modelIndex: number): number;124}125126export const collapsedCellTTPolicy = createTrustedTypesPolicy('collapsedCellPreview', { createHTML: value => value });127128129