UNPKG

react-simple-signature

Version:

React signature pad component for touch/mouse with high-DPI rendering and export.

1 lines 32.9 kB
{"version":3,"file":"index.cjs","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/component/useInit.ts","../src/component/useDraw.tsx","../src/component/SimpleSignature.tsx","../src/index.ts"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n source,\n self,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n self,\n source,\n getOwner(),\n maybeKey,\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_ELEMENT_TYPE &&\n node._store &&\n (node._store.validated = 1);\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import {\n useEffect, type RefObject\n} from \"react\";\n \ninterface hookProps{\n className?:string\n height?: number; \n width?: number; \n strokeColor?: `#${string}`;\n canvasRef: RefObject<HTMLCanvasElement|null> ; // Allow null for initial render\n}\n \n/**\n * Initializes the canvas: Sets the canvas size, \n * scales the context for devicePixelRatio, and applies default stroke styles.\n */\nexport default function useInit({\n className,height, width, strokeColor, canvasRef\n}: hookProps) {\n\n useEffect(() => {\n\n if (canvasRef.current === null) \n return;\n\n const canvas = canvasRef.current;\n canvas.role = 'img';\n canvas.tabIndex=0;\n canvas.className = className??'';\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n // Account for high-resolution screens\n const dpr = window.devicePixelRatio || 1;\n\n // Use passed-in width/height, or fallback to defaults\n const canvasWidth = width ?? 400;\n const canvasHeight = height ?? 400;\n\n // Set internal pixel dimensions for HiDPI rendering\n canvas.width = canvasWidth * dpr;\n canvas.height = canvasHeight * dpr;\n\n // Set visible size for layout (CSS pixels)\n // ensure canvas appears at intended size regardless of internal resolution\n canvas.style.width = `${canvasWidth}px`;\n canvas.style.height = `${canvasHeight}px`;\n\n // Scale drawing operations to match physical pixel density\n ctx.scale(dpr, dpr);\n\n // Configure default drawing style\n ctx.lineWidth = 2;\n ctx.lineCap = \"round\";\n ctx.strokeStyle = strokeColor?? '#000000' ;\n }, [width, height, strokeColor, canvasRef, className]);\n\n}","import {\n useState, useRef \n} from \"react\";\n\nimport type {\n MouseEvent,\n TouchEvent \n} from \"react\";\n\ninterface useDrawProps {\n onChange?: (blob: Blob) => void;\n onStart?: () => void;\n blobFormat?: \"png\" | \"jpeg\";\n}\n\n/**\n * Hook for handling smooth canvas-based drawing, touch/mouse support, and emitting a blob image.\n * Supports consumer callbacks for draw start and completion.\n */\nexport default function useDraw({\n onChange, blobFormat, onStart\n}: useDrawProps) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n // Tracks whether the user is currently drawing on the canvas\n const [drawing, setDrawing] = useState(false);\n\n // Tracks whether any drawing has occurred (used to decide if a blob should be emitted)\n const [hasDrawn, setHasDrawn] = useState(false);\n\n // Last recorded point used for smoothing with quadratic curves\n const [lastPoint, setLastPoint] = useState<{\n x: number; y: number \n } | null>(null);\n\n /**\n * Returns canvas-relative coordinates for a mouse or touch event.\n * Returns null if canvas isn't ready.\n */\n const getEventPosition = (\n e: TouchEvent<HTMLCanvasElement> | MouseEvent<HTMLCanvasElement>\n ): {\n offsetX: number, offsetY: number\n } | null => {\n const canvas = canvasRef.current;\n if (!canvas) return null;\n\n let clientX, clientY;\n\n if (\"touches\" in e) {\n clientX = e.touches[0].clientX;\n clientY = e.touches[0].clientY;\n } else {\n clientX = e.clientX;\n clientY = e.clientY;\n }\n\n const rectangle = canvas.getBoundingClientRect();\n\n return {\n offsetX: clientX - rectangle.left,\n offsetY: clientY - rectangle.top,\n };\n };\n\n /**\n * Draws a smooth line from the last point to the current event position.\n * No-ops if drawing hasn't started or the canvas is unavailable.\n */\n const draw = (\n e: MouseEvent<HTMLCanvasElement> | TouchEvent<HTMLCanvasElement>\n ) => {\n if (!drawing) return;\n\n const position = getEventPosition(e);\n\n // if coordinates haven't been set, exit\n if (!position || !lastPoint) return;\n\n const {\n offsetX, offsetY \n } = position;\n const ctx = canvasRef.current?.getContext(\"2d\");\n if (!ctx) return;\n\n const midX = (lastPoint.x + offsetX) / 2;\n const midY = (lastPoint.y + offsetY) / 2;\n\n ctx.quadraticCurveTo(lastPoint.x, lastPoint.y, midX, midY);\n ctx.stroke();\n\n setLastPoint({\n x: offsetX, y: offsetY \n });\n setHasDrawn(true);\n };\n\n /**\n * Begins a new drawing path at the current event position.\n * Invokes onStart callback if provided.\n */\n const startDrawing = (\n e: MouseEvent<HTMLCanvasElement> | TouchEvent<HTMLCanvasElement>\n ) => {\n const position = getEventPosition(e);\n if (position === null) return;\n\n const {\n offsetX, offsetY \n } = position;\n const ctx = canvasRef.current?.getContext(\"2d\");\n if (!ctx) return;\n\n ctx.beginPath();\n ctx.moveTo(offsetX, offsetY);\n setDrawing(true);\n setHasDrawn(true);\n setLastPoint({\n x: offsetX, y: offsetY \n });\n\n if( onStart)\n onStart();\n };\n\n /**\n * Emits the current canvas contents as a Blob to the onChange callback.\n */\n const emitBlob = () => {\n if (!canvasRef.current || !onChange) return;\n\n canvasRef.current.toBlob((blob) => {\n if (blob === null) return;\n onChange(blob);\n }, `image/${blobFormat}`);\n };\n\n /**\n * Ends the current stroke and emits a blob if anything was drawn.\n */\n const endDrawing = () => {\n if (!drawing) return; // prevent double calls\n\n setDrawing(false);\n setLastPoint(null);\n\n const ctx = canvasRef.current?.getContext(\"2d\");\n if (!ctx) return;\n\n ctx.closePath();\n\n if (hasDrawn) {\n emitBlob();\n }\n };\n\n /**\n * Clears the canvas and resets internal state.\n */\n const clear = () => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height); // 🧽\n setLastPoint(null);\n setHasDrawn(false); // 🧠\n setDrawing(false);\n };\n\n return {\n draw,\n canvasRef,\n endDrawing,\n startDrawing,\n clear\n };\n}","import {\n useImperativeHandle,\n} from \"react\";\n\nimport type {\n Ref\n} from \"react\";\n\nimport useInit from \"./useInit\";\nimport useDraw from './useDraw';\n\nexport interface SimpleSignatureProps {\n /**\n * Called when the user modifies the drawing; returns a blob of the new drawing\n * @param blob \n * @returns \n */\n onChange?: (blob: Blob) => void;\n /**\n * Called when the user starts drawing\n * @returns \n */\n onStart?: () => void;\n height?: number ;\n width?: number ;\n className?: string;\n ref?: Ref<SignatureRef>; \n blobFormat?: \"png\" | \"jpeg\";\n strokeColor?: `#${string}`;\n} \n\nexport interface SignatureRef {\n clear: () => void;\n}\n\n/**\n * SimpleSignature is a functional component for that captures user-drawn lines.\n * It supports mouse and touch input, emits a blob when drawing ends, and can be cleared via ref.\n */\nexport default function SimpleSignature({\n ref,\n onChange: onSignatureChange,\n height,\n width,\n className, \n blobFormat = \"png\", \n strokeColor = \"#000\",\n onStart\n}: SimpleSignatureProps) {\n\n const {\n draw, canvasRef, clear, endDrawing, startDrawing\n } = useDraw({\n onChange: onSignatureChange, blobFormat, onStart\n });\n\n useInit({\n height, width, strokeColor,canvasRef, className\n });\n\n // Expose a clear() method to parent components via ref\n useImperativeHandle(ref, () => ({\n clear\n }));\n\n return (\n <canvas\n aria-label={\n \"Signature input area. Use your mouse or touch \" +\n \"to draw your signature.\"\n }\n onMouseDown={startDrawing}\n onMouseLeave={endDrawing} // finalize drawing if pointer leaves canvas\n onMouseMove={draw}\n onMouseUp={endDrawing}\n onTouchCancel={endDrawing}\n onTouchEnd={endDrawing}\n onTouchMove={draw}\n onTouchStart={startDrawing} \n ref={canvasRef}\n style={{\n touchAction: \"none\" // prevent scrolling during touch drawing\n }}\n />\n \n );\n}\n","import {\n createElement \n} from \"react\";\nimport type {\n ComponentType, Ref, ReactElement \n} from \"react\";\nimport Inner, {\n type SimpleSignatureProps,\n type SignatureRef\n} from \"./component/SimpleSignature\";\n\n/** Public entry: accepts a React ref prop and passes it to the inner component */\nexport function SimpleSignature(\n {\n ref, ...props \n }: \n Omit<SimpleSignatureProps, \"ref\"> & {\n ref?: Ref<SignatureRef> \n }\n): ReactElement | null {\n // eslint-disable-next-line max-len\n return createElement(Inner as unknown as ComponentType<SimpleSignatureProps>, {\n ...(props as SimpleSignatureProps),\n ref\n });\n}\n\nexport type {\n SimpleSignatureProps, SignatureRef \n};"],"names":["jsxRuntimeModule","require$$0","require$$1","useEffect","useRef","useState","SimpleSignature","useImperativeHandle","jsx","createElement","Inner"],"mappings":"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","x_google_ignoreList":[0,1,2]}