Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 1x 11x 11x 11x 11x | import React, { useReducer, forwardRef, useEffect } from 'react';
import { type StrokeOptions } from 'perfect-freehand';
import { PointerContext, PointerDispatchContext, reducer, type Dispatch } from './store';
import { OptionContext, OptionDispatchContext, reducerOption, defaultOptions } from './options';
import { Signature as Container } from './Signature';
import { Paths } from './Paths';
export * from 'perfect-freehand';
export * from './utils';
export * from './options';
export * from './store';
export type SignatureRef = {
svg: SVGSVGElement | null;
dispatch: Dispatch;
clear: () => void;
};
export interface SignatureProps extends React.SVGProps<SVGSVGElement> {
prefixCls?: string;
options?: StrokeOptions;
readonly?: boolean;
defaultPoints?: Record<string, number[][]>;
renderPath?: (d: string, keyName: string, point: number[][], index: number, container: SVGSVGElement) => JSX.Element;
onPointer?: (points: number[][]) => void;
}
const Signature = forwardRef<SignatureRef, SignatureProps>(
({ children, options, renderPath, defaultPoints, ...props }, ref) => {
const [state, dispatch] = useReducer(reducer, Object.assign({}, defaultPoints));
const [stateOption, dispatchOption] = useReducer(
reducerOption,
Object.assign({ ...defaultOptions, renderPath }, options),
);
useEffect(() => dispatchOption({ ...options, renderPath }), [options, renderPath]);
return (
<PointerContext.Provider value={state}>
<PointerDispatchContext.Provider value={dispatch}>
<Container {...props} ref={ref}>
<OptionContext.Provider value={stateOption}>
<OptionDispatchContext.Provider value={dispatchOption}>
<Paths />
</OptionDispatchContext.Provider>
</OptionContext.Provider>
{children}
</Container>
</PointerDispatchContext.Provider>
</PointerContext.Provider>
);
},
);
export default Signature;
|