UNPKG

@equinor/fusion-react-styles

Version:
64 lines 2.9 kB
import { type FusionTheme } from './theme'; import type { StyleRules } from './types'; import { type ClassNameMap } from './utils/sheet-manager'; export type { ClassNameMap }; /** * Options for configuring the makeStyles hook */ export interface MakeStylesOptions { /** Name prefix for generated class names (used for debugging) */ name?: string; /** Default theme to use when no ThemeProvider is present */ defaultTheme?: unknown; } /** * Creates a styles hook using JSS * * This function returns a hook that generates CSS class names from style definitions. * Styles can be static objects or functions that receive theme/props and return styles. * * @template Theme - The theme type (defaults to FusionTheme, but can be extended) * @template Props - The props type for dynamic styles * @template ClassKey - The class key type (auto-inferred from styles) * * @param stylesOrCreator - Either a static styles object or a function that receives theme and returns styles * @param options - Configuration options for the styles hook * * @returns A hook function that returns a Record<ClassKey, string>. * The ClassKey type is inferred from the styles, ensuring type-safe access. * If Props is empty, the hook accepts optional props. * Otherwise, props are required. * * @example * ```tsx * const useStyles = makeStyles({ * root: { color: 'red' }, * button: { padding: '10px' } * }, { name: 'MyComponent' }); * * function Component() { * const classes = useStyles(); * return <div className={classes.root}>Hello</div>; * } * ``` * * @example * ```tsx * const useStyles = makeStyles((theme) => ({ * root: { * color: theme.colors.text.static_icons__default.getVariable('color'), * padding: theme.spacing.comfortable.medium.getVariable('padding') * } * }), { name: 'ThemedComponent' }); * * function Component() { * const classes = useStyles(); * return <div className={classes.root}>Hello</div>; * } * ``` */ type ExtractClassKey<T> = T extends StyleRules<any, infer K> ? K : keyof T & string; export declare function makeStyles<Theme extends FusionTheme, Props extends Record<string, unknown> = {}, SR extends Record<string, any> = Record<string, any>>(stylesOrCreator: (theme: Theme) => SR, options?: MakeStylesOptions): keyof Props extends never ? (props?: Props) => Record<ExtractClassKey<SR>, string> : (props: Props) => Record<ExtractClassKey<SR>, string>; export declare function makeStyles<Theme extends FusionTheme = FusionTheme, Props extends Record<string, unknown> = {}, SR extends Record<string, any> = Record<string, any>>(stylesOrCreator: SR, options?: MakeStylesOptions): keyof Props extends never ? (props?: Props) => Record<ExtractClassKey<SR>, string> : (props: Props) => Record<ExtractClassKey<SR>, string>; export default makeStyles; //# sourceMappingURL=make-styles.d.ts.map