{"_id":"@ahmedwalid05/react-sketch-canvas","_rev":"2-515d28b949d9fbf6ef9f6a9d71c7dd99","name":"@ahmedwalid05/react-sketch-canvas","dist-tags":{"latest":"6.0.0"},"versions":{"6.0.0":{"name":"@ahmedwalid05/react-sketch-canvas","version":"6.0.0","description":"react-sketch-canvas - Freehand vector drawing tool for React using SVG as canvas","author":{"name":"Vinoth Pandian"},"homepage":"https://vinoth.info/react-sketch-canvas","license":"MIT","repository":{"type":"git","url":"git+https://github.com/vinothpandian/react-sketch-canvas.git"},"keywords":["react-component","sketch","canvas","drawing","freehand","vector","svg-canvas","react-sketch"],"dependencies":{"immer":"^9.0.3"},"peerDependencies":{"react":">=16.4"},"main":"./react-sketch-canvas.umd.js","module":"./react-sketch-canvas.esm.js","typings":"./index.d.ts","bugs":{"url":"https://github.com/vinothpandian/react-sketch-canvas/issues"},"_id":"@ahmedwalid05/react-sketch-canvas@6.0.0","_nodeVersion":"15.0.1","_npmVersion":"7.21.0","dist":{"integrity":"sha512-o2jXy7kre+QNAkhTs8J56nN454a6eqlY+iHeHUf4l5kvZvwfUeda7Ct65FdPBV7EFuACmlZI/nMII1sAeWlKZA==","shasum":"0f2dda10a16f3c5f2ed889a8ed922da1311189cc","tarball":"https://registry.npmjs.org/@ahmedwalid05/react-sketch-canvas/-/react-sketch-canvas-6.0.0.tgz","fileCount":13,"unpackedSize":229647,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhwwMQCRA9TVsSAnZWagAAohUP/RPbLDmeFVI/M4mGtuY7\nMW0L5tZr9y/2yzJXj27jdX/unIMR8vmwU4JhZb31Z1hsSC/zKQU7NkvYCmrC\ntLYQtlvsW3Q79Lk4d/MWzw1TdUtXeQ8JSfpUwtXx8vvYFLiiHmwm1DcH8yjZ\nn1teqOAhUBc3EvJ8LvoBg6bK/DlTCcyymk/ne1+aCPCCNe0y3ohVF0yFcd20\nRXnNXTXJcWycPLGW0FBVjBzltB6gtW3K0acDeLYQ2XdhuJ2KdSKv3YdBxdjF\nPozItVlLbkTZpfailalce7pqQihgltk3mg6JamTnK4qvtWxbBIhjVLrNsZ4y\n3xz0fZPll6IH81AX97to/gpQg6hggO6PlwZMYvyi2tG4r1lZ5sdaeLT1klab\n6pIkjp6WY7mwxXN5u1W9e4vp/kyt3gKki4+/KsBqYX3vNrnmO79pdH0/ZPmX\nAZfuyuRY2szdQoTiqWAs1obmbVee1G6BqmUNzkeQ2BBc1yrI+AoWzZ9mg2L9\nsNKHv6KTP9XSSFNBMWulWlqfXLbxwQbw+VsRPrwtCPecr9kvCiBfjqpntNwD\n6lt/N5kAqSgH2WuXUYF8W7CHT9jr9bSflBNaNKnCsRvy4XS7029Q7KiDja7T\nmpr56+nqQC1S3VcP+sNZOLLSGkFBfSo/SxL8OLAsS9qkYz/X5tnqzDm/yRCD\ntX+F\r\n=jAuQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIER5XIeqRVeD1LBjWkieg7caEmOpLqKHE5yfBiMjBXuiAiA+nH6oSifKY1gDM3FyrL0vuQANLUhQQwtNtlUcHQnFvg=="}]},"_npmUser":{"name":"ahmedwalid05","email":"ahmedwalid05@gmail.com"},"directories":{},"maintainers":[{"name":"ahmedwalid05","email":"ahmedwalid05@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-sketch-canvas_6.0.0_1634503795391_0.2043128612414662"},"_hasShrinkwrap":false}},"time":{"created":"2021-10-17T20:49:55.350Z","6.0.0":"2021-10-17T20:49:55.561Z","modified":"2022-04-04T12:13:33.510Z"},"maintainers":[{"name":"ahmedwalid05","email":"ahmedwalid05@gmail.com"}],"description":"react-sketch-canvas - Freehand vector drawing tool for React using SVG as canvas","homepage":"https://vinoth.info/react-sketch-canvas","keywords":["react-component","sketch","canvas","drawing","freehand","vector","svg-canvas","react-sketch"],"repository":{"type":"git","url":"git+https://github.com/vinothpandian/react-sketch-canvas.git"},"author":{"name":"Vinoth Pandian"},"bugs":{"url":"https://github.com/vinothpandian/react-sketch-canvas/issues"},"license":"MIT","readme":"\r\n\r\n<p align=\"center\">\r\n  <img src=\"https://i.imgur.com/ajs39FC.png\" height=\"150\" alt=\"React Sketch Canvas\" />\r\n</p>\r\n<br/>\r\n<h3 align=\"center\">\r\n  Freehand vector drawing tool for React using SVG as canvas 🖌\r\n</h3>\r\n<br/>\r\n<br/>\r\n<div align=\"center\">\r\n\r\n![npm](https://img.shields.io/npm/v/react-sketch-canvas?style=flat-square) &nbsp;&nbsp; ![NPM](https://img.shields.io/npm/l/react-sketch-canvas?style=flat-square) &nbsp;&nbsp; ![npm](https://img.shields.io/npm/dm/react-sketch-canvas?style=flat-square) <br/>\r\n![npm bundle size](https://img.shields.io/bundlephobia/min/react-sketch-canvas?style=flat-square) &nbsp;&nbsp; ![npm bundle size](https://img.shields.io/bundlephobia/minzip/react-sketch-canvas?style=flat-square)\r\n<br/>\r\nThis project was generated using [Nx](https://nx.dev).\r\n\r\n</div>\r\n\r\n\r\n\r\n## Overview\r\n\r\n### Features\r\n\r\n- **Supports Desktop and Mobile.**\r\n- **Accepts input from Mouse, touch, and graphic tablets.**\r\n\r\n### Requirements\r\n\r\n- **<span style=\"color:red\">**Requires React >= 16.4**</span>**\r\n- **Depends on [Immer]**\r\n\r\n### Wanna test React Sketch Canvas before using it?\r\n\r\n- **Try [here](https://vinoth.info/react-sketch-canvas)**\r\n\r\n## Installation\r\n\r\nIf you use npm\r\n\r\n```sh\r\nnpm i react-sketch-canvas\r\n```\r\n\r\nor with yarn\r\n\r\n```sh\r\nyarn add react-sketch-canvas\r\n```\r\n\r\n## Example\r\n\r\nCommon usage example\r\n\r\n```javascript\r\nimport React from 'react';\r\nimport { ReactSketchCanvas } from 'react-sketch-canvas';\r\n\r\nconst styles = {\r\n  border: '0.0625rem solid #9c9c9c',\r\n  borderRadius: '0.25rem',\r\n};\r\n\r\nconst Canvas = () => {\r\n  return (\r\n    <ReactSketchCanvas\r\n      style={styles}\r\n      width=\"600\"\r\n      height=\"400\"\r\n      strokeWidth={4}\r\n      strokeColor=\"red\"\r\n    />\r\n  );\r\n};\r\n```\r\n\r\nTo export Data URL of your sketch use ref\r\n\r\n```javascript\r\nimport React from \"react\";\r\nimport { ReactSketchCanvas } from \"react-sketch-canvas\";\r\n\r\nconst styles = {\r\n  border: \"0.0625rem solid #9c9c9c\",\r\n  borderRadius: \"0.25rem\"\r\n};\r\n\r\nconst Canvas = class extends React.Component {\r\n  constructor(props) {\r\n    super(props);\r\n\r\n    this.canvas = React.createRef();\r\n  }\r\n\r\n  render() {\r\n    return (\r\n      <div>\r\n        <ReactSketchCanvas\r\n          ref={this.canvas}\r\n          strokeWidth={5}\r\n          strokeColor=\"black\"\r\n        />\r\n        <button\r\n          onClick={() => {\r\n            this.canvas.current.\r\n              .exportImage(\"png\")\r\n              .then(data => {\r\n                console.log(data);\r\n              })\r\n              .catch(e => {\r\n                console.log(e);\r\n              });\r\n          }}\r\n        >\r\n          Get Image\r\n        </button>\r\n      </div>\r\n    );\r\n  }\r\n};\r\n```\r\n\r\n## List of Props\r\n\r\n| Props                              | Expected datatype | Default value | Description                                                                                         |\r\n| ---------------------------------- | ----------------- | ------------- | --------------------------------------------------------------------------------------------------- |\r\n| width                              | PropTypes.string  | 100%          | canvas width (em/rem/px)                                                                            |\r\n| height                             | PropTypes.string  | 100%          | canvas width (em/rem/px)                                                                            |\r\n| className                          | PropTypes.string  | \"\"            | Class for using with CSS selectors                                                                  |\r\n| strokeColor                        | PropTypes.string  | black         | Pen color                                                                                           |\r\n| canvasColor                        | PropTypes.string  | white         | canvas color (HTML colors)                                                                          |\r\n| backgroundImage                    | PropTypes.string  | ''            | Set SVG background with image URL                                                                   |\r\n| exportWithBackgroundImage          | PropTypes.bool    | true          | Keep background image on image/SVG export (on false, canvasColor will be set as background)         |\r\n| preserveBackgroundImageAspectRatio | PropTypes.string  | none          | Set aspect ratio of the background image. For possible values check [MDN docs][preserveaspectratio] |\r\n| strokeWidth                        | PropTypes.number  | 4             | Pen stroke size                                                                                     |\r\n| eraserWidth                        | PropTypes.number  | 8             | Erase size                                                                                          |\r\n| allowOnlyPointerType               | PropTypes.string  | all           | allow pointer type (\"all\"/\"mouse\"/\"pen\"/\"touch\")                                                    |\r\n| onUpdate                           | PropTypes.func    | all           | Returns the current sketch path in `CanvasPath` type on every update                                |\r\n| style                              | PropTypes.object  | false         | Add CSS styling as CSS-in-JS object                                                                 |\r\n| withTimestamp                      | PropTypes.bool    | false         | Add timestamp to individual strokes for measuring sketching time                                    |\r\n\r\nSet SVG background using CSS [background][css-bg] value\r\n\r\nYou can specify width and height values in em or rem. It fills the parent element space if width and height are not set\r\n\r\n<br />\r\n\r\n## Methods\r\n\r\nYou can export the sketch as an image or as a svg\r\n\r\n_Use ref to access the element and call the following functions to export image_\r\n\r\n| Props                        | Expected datatype                                                                                                                                |\r\n| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |\r\n| eraseMode(boolean)           | Switch to eraser mode by passing true. You can switch back to pen mode by passing false                                                          |\r\n| clearCanvas()                | Clears the canvas.                                                                                                                               |\r\n| resetCanvas()                | Resets the canvas and clears the undo/redo stack along with it.                                                                                  |\r\n| undo()                       | Undo the last action.                                                                                                                            |\r\n| redo()                       | Redo the previous action.                                                                                                                        |\r\n| exportImage(imageTypeString) | Accepts an image type as argument (`ExportImageType`) and returns a Promise which resolves to base64 data url of the sketch.                     |\r\n| exportSvg()                  | returns a Promise which resolves to an inline SVG element.                                                                                       |\r\n| exportPaths()                | returns a Promise which resolves to an instance of `CanvasPath`.                                                                                 |\r\n| loadPaths(CanvasPath)        | Accepts an `CanvasPath` exported from exportPaths() and loads it on the canvas.                                                                  |\r\n| getSketchingTime()           | returns a Promise which resolves the time that user sketched in the canvas (considers only when the user made the strokes or erased the strokes) |\r\n\r\n## Types\r\n\r\n```ts\r\ntype ExportImageType = 'jpeg' | 'png';\r\n\r\ninterface Point {\r\n  x: number;\r\n  y: number;\r\n}\r\n\r\ninterface CanvasPath {\r\n  paths: Point[];\r\n  strokeWidth: number;\r\n  strokeColor: string;\r\n  drawMode: boolean;\r\n  startTimestamp?: number;\r\n  endTimestamp?: number;\r\n}\r\n```\r\n\r\n---\r\n\r\n## Thanks to\r\n\r\n- Philipp Spiess' [tutorial][based-on]\r\n- Draws smooth curves, thanks to François Romain's [tutorial][smooth-curve-tutorial]\r\n- Immer [link][immer]\r\n\r\n---\r\n\r\n[based-on]: https://pspdfkit.com/blog/2017/how-to-build-free-hand-drawing-using-react/\r\n[smooth-curve-tutorial]: https://medium.com/@francoisromain/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\r\n[css-bg]: https://developer.mozilla.org/en-US/docs/Web/CSS/background\r\n[immer]: https://immerjs.github.io/immer/docs/introduction\r\n[preserveaspectratio]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio","readmeFilename":"README.md"}