30 lines
1.5 KiB
JavaScript
30 lines
1.5 KiB
JavaScript
import { PRESENCE_MOTION_DEFINITION, createPresenceComponent } from './createPresenceComponent';
|
|
/**
|
|
* Create a variant function that wraps a presence function to customize it.
|
|
* The new presence function has the supplied variant params as defaults,
|
|
* but these can still be overridden by runtime params when the new function is called.
|
|
*
|
|
* @internal
|
|
*/ export function createPresenceFnVariant(presenceFn, variantParams) {
|
|
const variantFn = (runtimeParams)=>presenceFn({
|
|
...variantParams,
|
|
...runtimeParams
|
|
});
|
|
return variantFn;
|
|
}
|
|
/**
|
|
* Create a new presence component based on another presence component,
|
|
* using the provided variant parameters as defaults.
|
|
*
|
|
* @param component - A component created by `createPresenceComponent`.
|
|
* @param variantParams - An object containing the variant parameters to be used as defaults.
|
|
* The variant parameters should match the type of the component's motion parameters.
|
|
* @returns A new presence component that uses the provided variant parameters as defaults.
|
|
* The new component can still accept runtime parameters that override the defaults.
|
|
*/ export function createPresenceComponentVariant(component, variantParams) {
|
|
const originalFn = component[PRESENCE_MOTION_DEFINITION];
|
|
// The variant params become new defaults, but they can still be overridden by runtime params.
|
|
const variantFn = createPresenceFnVariant(originalFn, variantParams);
|
|
return createPresenceComponent(variantFn);
|
|
}
|