siegel
Version:
Web application development ecosystem
20 lines (19 loc) • 1.34 kB
TypeScript
import React from 'react';
import type { CoreUIComponent, CoreUIComponentWithDefaults } from './_internals/types';
type NewProps<_Props extends Obj, _NewDefaults extends Partial<_Props>> = {
[K in keyof _Props & keyof _NewDefaults]?: _NewDefaults[K] extends object ? _NewDefaults[K] extends Extract<_NewDefaults[K], AnyFunc> ? _Props[K] : NonNullable<_Props[K]> extends object ? NonNullable<_Props[K]> extends Extract<NonNullable<_Props[K]>, AnyFunc> ? _Props[K] : NewProps<NonNullable<_Props[K]>, _NewDefaults[K]> : _Props[K] : _Props[K];
} & Omit<_Props, keyof _NewDefaults>;
/**
* Applies default props to a given Siegel component function,
* so you don't need to apply them every time you use the component
*
* @param Component - Siegel component function
* @param newDefaults - default props to apply
* @returns Siegel component function with applied default props
*/
declare function withDefaults<_ComponentWithDefaults extends CoreUIComponentWithDefaults<CoreUIComponent<any, any>>, _Props extends Parameters<_ComponentWithDefaults>[0], _NewDefaults extends DeepPartial<_Props>>(Component: _ComponentWithDefaults, newDefaults: _NewDefaults): {
(props: NewProps<_Props, _NewDefaults>): React.JSX.Element;
ID: string;
defaults: _ComponentWithDefaults["defaults"] & _NewDefaults;
};
export default withDefaults;