import { ShikiTransformer, ShikiTransformerContext } from "@shikijs/core";
import { Element } from "hast";
import { ShikiTransformer as ShikiTransformer$1 } from "@shikijs/types";

//#region src/shared/notation-transformer.d.ts
type MatchAlgorithm = 'v1' | 'v3';
interface MatchAlgorithmOptions {
  /**
   * Match algorithm to use
   *
   * @see https://shiki.style/packages/transformers#matching-algorithm
   * @default 'v3'
   */
  matchAlgorithm?: MatchAlgorithm;
}
declare function createCommentNotationTransformer(name: string, regex: RegExp, onMatch: (this: ShikiTransformerContext, match: string[], line: Element, commentNode: Element, lines: Element[], index: number) => boolean, matchAlgorithm: MatchAlgorithm | undefined): ShikiTransformer;
//#endregion
//#region src/transformers/compact-line-options.d.ts
interface TransformerCompactLineOption {
  /**
   * 1-based line number.
   */
  line: number;
  classes?: string[];
}
/**
 * Transformer for `shiki`'s legacy `lineOptions`
 */
declare function transformerCompactLineOptions(lineOptions?: TransformerCompactLineOption[]): ShikiTransformer$1;
//#endregion
//#region src/transformers/meta-highlight.d.ts
declare function parseMetaHighlightString(meta: string): number[] | null;
interface TransformerMetaHighlightOptions {
  /**
   * Class for highlighted lines
   *
   * @default 'highlighted'
   */
  className?: string;
  /**
   * Interpret line numbers as 0-indexed
   *
   * @default false
   */
  zeroIndexed?: boolean;
}
/**
 * Allow using `{1,3-5}` in the code snippet meta to mark highlighted lines.
 */
declare function transformerMetaHighlight(options?: TransformerMetaHighlightOptions): ShikiTransformer$1;
//#endregion
//#region src/transformers/meta-highlight-word.d.ts
declare function parseMetaHighlightWords(meta: string): string[];
interface TransformerMetaWordHighlightOptions {
  /**
   * Class for highlighted words
   *
   * @default 'highlighted-word'
   */
  className?: string;
}
/**
 * Allow using `/word/` in the code snippet meta to mark highlighted words.
 */
declare function transformerMetaWordHighlight(options?: TransformerMetaWordHighlightOptions): ShikiTransformer$1;
declare function findAllSubstringIndexes(str: string, substr: string): number[];
//#endregion
//#region src/transformers/notation-diff.d.ts
interface TransformerNotationDiffOptions extends MatchAlgorithmOptions {
  /**
   * Class for added lines
   */
  classLineAdd?: string;
  /**
   * Class for removed lines
   */
  classLineRemove?: string;
  /**
   * Class added to the <pre> element when the current code has diff
   */
  classActivePre?: string;
  /**
   * Class added to the <code> element when the current code has diff
   */
  classActiveCode?: string;
}
/**
 * Use `[!code ++]` and `[!code --]` to mark added and removed lines.
 */
declare function transformerNotationDiff(options?: TransformerNotationDiffOptions): ShikiTransformer$1;
//#endregion
//#region src/transformers/notation-error-level.d.ts
interface TransformerNotationErrorLevelOptions extends MatchAlgorithmOptions {
  classMap?: Record<string, string | string[]>;
  /**
   * Class added to the <pre> element when the current code has diff
   */
  classActivePre?: string;
  /**
   * Class added to the <code> element when the current code has diff
   */
  classActiveCode?: string;
}
/**
 * Allow using `[!code error]` `[!code warning]` notation in code to mark highlighted lines.
 */
declare function transformerNotationErrorLevel(options?: TransformerNotationErrorLevelOptions): ShikiTransformer$1;
//#endregion
//#region src/transformers/notation-focus.d.ts
interface TransformerNotationFocusOptions extends MatchAlgorithmOptions {
  /**
   * Class for focused lines
   */
  classActiveLine?: string;
  /**
   * Class added to the root element when the code has focused lines
   */
  classActivePre?: string;
  /**
   * Class added to the <code> element when the code has focused lines
   */
  classActiveCode?: string;
}
/**
 * Allow using `[!code focus]` notation in code to mark focused lines.
 */
declare function transformerNotationFocus(options?: TransformerNotationFocusOptions): ShikiTransformer$1;
//#endregion
//#region src/transformers/notation-highlight.d.ts
interface TransformerNotationHighlightOptions extends MatchAlgorithmOptions {
  /**
   * Class for highlighted lines
   */
  classActiveLine?: string;
  /**
   * Class added to the root element when the code has highlighted lines
   */
  classActivePre?: string;
  /**
   * Class added to the <code> element when the code has highlighted lines
   */
  classActiveCode?: string;
}
/**
 * Allow using `[!code highlight]` notation in code to mark highlighted lines.
 */
