import * as ESTree from 'estree-jsx';
import type { StringableASTNode, StringableASTNodeFn, WithoutType } from './types';
export declare const whiteSpace: (loc?: ESTree.SourceLocation) => string;
export declare const comments: (comments?: ESTree.Comment[]) => {
    comments: ESTree.Comment[];
    toString: () => string;
};
export declare const comment: ({ value, type, loc, ...other }: ESTree.Comment) => {
    value: string;
    type: "Line" | "Block";
    toString: () => string;
    range?: [number, number] | undefined;
};
/**
 * __JSXIdentifier__
 *
 * @param param Takes a string or the shape of a {ESTree.JSXIdentifier} node
 * @returns {ESTree.JSXIdentifier} node
 */
export declare const jsxIdentifier: (param: WithoutType<ESTree.JSXIdentifier> | string) => StringableASTNode<ESTree.JSXIdentifier>;
/**
 * __JSXOpeningFragment__
 *
 * @example
 * ```ts
 * <>hello</>
 * ^^
 * ```
 */
export declare const jsxOpeningFragment: StringableASTNodeFn<ESTree.JSXOpeningFragment>;
/**
 * __JSXClosingFragment__
 *
 * @example
 * ```ts
 * <>hello</>
 *        ^^
 * ```
 */
export declare const jsxClosingFragment: StringableASTNodeFn<ESTree.JSXClosingFragment>;
/**
 * __JSXFragment__
 *
 * @example
 * ```ts
 * <>hello</>
 * ^^^^^^^^^^
 * ```
 */
export declare const jsxFragment: StringableASTNodeFn<ESTree.JSXFragment>;
/**
 * __JSXSpreadChild__
 *
 * @example
 * ```ts
 * <>{...child}</>
 *   ^^^^^^^^^^
 * ```
 */
export declare const jsxSpreadChild: StringableASTNodeFn<ESTree.JSXSpreadChild>;
export declare const jsxMemberExpression: StringableASTNodeFn<ESTree.JSXMemberExpression>;
/**
 * __JSXElement__
 *
 * @example
 *
 * Usage
 * ```
 * import { jsxElement, jsxOpeningElement, jsxClosingElement, identifier } from 'eslint-codemod-utils'
 *
 * const modalName = identifier({ name: 'Modal' })
 * const modal = jsxElement({
 *  openingElement: jsxOpeningElement({ name: modalName, selfClosing: false }),
 *  closingElement: jsxClosingElement({ name: modalName }),
 * })
 * ```
 *
 * @example
 *
 * Produces
 * ```js
 * <Modal></Modal>
 * ```
 *
 * @returns {JSXElement}
 */
export declare const jsxElement: StringableASTNodeFn<ESTree.JSXElement, 'children' | 'closingElement'>;
/**
 * __JSXSpreadAttribute__
 *
 * @example Usage
 *
 * ```js
 * import { jsxSpreadAttribute, identifier } from 'eslint-codemod-utils'
 *
 * const spreadAttr = jsxSpreadAttribute({
 *  argument: identifier({ name: 'spread' })
 * })
 * ```
 * @example
 *
 * ```js
 * // Produces a spread attribute
 * <div {...spread}>
 *      ⌃⌃⌃⌃⌃⌃⌃⌃⌃⌃⌃
 * ```
 *
 * @returns {ESTree.JSXSpreadAttribute}
 */
export declare const jsxSpreadAttribute: StringableASTNodeFn<ESTree.JSXSpreadAttribute>;
export declare const jsxOpeningElement: StringableASTNodeFn<ESTree.JSXOpeningElement, 'attributes' | 'selfClosing'>;
/**
 * __JSXClosingElement__
 *
 * @example
 *
 * ```js
 * // The below jsx div is a closing element.
 * // A closing element is expected to match a valid opening element of the same name
 * </div>
 * ```
 *
 * @returns {ESTree.JSXClosingElement}
 */
export declare const jsxClosingElement: StringableASTNodeFn<ESTree.JSXClosingElement>;
/**
 * __JSXText__
 *
 * @example
 *
 * ```js
 * // In the below jsx, the string, "hello world" is considered JSXText.
 * // JSXText can be a any number, boolean, or string value.
 * <div>hello world</div>
 * ```
 *
 * @returns {ESTree.JSXText}
 */
export declare const jsxText: StringableASTNodeFn<ESTree.JSXText>;
/**
 * __JSXEmptyExpression__
 *
 * @example
 *
 * ```tsx
 * <SomeJSX attribute={} />
 *                    ^^
 * ```
 *
 * @returns {ESTree.JSXEmptyExpression}
 */
export declare const jsxEmptyExpression: StringableASTNodeFn<ESTree.JSXEmptyExpression>;
/**
 * __JSXExpressionContainer__
 *
 * @example
 *
 * ```tsx
 * <SomeJSX attribute={someValue} />
 *                    ^^^^^^^^^^^
 * ```
 *
 * @returns {ESTree.JSXExpressionContainer}
 */
export declare const jsxExpressionContainer: StringableASTNodeFn<ESTree.JSXExpressionContainer>;
/**
 * __JSXAttribute__
 *
 * @example
 *
 * ```js
 * // In the below jsx, `a`, `b` and `c` reflect different valid
 * // jsx attributes. There values can come in many forms.
 * <div a={10} b="string" c={object} />
 * ```
 *
 * @returns {JSXAttribute}
 */
export declare const jsxAttribute: StringableASTNodeFn<ESTree.JSXAttribute>;
