@aws-amplify/ui
Version:
`@aws-amplify/ui` contains low-level logic & styles for stand-alone usage or re-use in framework-specific implementations.
58 lines (57 loc) • 2.09 kB
TypeScript
import type { ComponentThemeFromName, ComponentsTheme } from '../components';
import type { BaseTheme, ComponentTheme, ComponentThemeOverride } from '../components/utils';
import type { WebTokens } from '../tokens';
import type { WebTheme } from '../types';
import type { ClassNameFunction } from './createComponentClasses';
type CreateComponentThemeProps<TokensType extends WebTokens = WebTokens, ThemeType extends BaseTheme = BaseTheme, NameType extends string = string, OverridesType extends BaseTheme = BaseTheme> = {
name: NameType;
theme?: ComponentTheme<ThemeType, TokensType>;
overrides?: ComponentThemeOverride<ComponentTheme<OverridesType, TokensType>>[];
} & ComponentsTheme<TokensType>;
/**
* Use this to create the theme of a component. You can use this
* to both completely customize built-in components and
* build your own components!
*
*
* ```ts
* // built-in component styling
* const alertTheme = defineComponentTheme({
* name: 'alert',
* theme: (tokens) => {
* return {
* padding: tokens.space.large
* }
* }
* });
*
* // custom component styling
* const avatarTheme = defineComponentTheme({
* name: 'avatar',
* theme: (tokens) => {
* return {
* padding: tokens.space.large
* }
* }
* })
*
* const theme = createTheme({
* name: 'my-theme',
* components: [alertTheme, avatarTheme]
* })
* ```
*
* @param {Object} params
* @param {string} params.name - The name of the component. Use a built-in component name like button to theme buttons.
* @returns
*/
export declare function defineComponentTheme<ThemeType extends BaseTheme = BaseTheme, TokensType extends WebTokens = WebTokens, NameType extends string = string>({ name, theme, overrides, }: CreateComponentThemeProps<TokensType, ThemeType, NameType>): {
className: ClassNameFunction<ComponentThemeFromName<NameType, ThemeType>>;
theme: typeof theme;
name: string;
overrides?: typeof overrides;
cssText: (props: {
theme: Pick<WebTheme, 'tokens' | 'breakpoints' | 'name'>;
}) => string;
};
export {};