sussudio
Version:
An unofficial VS Code Internal API
100 lines (99 loc) • 2.98 kB
text/typescript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { Disposable, IDisposable } from "../../../common/lifecycle.mjs";
import "../../../../css!./contextview.mjs";
export declare const enum ContextViewDOMPosition {
ABSOLUTE = 1,
FIXED = 2,
FIXED_SHADOW = 3
}
export interface IAnchor {
x: number;
y: number;
width?: number;
height?: number;
}
export declare const enum AnchorAlignment {
LEFT = 0,
RIGHT = 1
}
export declare const enum AnchorPosition {
BELOW = 0,
ABOVE = 1
}
export declare const enum AnchorAxisAlignment {
VERTICAL = 0,
HORIZONTAL = 1
}
export interface IDelegate {
getAnchor(): HTMLElement | IAnchor;
render(container: HTMLElement): IDisposable | null;
focus?(): void;
layout?(): void;
anchorAlignment?: AnchorAlignment;
anchorPosition?: AnchorPosition;
anchorAxisAlignment?: AnchorAxisAlignment;
canRelayout?: boolean;
onDOMEvent?(e: Event, activeElement: HTMLElement): void;
onHide?(data?: unknown): void;
}
export interface IContextViewProvider {
showContextView(delegate: IDelegate, container?: HTMLElement): void;
hideContextView(): void;
layout(): void;
}
export interface IPosition {
top: number;
left: number;
}
export interface ISize {
width: number;
height: number;
}
export interface IView extends IPosition, ISize {
}
export declare const enum LayoutAnchorPosition {
Before = 0,
After = 1
}
export declare enum LayoutAnchorMode {
AVOID = 0,
ALIGN = 1
}
export interface ILayoutAnchor {
offset: number;
size: number;
mode?: LayoutAnchorMode;
position: LayoutAnchorPosition;
}
/**
* Lays out a one dimensional view next to an anchor in a viewport.
*
* @returns The view offset within the viewport.
*/
export declare function layout(viewportSize: number, viewSize: number, anchor: ILayoutAnchor): number;
export declare class ContextView extends Disposable {
private static readonly BUBBLE_UP_EVENTS;
private static readonly BUBBLE_DOWN_EVENTS;
private container;
private view;
private useFixedPosition;
private useShadowDOM;
private delegate;
private toDisposeOnClean;
private toDisposeOnSetContainer;
private shadowRoot;
private shadowRootHostElement;
constructor(container: HTMLElement | null, domPosition: ContextViewDOMPosition);
setContainer(container: HTMLElement | null, domPosition: ContextViewDOMPosition): void;
show(delegate: IDelegate): void;
getViewElement(): HTMLElement;
layout(): void;
private doLayout;
hide(data?: unknown): void;
private isVisible;
private onDOMEvent;
dispose(): void;
}