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 SignatureCanvasRef = { canvas: HTMLCanvasElement | null; dispatch: Dispatch; clear: () => void; }; export interface SignatureProps extends React.CanvasHTMLAttributes { prefixCls?: string; options?: StrokeOptions; readonly?: boolean; defaultPoints?: Record; onPointer?: (points: number[][]) => void; } const Signature = forwardRef( ({ children, options, defaultPoints, ...props }, ref) => { const [state, dispatch] = useReducer(reducer, Object.assign({}, defaultPoints)); const [stateOption, dispatchOption] = useReducer(reducerOption, Object.assign({ ...defaultOptions }, options)); useEffect(() => dispatchOption({ ...options }), [options]); return ( {children} ); }, ); export default Signature;