
"use client";
import { IconPropsWithSVGProps, UniversalIconButtonProps } from "../../../tokens/types.js";
import * as _$react from "react";
import { ForwardRefExoticComponent } from "react";

//#region src/components/client/IconButton/IconButtonBase.d.ts
type HtmlButtonProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'color' | 'name'>;
type DataAttributes = {
  [name: `data-${string}`]: string;
};
interface IconButtonProps extends HtmlButtonProps, UniversalIconButtonProps {
  slotProps?: {
    icon?: Partial<IconPropsWithSVGProps & DataAttributes>;
  };
}
type IconButtonRenderArgs = {
  asChild: boolean;
  loading?: boolean;
  name?: IconButtonProps['name'];
  iconVariant: IconButtonProps['iconVariant'];
  children: React.ReactNode;
  iconClassName: string;
  loadingIconClassName: string;
  iconSlotClassName?: string;
  iconSlotProps: Partial<IconPropsWithSVGProps & DataAttributes>;
};
type IconButtonRootRenderArgs = {
  asChild: boolean;
  Slot: ForwardRefExoticComponent<HtmlButtonProps>;
  children: React.ReactNode;
  buttonRef: React.ForwardedRef<HTMLButtonElement>;
  type: React.ButtonHTMLAttributes<HTMLButtonElement>['type'];
  htmlName?: string;
  rootClassName: string;
  rest: Record<string, unknown>;
  iconContent: React.ReactNode;
};
interface IconButtonBaseProps extends IconButtonProps {
  renderIconContent: (args: IconButtonRenderArgs) => React.ReactNode;
  renderRoot: (args: IconButtonRootRenderArgs) => React.ReactNode;
}
declare const IconButtonBase: ForwardRefExoticComponent<IconButtonBaseProps & _$react.RefAttributes<HTMLButtonElement>>;
declare function renderIconButtonAsChild(children: React.ReactNode, content: React.ReactNode): _$react.ReactElement<unknown, string | _$react.JSXElementConstructor<any>>;
//#endregion
export { IconButtonBase, type IconButtonProps, type IconButtonRootRenderArgs, renderIconButtonAsChild };