import type { BaseTheme, ExtractUserTheme, ThemeFunction, TwindConfig } from '@twind/core' import type { Numberify, RGBA } from '@ctrl/tinycolor' export type LanguageId = | ( | 'html' | 'javascript' | 'javascriptreact' | 'markdown' | 'svelte' | 'typescript' | 'typescriptreact' | 'vue-html' | 'vue' ) // eslint-disable-next-line @typescript-eslint/ban-types | (string & {}) export interface Intellisense { readonly theme: ThemeFunction> readonly config: TwindConfig suggest(input: string, options?: SuggestAtOptions): Promise suggestAt(content: string, offset: number, language: LanguageId): Promise documentationFor(token: string): Promise documentationAt( content: string, offset: number, language: LanguageId, ): Promise collectColors(content: string, language: LanguageId): Promise validate(content: string, language: LanguageId): Promise enumerate(): IterableIterator } export interface Diagnostics { code: 'invalidVariant' | 'invalidClass' | 'invalidCSS' severity: 'hint' | 'info' | 'warning' | 'error' value: string message: string start: number end: number suggestions?: [] related?: RelatedDiagnostic[] } export interface RelatedDiagnostic { resource: string message: string start: number end: number } export interface DocumentationAt { start: number end: number value: string } export interface ColorInformation { start: number end: number value: string rgba: Numberify editable?: boolean } export interface SuggestAtOptions { prefix?: string ignore?: string[] } export interface SuggestionAt { start: number end: number suggestions: Suggestion[] } export interface SuggestionCommon { /** The full name of the suggested value */ name: string /** The value as it will be used in this context */ value: string /** Short info to be displayed inline */ description?: string detail?: string color?: string } export interface SuggestionVariant extends SuggestionCommon { type: 'variant' } export interface SuggestionClass extends SuggestionCommon { type: 'class' } export type Suggestion = SuggestionClass | SuggestionVariant export interface IntellisenseOptions { cache?: { /** The maximum number of milliseconds an item should remain in the cache. @default Infinity By default, `maxAge` will be `Infinity`, which means that items will never expire. Lazy expiration upon the next write or read call. Individual expiration of an item can be specified by the `set(key, value, maxAge)` method. */ readonly maxAge?: number /** The maximum number of items before evicting the least recently used items. @default 1000 */ readonly maxSize: number } }