UNPKG

reactive-vscode

Version:

Develop VSCode extension with Vue Reactivity API

898 lines (773 loc) 33.4 kB
import { ChatFollowupProvider } from 'vscode'; import { ChatRequestHandler } from 'vscode'; import { ChatResultFeedback } from 'vscode'; import { ColorTheme } from 'vscode'; import { CommentController } from 'vscode'; import { ComputedRef } from '@reactive-vscode/reactivity'; import { ConfigurationScope } from 'vscode'; import { ConfigurationTarget } from 'vscode'; import { DebugSession } from 'vscode'; import { DecorationOptions } from 'vscode'; import { DecorationRenderOptions } from 'vscode'; import { Disposable as Disposable_2 } from 'vscode'; import { DocumentSelector } from 'vscode'; import { EffectScope } from '@reactive-vscode/reactivity'; import { Event as Event_2 } from 'vscode'; import { EventEmitter } from 'vscode'; import { Extension } from 'vscode'; import { ExtensionContext } from 'vscode'; import { ExtensionTerminalOptions } from 'vscode'; import { FileSystemWatcher } from 'vscode'; import { FoldingRangeProvider } from 'vscode'; import { GlobPattern } from 'vscode'; import { IconPath } from 'vscode'; import { LanguageModelToolInformation } from 'vscode'; import { LogLevel } from 'vscode'; import { LogOutputChannel } from 'vscode'; import { MaybeRef } from '@reactive-vscode/reactivity'; import { MaybeRefOrGetter } from '@reactive-vscode/reactivity'; import { NotebookEditor } from 'vscode'; import { NotebookRange } from 'vscode'; import { OutputChannel } from 'vscode'; import { QuickInputButton } from 'vscode'; import { QuickPickItem } from 'vscode'; import { QuickPickItemButtonEvent } from 'vscode'; import { Range } from 'vscode'; import { Ref } from '@reactive-vscode/reactivity'; import { Selection } from 'vscode'; import { ShallowReactive } from '@reactive-vscode/reactivity'; import { ShallowRef } from '@reactive-vscode/reactivity'; import { StatusBarAlignment } from 'vscode'; import { StatusBarItem } from 'vscode'; import { Task } from 'vscode'; import { TaskExecution } from 'vscode'; import { TaskFilter } from 'vscode'; import { Terminal } from 'vscode'; import { TerminalOptions } from 'vscode'; import { TerminalState } from 'vscode'; import { TextDocument } from 'vscode'; import { TextEditor } from 'vscode'; import { TextEditorDecorationType } from 'vscode'; import { TextEditorEdit } from 'vscode'; import { TextEditorSelectionChangeKind } from 'vscode'; import { TreeDataProvider } from 'vscode'; import { TreeItem } from 'vscode'; import { TreeView } from 'vscode'; import { TreeViewOptions } from 'vscode'; import { UnwrapNestedRefs } from '@reactive-vscode/reactivity'; import { Uri } from 'vscode'; import { ViewBadge } from 'vscode'; import { ViewColumn } from 'vscode'; import { WebviewOptions } from 'vscode'; import { WebviewPanel } from 'vscode'; import { WebviewView } from 'vscode'; import { WebviewViewResolveContext } from 'vscode'; import { window } from 'vscode'; import { WorkspaceFolder } from 'vscode'; import { WritableComputedRef } from '@reactive-vscode/reactivity'; /* Excluded from this release type: activateCbs */ export declare type AnyWatchSource = any; export declare type Awaitable<T> = T | Promise<T>; export declare interface ChatParticipantOptions { iconPath?: MaybeRefOrGetter<IconPath>; followupProvider?: MaybeRef<ChatFollowupProvider>; } export declare interface Commands extends Record<string, (...args: any[]) => any> { 'vscode.open': (uri: Uri) => void; } export declare type ConfigObject<C extends object> = UnwrapNestedRefs<C> & { /** * Write the configuration value to the workspace. * * @see https://code.visualstudio.com/api/references/vscode-api#WorkspaceConfiguration.update */ $update: (key: keyof C, value: C[keyof C], configurationTarget?: ConfigurationTarget | boolean | null, overrideInLanguage?: boolean) => Promise<void>; /** * Set the value without updating the workspace. */ $set: (key: keyof C, value: C[keyof C]) => void; }; export declare interface ConfigRef<T> extends WritableComputedRef<T> { /** * Write the configuration value to the workspace. * * @see https://code.visualstudio.com/api/references/vscode-api#WorkspaceConfiguration.update */ update: (value: T, configurationTarget?: ConfigurationTarget | boolean | null, overrideInLanguage?: boolean) => Promise<void>; /** * Set the value without updating the workspace. */ set: (value: T) => void; } export declare interface ConfigType<T> extends ObjectConstructor { [ConfigTypeSymbol]: T; } export declare type ConfigTypeOptions = Record<string, ConfigTypeRaw<any>>; declare type ConfigTypeRaw<T> = ConfigTypeSingle<T> | ConfigTypeSingle<T>[]; declare type ConfigTypeSingle<T> = typeof String | typeof Number | typeof Boolean | typeof Array | typeof Object | null | ConfigType<T>; declare const ConfigTypeSymbol: unique symbol; /** * Creates a composable that caches the result of a function based on a key. * * @category utilities */ export declare function createKeyedComposable<P extends unknown[], R, K>(fn: (...args: P) => R, key: NoInfer<(...args: P) => K>): (...args: P) => R; /** * Creates a composable that should only be called once. * * @category lifecycle */ export declare function createSingletonComposable<T>(fn: () => T): () => T; /* Excluded from this release type: deactivateCbs */ /** * Define configurations of an extension. See `vscode::workspace.getConfiguration`. * * You can use this function with [vscode-ext-gen](https://github.com/antfu/vscode-ext-gen). * * @category lifecycle */ export declare function defineConfigObject<const C extends ConfigTypeOptions>(section: Nullable<string>, configs: C, scope?: Nullable<ConfigurationScope>): ConfigObject<ParseConfigTypeOptions<C>>; export declare function defineConfigObject<C extends object>(section: Nullable<string>, configs: Record<string, any>, scope?: Nullable<ConfigurationScope>): ConfigObject<C>; /** * Define configurations of an extension. See `vscode::workspace.getConfiguration`. * * You can use this function with [vscode-ext-gen](https://github.com/antfu/vscode-ext-gen). * * @category lifecycle */ export declare function defineConfigs<const C extends ConfigTypeOptions>(section: Nullable<string>, configs: C, scope?: Nullable<ConfigurationScope>): ToConfigRefs<ParseConfigTypeOptions<C>>; export declare function defineConfigs<C extends object>(section: Nullable<string>, configs: C, scope?: Nullable<ConfigurationScope>): ToConfigRefs<C>; /** * Define a new extension. * * @category lifecycle */ export declare function defineExtension<T>(setup: (context: ExtensionContext) => T): { activate: (context: ExtensionContext) => T | undefined; deactivate: () => Promise<void>; }; /** * Define a logger which is usable before activation. * * @category view */ export declare function defineLogger(name: string, options?: UseLoggerOptions): { logger: ShallowRef< { outputChannel: OutputChannel; createLoggerFunc: (type: "info" | "warn" | "error") => (...message: any[]) => void; info: (...message: any[]) => void; warn: (...message: any[]) => void; error: (...message: any[]) => void; append: (value: string) => void; appendLine: (value: string) => void; replace: (value: string) => void; clear: () => void; show: { (preserveFocus?: boolean): void; (column?: ViewColumn, preserveFocus?: boolean): void; }; hide: () => void; } | null, { outputChannel: OutputChannel; createLoggerFunc: (type: "info" | "warn" | "error") => (...message: any[]) => void; info: (...message: any[]) => void; warn: (...message: any[]) => void; error: (...message: any[]) => void; append: (value: string) => void; appendLine: (value: string) => void; replace: (value: string) => void; clear: () => void; show: { (preserveFocus?: boolean): void; (column?: ViewColumn, preserveFocus?: boolean): void; }; hide: () => void; } | null>; outputChannel: ComputedRef<OutputChannel | undefined>; info: (...args: any[]) => void | null; warn: (...args: any[]) => void | null; error: (...args: any[]) => void | null; append: (value: string) => void | null; appendLine: (value: string) => void | null; replace: (value: string) => void | null; clear: () => void | null; show: (column?: ViewColumn | undefined, preserveFocus?: boolean | undefined) => void | null; hide: () => void | null; }; /** * Define a service that should only be instantiated once. * * @category lifecycle */ export declare const defineService: typeof createSingletonComposable; /** * Execute a command, with type checking. See `vscode::commands.executeCommand`. * * @category commands */ export declare function executeCommand<K extends Extract<keyof Commands, string>>(command: K, ...args: Parameters<Commands[K]>): Thenable<unknown>; export declare const extensionContext: ShallowRef<ExtensionContext | null, ExtensionContext | null>; /* Excluded from this release type: extensionScope */ export declare function getDefaultLoggerPrefix(type: string): string; declare type LoggingType = 'info' | 'warn' | 'error'; export declare type MaybeNullableRefOrGetter<T> = T | Ref<Nullable<T>> | (() => Nullable<T>); export declare type Nullable<T> = T | null | undefined; /** * Registers a callback to be called after the extension has been activated. * * @category lifecycle */ export declare function onActivate(fn: OnActivateCb): void; declare type OnActivateCb = (context: ExtensionContext) => void; /** * Registers a callback to be called when the extension is deactivated. * * @category lifecycle */ export declare function onDeactivate(fn: OnDeactivateCb): void; declare type OnDeactivateCb = () => Awaitable<void>; declare type ParseConfigType<C extends ConfigTypeRaw<any>> = C extends (infer C1)[] ? (C1 extends ConfigTypeSingle<any> ? ParseConfigType<C1> : never) : C extends ConfigType<infer T> ? T : (C extends typeof String ? string : C extends typeof Number ? number : C extends typeof Boolean ? boolean : C extends typeof Array ? any[] : C extends typeof Object ? Record<string | number, any> : C extends null ? null : never); export declare type ParseConfigTypeOptions<C extends ConfigTypeOptions> = { -readonly [K in keyof C]: ParseConfigType<C[K]>; }; export declare interface QuickPickOptions<T extends QuickPickItem> { /** * Items to pick from. This can be read and updated by the extension. */ items?: MaybeRefOrGetter<readonly T[]>; /** * Buttons for actions in the UI. */ buttons?: MaybeRefOrGetter<readonly QuickInputButton[]>; /** * An optional title. */ title?: MaybeRefOrGetter<string | undefined>; /** * An optional current step count. */ step?: MaybeRefOrGetter<number | undefined>; /** * An optional total step count. */ totalSteps?: MaybeRefOrGetter<number | undefined>; /** * If the UI should allow for user input. Defaults to true. * * Change this to false, e.g., while validating user input or * loading data for the next step in user input. */ enabled?: MaybeRefOrGetter<boolean>; /** * If the UI should show a progress indicator. Defaults to false. * * Change this to true, e.g., while loading more data or validating * user input. */ busy?: MaybeRefOrGetter<boolean>; /** * If the UI should stay open even when loosing UI focus. Defaults to false. * This setting is ignored on iPad and is always false. */ ignoreFocusOut?: MaybeRefOrGetter<boolean>; /** * Optional placeholder shown in the filter textbox when no filter has been entered. */ placeholder?: MaybeRefOrGetter<string | undefined>; /** * If multiple items can be selected at the same time. Defaults to false. */ canSelectMany?: MaybeRefOrGetter<boolean>; /** * If the filter text should also be matched against the description of the items. Defaults to false. */ matchOnDescription?: MaybeRefOrGetter<boolean>; /** * If the filter text should also be matched against the detail of the items. Defaults to false. */ matchOnDetail?: MaybeRefOrGetter<boolean>; /** * An optional flag to maintain the scroll position of the quick pick when the quick pick items are updated. Defaults to false. */ keepScrollPosition?: MaybeRefOrGetter<boolean>; /** * Initial value of the filter text. */ value?: string; /** * Initial active items. This can be read and updated by the extension. */ activeItems?: readonly T[]; /** * Initial selected items. This can be read and updated by the extension. */ selectedItems?: readonly T[]; } export declare type TextEditorCommandCallback = (textEditor: TextEditor, edit: TextEditorEdit, ...args: any[]) => void; declare type ToConfigRefs<C extends object> = { [K in keyof C]: ConfigRef<C[K]>; }; export declare interface TreeViewNode { readonly children?: Awaitable<this[]>; readonly treeItem: TreeItem | Thenable<TreeItem>; } /** * The safe version of `vue::onScopeDispose(https://vuejs.org/api/reactivity-advanced.html#onscopedispose)`. * * @category lifecycle */ export declare function tryOnScopeDispose(fn: () => void): boolean; /** * @category utilities * @reactive `ExtensionContext.asAbsolutePath` */ export declare function useAbsolutePath(relativePath: MaybeRefOrGetter<string>, silent: true): ComputedRef<string | undefined>; export declare function useAbsolutePath(relativePath: MaybeRefOrGetter<string>, silent?: false): ComputedRef<string>; /** * @reactive `window.activeColorTheme` */ export declare const useActiveColorTheme: () => ShallowRef<ColorTheme, ColorTheme>; /** * @reactive `debug.activeDebugSession` */ export declare const useActiveDebugSession: () => ComputedRef<DebugSession | undefined>; /** * Reactively set decorations on the active editor. See `vscode::window.activeTextEditor`. * * @category editor */ export declare function useActiveEditorDecorations(decorationTypeOrOptions: MaybeRefOrGetter<TextEditorDecorationType | DecorationRenderOptions>, decorations: MaybeRef<readonly Range[] | readonly DecorationOptions[]> | ((editor: TextEditor) => Awaitable<readonly Range[] | readonly DecorationOptions[]>), options?: UseEditorDecorationsOptions): { update: () => Promise<void>; }; /** * @reactive `window.activeNotebookEditor` * @category editor */ export declare const useActiveNotebookEditor: () => ShallowRef<NotebookEditor | undefined, NotebookEditor | undefined>; /** * @reactive `window.activeTerminal` * @category terminal */ export declare const useActiveTerminal: () => ShallowRef<Terminal | undefined, Terminal | undefined>; /** * @reactive `window.activeTextEditor` * @category editor */ export declare const useActiveTextEditor: () => ShallowRef<TextEditor | undefined, TextEditor | undefined>; /** * @reactive `extensions.all` * @category extension */ export declare const useAllExtensions: () => ComputedRef<readonly Extension<any>[]>; /** * @reactive `chat.createChatParticipant` * @category chat */ export declare const useChatParticipant: (id: string, handler: MaybeRef<ChatRequestHandler>, options?: ChatParticipantOptions | undefined) => { onDidReceiveFeedback: (listener: (e: ChatResultFeedback) => any, thisArgs?: any, disposables?: Disposable_2[]) => void; }; /** * Register a command. See `vscode::commands.registerCommand`. * * @category commands */ export declare function useCommand<K extends Extract<keyof Commands, string>>(command: K, callback: Commands[K]): void; /** * Register multiple commands. See `vscode::commands.registerCommand`. * * @category commands */ export declare function useCommands(commands: Partial<Commands>): void; /** * @reactive `comments.createCommentController` */ export declare function useCommentController(id: string, label: string): CommentController; /** * Create terminal, and allows you to control the terminal lifecycle. * * @category terminal */ export declare function useControlledTerminal(name?: string, shellPath?: string, shellArgs?: readonly string[] | string): UseControlledTerminalReturn; export declare function useControlledTerminal(options: TerminalOptions): UseControlledTerminalReturn; export declare function useControlledTerminal(options: ExtensionTerminalOptions): UseControlledTerminalReturn; declare interface UseControlledTerminalReturn { terminal: Ref<Terminal | null>; getIsActive: () => boolean; show: () => void; sendText: (text: string) => void; close: () => void; state: ComputedRef<TerminalState | undefined>; } /** * @reactive `env.shell` */ export declare const useDefaultShell: () => ComputedRef<string>; /** * Dispose the disposable when the current scope is disposed. See `vscode::Disposable`. * * @category lifecycle */ export declare function useDisposable<T extends Disposable_2>(disposable: T): T; /** * @reactive `TextDocument.getText` * @category document */ export declare function useDocumentText(doc: MaybeRefOrGetter<TextDocument | undefined>): ShallowRef<string | undefined, string | undefined>; /** * Reactively set decorations on the given editor. See `vscode::TextEditor.setDecorations`. * * @category editor */ export declare function useEditorDecorations(editor: MaybeRefOrGetter<Nullable<TextEditor>>, decorationTypeOrOptions: MaybeRefOrGetter<TextEditorDecorationType | DecorationRenderOptions>, decorations: MaybeRef<readonly Range[] | readonly DecorationOptions[]> | ((editor: TextEditor) => Awaitable<readonly Range[] | readonly DecorationOptions[]>), options?: UseEditorDecorationsOptions): { /** * Manually trigger the decoration update. */ update: () => Promise<void>; }; export declare interface UseEditorDecorationsOptions { /** * The triggers to update the decorations. * * @default ['effect', 'documentChanged'] */ updateOn?: ('effect' | 'documentChanged')[]; } /** * @category utilities * @reactive `Event` */ export declare function useEvent<T>(event: Event_2<T>, listeners?: ((e: T) => any)[]): (listener: (e: T) => any, thisArgs?: any, disposables?: Disposable_2[]) => void; /** * @category utilities * @reactive `EventEmitter` */ export declare function useEventEmitter<T>(eventEmitter?: EventEmitter<T>, listeners?: ((e: T) => any)[]): UseEventEmitterReturn<T>; export declare function useEventEmitter<T>(listeners?: ((e: T) => any)[]): UseEventEmitterReturn<T>; declare interface UseEventEmitterReturn<T> { event: Event_2<T>; fire: (data: T) => void; addListener: (listener: (e: T) => any) => void; } /** * Get a reactive secret value from the extension's secrets. * * @reactive `ExtensionContext.secrets` * @category extension */ export declare function useExtensionSecret(key: string): Promise<Ref<string | undefined, string | undefined> & { set: (newValue: string) => Promise<void>; remove: () => Promise<void>; }>; /** * @reactive `tasks.fetchTasks` */ export declare function useFetchTasks(filter?: MaybeRefOrGetter<TaskFilter | undefined>): ComputedRef<Thenable<Task[]>>; /** * @reactive `Uri.file` * @category utilities */ export declare function useFileUri(path: MaybeRefOrGetter<string>): ComputedRef<Uri>; /** * @reactive `languages.registerFoldingRangeProvider` */ export declare function useFoldingRangeProvider(selector: DocumentSelector, provideFoldingRanges: MaybeRefOrGetter<FoldingRangeProvider['provideFoldingRanges']>): void; export declare interface UseFSWatcher { readonly watchers: ShallowReactive<Map<GlobPattern, FileSystemWatcher>>; readonly onDidCreate: Event_2<Uri>; readonly onDidChange: Event_2<Uri>; readonly onDidDelete: Event_2<Uri>; } /** * @reactive `workspace.createFileSystemWatcher` */ export declare function useFsWatcher(globPattern: MaybeRefOrGetter<GlobPattern | readonly GlobPattern[] | ReadonlySet<GlobPattern>>, ignoreCreateEvents?: MaybeNullableRefOrGetter<boolean>, ignoreChangeEvents?: MaybeNullableRefOrGetter<boolean>, ignoreDeleteEvents?: MaybeNullableRefOrGetter<boolean>): UseFSWatcher; /** * Determines if the current color theme is dark. See `vscode::ColorTheme.kind`. * * @category window */ export declare const useIsDarkTheme: () => ComputedRef<boolean>; /** * @reactive `env.isTelemetryEnabled` */ export declare const useIsTelemetryEnabled: () => ComputedRef<boolean>; /** * @reactive `l10n.t` */ export declare function useL10nText(message: MaybeRefOrGetter<string>, ...args: Array<MaybeRefOrGetter<string | number | boolean>>): ComputedRef<string>; export declare function useL10nText(message: MaybeRefOrGetter<string>, args: Record<string, any>): ComputedRef<string>; /** * A list of all available tools that were registered by all extensions using `vscode::lm.registerTool`. * * @reactive `lm.tools` * @category lm */ export declare const useLmTools: () => ComputedRef<readonly LanguageModelToolInformation[]>; /** * Creates a logger that writes to the output channel. * * @category view */ export declare function useLogger(name: string, options?: UseLoggerOptions): { outputChannel: OutputChannel; createLoggerFunc: (type: LoggingType) => (...message: any[]) => void; info: (...message: any[]) => void; warn: (...message: any[]) => void; error: (...message: any[]) => void; append: (value: string) => void; appendLine: (value: string) => void; replace: (value: string) => void; clear: () => void; show: { (preserveFocus?: boolean): void; (column?: ViewColumn, preserveFocus?: boolean): void; }; hide: () => void; }; export declare interface UseLoggerOptions { outputChannel?: OutputChannel; getPrefix?: ((type: LoggingType) => string) | null; /** * @default ['error', 'warn'] */ toConsole?: LoggingType[]; } /** * @reactive `env.logLevel` */ export declare const useLogLevel: () => ComputedRef<LogLevel>; /** * @reactive `NotebookEditor.selection` * @category editor */ export declare function useNotebookEditorSelection(notebookEditor: MaybeNullableRefOrGetter<NotebookEditor>): WritableComputedRef<NotebookRange, NotebookRange>; /** * @reactive `NotebookEditor.selections` * @category editor */ export declare function useNotebookEditorSelections(notebookEditor: MaybeNullableRefOrGetter<NotebookEditor>): WritableComputedRef<readonly NotebookRange[], readonly NotebookRange[]>; /** * @reactive `NotebookEditor.visibleRanges` * @category editor */ export declare function useNotebookEditorVisibleRanges(notebookEditor: MaybeNullableRefOrGetter<NotebookEditor>): ComputedRef<readonly NotebookRange[]>; /** * @reactive `window.terminals` * @category terminal */ export declare const useOpenedTerminals: () => ShallowRef<readonly Terminal[], readonly Terminal[]>; /** * @reactive `window.createOutputChannel` * @category view */ export declare function useOutputChannel(name: string, options: { log: true; }): LogOutputChannel; export declare function useOutputChannel(name: string, languageId?: string): OutputChannel; /** * Creates a customizable quick pick UI. * * @reactive `window.createQuickPick` */ export declare function useQuickPick<T extends QuickPickItem>(options?: QuickPickOptions<T>): { onDidChangeActive: (listener: (e: readonly T[]) => any, thisArgs?: any, disposables?: Disposable_2[]) => void; onDidChangeSelection: (listener: (e: readonly T[]) => any, thisArgs?: any, disposables?: Disposable_2[]) => void; onDidAccept: (listener: (e: void) => any, thisArgs?: any, disposables?: Disposable_2[]) => void; onDidHide: (listener: (e: void) => any, thisArgs?: any, disposables?: Disposable_2[]) => void; onDidTriggerButton: (listener: (e: QuickInputButton) => any, thisArgs?: any, disposables?: Disposable_2[]) => void; onDidChangeValue: (listener: (e: string) => any, thisArgs?: any, disposables?: Disposable_2[]) => void; value: ShallowRef<string, string>; activeItems: ShallowRef<readonly T[], readonly T[]>; selectedItems: ShallowRef<readonly T[], readonly T[]>; placeholder: string | undefined; buttons: readonly QuickInputButton[]; onDidTriggerItemButton: Event_2<QuickPickItemButtonEvent<T>>; items: readonly T[]; canSelectMany: boolean; matchOnDescription: boolean; matchOnDetail: boolean; keepScrollPosition?: boolean; title: string | undefined; step: number | undefined; totalSteps: number | undefined; enabled: boolean; busy: boolean; ignoreFocusOut: boolean; show(): void; hide(): void; dispose(): void; }; /** * Set multiple reactive options on a target object. * @category utilities */ export declare function useReactiveOptions<T extends object>(target: T, options: { [K in keyof T]?: MaybeRefOrGetter<T[K]>; }, keys: (keyof T)[]): void; /** * @reactive `window.createStatusBarItem` */ export declare function useStatusBarItem(options: UseStatusBarItemOptions): StatusBarItem; export declare interface UseStatusBarItemOptions { id?: string; alignment?: StatusBarAlignment; priority?: number; name?: MaybeRefOrGetter<StatusBarItem['name']>; text?: MaybeRefOrGetter<StatusBarItem['text']>; tooltip?: MaybeRefOrGetter<StatusBarItem['tooltip']>; color?: MaybeRefOrGetter<StatusBarItem['color']>; backgroundColor?: MaybeRefOrGetter<StatusBarItem['backgroundColor']>; command?: MaybeRefOrGetter<StatusBarItem['command']>; accessibilityInformation?: MaybeRefOrGetter<StatusBarItem['accessibilityInformation']>; visible?: MaybeRefOrGetter<boolean>; } /** * @reactive `tasks.taskExecutions` */ export declare const useTaskExecutions: () => ComputedRef<readonly TaskExecution[]>; /** * @category terminal * @reactive `window.createTerminal()` */ export declare function useTerminal(name?: string, shellPath?: string, shellArgs?: readonly string[] | string): UseTerminalReturn; export declare function useTerminal(options: TerminalOptions): UseTerminalReturn; export declare function useTerminal(options: ExtensionTerminalOptions): UseTerminalReturn; declare interface UseTerminalReturn extends Omit<Terminal, 'state' | 'dispose'> { terminal: Terminal; state: ComputedRef<TerminalState>; } /** * @reactive `Terminal.state` * @category terminal */ export declare function useTerminalState(terminal: MaybeNullableRefOrGetter<Terminal>): ComputedRef<TerminalState | undefined>; /** * Register a text editor command. See `vscode::commands.registerTextEditorCommand`. * * @category commands */ export declare function useTextEditorCommand(command: string, callback: TextEditorCommandCallback): void; /** * Register multiple text editor commands. See `vscode::commands.registerTextEditorCommand`. * * @category commands */ export declare function useTextEditorCommands(commands: Record<string, TextEditorCommandCallback>): void; /** * @reactive `TextEditor.selection` * @category editor */ export declare function useTextEditorSelection(textEditor: MaybeNullableRefOrGetter<TextEditor>, acceptKind?: MaybeRefOrGetter<(TextEditorSelectionChangeKind | undefined)[]>): WritableComputedRef<Selection, Selection>; /** * @reactive `TextEditor.selections` * @category editor */ export declare function useTextEditorSelections(textEditor: MaybeNullableRefOrGetter<TextEditor>, acceptKind?: MaybeRefOrGetter<(TextEditorSelectionChangeKind | undefined)[]>): WritableComputedRef<readonly Selection[], readonly Selection[]>; /** * @reactive `TextEditor.viewColumn` * @category editor */ export declare function useTextEditorViewColumn(textEditor: MaybeNullableRefOrGetter<TextEditor>): ComputedRef<ViewColumn | undefined>; /** * @reactive `TextEditor.visibleRanges` * @category editor */ export declare function useTextEditorVisibleRanges(textEditor: MaybeNullableRefOrGetter<TextEditor>): ComputedRef<readonly Range[]>; /** * Register a tree view. See `vscode::window.createTreeView`. * * @category view */ export declare const useTreeView: <T extends TreeViewNode>(viewId: string, treeData: MaybeRefOrGetter<Awaitable<T[]>>, options?: UseTreeViewOptions<T> | undefined) => TreeView<T>; export declare type UseTreeViewOptions<T> = Omit<TreeViewOptions<T>, 'treeDataProvider'> & Pick<TreeDataProvider<T>, 'resolveTreeItem'> & { title?: MaybeRefOrGetter<string | undefined>; badge?: MaybeRefOrGetter<ViewBadge | undefined>; /** * Additional watch source to trigger a change event. Useful when `treeItem` is a promise. */ watchSource?: AnyWatchSource; }; /** * Reactively set the badge of a view (`vscode::TreeView` or `vscode::WebviewView`). * * @category view */ export declare function useViewBadge(view: MaybeRefOrGetter<Nullable<ViewWithBadge>>, badge: MaybeRefOrGetter<ViewBadge | undefined>): void; /** * Reactively set the title of a view (`vscode::TreeView` or `vscode::WebviewView`). * * @category view */ export declare function useViewTitle(view: MaybeRefOrGetter<Nullable<ViewWithTitle>>, title: MaybeRefOrGetter<string | undefined>): void; /** * Reactively get the visibility of a view (`vscode::TreeView` or `vscode::WebviewView`). * * @category view */ export declare function useViewVisibility(view: MaybeNullableRefOrGetter<ViewWithVisibility>): ComputedRef<boolean>; /** * @reactive `window.visibleNotebookEditors` * @category editor */ export declare const useVisibleNotebookEditors: () => ShallowRef<readonly NotebookEditor[], readonly NotebookEditor[]>; /** * @reactive `window.visibleTextEditors` * @category editor */ export declare const useVisibleTextEditors: () => ShallowRef<readonly TextEditor[], readonly TextEditor[]>; export declare function useVscodeContext<T>(name: string, value: WritableComputedRef<T>, shouldUpdate?: MaybeRefOrGetter<boolean>): WritableComputedRef<T>; export declare function useVscodeContext<T>(name: string, value: ComputedRef<T> | (() => T), shouldUpdate?: MaybeRefOrGetter<boolean>): ComputedRef<T>; export declare function useVscodeContext<T>(name: string, value: MaybeRef<T>, shouldUpdate?: MaybeRefOrGetter<boolean>): Ref<T>; /** * Register a webview panel. See `vscode::window.createWebviewPanel`. * * @category view */ export declare function useWebviewPanel(viewType: string, title: MaybeRefOrGetter<string>, html: MaybeRefOrGetter<string>, showOptions: Parameters<typeof window.createWebviewPanel>[2], options?: WebviewPanelRegisterOptions): { panel: WebviewPanel; context: ShallowRef<unknown, unknown>; active: Ref<boolean, boolean>; visible: Ref<boolean, boolean>; postMessage: (message: any) => Thenable<boolean>; forceRefresh: () => void; }; /** * Register a webview view. See `vscode::window.registerWebviewViewProvider`. * * @category view */ export declare const useWebviewView: (viewId: string, html: MaybeRefOrGetter<string>, options?: WebviewViewRegisterOptions | undefined) => { view: ShallowRef<WebviewView | undefined, WebviewView | undefined>; context: ShallowRef<WebviewViewResolveContext<unknown> | undefined, WebviewViewResolveContext<unknown> | undefined>; postMessage: (message: any) => Thenable<boolean> | undefined; forceRefresh: () => void; }; /** * @reactive `window.state` */ export declare const useWindowState: () => { focused: ComputedRef<boolean>; active: ComputedRef<boolean>; }; /** * @reactive `workspace.workspaceFolders` */ export declare const useWorkspaceFolders: () => ComputedRef<readonly WorkspaceFolder[] | undefined>; declare type ViewWithBadge = Pick<TreeView<unknown> | WebviewView, 'badge'>; declare type ViewWithTitle = Pick<TreeView<unknown> | WebviewView, 'title'>; declare type ViewWithVisibility = Pick<TreeView<unknown> | WebviewView, 'visible' | 'onDidChangeVisibility'>; export declare interface WebviewPanelRegisterOptions { enableFindWidget?: boolean; retainContextWhenHidden?: boolean; onDidReceiveMessage?: (message: any) => void; webviewOptions?: MaybeRefOrGetter<WebviewOptions>; } export declare interface WebviewViewRegisterOptions { retainContextWhenHidden?: boolean; onDidReceiveMessage?: (message: any) => void; webviewOptions?: MaybeRefOrGetter<WebviewOptions>; title?: MaybeRefOrGetter<string | undefined>; badge?: MaybeRefOrGetter<ViewBadge | undefined>; } export * from "@reactive-vscode/reactivity"; export { }