import { z } from "zod";
import { Code, Root } from "mdast";
import { Transformer } from "unified";
import { VFile } from "vfile";
import { Expression } from "estree";
import { MdxJsxAttribute } from "mdast-util-mdx";

//#region src/remark-docgen.d.ts
type Awaitable<T> = T | Promise<T>;
interface DocGenerator {
  name: string;
  /**
   * Transform codeblocks to another mdast element
   */
  run: (input: unknown, context: Context) => Awaitable<object | object[] | undefined>;
  onFile?: (tree: Root, file: VFile) => void;
}
interface Context {
  node: Code;
  path: string;
  cwd: string;
}
interface RemarkDocGenOptions {
  generators?: DocGenerator[];
}
declare function remarkDocGen({
  generators
}: RemarkDocGenOptions): Transformer<Root, Root>;
//#endregion
//#region src/utils.d.ts
declare function createElement(name: string, attributes: object[], children?: unknown): object;
declare function expressionToAttribute(key: string, value: Expression): MdxJsxAttribute;
//#endregion
//#region src/file-generator.d.ts
interface FileGeneratorOptions {
  /** @defaultValue true */
  trim?: boolean;
  /**
   * Resolve reference files relative to `vfile.path`
   *
   * @defaultValue false
   */
  relative?: boolean;
}
type FileGeneratorInput = z.output<typeof fileGeneratorSchema>;
declare const fileGeneratorSchema: z.ZodObject<{
  file: z.ZodString;
  codeblock: z.ZodDefault<z.ZodUnion<readonly [z.ZodObject<{
    lang: z.ZodOptional<z.ZodString>;
    meta: z.ZodOptional<z.ZodString>;
  }, z.core.$strip>, z.ZodBoolean]>>;
}, z.core.$strip>;
declare function fileGenerator({
  relative,
  trim
}?: FileGeneratorOptions): DocGenerator;
//#endregion
//#region src/remark-install.d.ts
interface PackageManager {
  name: string;
  /**
   * Convert from npm to another package manager
   */
  command: (command: string) => string;
}
type RemarkInstallOptions = {
  Tabs?: string;
  Tab?: string;
  /**
   * Persist Tab value (Fumadocs UI only)
   *
   * @defaultValue false
   */
  persist?: {
    id: string;
  } | false;
  packageManagers?: PackageManager[];
};
/**
 * It generates the following structure from a code block with `package-install` as language
 *
 * @example
 * ```tsx
 * <Tabs items={["npm", "pnpm", "yarn", "bun"]}>
 *  <Tab value="pnpm">...</Tab>
 *  ...
 * </Tabs>
 * ```
 *
 * @deprecated Use `remarkNpm` from `fumadocs-core/mdx-plugins` instead, it's a drop-in replacement.
 */
declare function remarkInstall({
  Tab,
  Tabs,
  persist,
  packageManagers
}?: RemarkInstallOptions): Transformer<Root, Root>;
//#endregion
//#region src/remark-show.d.ts
declare function remarkShow(options?: {
  variables?: Record<string, unknown>;
}): Transformer<Root, Root>;
//#endregion
export { DocGenerator, FileGeneratorInput, FileGeneratorOptions, RemarkDocGenOptions, RemarkInstallOptions, createElement, expressionToAttribute, fileGenerator, fileGeneratorSchema, remarkDocGen, remarkInstall, remarkShow };
//# sourceMappingURL=index.d.ts.map