import { FlatESLintConfigItem } from '@eslint-sukka/shared';

declare function next(): FlatESLintConfigItem[];

interface EslintReactAdditionalComponents {
    name: string;
    as: string;
    attributes: Array<{
        name: string;
        as: string;
        defaultValue?: string;
    }>;
}
interface OptionsReact {
    files?: string | string[] | ((builtinFiles: string[]) => string[]);
    /**
     * @default '(useIsomorphicLayoutEffect|useSukkaManyOtherCustomEffectHookExample)'
     */
    additionalHooks?: string;
    additionalHooksWithType?: Record<string, string[]>;
    additionalComponents?: EslintReactAdditionalComponents[];
    /**
     * @default 'error'
     */
    reactCompiler?: boolean;
    nextjs?: boolean;
    remix?: boolean;
    reactRefresh?: {
        allowConstantExport?: boolean;
    };
}
declare function react({ files, additionalHooks, nextjs, remix, reactRefresh, additionalHooksWithType, additionalComponents }?: OptionsReact): FlatESLintConfigItem[];

interface OptionsStyleX {
    opt?: StyleXESLintOptions;
}
interface StyleXESLintOptions {
    validImports?: string[];
    propLimits?: PropLimits;
    allowOuterPseudoAndMedia?: boolean;
    banPropsForLegacy?: boolean;
}
interface PropLimits {
    [propertyName: string]: {
        limit: null | 'string' | 'number' | string | number | Array<string | number>;
        reason: string;
    };
}
declare function stylex({ opt }?: OptionsStyleX): Promise<FlatESLintConfigItem[]>;

export { next, react, stylex };
export type { OptionsReact, OptionsStyleX };