declare function transformerNotationHighlight(options?: TransformerNotationHighlightOptions): ShikiTransformer$1;
//#endregion
//#region src/transformers/notation-highlight-word.d.ts
interface TransformerNotationWordHighlightOptions extends MatchAlgorithmOptions {
  /**
   * Class for highlighted words
   */
  classActiveWord?: string;
  /**
   * Class added to the root element when the code has highlighted words
   */
  classActivePre?: string;
}
declare function transformerNotationWordHighlight(options?: TransformerNotationWordHighlightOptions): ShikiTransformer$1;
//#endregion
//#region src/transformers/notation-map.d.ts
interface TransformerNotationMapOptions extends MatchAlgorithmOptions {
  classMap?: Record<string, string | string[]>;
  /**
   * Class added to the <pre> element when the current code has diff
   */
  classActivePre?: string;
  /**
   * Class added to the <code> element when the current code has diff
   */
  classActiveCode?: string;
}
declare function transformerNotationMap(options?: TransformerNotationMapOptions, name?: string): ShikiTransformer$1;
//#endregion
//#region src/transformers/remove-comments.d.ts
interface TransformerRemoveCommentsOptions {
  /**
   * Remove lines that become empty after removing comments.
   * @default true
   */
  removeEmptyLines?: boolean;
}
/**
 * Remove comments from the code.
 */
declare function transformerRemoveComments(options?: TransformerRemoveCommentsOptions): ShikiTransformer$1;
//#endregion
//#region src/transformers/remove-line-breaks.d.ts
/**
 * Remove line breaks between lines.
 * Useful when you override `display: block` to `.line` in CSS.
 */
declare function transformerRemoveLineBreak(): ShikiTransformer$1;
//#endregion
//#region src/transformers/remove-notation-escape.d.ts
/**
 * Remove notation escapes.
 * Useful when you want to write `// [!code` in markdown.
 * If you process `// [\!code ...]` expression, you can get `// [!code ...]` in the output.
 */
declare function transformerRemoveNotationEscape(): ShikiTransformer$1;
//#endregion
//#region src/transformers/render-indent-guides.d.ts
interface TransformerRenderIndentGuidesOptions {
  indent?: number | false;
}
/**
 * Render indentations as separate tokens.
 * Apply with CSS, it can be used to render indent guides visually.
 */
declare function transformerRenderIndentGuides(options?: TransformerRenderIndentGuidesOptions): ShikiTransformer$1;
//#endregion
//#region src/transformers/render-whitespace.d.ts
interface TransformerRenderWhitespaceOptions {
  /**
   * Class for tab
   *
   * @default 'tab'
   */
  classTab?: string;
  /**
   * Class for space
   *
   * @default 'space'
   */
  classSpace?: string;
  /**
   * Position of rendered whitespace
   * @default all position
   */
  position?: 'all' | 'boundary' | 'trailing' | 'leading';
}
/**
 * Render whitespaces as separate tokens.
 * Apply with CSS, it can be used to render tabs and spaces visually.
 */
declare function transformerRenderWhitespace(options?: TransformerRenderWhitespaceOptions): ShikiTransformer$1;
//#endregion
//#region src/transformers/style-to-class.d.ts
interface TransformerStyleToClassOptions {
  /**
   * Prefix for class names.
   * @default '__shiki_'
   */
  classPrefix?: string;
  /**
   * Suffix for class names.
   * @default ''
   */
  classSuffix?: string;
  /**
   * Callback to replace class names.
   * @default (className) => className
   */
  classReplacer?: (className: string) => string;
}
interface ShikiTransformerStyleToClass extends ShikiTransformer$1 {
  getClassRegistry: () => Map<string, Record<string, string> | string>;
  getCSS: () => string;
  clearRegistry: () => void;
}
/**
 * Remove line breaks between lines.
 * Useful when you override `display: block` to `.line` in CSS.
 */
declare function transformerStyleToClass(options?: TransformerStyleToClassOptions): ShikiTransformerStyleToClass;
//#endregion
export { ShikiTransformerStyleToClass, TransformerCompactLineOption, TransformerMetaHighlightOptions, TransformerMetaWordHighlightOptions, TransformerNotationDiffOptions, TransformerNotationErrorLevelOptions, TransformerNotationFocusOptions, TransformerNotationHighlightOptions, TransformerNotationMapOptions, TransformerNotationWordHighlightOptions, TransformerRemoveCommentsOptions, TransformerRenderIndentGuidesOptions, TransformerRenderWhitespaceOptions, TransformerStyleToClassOptions, createCommentNotationTransformer, findAllSubstringIndexes, parseMetaHighlightString, parseMetaHighlightWords, transformerCompactLineOptions, transformerMetaHighlight, transformerMetaWordHighlight, transformerNotationDiff, transformerNotationErrorLevel, transformerNotationFocus, transformerNotationHighlight, transformerNotationMap, transformerNotationWordHighlight, transformerRemoveComments, transformerRemoveLineBreak, transformerRemoveNotationEscape, transformerRenderIndentGuides, transformerRenderWhitespace, transformerStyleToClass };