{"_id":"@alvinhtml/js-mind","_rev":"3-0cf7be729d7fde99c7421005f1c12aa9","name":"@alvinhtml/js-mind","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.1":{"name":"@alvinhtml/js-mind","version":"1.0.1","description":"A simple chart Library","main":"dist/index.js","scripts":{"dev":"rm -rf ./dist && webpack --mode development","start":"webpack-dev-server","lint":"npx eslint src/**/*.tsx","build":"rm -rf ./dist && webpack --mode production"},"repository":{"type":"git","url":"git+https://github.com/alvinhtml/js-mind.git"},"keywords":["js-mind","mind","web mind","tree"],"author":{"name":"alvinhtml@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/alvinhtml/js-mind/issues"},"homepage":"https://github.com/alvinhtml/js-mind#readme","devDependencies":{"@typescript-eslint/eslint-plugin":"^4.29.1","@typescript-eslint/parser":"^4.29.1","autoprefixer":"^10.3.1","css-loader":"^6.2.0","eslint":"^7.32.0","file-loader":"^6.2.0","html-minifier":"^4.0.0","html-webpack-plugin":"^5.3.2","node-sass":"^6.0.1","normalize-scss":"^7.0.1","postcss-loader":"^6.1.1","sass-loader":"^12.1.0","style-loader":"^3.2.1","ts-loader":"^9.2.5","typescript":"^4.3.5","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"^4.1.1","webpack":"^5.50.0","webpack-cli":"^4.7.2","webpack-dev-server":"^3.11.2"},"dependencies":{"hidpi-canvas":"^1.0.10"},"gitHead":"b4e230585a25327a1ee5eadcb915aac8483978b6","_id":"@alvinhtml/js-mind@1.0.1","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ToVaI4IhvGEMRSMxl/IkdA2FNYpi4NPlEPrPt3pr7Ip57fkeeVohRhcmt9v3jXDEwSlD6/j2a3B9igbZJnhaoA==","shasum":"69838f353859d447342013e9aad18cfdd7bb29f4","tarball":"https://registry.npmjs.org/@alvinhtml/js-mind/-/js-mind-1.0.1.tgz","fileCount":48,"unpackedSize":131781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhJaxoCRA9TVsSAnZWagAAZMkQAIT0Tssjrr86hd3L1OuY\n79kLNgXXYnVGJTgcuyCbWk8ZgLPJ/YsoDkrfP775DqCA+G9s5sfDYjp/WVef\n6cPRS7KgJFrMme1fujvQP5G1GMPxIbvXuVg3r7mZaOMAJB1E6CNBW41DJbEp\nq0/gCHUe/5P8L1cIQTmglUzapFDaRMy36CyRO+0iHtGNscprABRQiF4yPtXf\ngX8Cj7BqbmSMIXZ+QnHGHHxLkpDQdSs54VyO3N34TEVURXJEBoWGZZxAVJCh\nvi5jODNogvW2kwsDnKu1zaBHSWXQymGwCqXGHXz77CDEZM1ADYJWDAuHT1ZB\nd9bgciKG0+qvAtGtJLHqeq2x2ek6eCBji4604kzpnqpLNvJTxnpHHcH5WDKH\njgOb9AlVvstjM6AT/NuOtPGasQWE3MW6uWQ+HdCLdVn8o2H1HFp6r9wHUfSg\nhlTA2Hz1eW+jIqrQ5V94/cO75IXhsH9SYgKGlOCmlVKYSnwWBUvHgHOXoweA\nZRYcztxxU14prQdGAxH8MY9HbLxgw2BVDclsV29vzeMTTuF6H7jtSDl09/YZ\nK7HnmPRV1ymnOqrbilrFhWw64S9/sxl2IdDWGugdw4l6xdrWH19PZ6XjogQt\nnCrzdBCMVpHr74pDfY28QU0jKpPVCKsNaSARmq9IHUYfRDR7fkvmeNAyTt1u\nJoHS\r\n=Oq5+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA2YLoEZ2cg0DjE6P2T1MNTWibPhxKwmBhcLwm4TMoTLAiAqtxH6gpJvI+4eSSk/95SPq383/hRhk33FwQdc/yqq/g=="}]},"_npmUser":{"name":"alvinhtml","email":"alvinhtml@gmail.com"},"directories":{},"maintainers":[{"name":"alvinhtml","email":"alvinhtml@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/js-mind_1.0.1_1629858919881_0.8993904644904787"},"_hasShrinkwrap":false},"1.1.0":{"name":"@alvinhtml/js-mind","version":"1.1.0","description":"A simple chart Library","main":"dist/index.js","scripts":{"dev":"rm -rf ./dist && webpack --mode development","start":"webpack-dev-server","lint":"npx eslint src/**/*.tsx","build":"rm -rf ./dist && webpack --mode production"},"repository":{"type":"git","url":"git+https://github.com/alvinhtml/js-mind.git"},"keywords":["js-mind","mind","web mind","tree"],"author":{"name":"alvinhtml@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/alvinhtml/js-mind/issues"},"homepage":"https://github.com/alvinhtml/js-mind#readme","devDependencies":{"@types/diff":"^5.0.1","@typescript-eslint/eslint-plugin":"^4.29.1","@typescript-eslint/parser":"^4.29.1","autoprefixer":"^10.3.1","css-loader":"^6.2.0","eslint":"^7.32.0","file-loader":"^6.2.0","html-minifier":"^4.0.0","html-webpack-plugin":"^5.3.2","node-sass":"^6.0.1","normalize-scss":"^7.0.1","postcss-loader":"^6.1.1","sass-loader":"^12.1.0","style-loader":"^3.2.1","ts-loader":"^9.2.5","typescript":"^4.3.5","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"^4.1.1","webpack":"^5.58.2","webpack-cli":"^4.9.0","webpack-dev-server":"^4.3.1"},"dependencies":{"diff":"^5.0.0","hidpi-canvas":"^1.0.10"},"gitHead":"9cf46548d140e44332fe449792981757d890c1b5","_id":"@alvinhtml/js-mind@1.1.0","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","dist":{"integrity":"sha512-jChHlcLNo6NaLQOlOg01JoqueMw/ol7Ni0uIQmgBd9mAdn8OwVPgKTFjbMWCxLYhx4MwPTbIwEIzhf8gw+jYiQ==","shasum":"8cad979c05c343942d5a30136a4d7c231179cad5","tarball":"https://registry.npmjs.org/@alvinhtml/js-mind/-/js-mind-1.1.0.tgz","fileCount":56,"unpackedSize":602340,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhzFG/CRA9TVsSAnZWagAAyCMQAJZ9afEt6BVf114BJsDI\nkd4l05m5NWmMlm+owaudyNz/sonMOmc7dGJuIZ3TTYsYpQ0mQQZjAH30cKX1\n1Fxd/vr5raPD1cJ1WS4U1FR8hVubTQoFwKCc5KVL8UECmAarA96VhDk98SC+\nrJcuQ0/2ex2a2JcA3W6BtergF2NuYbVJuY1nAylFUNuGxvur14xWkq2NOaTx\nYlzrAJVp18YRGT8krd9gNRKbwhIYbnm4NmOpQ+O9l3ICWxNu2JSgE4cNktwd\niN53RUSjrZ/+y5SvF5V/31TVBeuBsI+3pylUkxMof2I3I1Qu7wp1JlhQyvof\nVc9py2gCFKf1Qwe7/UiAqp6aRQNZZZE9o8c4wmAfTWVNswbLrSaPg71yKviO\nWqfGjTaCPG31hDCuVuRV/QCnhrV0BNgJvAId/TWqltcukXE4Z9sgWVjFLZDS\n3Tl9rpd+TZ4mWGYK/4Bik/DFbn/pj5JUIxMc495FX9qRbpqyM1rGuyp404/M\ntMTyWCeoAwguLnlSvScMteQ9eM3LKBICKQQYaglqTwKu0Ahhju+1eGzWJF0A\nzGcGi1Q8eT/Al8V8Uty80i8w+6M2QOhc6w9NDl81vvLVYueHJ1Cy818hPO+U\nB0HNqBzagidq4abiibL1IrG9QgCRdLuwBnIWtzdimpxWGTVkyhsy3MbnTajV\nk10I\r\n=WlsH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCFAYvSO+4WlRrd6/Y6HDKSXvMe6uvzWHiac18Fjxv4eAIhAMlJim2uQsaOTW32jzChp1MRYaMPvJ7gF+GOJIKkSuPU"}]},"_npmUser":{"name":"alvinhtml","email":"alvinhtml@gmail.com"},"directories":{},"maintainers":[{"name":"alvinhtml","email":"alvinhtml@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/js-mind_1.1.0_1635908347286_0.4541278819380432"},"_hasShrinkwrap":false}},"time":{"created":"2021-08-25T02:35:19.814Z","1.0.1":"2021-08-25T02:35:20.071Z","modified":"2022-04-04T13:41:50.907Z","1.1.0":"2021-11-03T02:59:07.465Z"},"maintainers":[{"name":"alvinhtml","email":"alvinhtml@gmail.com"}],"description":"A simple chart Library","homepage":"https://github.com/alvinhtml/js-mind#readme","keywords":["js-mind","mind","web mind","tree"],"repository":{"type":"git","url":"git+https://github.com/alvinhtml/js-mind.git"},"author":{"name":"alvinhtml@gmail.com"},"bugs":{"url":"https://github.com/alvinhtml/js-mind/issues"},"license":"MIT","readme":"# js-mind\n\n\n## Development\n\n- Install npm packages\n\n```\nnpm install\n```\n\n- Launch dev server\n\n```\nnpm run start\n```\n\n- Build\n\n```\nnpm run build\n```\n\n## 演示\n\n- [树图](http://example.alvinhtml.com/js-mind/example/tree.html)\n- [流程图](http://example.alvinhtml.com/js-mind/example/mind.html)\n\n## Install js-mind\n\n```bash\nnpm install js-mind --save\n```\n\n## 部分功能实现思路\n\n### Mind\n\nMind 类提供对外接口，维护节点树，并调用其它类完成相关工作\n\n### Stage\n\nStage 类主要功能：\n\n- 画布管理：维护画布的宽高、缩放比例、偏移位置等信息\n- 事件管理：添加不同类型的事件，储存回调函数\n\n### Scene\n\nScene 类主要功能：\n\n- 绘制管理\n- 画笔状态管理\n\n### Node\n\nNode 和其派生类主要功能：\n\n- 节点绘制\n- 事件检测：检测鼠标事件的坐标是否在自身宽高以内，如果是，调用 Stage 中对应的事件回调函数\n- 动画管理：主要是节点属性的动态更新\n\n### Liner\n\n- 线条管理\n- 不同类型的线条绘制\n- 缓存线条，线条绘制比较耗费性能，解决思路如下\n  - 当没有缓存的时候，绘制所有线条到 CanvasA, 并缓存 CanvasA\n  - 当有缓存的时候，将缓存的 CanvasA 绘制到主 Canvas\n  - 节点树发生变化时清除 CanvasA 缓存\n\n### Undo 类\n\n实现撤销重做功能\n\n- 用户更新节点树时，通过 `diff` 算出前后节点树对应的 `data` 差异，并保存为 Step\n- 用户撤销重做，根据当前节点树和 Step 做对比，还原出前一步或后一步的 `data`\n- 更新 `data` 并重绘\n","readmeFilename":"README.md"}