// Type definitions for agate/Skinnable

type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
type Merge<M, N> = Omit<M, Extract<keyof M, keyof N>> & N;

export interface SkinnableProps {
  /**
 * Select a skin by name by specifying this property. This may be changed at runtime. All components
already use their defaults, but a skin may be changed via this prop or by using
   directly and a config object.
 * 
 * Example:
 * ```
<Button skin="gallium" />
```
 */
  skin?: string;
}
export function Skinnable<P>(
  Component: React.ComponentType<P> | string
): React.ComponentType<P & SkinnableProps>;

export default Skinnable;
