[
  {
    "path": ".editorconfig",
    "content": "# http://editorconfig.org\nroot = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\nindent_style = space\nindent_size = 4\ninsert_final_newline = true\nmax_line_length = 80\ntrim_trailing_whitespace = true\n\n[{package.json,.travis.yml}]\nindent_style = space\nindent_size = 4\n\n[*.svelte]\nindent_style = space\nindent_size = 2\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "content": "## Environments\n* Framework name:\n* Framework version:\n* Component name: \n* Component version:\n* Testable Address(optional): \n\n## Description\n<!-- Let me know your situation -->\n"
  },
  {
    "path": ".gitignore",
    "content": "node_modules/\n*.DS_Store\n.DS_Store\ndoc/\ndist/\ndemo/dist/\npackages/*/dist/\nrelease/\nnpm-debug.log*\ncoverage/\njsdoc/\ndoc/\noutjs/\ndeclaration/\nbuild/\n.vscode/\nrollup-plugin-visualizer/\nstatistics/\n.scene_cache\n*.mp4\n"
  },
  {
    "path": ".npmignore",
    "content": "node_modules/\n*.DS_Store\n.DS_Store\ndoc/\ntemplate/\nexample/\nkarma.conf.js\ntest/\nmocha.opts\nGruntfile.js\nwebpack.*.js\n.travis.yml\npackages\nrelease/\ndemo/\ncoverage/\ndist/report.html\nrollup-plugin-visualizer/\noutjs/\n.scene_cache\n*.mp3\n*.mp4"
  },
  {
    "path": ".yarnrc",
    "content": "workspaces-experimental true\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://conventionalcommits.org) for commit guidelines.\n\n## [0.29.2](https://github.com/daybrush/guides/compare/0.29.1...0.29.2) (2023-07-29)\n### :sparkles: Packages\n* `croact-guides` 0.26.2\n* `@scena/guides` 0.29.2\n* `preact-guides` 0.28.2\n* `@scena/react-guides` 0.28.2\n* `svelte-guides` 0.28.2\n* `vue-guides` 0.28.2\n* `vue3-guides` 0.12.2\n* `ngx-guides` 0.28.2\n\n\n### :bug: Bug Fix\n\n* `@scena/react-guides`\n    * remove console.log #71 ([ebe4518](https://github.com/daybrush/guides/commit/ebe451868f594f0afd4d040bc7f054bce50e4e97))\n\n\n### :mega: Other\n\n* All\n    * publish packages ([9b659fe](https://github.com/daybrush/guides/commit/9b659fe71eb2fcb53b731e88b1561a0b18b9fcdc))\n\n\n\n## [0.29.1](https://github.com/daybrush/guides/compare/0.29.0...0.29.1) (2023-07-23)\n### :sparkles: Packages\n* `croact-guides` 0.26.1\n* `@scena/guides` 0.29.1\n* `preact-guides` 0.28.1\n* `@scena/react-guides` 0.28.1\n* `svelte-guides` 0.28.1\n* `vue-guides` 0.28.1\n* `vue3-guides` 0.12.1\n* `ngx-guides` 0.28.1\n\n\n### :bug: Bug Fix\n\n* `@scena/react-guides`\n    * fix guides zoom #83 ([207f218](https://github.com/daybrush/guides/commit/207f218266968c0a206df10a0732312e3a6508de))\n\n\n### :mega: Other\n\n* All\n    * publish packages ([73e2427](https://github.com/daybrush/guides/commit/73e24270c27eec1f30cc051fe84569e79f85822c))\n\n\n\n## [0.29.0](https://github.com/daybrush/guides/compare/0.28.0...0.29.0) (2023-07-22)\n### :sparkles: Packages\n* `croact-guides` 0.26.0\n* `@scena/guides` 0.29.0\n* `preact-guides` 0.28.0\n* `@scena/react-guides` 0.28.0\n* `svelte-guides` 0.28.0\n* `vue-guides` 0.28.0\n* `vue3-guides` 0.12.0\n* `ngx-guides` 0.28.0\n\n\n### :rocket: New Features\n\n* `@scena/react-guides`\n    * add `guidesZoom` prop #83 ([42694cc](https://github.com/daybrush/guides/commit/42694cc48173a31df52e430697a43dfe2569426b))\n\n\n### :mega: Other\n\n* All\n    * publish packages ([324f848](https://github.com/daybrush/guides/commit/324f848e0bae231c82b33be29ee2534d58a6d6b1))\n\n\n\n## [0.28.0](https://github.com/daybrush/guides/compare/0.27.0...0.28.0) (2023-06-02)\n### :sparkles: Packages\n* `croact-guides` 0.25.0\n* `@scena/guides` 0.28.0\n* `preact-guides` 0.27.0\n* `@scena/react-guides` 0.27.0\n* `svelte-guides` 0.27.0\n* `vue-guides` 0.27.0\n* `vue3-guides` 0.11.0\n* `ngx-guides` 0.27.0\n\n\n### :rocket: New Features\n\n* `preact-guides`, `croact-guides`, `@scena/react-guides`\n    * update ruler and add drawRuler method ([20b1182](https://github.com/daybrush/guides/commit/20b1182c3e8c93980418f34e1360cb4c81a2a0d3))\n\n\n### :mega: Other\n\n* All\n    * publish packages ([53d07f3](https://github.com/daybrush/guides/commit/53d07f3e31011ee6bff1a2558380dc6e61e98337))\n\n\n\n## [0.27.0](https://github.com/daybrush/guides/compare/0.26.5...0.27.0) (2023-06-01)\n### :sparkles: Packages\n* `croact-guides` 0.24.0\n* `@scena/guides` 0.27.0\n* `preact-guides` 0.26.0\n* `@scena/react-guides` 0.26.0\n* `svelte-guides` 0.26.0\n* `vue-guides` 0.26.0\n* `vue3-guides` 0.10.0\n* `ngx-guides` 0.26.0\n\n\n### :rocket: New Features\n\n* `preact-guides`, `croact-guides`, `@scena/react-guides`, `@scena/guides`\n    * update ruler and modules ([f528ce4](https://github.com/daybrush/guides/commit/f528ce4c7ef6dd554112a7b86a0f7449d7cd230f))\n* `svelte-guides`\n    * support svelte types ([a401a7a](https://github.com/daybrush/guides/commit/a401a7a4f1325e8364aef55d1728a27167dc1c91))\n\n\n### :mega: Other\n\n* All\n    * publish packages ([d038e92](https://github.com/daybrush/guides/commit/d038e92046e55f0f65f4ddde24f12ed117fd64e2))\n\n\n\n## [0.26.5](https://github.com/daybrush/guides/compare/0.26.4...0.26.5) (2023-05-16)\n### :sparkles: Packages\n* `croact-guides` 0.23.3\n* `@scena/guides` 0.26.5\n* `preact-guides` 0.25.3\n* `@scena/react-guides` 0.25.3\n* `svelte-guides` 0.25.5\n* `vue-guides` 0.25.5\n* `vue3-guides` 0.9.5\n* `ngx-guides` 0.25.5\n\n\n### :bug: Bug Fix\n\n* `preact-guides`, `croact-guides`\n    * update css-styled version ([7327395](https://github.com/daybrush/guides/commit/7327395786810c872f53678d47602b80db127197))\n\n\n### :mega: Other\n\n* All\n    * publish packages ([78ed8c7](https://github.com/daybrush/guides/commit/78ed8c708759927cabeb53b8c607fc6f54324371))\n\n\n\n## [0.26.4](https://github.com/daybrush/guides/compare/0.26.2...0.26.4) (2023-05-15)\n### :sparkles: Packages\n* `croact-guides` 0.23.2\n* `@scena/guides` 0.26.4\n* `preact-guides` 0.25.2\n* `@scena/react-guides` 0.25.2\n* `svelte-guides` 0.25.4\n* `vue-guides` 0.25.4\n* `vue3-guides` 0.9.4\n* `ngx-guides` 0.25.4\n\n\n### :rocket: New Features\n\n* `preact-guides`, `croact-guides`, `@scena/react-guides`, `@scena/guides`\n    * update depency modules ([21b67a8](https://github.com/daybrush/guides/commit/21b67a80dfd61183e175d9ac6c64502c092aba74))\n\n\n### :bug: Bug Fix\n\n* `@scena/guides`\n    * fix containerProvider #81 ([d12a0b2](https://github.com/daybrush/guides/commit/d12a0b213adac199f61358f71a0787f1d05208ba))\n\n\n### :mega: Other\n\n* All\n    * publish packages ([1898b89](https://github.com/daybrush/guides/commit/1898b895d5c812a5fd77d99a5928f7e420152772))\n* `vue3-guides`, `vue-guides`, `svelte-guides`, `ngx-guides`, `@scena/guides`\n    * update packages ([d8db884](https://github.com/daybrush/guides/commit/d8db884cdf43c19f77ad9c5721d3a466808853c3))\n\n\n\n## [0.26.2](https://github.com/daybrush/guides/compare/0.26.0...0.26.2) (2023-05-07)\n### :sparkles: Packages\n* `croact-guides` 0.23.1\n* `@scena/guides` 0.26.2\n* `preact-guides` 0.25.1\n* `@scena/react-guides` 0.25.1\n* `svelte-guides` 0.25.2\n* `vue-guides` 0.25.2\n* `vue3-guides` 0.9.2\n* `ngx-guides` 0.25.2\n\n\n### :bug: Bug Fix\n\n* `@scena/guides`\n    * fix not triggered events #80 ([a8acea3](https://github.com/daybrush/guides/commit/a8acea31ceb22a89055e117c67e4d122e4cb52ac))\n* `@scena/react-guides`\n    * fix resize observer ([29cf3b0](https://github.com/daybrush/guides/commit/29cf3b076abf7095fd22c65f6a2baf9ac70287cb))\n\n\n### :mega: Other\n\n* All\n    * publish packages ([e1fb57c](https://github.com/daybrush/guides/commit/e1fb57c59a4a8e6b3e55ffb68cfea64760270288))\n* `vue3-guides`, `vue-guides`, `svelte-guides`, `ngx-guides`, `croact-guides`, `@scena/guides`\n    * update croact version ([2fd28db](https://github.com/daybrush/guides/commit/2fd28dbbfd648b8ee6fee39f3972057fce580ae0))\n\n\n\n## [0.26.0](https://github.com/daybrush/guides/compare/0.25.0...0.26.0) (2023-04-12)\n### :sparkles: Packages\n* `croact-guides` 0.23.0\n* `@scena/guides` 0.26.0\n* `preact-guides` 0.25.0\n* `@scena/react-guides` 0.25.0\n* `svelte-guides` 0.25.0\n* `vue-guides` 0.25.0\n* `vue3-guides` 0.9.0\n* `ngx-guides` 0.25.0\n\n\n### :rocket: New Features\n\n* `croact-guides`, `@scena/react-guides`\n    * add resize cursor ([85fb038](https://github.com/daybrush/guides/commit/85fb038c910e9c6c6f7432ad64acf54eaac1d0eb))\n* `@scena/react-guides`\n    * add defaultGuidesPos prop ([a7d31ea](https://github.com/daybrush/guides/commit/a7d31eacc9ecc429fc0aa3cf6e909eb02047acba))\n\n\n### :bug: Bug Fix\n\n* `svelte-guides`\n    * fix svelte main field ([9157cef](https://github.com/daybrush/guides/commit/9157cef04c3688b7d14596043c5ad774f9aa5179))\n\n\n### :mega: Other\n\n* All\n    * publish packages ([548990d](https://github.com/daybrush/guides/commit/548990d8577ffe565b8605f74edd9eb5a6519deb))\n\n\n\n## [0.25.0](https://github.com/daybrush/guides/compare/0.24.0...0.25.0) (2023-04-06)\n### :sparkles: Packages\n* `croact-guides` 0.22.0\n* `@scena/guides` 0.25.0\n* `preact-guides` 0.24.0\n* `@scena/react-guides` 0.24.0\n* `svelte-guides` 0.24.0\n* `vue-guides` 0.24.0\n* `vue3-guides` 0.8.0\n* `ngx-guides` 0.24.0\n\n\n### :rocket: New Features\n\n* All\n    * add croact-guides ([a7be435](https://github.com/daybrush/guides/commit/a7be435704e24b6d80af80e069a6cc4047d645bc))\n\n\n### :memo: Documentation\n\n* `ngx-guides`\n    * fix Angular README #79 ([4f8b64d](https://github.com/daybrush/guides/commit/4f8b64d1a36e496431e785ea2d2e0cb18b94d9c4))\n\n\n### :mega: Other\n\n* All\n    * publish packages ([f30e2ba](https://github.com/daybrush/guides/commit/f30e2bad78e1bc02307c8dde8cb1b69ecccdf116))\n\n\n\n## [0.24.0](https://github.com/daybrush/guides/compare/0.23.3...0.24.0) (2023-03-04)\n### :sparkles: Packages\n* `@scena/guides` 0.24.0\n* `preact-guides` 0.23.0\n* `react-compat-guides` 0.21.0\n* `@scena/react-guides` 0.23.0\n* `svelte-guides` 0.23.0\n* `vue-guides` 0.23.0\n* `vue3-guides` 0.7.0\n* `ngx-guides` 0.23.0\n\n\n### :rocket: New Features\n\n* `react-compat-guides`, `preact-guides`, `@scena/react-guides`\n    * update ruler ([f59fa59](https://github.com/daybrush/guides/commit/f59fa5988f3c4dd96925677ca787e4fb55b150f1))\n\n\n### :bug: Bug Fix\n\n* `@scena/react-guides`\n    * update Guides.tsx (#75) ([a11951c](https://github.com/daybrush/guides/commit/a11951c622818d2d80aa47d45dae9fc4379fc2c2))\n\n\n### :memo: Documentation\n\n* `@scena/react-guides`\n    * fix type docs ([a5946eb](https://github.com/daybrush/guides/commit/a5946eb64d86079fb5f17810f9f511bc78802e1c))\n\n\n### :mega: Other\n\n* All\n    * publish packages ([1afbe1d](https://github.com/daybrush/guides/commit/1afbe1d193cf2457dc9f3296b73d38b5859c0ee0))\n\n\n\n## [0.23.3](https://github.com/daybrush/guides/compare/0.23.2...0.23.3) (2023-02-04)\n### :sparkles: Packages\n* `@scena/guides` 0.23.3\n* `preact-guides` 0.22.3\n* `react-compat-guides` 0.20.3\n* `@scena/react-guides` 0.22.3\n* `svelte-guides` 0.22.3\n* `vue-guides` 0.22.3\n* `vue3-guides` 0.6.3\n* `ngx-guides` 0.22.3\n\n\n### :bug: Bug Fix\n\n* `@scena/react-guides`\n    * added missing Guide Options Properties (#73) ([182c6c3](https://github.com/daybrush/guides/commit/182c6c39f5bf1bba19486b84f7db1f1327fc989d))\n    * fix typo ([b58e3a7](https://github.com/daybrush/guides/commit/b58e3a7c7adab44e7a9228f1dfe783996182c1e6))\n\n\n### :mega: Other\n\n* All\n    * publish packages ([ae0d147](https://github.com/daybrush/guides/commit/ae0d14738d83b4f5352463b69f89efe7cc111baf))\n\n\n\n## [0.23.2](https://github.com/daybrush/guides/compare/0.23.1...0.23.2) (2023-01-29)\n### :sparkles: Packages\n* `@scena/guides` 0.23.2\n* `preact-guides` 0.22.2\n* `react-compat-guides` 0.20.2\n* `@scena/react-guides` 0.22.2\n* `svelte-guides` 0.22.2\n* `vue-guides` 0.22.2\n* `vue3-guides` 0.6.2\n* `ngx-guides` 0.22.2\n\n\n### :bug: Bug Fix\n\n* `@scena/react-guides`\n    * fix missing property #72 ([b14c179](https://github.com/daybrush/guides/commit/b14c17987e9305fb9cc8d5d59318179f00d33693))\n\n\n### :mega: Other\n\n* All\n    * publish packages ([0f7949a](https://github.com/daybrush/guides/commit/0f7949a9954e2093d6a599dc545f988ed624d41f))\n\n\n\n## [0.23.1](https://github.com/daybrush/guides/compare/0.23.0...0.23.1) (2023-01-29)\n### :sparkles: Packages\n* `@scena/guides` 0.23.1\n* `preact-guides` 0.22.1\n* `react-compat-guides` 0.20.1\n* `@scena/react-guides` 0.22.1\n* `svelte-guides` 0.22.1\n* `vue-guides` 0.22.1\n* `vue3-guides` 0.6.1\n* `ngx-guides` 0.22.1\n\n\n### :bug: Bug Fix\n\n* `@scena/react-guides`\n    * remove console.log ([c1c55b7](https://github.com/daybrush/guides/commit/c1c55b7965edb34a1ad83f9b03886ba5a52a4c92))\n\n\n### :mega: Other\n\n* All\n    * publish packages ([ab753c1](https://github.com/daybrush/guides/commit/ab753c1c820463c1c0b7805d428c803c5eacc1e3))\n\n\n\n## [0.23.0](https://github.com/daybrush/guides/compare/0.22.0...0.23.0) (2023-01-29)\n### :sparkles: Packages\n* `@scena/guides` 0.23.0\n* `preact-guides` 0.22.0\n* `react-compat-guides` 0.20.0\n* `@scena/react-guides` 0.22.0\n* `svelte-guides` 0.22.0\n* `vue-guides` 0.22.0\n* `vue3-guides` 0.6.0\n* `ngx-guides` 0.22.0\n\n\n### :rocket: New Features\n\n* `@scena/react-guides`\n    * add zoomTo prop #62 ([ac19fee](https://github.com/daybrush/guides/commit/ac19fee790aee7a984beec551e1873dba8ef4d9f))\n\n\n### :mega: Other\n\n* All\n    * publish packages ([6f83fa0](https://github.com/daybrush/guides/commit/6f83fa0c75f494aa79fff98f4a57f86ab295b67d))\n\n\n\n## [0.22.0](https://github.com/daybrush/guides/compare/0.21.1...0.22.0) (2023-01-28)\n### :sparkles: Packages\n* `@scena/guides` 0.22.0\n* `preact-guides` 0.21.0\n* `react-compat-guides` 0.19.0\n* `@scena/react-guides` 0.21.0\n* `svelte-guides` 0.21.0\n* `vue-guides` 0.21.0\n* `vue3-guides` 0.5.0\n* `ngx-guides` 0.21.0\n\n\n### :rocket: New Features\n\n* `@scena/react-guides`\n    * add guidesOffset prop #49 ([6335663](https://github.com/daybrush/guides/commit/6335663a713bf0d9e312757e9e082f62d79cd9e7))\n\n\n### :bug: Bug Fix\n\n* `@scena/react-guides`\n    * fix remove index #9 ([54907a3](https://github.com/daybrush/guides/commit/54907a38e036973c2dbe07266bfc3bdf633676c6))\n\n\n### :mega: Other\n\n* All\n    * publish packages ([9473e84](https://github.com/daybrush/guides/commit/9473e8464fbd4c374ac6251ff995586afd163719))\n\n\n\n## [0.21.1](https://github.com/daybrush/guides/compare/0.21.0...0.21.1) (2023-01-27)\n### :sparkles: Packages\n* `@scena/guides` 0.21.1\n* `preact-guides` 0.20.1\n* `react-compat-guides` 0.18.1\n* `@scena/react-guides` 0.20.1\n* `svelte-guides` 0.20.1\n* `vue-guides` 0.20.1\n* `vue3-guides` 0.4.1\n* `ngx-guides` 0.20.1\n\n\n### :mega: Other\n\n* All\n    * publish packages ([628b944](https://github.com/daybrush/guides/commit/628b9444bb9e6f5546c7a5edd55a090126f52dd5))\n\n\n\n## [0.21.0](https://github.com/daybrush/guides/compare/0.20.0...0.21.0) (2023-01-20)\n### :sparkles: Packages\n* `@scena/guides` 0.21.0\n* `preact-guides` 0.20.0\n* `react-compat-guides` 0.18.0\n* `@scena/react-guides` 0.20.0\n* `svelte-guides` 0.20.0\n* `vue-guides` 0.20.0\n* `vue3-guides` 0.4.0\n* `ngx-guides` 0.20.0\n\n\n### :rocket: New Features\n\n* `react-compat-guides`, `@scena/react-guides`\n    * add getGuideScrollPos, getRulerScrollPos ([9687c89](https://github.com/daybrush/guides/commit/9687c89598ab9136c6d26cb06ebba2ca45dc26ae))\n\n\n### :bug: Bug Fix\n\n* `vue3-guides`, `vue-guides`, `svelte-guides`, `react-compat-guides`, `preact-guides`, `@scena/react-guides`, `@scena/guides`\n    * fix files field #67 ([28bf5b3](https://github.com/daybrush/guides/commit/28bf5b3bd97cebd94eaf2195f0e99750f14e7ecb))\n* `ngx-guides`, `@scena/react-guides`\n    * fix missing guideStyle prop #69 ([1520b89](https://github.com/daybrush/guides/commit/1520b896c29a2f11d96d55d2dbf51c0c06d9a113))\n* `@scena/react-guides`\n    * fix base class names ([25e00d0](https://github.com/daybrush/guides/commit/25e00d08a9e1410134ba6b352ae722af57f5ff38))\n    * fix dragScroll #68 ([62f7871](https://github.com/daybrush/guides/commit/62f787157fff4a3ea95c2a840fcb94a6f03ad6bb))\n    * fix first defaultGuides prop ([b07ea2e](https://github.com/daybrush/guides/commit/b07ea2ee9a2f5485a2468323a1e23cfda788163b))\n    * fix types #63 ([ee8706f](https://github.com/daybrush/guides/commit/ee8706f2598045e7693bcb4119a2754c1cb81701))\n\n\n### :mega: Other\n\n* All\n    * publish packages ([095e7c6](https://github.com/daybrush/guides/commit/095e7c670d3bd0bdc168e2f3c11b5dbb8074b26b))\n    * publish packages ([1daa6ea](https://github.com/daybrush/guides/commit/1daa6ea441f6c96b8f354953605cd6ac89117878))\n    * publish packages ([e143c21](https://github.com/daybrush/guides/commit/e143c2175309bf480ef17731321f6728b8d6bcc2))\n    * publish packages ([ce2037a](https://github.com/daybrush/guides/commit/ce2037a18f5f6bbcd750e1fd72cbfc60e3f2c217))\n    * publish packages ([0abcba2](https://github.com/daybrush/guides/commit/0abcba24e8b83ea51cf369124e8c2d85fee1ef7e))\n\n\n\n## [0.20.0](https://github.com/daybrush/guides/compare/0.19.0...0.20.0) (2022-11-13)\n### :sparkles: Packages\n* `@scena/guides` 0.20.0\n* `preact-guides` 0.19.0\n* `react-compat-guides` 0.17.0\n* `@scena/react-guides` 0.19.0\n* `svelte-guides` 0.19.0\n* `vue-guides` 0.19.0\n* `vue3-guides` 0.3.0\n* `ngx-guides` 0.19.0\n\n\n### :rocket: New Features\n\n* All\n    * add scrollOptions #64 ([e0dc92a](https://github.com/daybrush/guides/commit/e0dc92a9ed417dff071b43a68b065907f8f1b8ad))\n* `@scena/react-guides`\n    * add getElement method, index property #63 #66 ([627cd2b](https://github.com/daybrush/guides/commit/627cd2bdeb15aeeb41171e5318edc6c4a20ffc7a))\n\n\n### :bug: Bug Fix\n\n* `vue-guides`, `svelte-guides`, `react-compat-guides`, `preact-guides`, `@scena/react-guides`, `@scena/guides`\n    * update dependencies ([054e101](https://github.com/daybrush/guides/commit/054e101d1b177bdfefab74bf440a4cb3cf8137be))\n* `react-compat-guides`, `preact-guides`, `ngx-guides`, `@scena/react-guides`, `@scena/guides`\n    * fix scroll event name ([6eba67b](https://github.com/daybrush/guides/commit/6eba67b33c0de50e1c68ff75882889227db663bc))\n* `@scena/react-guides`\n    * fix same pos guideline #65 ([94a7b6a](https://github.com/daybrush/guides/commit/94a7b6af76128782fe3e1fa6d5ae3d5ff70b8276))\n\n\n### :memo: Documentation\n\n*  added a new reference (#54) ([492f72a](https://github.com/daybrush/guides/commit/492f72a2d66f2f28d8c48d8603acba3b1525bedf))\n\n\n### :mega: Other\n\n* All\n    * publish packages ([9cc8e3a](https://github.com/daybrush/guides/commit/9cc8e3ae5f83aa1513c1560166c6babbbe31dfd7))\n\n\n\n## [0.19.0](https://github.com/daybrush/guides/compare/0.18.2...0.19.0) (2022-09-21)\n### :sparkles: Packages\n* `@scena/guides` 0.19.0\n* `preact-guides` 0.18.0\n* `react-compat-guides` 0.16.0\n* `@scena/react-guides` 0.18.0\n* `svelte-guides` 0.18.0\n* `vue-guides` 0.18.0\n* `vue3-guides` 0.2.0\n* `ngx-guides` 0.18.0\n\n\n### :rocket: New Features\n\n* `react-compat-guides`, `preact-guides`, `@scena/react-guides`\n    * set zoom dynamically by nextZoom ([b35f2cb](https://github.com/daybrush/guides/commit/b35f2cb5bc5a8606e8494e0e2bf528577cae1393))\n\n\n### :mega: Other\n\n* All\n    * apply lerna ([63f4f1f](https://github.com/daybrush/guides/commit/63f4f1ff447c52d96e91d289d56414a2e84687f8))\n    * publish packages ([83de3e4](https://github.com/daybrush/guides/commit/83de3e4ae4bad11905939a44dfa2776fe7d6987d))\n* Other\n    * Release 0.18.2 ([e8fde6e](https://github.com/daybrush/guides/commit/e8fde6e5b9076ed3137f2d071b03d7f939182099))\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019 Daybrush\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "README.md",
    "content": "\n\n<p align=\"middle\" ><img src=\"https://raw.githubusercontent.com/daybrush/guides/master/demo/images/guides.png\"/></p>\n<h2 align=\"middle\">Guides</h2>\n<p align=\"middle\">\n<a href=\"https://www.npmjs.com/package/@scena/guides\" target=\"_blank\"><img src=\"https://img.shields.io/npm/v/@scena/guides.svg?style=flat-square&color=007acc&label=version\" alt=\"npm version\" /></a>\n<img src=\"https://img.shields.io/badge/language-typescript-blue.svg?style=flat-square\"/>\n<a href=\"https://github.com/daybrush/guides/blob/master/LICENSE\" target=\"_blank\"><img src=\"https://img.shields.io/github/license/daybrush/guides.svg?style=flat-square&label=license&color=08CE5D\"/></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/react-guides\" target=\"_blank\"><img alt=\"React\" src=\"https://img.shields.io/static/v1.svg?label=&message=React&style=flat-square&color=61daeb\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/preact-guides\" target=\"_blank\"><img alt=\"Preact\" src=\"https://img.shields.io/static/v1.svg?label=&message=Preact&style=flat-square&color=673ab8\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/ngx-guides\" target=\"_blank\"><img alt=\"Angular\" src=\"https://img.shields.io/static/v1.svg?label=&message=Angular&style=flat-square&color=C82B38\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/vue-guides\" target=\"_blank\"><img\n    alt=\"Vue\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Vue2&style=flat-square&color=3fb984\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/vue3-guides\" target=\"_blank\"><img\n    alt=\"Vue3\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Vue3&style=flat-square&color=3fb984\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\" target=\"_blank\"><img\n    alt=\"Svelte\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Svelte&style=flat-square&color=C82B38\"></a>\n</p>\n<p align=\"middle\">A Guides component that can draw ruler and manage guidelines.</p>\n<p align=\"middle\">\n    <a href=\"https://daybrush.com/guides\" target=\"_blank\"><strong>Demo</strong></a> /\n    <a href=\"https://daybrush.com/guides/release/latest/doc/\" target=\"_blank\"><strong>API</strong></a> /\n    <a href=\"https://github.com/daybrush/ruler\" target=\"_blank\"><strong>Ruler</strong></a> /\n    <a href=\"https://github.com/daybrush/scena\" target=\"_blank\"><strong>Main Project</strong></a>\n</p>\n\n\n## ⚙️ Installation\n### npm\n```sh\n$ npm i @scena/guides\n```\n\n### scripts\n```html\n<script src=\"//daybrush.com/guides/release/latest/dist/guides.min.js\"></script>\n```\n\n## 🚀 How to use\n```tsx\n\nimport Guides from \"@scena/guides\";\n\nconst guides = new Guides(document.body, {\n    type: \"horizontal\",\n}).on(\"changeGuides\", e => {\n    console.log(e.guides);\n});\n\n\nlet scrollX = 0;\nlet scrollY = 0;\nwindow.addEventListener(\"resize\", () => {\n    guides.resize();\n});\n\nwindow.addEventListener(\"wheel\", e => {\n    scrollX += e.deltaX;\n    scrollY += e.deltaY;\n\n    guides.scrollGuides(scrollY);\n    guides.scroll(scrollX);\n});\n\n```\n\n### Ruler Units\n\nThe default unit is px, and a line is drawn every 50px. If you want to use a different unit instead of the px unit, use it like this:\n\n* 1px (Default)\n    * zoom: 1\n    * unit: 50 (every 50px)\n* 1cm = 37.7952px\n    * zoom: 37.7952\n    * unit: 1 (every 1cm)\n* 1in = 96px = 2.54cm\n    * zoom: 96\n    * unit: 1 (every 1in)\n\nSee: \n- https://www.w3schools.com/cssref/css_units.asp\n- https://www.scaler.com/topics/css/css-units/\n\n\n## ⚙️ Developments\nThe `guides` repo is managed as a [monorepo](https://github.com/lerna/lerna) with `yarn`.\n\n```sh\nyarn config set registry https://registry.npmjs.org/\n```\n\n\n## ⭐️ Show Your Support\nPlease give a ⭐️ if this project helped you!\n\n## 👏 Contributing\n\nIf you have any questions or requests or want to contribute to `guides` or other packages, please write the [issue](https://github.com/daybrush/guides/issues) or give me a Pull Request freely.\n\n## 🐞 Bug Report\n\nIf you find a bug, please report to us opening a new [Issue](https://github.com/daybrush/guides/issues) on GitHub.\n\n\n## 📝 License\n\nThis project is [MIT](https://github.com/daybrush/guides/blob/master/LICENSE) licensed.\n\n```\nMIT License\n\nCopyright (c) 2019 Daybrush\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```\n"
  },
  {
    "path": "config/update-type-consts.js",
    "content": "const path = require(\"path\");\nconst { convertProperties } = require(\"@daybrush/release/angular\");\nconst { PROPERTIES, EVENTS } = require(\"../packages/react-guides/dist/guides.cjs.js\");\n\nconvertProperties(\n    {\n        ANGULAR_GUIDES_INPUTS: PROPERTIES,\n        ANGULAR_GUIDES_OUTPUTS: EVENTS,\n    },\n    [\n        path.resolve(__dirname, \"../packages/ngx-guides/projects/ngx-guides/src/public-api.ts\"),\n    ],\n);\n"
  },
  {
    "path": "demo/index.css",
    "content": "@import url(\"https://fonts.googleapis.com/css?family=Open+Sans:300,400,600&display=swap\");\n@import url(\"https://fonts.googleapis.com/css?family=Roboto:100&display=swap\");\nhtml, body {\n    font-family: \"Open Sans\", sans-serif;\n    position: relative;\n    margin: 0;\n    padding: 0;\n    height: 100%;\n    color: #333;\n    letter-spacing: 1px;\n    background: #f5f5f5;\n    font-weight: 300;\n    touch-action: manipulation;\n}\n#root, .page {\n    position: relative;\n    width: 100%;\n    height: 100%;\n    overflow: hidden;\n}\na {\n    text-decoration: none;\n    color: #333;\n}\n.ruler {\n    position:absolute;\n    top: 0;\n    left: 0;\n}\n.ruler.horizontal {\n    left: 0px;\n    width: 100%;\n    height: 30px;\n}\n.ruler.vertical {\n    top: 0px;\n    width: 30px;\n    height: 100%;\n}\n.box {\n    position: relative;\n    width: 30px;\n    height: 30px;\n    background: #444;\n    box-sizing: border-box;\n    z-index: 21;\n}\n.box:before, .box:after {\n    position: absolute;\n    content: \"\";\n    background: #777;\n}\n.box:before {\n    width: 1px;\n    height: 100%;\n    left: 100%;\n}\n.box:after {\n    height: 1px;\n    width: 100%;\n    top: 100%;\n}\n\n.container {\n    position: relative;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n    text-align: center;\n    max-width: calc(100% - 60px);\n    width: 100%;\n}\n\n.badges {\n    padding: 10px;\n}\n.badges img {\n    height: 20px;\n    margin: 0px 2px;\n}\n.buttons {\n    text-align: center;\n    margin: 0;\n    padding: 10px;\n}\n.buttons a {\n    margin: 0;\n    position: relative;\n    text-decoration: none;\n    color: #333;\n    border: 1px solid #333;\n    padding: 12px 30px;\n    min-width: 140px;\n    text-align: center;\n    display: inline-block;\n    box-sizing: border-box;\n    margin: 5px;\n    transition: all ease 0.5s;\n}\n.buttons a:hover {\n    background: #333;\n    color: #fff;\n}\n\np {\n    padding: 0;\n    margin: 0;\n}\n\n.dragit {\n    font-weight: bold;\n}\n"
  },
  {
    "path": "demo/index.html",
    "content": "<!DOCTYPE html>\n<html>\n\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\"\n        content=\"width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no\">\n    <meta name=\"description\" content=\"A Guides component that can draw ruler and manage guidelines.\" />\n    <meta property=\"og:title\" content=\"A Guides component that can draw ruler and manage guidelines.\">\n    <meta property=\"og:url\" content=\"https://daybrush.com/guides\">\n    <meta property=\"og:image\" content=\"https://daybrush.com/guides/images/guides1920x1080.png\">\n    <meta property=\"og:description\" content=\"A Guides component that can draw ruler and manage guidelines.\">\n    <meta name=\"twitter:card\" content=\"summary\">\n    <meta name=\"twitter:title\" content=\"A Guides component that can draw ruler and manage guidelines.\">\n    <meta name=\"twitter:url\" content=\"https://daybrush.com/guides\">\n    <meta name=\"twitter:image\" content=\"https://daybrush.com/guides/images/guides1920x1080.png\">\n    <meta name=\"twitter:description\" content=\"A Guides component that can draw ruler and manage guidelines.\">\n    <meta name=\"theme-color\" content=\"#f5f5f5\">\n    <title>A Guides component that can draw ruler and manage guidelines.</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"./index.css\" />\n</head>\n\n<body>\n    <div class=\"box\"></div>\n    <div class=\"ruler horizontal\">\n\n    </div>\n    <div class=\"ruler vertical\">\n\n    </div>\n\n    <div class=\"container\">\n        <img src=\"https://daybrush.com/guides/images/guides.png\" width=\"200\" alt=\"guides\" />\n        <p class=\"dragit\">Drag Screen & Rulers!</p>\n        <p class=\"badges\">\n            <a href=\"https://www.npmjs.com/package/@scena/guides\" target=\"_blank\">\n                <img src=\"https://img.shields.io/npm/v/@scena/guides.svg?style=flat-square&color=007acc&label=version\"\n                    alt=\"npm version\" /></a>\n            <a href=\"https://github.com/daybrush/guides\" target=\"_blank\">\n                <img src=\"https://img.shields.io/github/stars/daybrush/guides.svg?color=42b883&style=flat-square\" /></a>\n            <a href=\"https://github.com/daybrush/guides\" target=\"_blank\">\n                <img src=\"https://img.shields.io/badge/language-typescript-blue.svg?style=flat-square\" />\n            </a>\n            <a href=\"https://github.com/daybrush/guides/blob/master/LICENSE\" target=\"_blank\">\n                <img\n                    src=\"https://img.shields.io/github/license/daybrush/guides.svg?style=flat-square&label=license&color=08CE5D\" />\n            </a>\n            <a href=\"https://github.com/daybrush/guides/tree/master/packages/react-guides\" target=\"_blank\"><img\n                    alt=\"React\"\n                    src=\"https://img.shields.io/static/v1.svg?label=&message=React&style=flat-square&color=61daeb\"></a>\n            <a href=\"https://github.com/daybrush/guides/tree/master/packages/preact-guides\" target=\"_blank\"><img\n                    alt=\"Preact\"\n                    src=\"https://img.shields.io/static/v1.svg?label=&message=Preact&style=flat-square&color=673ab8\"></a>\n            <a href=\"https://github.com/daybrush/guides/tree/master/packages/ngx-guides\" target=\"_blank\"><img\n                    alt=\"Angular\"\n                    src=\"https://img.shields.io/static/v1.svg?label=&message=Angular&style=flat-square&color=C82B38\"></a>\n            <a href=\"https://github.com/daybrush/guides/tree/master/packages/vue-guides\" target=\"_blank\"><img alt=\"Vue\"\n                    src=\"https://img.shields.io/static/v1.svg?label=&message=Vue&style=flat-square&color=3fb984\"></a>\n            <a href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\" target=\"_blank\"><img\n                    alt=\"Svelte\"\n                    src=\"https://img.shields.io/static/v1.svg?label=&message=Svelte&style=flat-square&color=C82B38\"></a>\n        </p>\n        <p class=\"description\">A Guides component that can draw ruler and manage guidelines.</p>\n        <div class=\"buttons\">\n            <a href=\"https://github.com/daybrush/guides\" target=\"_blank\">Download</a>\n            <!-- <a href=\"./release/latest/doc\" target=\"_blank\">API</a> -->\n        </div>\n    </div>\n\n\n\n\n    <script src=\"https://daybrush.com/gesto/release/latest/dist/gesto.js\"></script>\n    <script src=\"./release/latest/dist/guides.js\"></script>\n    <script>\n        const guides1 = new Guides(document.querySelector(\".ruler.horizontal\"), {\n            type: \"horizontal\",\n            displayDragPos: true,\n            rulerStyle: { left: \"30px\", width: \"calc(100% - 30px)\", height: \"100%\" },\n            useResizeObserver: true,\n        });\n        const guides2 = new Guides(document.querySelector(\".ruler.vertical\"), {\n            type: \"vertical\",\n            displayDragPos: true,\n            rulerStyle: { top: \"30px\", height: \"calc(100% - 30px)\", width: \"100%\" },\n            useResizeObserver: true,\n        });\n\n        let scrollX = 0;\n        let scrollY = 0;\n\n        const box = document.querySelector(\".box\");\n\n        new Gesto(document.body).on(\"dragStart\", e => {\n            if (e.inputEvent.target === box || e.inputEvent.target.nodeName === \"A\") {\n                return false;\n            }\n        }).on(\"drag\", e => {\n            scrollX -= e.deltaX;\n            scrollY -= e.deltaY;\n\n            guides1.scroll(scrollX);\n            guides1.scrollGuides(scrollY);\n            guides2.scroll(scrollY);\n            guides2.scrollGuides(scrollX);\n        });\n        box.addEventListener(\"click\", () => {\n            scrollX = 0;\n            scrollY = 0;\n            guides1.scroll(0);\n            guides1.scrollGuides(0);\n            guides2.scroll(0);\n            guides2.scrollGuides(0);\n        });\n\n    </script>\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-TRBNXHQ0ZF\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag() { dataLayer.push(arguments); }\n        gtag('js', new Date());\n        gtag('config', 'G-TRBNXHQ0ZF');\n    </script>\n</body>\n\n</html>\n"
  },
  {
    "path": "jsdoc.json",
    "content": "{\n    \"plugins\": [],\n    \"recurseDepth\": 10,\n    \"opts\": {\n        \"template\": \"./node_modules/daybrush-jsdoc-template\",\n        \"destination\": \"./doc/\"\n    },\n    \"source\": {\n        \"include\": [\n            \"packages/guides/src\",\n            \"README.md\",\n            \"packages/react-guides/src/react-guides\",\n            \"node_modules/@scena/event-emitter/src\",\n            \"node_modules/@scena/react-ruler/src/react-ruler\"\n        ],\n        \"includePattern\": \"(.+\\\\.js(doc|x)?|.+\\\\.ts(doc|x)?)$\",\n        \"excludePattern\": \"(^|\\\\/|\\\\\\\\)_\"\n    },\n    \"sourceType\": \"module\",\n    \"tags\": {\n        \"allowUnknownTags\": true,\n        \"dictionaries\": [\n            \"jsdoc\",\n            \"closure\"\n        ]\n    },\n    \"templates\": {\n        \"cleverLinks\": false,\n        \"monospaceLinks\": false,\n        \"default\": {\n            \"staticFiles\": {\n                \"include\": [\n                    \"./static\"\n                ]\n            }\n        }\n    },\n    \"linkMap\": {\n        \"IObject\": \"http://daybrush.com/utils/release/latest/doc/global.html#ObjectInterface\",\n        \"DragScrollOptions\": \"https://daybrush.com/dragscroll/release/latest/doc/global.html#DragScrollOptions\"\n    },\n    \"docdash\": {\n        \"repo\": \"daybrush/guides\",\n        \"menu\": {\n            \"Github repo\": {\n                \"href\": \"https://github.com/daybrush/guides\",\n                \"target\": \"_blank\",\n                \"class\": \"menu-item\",\n                \"id\": \"repository\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "lerna.json",
    "content": "{\n    \"npmClient\": \"yarn\",\n    \"useWorkspaces\": true,\n    \"packages\": [\n        \"packages/*\",\n        \"packages/ngx-guides/projects/ngx-guides\"\n    ],\n    \"version\": \"independent\",\n    \"lernaHelperOptions\": {\n        \"deployFileMap\": [\n            {\n                \"basePath\": \"packages/guides/dist\",\n                \"dists\": [\n                    \"demo/release/{{version}}/dist\",\n                    \"demo/release/latest/dist\"\n                ]\n            },\n            {\n                \"basePath\": \"doc\",\n                \"dists\": [\n                    \"demo/release/{{version}}/doc\",\n                    \"demo/release/latest/doc\"\n                ]\n            }\n        ],\n        \"beforeReleaseScripts\": [\n            \"npm run packages:build\",\n            \"npm run doc\",\n            \"npm run deploy\"\n        ]\n    }\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n    \"name\": \"guides-root\",\n    \"private\": true,\n    \"description\": \"A Guides component that can draw ruler and manage guidelines.\",\n    \"keywords\": [\n        \"scene\",\n        \"scenejs\",\n        \"scene.js\",\n        \"scena\",\n        \"ruler\",\n        \"guides\",\n        \"scroller\"\n    ],\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"git+https://github.com/daybrush/guides.git\"\n    },\n    \"author\": \"Daybrush\",\n    \"license\": \"MIT\",\n    \"bugs\": {\n        \"url\": \"https://github.com/daybrush/guides/issues\"\n    },\n    \"homepage\": \"https://github.com/daybrush/guides#readme\",\n    \"scripts\": {\n        \"build\": \"npm run build --prefix ./packages/guides\",\n        \"packages:update\": \"lerna-helper version && yarn && npm run update-type-consts\",\n        \"update-type-consts\": \"node ./config/update-type-consts.js\",\n        \"packages:build\": \"npm run build --prefix packages/react-guides && npm run update-type-consts && lerna run build --ignore ngx-guides --ignore @scena/react-guides\",\n        \"packages:publish\": \"lerna-helper publish --ignore ngx-guides --commit 'chore: publish packages'\",\n        \"demo:build\": \"npm run packages:build && npm run doc && npm run build:storybook && npm run build:storybook2\",\n        \"changelog\": \"lerna-helper changelog --type all --base @scena/guides\",\n        \"changelog:root\": \"lerna-helper changelog --type root --base @scena/guides\",\n        \"doc\": \"rm -rf ./doc && jsdoc -c jsdoc.json\",\n        \"predeploy\": \"lerna-helper deploy --base @scena/guides --pre\",\n        \"deploy\": \"lerna-helper deploy --base @scena/guides\",\n        \"release\": \"lerna-helper release --base @scena/guides\"\n    },\n    \"devDependencies\": {\n        \"@daybrush/jsdoc\": \"^0.4.7\",\n        \"@daybrush/release\": \"^0.7.1\",\n        \"cpx\": \"1.5.0\",\n        \"daybrush-jsdoc-template\": \"^1.10.0\",\n        \"gh-pages\": \"^2.0.1\",\n        \"intercept-stdout\": \"0.1.2\",\n        \"lerna\": \"^4.0.0\",\n        \"lerna-changelog\": \"2.2.0\",\n        \"typescript\": \"^4.5.0 <4.6.0\"\n    },\n    \"workspaces\": {\n        \"nohoist\": [\n            \"**/@daybrush/builder\",\n            \"**/@daybrush/builder/**\",\n            \"**/rollup-plugin-vue\",\n            \"**/rollup-plugin-vue/**\",\n            \"**/karma\",\n            \"**/karma/**\",\n            \"**/karma-*\",\n            \"**/karma-*/**\",\n            \"**/@tyoes/chai\",\n            \"**/@tyoes/chai/**\",\n            \"**/@types/karma-chai\",\n            \"**/@types/karma-chai/**\",\n            \"**/@types/mocha\",\n            \"**/@types/mocha/**\",\n            \"**/@vue/*\",\n            \"**/@vue/*/**\",\n            \"**/vue\",\n            \"**/vue/**\"\n        ],\n        \"packages\": [\n            \"packages/*\",\n            \"packages/ngx-guides/projects/ngx-guides\"\n        ]\n    },\n    \"resolutions\": {\n        \"@daybrush/utils\": \"^1.12.1\",\n        \"@types/react\": \"^16.9.17\",\n        \"typescript\": \"^4.5.0 <4.6.0\",\n        \"@egjs/agent\": \"^2.2.1\",\n        \"@egjs/children-differ\": \"^1.0.1\",\n        \"@scena/dragscroll\": \"^1.3.0\",\n        \"@scena/matrix\": \"^1.1.1\",\n        \"css-to-mat\": \"^1.0.3\",\n        \"framework-utils\": \"^1.1.0\",\n        \"gesto\": \"^1.18.1\",\n        \"overlap-area\": \"^1.1.0\",\n        \"croact-css-styled\": \"^1.1.8\",\n        \"react-css-styled\": \"^1.1.8\",\n        \"tslib\": \"^2.3.0\"\n    },\n    \"overrides\": {\n        \"@daybrush/utils\": \"^1.12.1\",\n        \"@types/react\": \"^16.9.17\",\n        \"typescript\": \"^4.5.0 <4.6.0\",\n        \"@egjs/agent\": \"^2.2.1\",\n        \"@egjs/children-differ\": \"^1.0.1\",\n        \"@scena/dragscroll\": \"^1.3.0\",\n        \"@scena/matrix\": \"^1.1.1\",\n        \"css-to-mat\": \"^1.0.3\",\n        \"framework-utils\": \"^1.1.0\",\n        \"gesto\": \"^1.18.1\",\n        \"overlap-area\": \"^1.1.0\",\n        \"croact-css-styled\": \"^1.1.8\",\n        \"react-css-styled\": \"^1.1.8\",\n        \"tslib\": \"^2.3.0\"\n    }\n}\n"
  },
  {
    "path": "packages/croact-guides/CHANGELOG.md",
    "content": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://conventionalcommits.org) for commit guidelines.\n\n## [0.26.2](https://github.com/daybrush/guides/blob/master/packages/croact-guides/compare/croact-guides@0.26.1...croact-guides@0.26.2) (2023-07-29)\n\n\n### :mega: Other\n\n* publish packages ([9b659fe](https://github.com/daybrush/guides/blob/master/packages/croact-guides/commit/9b659fe71eb2fcb53b731e88b1561a0b18b9fcdc))\n\n\n\n## [0.26.1](https://github.com/daybrush/guides/blob/master/packages/croact-guides/compare/croact-guides@0.26.0...croact-guides@0.26.1) (2023-07-23)\n\n\n### :mega: Other\n\n* publish packages ([73e2427](https://github.com/daybrush/guides/blob/master/packages/croact-guides/commit/73e24270c27eec1f30cc051fe84569e79f85822c))\n\n\n\n## [0.26.0](https://github.com/daybrush/guides/blob/master/packages/croact-guides/compare/croact-guides@0.25.0...croact-guides@0.26.0) (2023-07-22)\n\n\n### :mega: Other\n\n* publish packages ([324f848](https://github.com/daybrush/guides/blob/master/packages/croact-guides/commit/324f848e0bae231c82b33be29ee2534d58a6d6b1))\n\n\n\n## [0.25.0](https://github.com/daybrush/guides/blob/master/packages/croact-guides/compare/croact-guides@0.24.0...croact-guides@0.25.0) (2023-06-02)\n\n\n### :rocket: New Features\n\n* update ruler and add drawRuler method ([20b1182](https://github.com/daybrush/guides/blob/master/packages/croact-guides/commit/20b1182c3e8c93980418f34e1360cb4c81a2a0d3))\n\n\n### :mega: Other\n\n* publish packages ([53d07f3](https://github.com/daybrush/guides/blob/master/packages/croact-guides/commit/53d07f3e31011ee6bff1a2558380dc6e61e98337))\n\n\n\n## [0.24.0](https://github.com/daybrush/guides/blob/master/packages/croact-guides/compare/croact-guides@0.23.3...croact-guides@0.24.0) (2023-06-01)\n\n\n### :rocket: New Features\n\n* update ruler and modules ([f528ce4](https://github.com/daybrush/guides/blob/master/packages/croact-guides/commit/f528ce4c7ef6dd554112a7b86a0f7449d7cd230f))\n\n\n### :mega: Other\n\n* publish packages ([d038e92](https://github.com/daybrush/guides/blob/master/packages/croact-guides/commit/d038e92046e55f0f65f4ddde24f12ed117fd64e2))\n\n\n\n## [0.23.3](https://github.com/daybrush/guides/blob/master/packages/croact-guides/compare/croact-guides@0.23.2...croact-guides@0.23.3) (2023-05-16)\n\n\n### :bug: Bug Fix\n\n* update css-styled version ([7327395](https://github.com/daybrush/guides/blob/master/packages/croact-guides/commit/7327395786810c872f53678d47602b80db127197))\n\n\n### :mega: Other\n\n* publish packages ([78ed8c7](https://github.com/daybrush/guides/blob/master/packages/croact-guides/commit/78ed8c708759927cabeb53b8c607fc6f54324371))\n\n\n\n## [0.23.2](https://github.com/daybrush/guides/blob/master/packages/croact-guides/compare/croact-guides@0.23.1...croact-guides@0.23.2) (2023-05-15)\n\n\n### :rocket: New Features\n\n* update depency modules ([21b67a8](https://github.com/daybrush/guides/blob/master/packages/croact-guides/commit/21b67a80dfd61183e175d9ac6c64502c092aba74))\n\n\n### :mega: Other\n\n* publish packages ([1898b89](https://github.com/daybrush/guides/blob/master/packages/croact-guides/commit/1898b895d5c812a5fd77d99a5928f7e420152772))\n\n\n\n## [0.23.1](https://github.com/daybrush/guides/blob/master/packages/croact-guides/compare/croact-guides@0.23.0...croact-guides@0.23.1) (2023-05-07)\n\n\n### :mega: Other\n\n* publish packages ([e1fb57c](https://github.com/daybrush/guides/blob/master/packages/croact-guides/commit/e1fb57c59a4a8e6b3e55ffb68cfea64760270288))\n* update croact version ([2fd28db](https://github.com/daybrush/guides/blob/master/packages/croact-guides/commit/2fd28dbbfd648b8ee6fee39f3972057fce580ae0))\n\n\n\n## [0.23.0](https://github.com/daybrush/guides/blob/master/packages/croact-guides/compare/croact-guides@0.22.0...croact-guides@0.23.0) (2023-04-12)\n\n\n### :rocket: New Features\n\n* add resize cursor ([85fb038](https://github.com/daybrush/guides/blob/master/packages/croact-guides/commit/85fb038c910e9c6c6f7432ad64acf54eaac1d0eb))\n\n\n### :mega: Other\n\n* publish packages ([548990d](https://github.com/daybrush/guides/blob/master/packages/croact-guides/commit/548990d8577ffe565b8605f74edd9eb5a6519deb))\n\n\n\n## 0.22.0 (2023-04-06)\n\n\n### :rocket: New Features\n\n* add croact-guides ([a7be435](https://github.com/daybrush/guides/blob/master/packages/croact-guides/commit/a7be435704e24b6d80af80e069a6cc4047d645bc))\n\n\n### :mega: Other\n\n* publish packages ([f30e2ba](https://github.com/daybrush/guides/blob/master/packages/croact-guides/commit/f30e2bad78e1bc02307c8dde8cb1b69ecccdf116))\n\n\n\n## [0.21.0](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/compare/react-compat-guides@0.20.3...react-compat-guides@0.21.0) (2023-03-04)\n\n\n### :rocket: New Features\n\n* update ruler ([f59fa59](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/f59fa5988f3c4dd96925677ca787e4fb55b150f1))\n\n\n### :mega: Other\n\n* publish packages ([1afbe1d](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/1afbe1d193cf2457dc9f3296b73d38b5859c0ee0))\n\n\n\n## [0.20.3](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/compare/react-compat-guides@0.20.2...react-compat-guides@0.20.3) (2023-02-04)\n\n\n### :mega: Other\n\n* publish packages ([ae0d147](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/ae0d14738d83b4f5352463b69f89efe7cc111baf))\n\n\n\n## [0.20.2](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/compare/react-compat-guides@0.20.1...react-compat-guides@0.20.2) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([0f7949a](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/0f7949a9954e2093d6a599dc545f988ed624d41f))\n\n\n\n## [0.20.1](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/compare/react-compat-guides@0.20.0...react-compat-guides@0.20.1) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([ab753c1](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/ab753c1c820463c1c0b7805d428c803c5eacc1e3))\n\n\n\n## [0.20.0](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/compare/react-compat-guides@0.19.0...react-compat-guides@0.20.0) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([6f83fa0](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/6f83fa0c75f494aa79fff98f4a57f86ab295b67d))\n\n\n\n## [0.19.0](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/compare/react-compat-guides@0.18.1...react-compat-guides@0.19.0) (2023-01-28)\n\n\n### :mega: Other\n\n* publish packages ([9473e84](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/9473e8464fbd4c374ac6251ff995586afd163719))\n\n\n\n## [0.18.1](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/compare/react-compat-guides@0.18.0...react-compat-guides@0.18.1) (2023-01-27)\n\n\n### :mega: Other\n\n* publish packages ([628b944](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/628b9444bb9e6f5546c7a5edd55a090126f52dd5))\n\n\n\n## [0.18.0](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/compare/react-compat-guides@0.17.0...react-compat-guides@0.18.0) (2023-01-20)\n\n\n### :rocket: New Features\n\n* add getGuideScrollPos, getRulerScrollPos ([9687c89](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/9687c89598ab9136c6d26cb06ebba2ca45dc26ae))\n\n\n### :bug: Bug Fix\n\n* fix files field #67 ([28bf5b3](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/28bf5b3bd97cebd94eaf2195f0e99750f14e7ecb))\n\n\n### :mega: Other\n\n* publish packages ([095e7c6](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/095e7c670d3bd0bdc168e2f3c11b5dbb8074b26b))\n* publish packages ([1daa6ea](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/1daa6ea441f6c96b8f354953605cd6ac89117878))\n* publish packages ([e143c21](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/e143c2175309bf480ef17731321f6728b8d6bcc2))\n* publish packages ([ce2037a](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/ce2037a18f5f6bbcd750e1fd72cbfc60e3f2c217))\n* publish packages ([0abcba2](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/0abcba24e8b83ea51cf369124e8c2d85fee1ef7e))\n\n\n\n## [0.17.0](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/compare/react-compat-guides@0.16.0...react-compat-guides@0.17.0) (2022-11-13)\n\n\n### :rocket: New Features\n\n* add scrollOptions #64 ([e0dc92a](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/e0dc92a9ed417dff071b43a68b065907f8f1b8ad))\n\n\n### :bug: Bug Fix\n\n* fix scroll event name ([6eba67b](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/6eba67b33c0de50e1c68ff75882889227db663bc))\n* update dependencies ([054e101](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/054e101d1b177bdfefab74bf440a4cb3cf8137be))\n\n\n### :mega: Other\n\n* publish packages ([9cc8e3a](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/9cc8e3ae5f83aa1513c1560166c6babbbe31dfd7))\n\n\n\n## [0.16.0](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/compare/react-compat-guides@0.15.1...react-compat-guides@0.16.0) (2022-09-21)\n\n\n### :mega: Other\n\n* publish packages ([83de3e4](https://github.com/daybrush/guides/blob/master/packages/react-compat-guides/commit/83de3e4ae4bad11905939a44dfa2776fe7d6987d))\n"
  },
  {
    "path": "packages/croact-guides/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019 Daybrush\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "packages/croact-guides/README.md",
    "content": ""
  },
  {
    "path": "packages/croact-guides/demo/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <title>Preact App</title>\n    <link rel=\"stylesheet\" href=\"./dist/index.css\" />\n  </head>\n  <body>\n    <noscript>You need to enable JavaScript to run this app.</noscript>\n    <div id=\"root\"></div>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n  <script src=\"./dist/index.js\"></script>\n</html>\n"
  },
  {
    "path": "packages/croact-guides/package.json",
    "content": "{\n    \"name\": \"croact-guides\",\n    \"version\": \"0.26.2\",\n    \"description\": \"A React Compat Guides component that can draw ruler and manage guidelines.\",\n    \"main\": \"./dist/guides.cjs.js\",\n    \"module\": \"./dist/guides.esm.js\",\n    \"sideEffects\": false,\n    \"types\": \"declaration/index.d.ts\",\n    \"scripts\": {\n        \"lint\": \"tslint -c tslint.json 'src/**/*.ts'\",\n        \"start\": \"open ./demo/index.html && rollup -c rollup.config.demo.js -w\",\n        \"build\": \"rollup -c && npm run declaration && print-sizes ./dist \",\n        \"declaration\": \"rm -rf declaration && tsc -p tsconfig.declaration.json\"\n    },\n    \"keywords\": [\n        \"scene\",\n        \"scenejs\",\n        \"scene.js\",\n        \"scena\",\n        \"guides\",\n        \"scroller\",\n        \"react\",\n        \"compat\"\n    ],\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/daybrush/guides/blob/master/packages/croact-guides\"\n    },\n    \"author\": \"Daybrush\",\n    \"license\": \"MIT\",\n    \"bugs\": {\n        \"url\": \"https://github.com/daybrush/guides/issues\"\n    },\n    \"homepage\": \"https://daybrush.com/guides\",\n    \"files\": [\n        \"./*\",\n        \"src/*\",\n        \"dist/*\",\n        \"declaration/*\",\n        \"README.md\"\n    ],\n    \"devDependencies\": {\n        \"@daybrush/builder\": \"^0.1.0\",\n        \"@scenejs/effects\": \"^1.0.1\",\n        \"@types/react\": \"^16.0.0\",\n        \"croact\": \"^1.0.3\",\n        \"keycon\": \"^0.3.0\",\n        \"print-sizes\": \"^0.2.0\",\n        \"rollup-plugin-css-bundle\": \"^1.0.4\",\n        \"rollup-plugin-react-compat\": \"^0.1.1\",\n        \"scenejs\": \"^1.1.4\",\n        \"shape-svg\": \"^0.3.3\",\n        \"tslint\": \"^5.16.0\",\n        \"typescript\": \"^4.5.0 <4.6.0\"\n    },\n    \"dependencies\": {\n        \"@daybrush/utils\": \"^1.12.1\",\n        \"@scena/dragscroll\": \"^1.3.0\",\n        \"@scena/react-guides\": \"~0.28.2\",\n        \"croact-css-styled\": \"^1.1.8\",\n        \"croact-ruler\": \"^0.18.0\",\n        \"css-to-mat\": \"^1.0.3\",\n        \"framework-utils\": \"^1.1.0\",\n        \"gesto\": \"^1.18.1\",\n        \"react-css-styled\": \"^1.1.8\"\n    }\n}\n"
  },
  {
    "path": "packages/croact-guides/rollup.config.js",
    "content": "\nimport builder from \"@daybrush/builder\";\nimport reactCompat from \"rollup-plugin-react-compat\";\n\nconst external = {\n    \"croact\": \"croact\",\n    \"croact-ruler\": \"croact-ruler\",\n    \"croact-css-styled\": \"croact-css-styled\",\n    \"@daybrush/utils\": \"utils\",\n    \"css-styled\": \"css-styled\",\n    \"framework-utils\": \"framework-utils\",\n    \"gesto\": \"Gesto\",\n    \"@egjs/agent\": \"eg.Agent\",\n    \"@egjs/children-differ\": \"eg.ChildrenDiffer\",\n    \"css-to-mat\": \"CssToMat\",\n};\n\n\nconst reactPlugin = reactCompat({\n    useCroact: true,\n    aliasModules: {\n        \"@scena/react-ruler\": \"croact-ruler\",\n        \"react-css-styled\": \"croact-css-styled\",\n    }\n})\n\n\n\nexport default builder([\n    {\n        sourcemap: false,\n        input: \"src/index.ts\",\n        output: \"./dist/guides.esm.js\",\n        exports: \"named\",\n        format: \"es\",\n        plugins: [reactPlugin],\n        external,\n    },\n    {\n        sourcemap: false,\n        input: \"src/index.umd.ts\",\n        output: \"./dist/guides.cjs.js\",\n        exports: \"default\",\n        plugins: [reactPlugin],\n        format: \"cjs\",\n        external,\n    },\n]);\n"
  },
  {
    "path": "packages/croact-guides/src/index.ts",
    "content": "import Guides from \"@scena/react-guides\";\nexport default Guides;\nexport * from \"@scena/react-guides\";\n"
  },
  {
    "path": "packages/croact-guides/src/index.umd.ts",
    "content": "import Guides, * as others from \"./index\";\n\nfor (const name in others) {\n    (Guides as any)[name] = (others as any)[name];\n}\n\nexport default Guides;\n"
  },
  {
    "path": "packages/croact-guides/tsconfig.declaration.json",
    "content": "{\n  \"extends\": \"./tsconfig\",\n  \"compilerOptions\": {\n    \"removeComments\": false,\n    \"declaration\": true,\n    \"emitDeclarationOnly\": true,\n    \"declarationDir\": \"declaration\"\n  }\n}\n"
  },
  {
    "path": "packages/croact-guides/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"outDir\": \"./outjs/\",\n    \"esModuleInterop\": false,\n    \"sourceMap\": true,\n    \"module\": \"es2015\",\n    \"target\": \"es5\",\n    \"experimentalDecorators\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node\",\n    \"lib\": [\n      \"es2015\",\n      \"dom\"\n    ],\n  },\n  \"include\": [\n    \"./src/**/*.ts\"\n  ]\n}"
  },
  {
    "path": "packages/croact-guides/tslint.json",
    "content": "{\n\t\"defaultSeverity\": \"error\",\n\t\"extends\": [\n\t\t\"tslint:recommended\"\n\t],\n\t\"rules\": {\n\t\t\"typedef\": [true, \"parameter\"],\n\t\t\"jsdoc-format\": false,\n\t\t\"forin\": false,\n\t\t\"no-console\": false,\n\t\t\"no-any\": false,\n\t\t\"interface-name\": false,\n\t\t\"indent\": [\n\t\t\ttrue,\n\t\t\t\"spaces\",\n\t\t\t4\n\t\t],\n\t\t\"ordered-imports\": false,\n\t\t\"object-literal-sort-keys\": false,\n\t\t\"no-unused-expression\": false,\n\t\t\"arrow-parens\": [\n\t\t\ttrue,\n\t\t\t\"ban-single-arg-parens\"\n\t\t],\n\t\t\"max-line-length\": [\n\t\t\ttrue,\n\t\t\t{\n\t\t\t\t\"limit\": 120,\n\t\t\t\t\"ignore-pattern\": \"(\\\\* @)|//\"\n\t\t\t}\n\t\t],\n\t\t\"trailing-comma\": [\n\t\t\ttrue,\n\t\t\t{\n\t\t\t\t\"multiline\": {\n\t\t\t\t\t\"objects\": \"always\",\n\t\t\t\t\t\"arrays\": \"always\",\n\t\t\t\t\t\"functions\": \"always\",\n\t\t\t\t\t\"typeLiterals\": \"ignore\"\n\t\t\t\t},\n\t\t\t\t\"esSpecCompliant\": true\n\t\t\t}\n\t\t]\n\t}\n}"
  },
  {
    "path": "packages/guides/.gitignore",
    "content": "node_modules/\n*.DS_Store\n.DS_Store\ndoc/\ndist/\ndemo/dist/\npackages/*/dist/\nrelease/\nnpm-debug.log*\ncoverage/\njsdoc/\ndoc/\noutjs/\ndeclaration/\nbuild/\n.vscode/\nrollup-plugin-visualizer/\nstatistics/\n.scene_cache\n*.mp4\n"
  },
  {
    "path": "packages/guides/.npmignore",
    "content": "node_modules/\n*.DS_Store\n.DS_Store\ndoc/\ntemplate/\nexample/\nkarma.conf.js\ntest/\nmocha.opts\nGruntfile.js\nwebpack.*.js\n.travis.yml\npackages\nrelease/\ndemo/\ncoverage/\ndist/report.html\nrollup-plugin-visualizer/\noutjs/\n.scene_cache\n*.mp3\n*.mp4"
  },
  {
    "path": "packages/guides/CHANGELOG.md",
    "content": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://conventionalcommits.org) for commit guidelines.\n\n## [0.29.2](https://github.com/daybrush/guides/compare/@scena/guides@0.29.1...@scena/guides@0.29.2) (2023-07-29)\n\n\n### :mega: Other\n\n* publish packages ([9b659fe](https://github.com/daybrush/guides/commit/9b659fe71eb2fcb53b731e88b1561a0b18b9fcdc))\n\n\n\n## [0.29.1](https://github.com/daybrush/guides/compare/@scena/guides@0.29.0...@scena/guides@0.29.1) (2023-07-23)\n\n\n### :mega: Other\n\n* publish packages ([73e2427](https://github.com/daybrush/guides/commit/73e24270c27eec1f30cc051fe84569e79f85822c))\n\n\n\n## [0.29.0](https://github.com/daybrush/guides/compare/@scena/guides@0.28.0...@scena/guides@0.29.0) (2023-07-22)\n\n\n### :mega: Other\n\n* publish packages ([324f848](https://github.com/daybrush/guides/commit/324f848e0bae231c82b33be29ee2534d58a6d6b1))\n\n\n\n## [0.28.0](https://github.com/daybrush/guides/compare/@scena/guides@0.27.0...@scena/guides@0.28.0) (2023-06-02)\n\n\n### :mega: Other\n\n* publish packages ([53d07f3](https://github.com/daybrush/guides/commit/53d07f3e31011ee6bff1a2558380dc6e61e98337))\n\n\n\n## [0.27.0](https://github.com/daybrush/guides/compare/@scena/guides@0.26.5...@scena/guides@0.27.0) (2023-06-01)\n\n\n### :rocket: New Features\n\n* update ruler and modules ([f528ce4](https://github.com/daybrush/guides/commit/f528ce4c7ef6dd554112a7b86a0f7449d7cd230f))\n\n\n### :mega: Other\n\n* publish packages ([d038e92](https://github.com/daybrush/guides/commit/d038e92046e55f0f65f4ddde24f12ed117fd64e2))\n\n\n\n## [0.26.5](https://github.com/daybrush/guides/compare/@scena/guides@0.26.4...@scena/guides@0.26.5) (2023-05-16)\n\n\n### :mega: Other\n\n* publish packages ([78ed8c7](https://github.com/daybrush/guides/commit/78ed8c708759927cabeb53b8c607fc6f54324371))\n\n\n\n## [0.26.4](https://github.com/daybrush/guides/compare/@scena/guides@0.26.2...@scena/guides@0.26.4) (2023-05-15)\n\n\n### :rocket: New Features\n\n* update depency modules ([21b67a8](https://github.com/daybrush/guides/commit/21b67a80dfd61183e175d9ac6c64502c092aba74))\n\n\n### :bug: Bug Fix\n\n* fix containerProvider #81 ([d12a0b2](https://github.com/daybrush/guides/commit/d12a0b213adac199f61358f71a0787f1d05208ba))\n\n\n### :mega: Other\n\n* publish packages ([1898b89](https://github.com/daybrush/guides/commit/1898b895d5c812a5fd77d99a5928f7e420152772))\n* update packages ([d8db884](https://github.com/daybrush/guides/commit/d8db884cdf43c19f77ad9c5721d3a466808853c3))\n\n\n\n## [0.26.2](https://github.com/daybrush/guides/compare/@scena/guides@0.26.0...@scena/guides@0.26.2) (2023-05-07)\n\n\n### :bug: Bug Fix\n\n* fix not triggered events #80 ([a8acea3](https://github.com/daybrush/guides/commit/a8acea31ceb22a89055e117c67e4d122e4cb52ac))\n\n\n### :mega: Other\n\n* publish packages ([e1fb57c](https://github.com/daybrush/guides/commit/e1fb57c59a4a8e6b3e55ffb68cfea64760270288))\n* update croact version ([2fd28db](https://github.com/daybrush/guides/commit/2fd28dbbfd648b8ee6fee39f3972057fce580ae0))\n\n\n\n## [0.26.0](https://github.com/daybrush/guides/compare/@scena/guides@0.25.0...@scena/guides@0.26.0) (2023-04-12)\n\n\n### :mega: Other\n\n* publish packages ([548990d](https://github.com/daybrush/guides/commit/548990d8577ffe565b8605f74edd9eb5a6519deb))\n\n\n\n## [0.25.0](https://github.com/daybrush/guides/compare/@scena/guides@0.24.0...@scena/guides@0.25.0) (2023-04-06)\n\n\n### :rocket: New Features\n\n* add croact-guides ([a7be435](https://github.com/daybrush/guides/commit/a7be435704e24b6d80af80e069a6cc4047d645bc))\n\n\n### :mega: Other\n\n* publish packages ([f30e2ba](https://github.com/daybrush/guides/commit/f30e2bad78e1bc02307c8dde8cb1b69ecccdf116))\n\n\n\n## [0.24.0](https://github.com/daybrush/guides/compare/@scena/guides@0.23.3...@scena/guides@0.24.0) (2023-03-04)\n\n\n### :mega: Other\n\n* publish packages ([1afbe1d](https://github.com/daybrush/guides/commit/1afbe1d193cf2457dc9f3296b73d38b5859c0ee0))\n\n\n\n## [0.23.3](https://github.com/daybrush/guides/compare/@scena/guides@0.23.2...@scena/guides@0.23.3) (2023-02-04)\n\n\n### :mega: Other\n\n* publish packages ([ae0d147](https://github.com/daybrush/guides/commit/ae0d14738d83b4f5352463b69f89efe7cc111baf))\n\n\n\n## [0.23.2](https://github.com/daybrush/guides/compare/@scena/guides@0.23.1...@scena/guides@0.23.2) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([0f7949a](https://github.com/daybrush/guides/commit/0f7949a9954e2093d6a599dc545f988ed624d41f))\n\n\n\n## [0.23.1](https://github.com/daybrush/guides/compare/@scena/guides@0.23.0...@scena/guides@0.23.1) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([ab753c1](https://github.com/daybrush/guides/commit/ab753c1c820463c1c0b7805d428c803c5eacc1e3))\n\n\n\n## [0.23.0](https://github.com/daybrush/guides/compare/@scena/guides@0.22.0...@scena/guides@0.23.0) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([6f83fa0](https://github.com/daybrush/guides/commit/6f83fa0c75f494aa79fff98f4a57f86ab295b67d))\n\n\n\n## [0.22.0](https://github.com/daybrush/guides/compare/@scena/guides@0.21.1...@scena/guides@0.22.0) (2023-01-28)\n\n\n### :mega: Other\n\n* publish packages ([9473e84](https://github.com/daybrush/guides/commit/9473e8464fbd4c374ac6251ff995586afd163719))\n\n\n\n## [0.21.1](https://github.com/daybrush/guides/compare/@scena/guides@0.21.0...@scena/guides@0.21.1) (2023-01-27)\n\n\n### :mega: Other\n\n* publish packages ([628b944](https://github.com/daybrush/guides/commit/628b9444bb9e6f5546c7a5edd55a090126f52dd5))\n\n\n\n## [0.21.0](https://github.com/daybrush/guides/compare/@scena/guides@0.20.0...@scena/guides@0.21.0) (2023-01-20)\n\n\n### :bug: Bug Fix\n\n* fix files field #67 ([28bf5b3](https://github.com/daybrush/guides/commit/28bf5b3bd97cebd94eaf2195f0e99750f14e7ecb))\n\n\n### :mega: Other\n\n* publish packages ([095e7c6](https://github.com/daybrush/guides/commit/095e7c670d3bd0bdc168e2f3c11b5dbb8074b26b))\n* publish packages ([1daa6ea](https://github.com/daybrush/guides/commit/1daa6ea441f6c96b8f354953605cd6ac89117878))\n* publish packages ([e143c21](https://github.com/daybrush/guides/commit/e143c2175309bf480ef17731321f6728b8d6bcc2))\n* publish packages ([ce2037a](https://github.com/daybrush/guides/commit/ce2037a18f5f6bbcd750e1fd72cbfc60e3f2c217))\n* publish packages ([0abcba2](https://github.com/daybrush/guides/commit/0abcba24e8b83ea51cf369124e8c2d85fee1ef7e))\n\n\n\n## [0.20.0](https://github.com/daybrush/guides/compare/@scena/guides@0.19.0...@scena/guides@0.20.0) (2022-11-13)\n\n\n### :rocket: New Features\n\n* add scrollOptions #64 ([e0dc92a](https://github.com/daybrush/guides/commit/e0dc92a9ed417dff071b43a68b065907f8f1b8ad))\n\n\n### :bug: Bug Fix\n\n* fix scroll event name ([6eba67b](https://github.com/daybrush/guides/commit/6eba67b33c0de50e1c68ff75882889227db663bc))\n* update dependencies ([054e101](https://github.com/daybrush/guides/commit/054e101d1b177bdfefab74bf440a4cb3cf8137be))\n\n\n### :mega: Other\n\n* publish packages ([9cc8e3a](https://github.com/daybrush/guides/commit/9cc8e3ae5f83aa1513c1560166c6babbbe31dfd7))\n\n\n\n## [0.19.0](https://github.com/daybrush/guides/compare/@scena/guides@0.18.2...@scena/guides@0.19.0) (2022-09-21)\n\n\n### :mega: Other\n\n* publish packages ([83de3e4](https://github.com/daybrush/guides/commit/83de3e4ae4bad11905939a44dfa2776fe7d6987d))\n"
  },
  {
    "path": "packages/guides/README.md",
    "content": "\n\n<p align=\"middle\" ><img src=\"https://raw.githubusercontent.com/daybrush/guides/master/demo/images/guides.png\"/></p>\n<h2 align=\"middle\">Guides</h2>\n<p align=\"middle\">\n<a href=\"https://www.npmjs.com/package/@scena/guides\" target=\"_blank\"><img src=\"https://img.shields.io/npm/v/@scena/guides.svg?style=flat-square&color=007acc&label=version\" alt=\"npm version\" /></a>\n<img src=\"https://img.shields.io/badge/language-typescript-blue.svg?style=flat-square\"/>\n<a href=\"https://github.com/daybrush/guides/blob/master/LICENSE\" target=\"_blank\"><img src=\"https://img.shields.io/github/license/daybrush/guides.svg?style=flat-square&label=license&color=08CE5D\"/></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/react-guides\" target=\"_blank\"><img alt=\"React\" src=\"https://img.shields.io/static/v1.svg?label=&message=React&style=flat-square&color=61daeb\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/preact-guides\" target=\"_blank\"><img alt=\"Preact\" src=\"https://img.shields.io/static/v1.svg?label=&message=Preact&style=flat-square&color=673ab8\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/ngx-guides\" target=\"_blank\"><img alt=\"Angular\" src=\"https://img.shields.io/static/v1.svg?label=&message=Angular&style=flat-square&color=C82B38\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/vue-guides\" target=\"_blank\"><img\n    alt=\"Vue\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Vue2&style=flat-square&color=3fb984\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/vue3-guides\" target=\"_blank\"><img\n    alt=\"Vue3\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Vue3&style=flat-square&color=3fb984\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\" target=\"_blank\"><img\n    alt=\"Svelte\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Svelte&style=flat-square&color=C82B38\"></a>\n</p>\n<p align=\"middle\">A Guides component that can draw ruler and manage guidelines.</p>\n<p align=\"middle\">\n    <a href=\"https://daybrush.com/guides\" target=\"_blank\"><strong>Demo</strong></a> /\n    <a href=\"https://daybrush.com/guides/release/latest/doc/\" target=\"_blank\"><strong>API</strong></a> /\n    <a href=\"https://github.com/daybrush/ruler\" target=\"_blank\"><strong>Ruler</strong></a> /\n    <a href=\"https://github.com/daybrush/scena\" target=\"_blank\"><strong>Main Project</strong></a>\n</p>\n\n\n## ⚙️ Installation\n### npm\n```sh\n$ npm i @scena/guides\n```\n\n### scripts\n```html\n<script src=\"//daybrush.com/guides/release/latest/dist/guides.min.js\"></script>\n```\n\n## 🚀 How to use\n```tsx\n\nimport Guides from \"@scena/guides\";\n\nconst guides = new Guides(document.body, {\n    type: \"horizontal\",\n}).on(\"changeGuides\", e => {\n    console.log(e.guides);\n});\n\n\nlet scrollX = 0;\nlet scrollY = 0;\nwindow.addEventListener(\"resize\", () => {\n    guides.resize();\n});\n\nwindow.addEventListener(\"wheel\", e => {\n    scrollX += e.deltaX;\n    scrollY += e.deltaY;\n\n    guides.scrollGuides(scrollY);\n    guides.scroll(scrollX);\n});\n\n```\n\n### Ruler Units\n\nThe default unit is px, and a line is drawn every 50px. If you want to use a different unit instead of the px unit, use it like this:\n\n* 1px (Default)\n    * zoom: 1\n    * unit: 50 (every 50px)\n* 1cm = 37.7952px\n    * zoom: 37.7952\n    * unit: 1 (every 1cm)\n* 1in = 96px = 2.54cm\n    * zoom: 96\n    * unit: 1 (every 1in)\n\nSee: https://www.w3schools.com/cssref/css_units.asp\n\n## ⚙️ Developments\n### `npm run demo:start`\n\nRuns the app in the development mode.<br>\nOpen `demo/index.html` file.\n\n\n## ⭐️ Show Your Support\nPlease give a ⭐️ if this project helped you!\n\n## 👏 Contributing\n\nIf you have any questions or requests or want to contribute to `guides` or other packages, please write the [issue](https://github.com/daybrush/guides/issues) or give me a Pull Request freely.\n\n## 🐞 Bug Report\n\nIf you find a bug, please report to us opening a new [Issue](https://github.com/daybrush/guides/issues) on GitHub.\n\n\n## 📝 License\n\nThis project is [MIT](https://github.com/daybrush/guides/blob/master/LICENSE) licensed.\n\n```\nMIT License\n\nCopyright (c) 2019 Daybrush\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```\n"
  },
  {
    "path": "packages/guides/package.json",
    "content": "{\n    \"name\": \"@scena/guides\",\n    \"version\": \"0.29.2\",\n    \"description\": \"A Vanilla Guides component that can draw ruler and manage guidelines.\",\n    \"main\": \"./dist/guides.cjs.js\",\n    \"module\": \"./dist/guides.esm.js\",\n    \"sideEffects\": false,\n    \"types\": \"declaration/index.d.ts\",\n    \"scripts\": {\n        \"start\": \"rollup -c -w\",\n        \"build\": \"rollup -c && npm run declaration && print-sizes ./dist\",\n        \"declaration\": \"rm -rf declaration && tsc -p tsconfig.declaration.json\"\n    },\n    \"keywords\": [\n        \"scene\",\n        \"scenejs\",\n        \"scene.js\",\n        \"scena\",\n        \"guides\",\n        \"scroller\"\n    ],\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"git+https://github.com/daybrush/guides.git\"\n    },\n    \"author\": \"Daybrush\",\n    \"license\": \"MIT\",\n    \"bugs\": {\n        \"url\": \"https://github.com/daybrush/guides/issues\"\n    },\n    \"files\": [\n        \"./*\",\n        \"src/*\",\n        \"dist/*\",\n        \"declaration/*\",\n        \"README.md\"\n    ],\n    \"homepage\": \"https://daybrush.com/guides\",\n    \"devDependencies\": {\n        \"@daybrush/builder\": \"^0.1.2\",\n        \"@daybrush/demo\": \"0.0.2\",\n        \"@daybrush/jsdoc\": \"^0.3.9\",\n        \"@daybrush/release\": \"^0.2.4\",\n        \"@types/karma-chai\": \"^0.1.2\",\n        \"@types/mocha\": \"^5.2.7\",\n        \"@types/react\": \"^16.9.17\",\n        \"@types/react-dom\": \"^16.9.4\",\n        \"daybrush-jsdoc-template\": \"^1.6.0\",\n        \"gesto\": \"^1.18.1\",\n        \"gh-pages\": \"^2.0.1\",\n        \"keycon\": \"^1.1.0\",\n        \"print-sizes\": \"^0.2.0\",\n        \"react\": \"^16.12.0\",\n        \"react-dom\": \"^16.12.0\",\n        \"rollup-plugin-css-bundle\": \"^1.0.4\",\n        \"rollup-plugin-react-compat\": \"^0.1.1\",\n        \"scenejs\": \"^1.1.4\",\n        \"tslint\": \"^5.18.0\",\n        \"typescript\": \"^4.5.0 <4.6.0\"\n    },\n    \"dependencies\": {\n        \"@scena/event-emitter\": \"^1.0.4\",\n        \"croact\": \"^1.0.3\",\n        \"croact-guides\": \"~0.26.2\"\n    }\n}\n"
  },
  {
    "path": "packages/guides/rollup.config.js",
    "content": "\nimport builder from \"@daybrush/builder\";\nimport compat from \"rollup-plugin-react-compat\";\n\n\nconst reactCompat = compat({\n    useCroact: true,\n    aliasModules: {\n        \"@scena/react-guides\": \"croact-guides\",\n    },\n});\nconst resolveReactCompat = compat({\n    useCroact: true,\n    resolveCompat: true,\n});\n\nconst external = {\n    \"croact\": \"croact\",\n    \"croact-guides\": \"croact-guides\",\n    \"@egjs/component\": \"@egjs/component\",\n    \"@daybrush/utils\": \"@daybrush/utils\",\n    \"gesto\": \"gesto\",\n    \"framework-utils\": \"framework-utils\",\n    \"@egjs/agent\": \"eg.Agent\",\n    \"@egjs/children-differ\": \"eg.ChildrenDiffer\",\n};\nexport default builder([\n    {\n        name: \"Guides\",\n        input: \"src/index.umd.ts\",\n        output: \"./dist/guides.js\",\n        plugins: [resolveReactCompat],\n\n    },\n    {\n        name: \"Guides\",\n        input: \"src/index.umd.ts\",\n        output: \"./dist/guides.min.js\",\n        plugins: [resolveReactCompat],\n        uglify: true,\n    },\n    {\n        input: \"src/index.esm.ts\",\n        output: \"./dist/guides.esm.js\",\n        exports: \"named\",\n        format: \"es\",\n        plugins: [reactCompat],\n        external,\n    },\n    {\n        input: \"src/index.cjs.ts\",\n        output: \"./dist/guides.cjs.js\",\n        exports: \"named\",\n        format: \"cjs\",\n        plugins: [reactCompat],\n        external,\n    },\n]);\n"
  },
  {
    "path": "packages/guides/src/Guides.tsx",
    "content": "import GuidesManager from \"./GuidesManager\";\n\nexport default class Guides extends GuidesManager {}\n"
  },
  {
    "path": "packages/guides/src/GuidesManager.tsx",
    "content": "import { ref, Properties } from \"framework-utils\";\nimport * as React from \"react\";\nimport { PROPERTIES, METHODS, EVENTS } from \"./consts\";\nimport { GuidesInterface, GuidesEvents, GuidesOptions } from \"@scena/react-guides/declaration/types\";\nimport InnerGuides from \"./InnerGuides\";\nimport EventEmitter from \"@scena/event-emitter\";\nimport { camelize } from \"@daybrush/utils\";\nimport { ContainerProvider, renderSelf } from \"croact\";\n\n@Properties(METHODS as any, (prototype, property) => {\n    if (prototype[property]) {\n        return;\n    }\n    prototype[property] = function(...args) {\n        const self = this.getInnerGuides();\n\n        if (!self || !self[property]) {\n            return;\n        }\n        return self[property](...args);\n    };\n})\n@Properties(PROPERTIES, (prototype, property) => {\n    Object.defineProperty(prototype, property, {\n        get() {\n            return this.getInnerGuides().props[property];\n        },\n        set(value) {\n            this.innerGuides.setState({\n                [property]: value,\n            });\n        },\n        enumerable: true,\n        configurable: true,\n    });\n})\n/**\n * @sort 1\n * @extends EventEmitter\n */\nclass Guides extends EventEmitter<GuidesEvents> {\n    private containerProvider: ContainerProvider | null = null;\n    private selfElement: HTMLElement | null = null;\n    private _warp = false;\n    private innerGuides!: InnerGuides;\n    /**\n     * @sort 1\n     * @param - guides' container\n     * @param {$ts:Partial<Guides.GuidesOptions>} - guides' options\n     */\n    constructor(container: HTMLElement, options: Partial<GuidesOptions> = {}) {\n        super();\n        const events: any = {};\n\n        EVENTS.forEach(name => {\n            events[camelize(`on ${name}`)] = (e: any) => this.trigger(name as any, e);\n        });\n        let selfElement!: HTMLElement;\n\n        if (options.warpSelf) {\n            delete options.warpSelf;\n            this._warp = true;\n            selfElement = container;\n        } else {\n            selfElement = document.createElement(\"div\");\n            container.appendChild(selfElement);\n        }\n        this.containerProvider = renderSelf(\n            <InnerGuides ref={ref(this, \"innerGuides\")}\n                {...events}\n                {...options} />,\n            selfElement,\n        );\n    }\n    /**\n     * @param state\n     * @param callback\n     */\n    public setState(state: Partial<GuidesOptions>, callback?: () => void) {\n        this.innerGuides.setState(state, callback);\n    }\n    /**\n     * @param callback\n     */\n    public forceUpdate(callback?: () => void) {\n        this.innerGuides.forceUpdate(callback);\n    }\n    /**\n     * destroy guides\n     */\n    public destroy() {\n        const selfElement = this.selfElement!;\n\n        renderSelf(\n            null,\n            selfElement!,\n            this.containerProvider,\n        );\n        if (!this._warp) {\n            selfElement?.parentElement?.removeChild(selfElement);\n        }\n        this.selfElement = null;\n        this.innerGuides = null;\n    }\n    private getInnerGuides() {\n        return this.innerGuides.guides;\n    }\n}\ninterface Guides extends GuidesInterface {}\n\nexport default Guides;\n"
  },
  {
    "path": "packages/guides/src/InnerGuides.tsx",
    "content": "import * as React from \"react\";\nimport { ref } from \"framework-utils\";\nimport ReactGuides from \"@scena/react-guides\";\nimport { GuidesOptions } from \"@scena/react-guides/declaration/types\";\n\nexport interface InnerGuidesProps extends GuidesOptions {\n    container?: HTMLElement;\n}\nexport default class InnerGuides extends React.Component<InnerGuidesProps, InnerGuidesProps> {\n    public state: InnerGuidesProps = {};\n    public guides: ReactGuides;\n    constructor(props: InnerGuidesProps) {\n        super(props);\n        this.state = this.props;\n    }\n    public render() {\n        return <ReactGuides ref={ref(this, \"guides\")} {...this.state} />;\n    }\n}\n"
  },
  {
    "path": "packages/guides/src/consts.ts",
    "content": "import {\n    PROPERTIES as GUIDES_PROPERTIES,\n    METHODS as GUIDES_METHODS,\n    EVENTS as GUIDES_EVENTS,\n} from \"@scena/react-guides\";\nimport {\n    GuidesOptions,\n} from \"@scena/react-guides/declaration/types\";\nexport const PROPERTIES: Array<keyof GuidesOptions> = GUIDES_PROPERTIES;\n\nexport const METHODS = GUIDES_METHODS as readonly string[];\n\nexport const EVENTS = GUIDES_EVENTS as readonly string[];\n"
  },
  {
    "path": "packages/guides/src/index.cjs.ts",
    "content": "import Guides, * as others from \"./index.esm\";\n\nfor (const name in others) {\n    (Guides as any)[name] = others[name];\n}\ndeclare const module: any;\n\nmodule.exports = Guides;\nexport * from \"./index.esm\";\nexport default Guides;\n"
  },
  {
    "path": "packages/guides/src/index.esm.ts",
    "content": "import Guides from \"./Guides\";\n\nexport * from \"./consts\";\nexport default Guides;\n"
  },
  {
    "path": "packages/guides/src/index.ts",
    "content": "import Guides from \"./Guides\";\n\nexport * from \"@scena/react-guides/declaration/types\";\nexport * from \"./consts\";\nexport default Guides;\n"
  },
  {
    "path": "packages/guides/src/index.umd.ts",
    "content": "import Guides, * as others from \"./index.esm\";\n\nfor (const name in others) {\n    (Guides as any)[name] = others[name];\n}\n\nexport default Guides;\n"
  },
  {
    "path": "packages/guides/test/manual/guides.html",
    "content": "<meta charset=\"utf-8\">\n<meta name=\"viewport\"\n    content=\"width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no\">\n<style>\n    html,\n    body,\n    #root,\n    .app {\n        position: relative;\n        margin: 0;\n        padding: 0;\n        width: 100%;\n        height: 100%;\n        color: #333;\n        background: #fdfdfd;\n    }\n\n    .app {\n        transform-style: preserve-3d;\n    }\n\n    .viewer {\n        position: relative;\n        width: 100%;\n        height: 100%;\n    }\n\n    .viewport {\n        width: 600px;\n        height: 800px;\n        /* height: 600px; */\n        border: 1px solid #eee;\n        box-sizing: border-box;\n    }\n\n    .reset {\n        position: absolute !important;\n        background: #333;\n        width: 30px;\n        height: 30px;\n        z-index: 1;\n        border-right: 1px solid #444;\n        border-bottom: 1px solid #444;\n        box-sizing: border-box;\n        cursor: pointer;\n    }\n\n    .guides {\n        position: absolute !important;\n        top: 0;\n        left: 0;\n        transform: translateZ(1px);\n    }\n\n    .guides.horizontal {\n        left: 30px;\n        width: calc(100% - 30px);\n        height: 30px !important;\n    }\n\n    .guides.vertical {\n        top: 30px;\n        height: calc(100% - 30px);\n        width: 30px !important;\n    }\n\n    /*\n.scena-vertical .scena-guide {\n    height: calc(100% + 30px)!important;\n    top: -30px;\n}\n.scena-horizontal .scena-guide {\n    width: calc(100% + 30px)!important;\n    top: -30px;\n} */\n    .viewer {\n        position: absolute !important;\n        left: 30px;\n        top: 30px;\n        width: calc(100% - 30px);\n        height: calc(100% - 30px);\n    }\n\n    .viewport {\n        text-align: center;\n    }\n\n    .viewport p {\n        padding: 0;\n        margin: 0;\n    }\n\n    .buttons {\n        padding: 5px;\n    }\n\n    .button {\n        display: inline-block;\n        padding: 10px 20px;\n        border: 2px solid #333;\n        color: #333;\n        font-weight: bold;\n        text-decoration: none;\n        font-size: 14px;\n        letter-spacing: 1px;\n        margin: 2px;\n    }\n\n    .viewport p.description {\n        text-align: left;\n        padding: 5px 20px;\n        box-sizing: border-box;\n    }\n\n    .component {\n        display: inline-block;\n        padding: 5px;\n        margin-bottom: 10px;\n    }\n\n    .component p {\n        padding: 0;\n        margin: 0;\n    }\n\n    .component .logo {\n        position: relative;\n        width: 150px;\n        height: 150px;\n    }\n\n    .component img {\n        position: absolute;\n        top: 50%;\n        left: 50%;\n        width: 100%;\n        height: auto;\n        max-height: 100%;\n        transform: translate(-50%, -50%);\n        box-sizing: border-box;\n    }\n\n    .component a {\n        color: black;\n        font-weight: bold;\n    }\n</style>\n<div class=\"app\">\n    <div class=\"reset\"></div>\n    <div class=\"guides horizontal\"></div>\n    <div class=\"guides vertical\"></div>\n\n</div>\n<script src =\"../../dist/guides.js\"></script>\n<script>\n\n    const horizontalGuides = new Guides(document.querySelector(\".guides.horizontal\"), {\n        snapThreshold: 5,\n        snaps: [0, 300, 600],\n        displayDragPos: true,\n        dragPosFormat: v => `${v}px`,\n    }).on(\"changeGuides\", ({ guides }) => {\n        console.log(\"ho\", guides);\n        // moveable.horizontalGuidelines = guides;\n    });\n\n    const verticalGuides = new Guides(document.querySelector(\".guides.vertical\"), {\n        type: \"vertical\",\n        snapThreshold: 5,\n        snaps: [0, 200, 400],\n        displayDragPos: true,\n        dragPosFormat: v => `${v}px`,\n    }).on(\"changeGuides\", ({ guides }) => {\n        console.log(\"ver\", guides);\n    });\n\n</script>\n"
  },
  {
    "path": "packages/guides/test/manual/index.html",
    "content": "<meta charset=\"utf-8\">\n<meta name=\"viewport\"\n    content=\"width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no\">\n<style>\n    html,\n    body,\n    #root,\n    .app {\n        position: relative;\n        margin: 0;\n        padding: 0;\n        width: 100%;\n        height: 100%;\n        color: #333;\n        background: #fdfdfd;\n    }\n\n    .app {\n        transform-style: preserve-3d;\n    }\n\n    .viewer {\n        position: relative;\n        width: 100%;\n        height: 100%;\n    }\n\n    .viewport {\n        width: 600px;\n        height: 800px;\n        /* height: 600px; */\n        border: 1px solid #eee;\n        box-sizing: border-box;\n    }\n\n    .reset {\n        position: absolute !important;\n        background: #333;\n        width: 30px;\n        height: 30px;\n        z-index: 1;\n        border-right: 1px solid #444;\n        border-bottom: 1px solid #444;\n        box-sizing: border-box;\n        cursor: pointer;\n    }\n\n    .guides {\n        position: absolute !important;\n        top: 0;\n        left: 0;\n        transform: translateZ(1px);\n    }\n\n    .guides.horizontal {\n        left: 30px;\n        width: calc(100% - 30px);\n        height: 30px !important;\n    }\n\n    .guides.vertical {\n        top: 30px;\n        height: calc(100% - 30px);\n        width: 30px !important;\n    }\n\n    /*\n.scena-vertical .scena-guide {\n    height: calc(100% + 30px)!important;\n    top: -30px;\n}\n.scena-horizontal .scena-guide {\n    width: calc(100% + 30px)!important;\n    top: -30px;\n} */\n    .viewer {\n        position: absolute !important;\n        left: 30px;\n        top: 30px;\n        width: calc(100% - 30px);\n        height: calc(100% - 30px);\n    }\n\n    .viewport {\n        text-align: center;\n    }\n\n    .viewport p {\n        padding: 0;\n        margin: 0;\n    }\n\n    .buttons {\n        padding: 5px;\n    }\n\n    .button {\n        display: inline-block;\n        padding: 10px 20px;\n        border: 2px solid #333;\n        color: #333;\n        font-weight: bold;\n        text-decoration: none;\n        font-size: 14px;\n        letter-spacing: 1px;\n        margin: 2px;\n    }\n\n    .viewport p.description {\n        text-align: left;\n        padding: 5px 20px;\n        box-sizing: border-box;\n    }\n\n    .component {\n        display: inline-block;\n        padding: 5px;\n        margin-bottom: 10px;\n    }\n\n    .component p {\n        padding: 0;\n        margin: 0;\n    }\n\n    .component .logo {\n        position: relative;\n        width: 150px;\n        height: 150px;\n    }\n\n    .component img {\n        position: absolute;\n        top: 50%;\n        left: 50%;\n        width: 100%;\n        height: auto;\n        max-height: 100%;\n        transform: translate(-50%, -50%);\n        box-sizing: border-box;\n    }\n\n    .component a {\n        color: black;\n        font-weight: bold;\n    }\n</style>\n<div class=\"app\">\n    <div class=\"reset\"></div>\n    <div class=\"guides horizontal\"></div>\n    <div class=\"guides vertical\"></div>\n    <div class=\"viewer\">\n        <div class=\"viewport\">\n            <p class=\"logo\"><img src=\"https://daybrush.com/infinite-viewer/images/logo.png\" data-moveable /></p>\n            <h2 data-moveable>Infinite Viewer</h2>\n            <p class=\"description\" data-moveable>Infinite Viewer is Document Viewer Component with infinite scrolling.</p>\n            <select data-moveable>\n                <option>A</option>\n                <option>B</option>\n            </select>\n            <div class=\"buttons\">\n                <a href=\"https://github.com/daybrush/infinite-viewer\" class=\"button\">Download</a>\n                <a href=\"https://daybrush.com/infinite-viewer/release/latest/doc\" class=\"button\">API</a>\n            </div>\n            <p class=\"description\" data-moveable>&nbsp;This component can scroll up and down, left and right in the\n                negative direction and in the positive direction. &nbsp;It can also be used in combination with\n                moveable, selecto, guides.</p>\n            <div class=\"component\" data-moveable>\n                <p class=\"logo\"><img src=\"https://daybrush.com/moveable/images/256x256.png\" alt=\"Logo\" /></p>\n                <p><a href=\"https://github.com/daybrush/moveable\" target=\"_blank\">Moveable</a></p>\n            </div>\n            <div class=\"component\" data-moveable>\n                <p class=\"logo\"><img src=\"https://daybrush.com/selecto/images/256x256.png\" alt=\"Logo\" style=\"padding: 10px;\" /></p>\n                <p><a href=\"https://github.com/daybrush/selecto\" target=\"_blank\">Selecto</a></p>\n            </div>\n            <div class=\"component\" data-moveable>\n                <p class=\"logo\"><img src=\"https://daybrush.com/guides/images/guides.png\" alt=\"Logo\" /></p>\n                <p><a href=\"https://github.com/daybrush/guides\" target=\"_blank\">Guides</a></p>\n            </div>\n            <div class=\"component\" data-moveable>\n                <p class=\"logo\"><img src=\"https://daybrush.com/scenejs/images/clapperboard.png\" alt=\"Logo\" /></p>\n                <p><a href=\"https://github.com/daybrush/scenejs\" target=\"_blank\">Scene.js</a></p>\n            </div>\n        </div>\n    </div>\n</div>\n<!-- <script src=\"../dist/infinite-viewer.js\"></script> -->√\n<script src=\"https://daybrush.com/infinite-viewer/release/latest/dist/infinite-viewer.js\"></script>\n<script src=\"https://daybrush.com/keycon/release/latest/dist/keycon.js\"></script>\n<!-- <script src=\"../../selecto/dist/selecto.js\"></script> -->\n<script src=\"https://daybrush.com/selecto/release/latest/dist/selecto.js\"></script>\n<!-- <script src=\"https://daybrush.com/guides/release/latest/dist/guides.js\"></script> -->\n<script src =\"../../dist/guides.js\"></script>\n<!-- <script src=\"../../../../moveable/packages/moveable/dist/moveable.js\"></script> -->\n<script src=\"https://daybrush.com/moveable/release/latest/dist/moveable.js\"></script>\n<script src=\"https://daybrush.com/moveable-helper/release/latest/dist/moveable-helper.js\"></script>\n<script>\n    let targets = [];\n    const moveable = new Moveable(document.querySelector(\".viewport\"), {\n        target: [],\n        draggable: true,\n        resizable: true,\n        rotatable: true,\n        snappable: true,\n        snapCenter: true,\n    });\n    const helper = MoveableHelper.create();\n    moveable\n        .on(\"dragStart\", helper.onDragStart)\n        .on(\"drag\", helper.onDrag)\n        .on(\"dragGroupStart\", helper.onDragGroupStart)\n        .on(\"dragGroup\", helper.onDragGroup)\n        .on(\"scaleStart\", helper.onScaleStart)\n        .on(\"scale\", helper.onScale)\n        .on(\"scaleGroupStart\", helper.onScaleGroupStart)\n        .on(\"scaleGroup\", helper.onScaleGroup)\n        .on(\"rotateStart\", helper.onRotateStart)\n        .on(\"rotate\", helper.onRotate)\n        .on(\"rotateGroupStart\", helper.onRotateGroupStart)\n        .on(\"rotateGroup\", helper.onRotateGroup)\n        .on(\"snap\", e => {\n            // console.log(e);\n        });\n\n    const scrollOptions = {\n        container: () => viewer.getContainer(),\n        getScrollPosition: () => {\n            return [\n                viewer.getScrollLeft(),\n                viewer.getScrollTop(),\n            ];\n        },\n        threshold: 200,\n        throttleTime: 30,\n    };\n    const horizontalGuides = new Guides(document.querySelector(\".guides.horizontal\"), {\n        snapThreshold: 5,\n        snaps: [0, 300, 600],\n        displayDragPos: true,\n        scrollOptions,\n        dragPosFormat: v => `${v}px`,\n    }).on(\"changeGuides\", ({ guides }) => {\n        moveable.horizontalGuidelines = guides;\n    }).on(\"requestScroll\", ({ direction }) => {\n        viewer.scrollBy(0, direction[1] * 10);\n    });\n\n    const verticalGuides = new Guides(document.querySelector(\".guides.vertical\"), {\n        type: \"vertical\",\n        snapThreshold: 5,\n        snaps: [0, 200, 400],\n        displayDragPos: true,\n        dragPosFormat: v => `${v}px`,\n        scrollOptions,\n    }).on(\"changeGuides\", ({ guides }) => {\n        moveable.verticalGuidelines = guides;\n    }).on(\"requestScroll\", ({ direction }) => {\n        viewer.scrollBy(direction[0] * 10, 0);\n    });\n\n    const viewer = new InfiniteViewer(\n        document.querySelector(\".viewer\"),\n        document.querySelector(\".viewport\"),\n        {\n            useTransform: true,\n            usePinch: true,\n            useResizeObserver: true,\n            pinchThreshold: 50,\n            // rangeX: [0, 0],\n            // rangeY: [0, 0],\n            // rangeOffsetX: [-200, 200],\n            // rangeOffsetY: [-200, 200],\n            useWheelScroll: true,\n            zoomRange: [0.1, 10],\n            maxPinchWheel: 10,\n        }\n    ).on(\"dragStart\", e => {\n        const target = e.inputEvent.target;\n        if (\n            target.nodeName === \"A\"\n            || moveable.isMoveableElement(target)\n            || targets.some(t => t === target || t.contains(target))\n        ) {\n            e.stop();\n        }\n    }).on(\"dragEnd\", e => {\n        if (!e.isDrag) {\n            selecto.clickTarget(e.inputEvent);\n        }\n    }).on(\"abortPinch\", e => {\n        // console.log(\"abort\", e.inputEvent);\n        selecto.triggerDragStart(e.inputEvent);\n    }).on(\"scroll\", e => {\n        // console.log(\"Change SCROLL\", e.scrollLeft);\n        const zoom = viewer.zoom;\n        horizontalGuides.scroll(e.scrollLeft, zoom);\n        horizontalGuides.scrollGuides(e.scrollTop, zoom);\n\n        verticalGuides.scroll(e.scrollTop, zoom);\n        verticalGuides.scrollGuides(e.scrollLeft, zoom);\n    }).on(\"pinch\", e => {\n        // console.log(e);\n        document.querySelector(\".description\").innerHTML = e.inputEvent.type;\n        const zoom = Math.max(0.1, e.zoom);\n\n        verticalGuides.zoom = zoom;\n        horizontalGuides.zoom = zoom;\n        viewer.zoom = zoom;\n    })\n\n    const selecto = new Selecto({\n        container: document.querySelector(\".app\"),\n        dragContainer: \".viewer\",\n        hitRate: 0,\n\n        selectByClick: true,\n        selectFromInside: false,\n\n        selectableTargets: [\"[data-moveable]\"],\n        toggleContinueSelect: [\"shift\"],\n        scrollOptions: {\n            container: viewer.getContainer(),\n            threshold: 30,\n            throttleTime: 30,\n            getScrollPosition: ({ direction }) => {\n                return [\n                    viewer.getScrollLeft(),\n                    viewer.getScrollTop(),\n                ];\n            }\n        }\n    }).on(\"dragStart\", e => {\n        const inputEvent = e.inputEvent;\n        const target = inputEvent.target;\n        if (\n            target.nodeName === \"A\"\n            || (inputEvent.type === \"touchstart\" && e.isTrusted)\n            || moveable.isMoveableElement(target)\n            || targets.some(t => t === target || t.contains(target))\n        ) {\n            console.log(\"?\", inputEvent.type);\n            e.stop();\n        }\n    }).on(\"scroll\", ({ direction }) => {\n        viewer.scrollBy(direction[0] * 10, direction[1] * 10);\n    }).on(\"selectEnd\", e => {\n        targets = e.selected;\n        moveable.target = targets;\n\n        if (e.isDragStart) {\n            e.inputEvent.preventDefault();\n\n            setTimeout(() => {\n                moveable.dragStart(e.inputEvent);\n            });\n        }\n    });\n\n    requestAnimationFrame(() => {\n        viewer.scrollCenter();\n    });\n\n    window.addEventListener(\"resize\", () => {\n        horizontalGuides.resize();\n        verticalGuides.resize();\n    });\n\n    document.querySelector(\".reset\").addEventListener(\"click\", () => {\n        viewer.scrollCenter();\n    });\n</script>\n"
  },
  {
    "path": "packages/guides/tsconfig.declaration.json",
    "content": "{\n  \"extends\": \"./tsconfig\",\n  \"compilerOptions\": {\n    \"removeComments\": false,\n    \"declaration\": true,\n    \"emitDeclarationOnly\": true,\n    \"declarationDir\": \"declaration\"\n  }\n}\n"
  },
  {
    "path": "packages/guides/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"outDir\": \"./outjs/\",\n    \"esModuleInterop\": false,\n    \"sourceMap\": true,\n    \"module\": \"es2015\",\n    \"target\": \"es5\",\n    \"experimentalDecorators\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"react\",\n    \"lib\": [\n      \"es2015\",\n      \"dom\"\n    ],\n  },\n  \"include\": [\n    \"./src/**/*.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/guides/tsconfig.test.json",
    "content": "{\n  \"extends\": \"./tsconfig\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"noImplicitAny\": false,\n    \"types\": [\n      \"karma-chai\",\n      \"mocha\"\n    ]\n  },\n  \"include\": [\n    \"./src/**/*.ts\",\n    \"./test/**/*.ts\"\n  ]\n}"
  },
  {
    "path": "packages/guides/tslint.json",
    "content": "{\n\t\"defaultSeverity\": \"error\",\n\t\"extends\": [\n\t\t\"tslint:recommended\"\n\t],\n\t\"rules\": {\n\t\t\"jsdoc-format\": false,\n\t\t\"forin\": false,\n\t\t\"no-console\": false,\n        \"no-any\": false,\n        \"no-empty-interface\": false,\n\t\t\"interface-name\": false,\n\t\t\"indent\": [\n\t\t\ttrue,\n\t\t\t\"spaces\",\n\t\t\t4\n\t\t],\n\t\t\"ordered-imports\": false,\n\t\t\"object-literal-sort-keys\": false,\n\t\t\"no-unused-expression\": false,\n\t\t\"arrow-parens\": [\n\t\t\ttrue,\n\t\t\t\"ban-single-arg-parens\"\n\t\t],\n\t\t\"max-line-length\": [\n\t\t\ttrue,\n\t\t\t{\n\t\t\t\t\"limit\": 120,\n\t\t\t\t\"ignore-pattern\": \"(\\\\* @)|//\"\n\t\t\t}\n\t\t],\n\t\t\"trailing-comma\": [\n\t\t\ttrue,\n\t\t\t{\n\t\t\t\t\"multiline\": {\n\t\t\t\t\t\"objects\": \"always\",\n\t\t\t\t\t\"arrays\": \"always\",\n\t\t\t\t\t\"functions\": \"always\",\n\t\t\t\t\t\"typeLiterals\": \"ignore\"\n\t\t\t\t},\n\t\t\t\t\"esSpecCompliant\": true\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/ngx-guides/.browserslistrc",
    "content": "# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.\n# For additional information regarding the format and rule options, please see:\n# https://github.com/browserslist/browserslist#queries\n\n# For the full list of supported browsers by the Angular framework, please see:\n# https://angular.io/guide/browser-support\n\n# You can see what browsers were selected by your queries by running:\n#   npx browserslist\n\nlast 1 Chrome version\nlast 1 Firefox version\nlast 2 Edge major versions\nlast 2 Safari major versions\nlast 2 iOS major versions\nFirefox ESR\n"
  },
  {
    "path": "packages/ngx-guides/.editorconfig",
    "content": "# Editor configuration, see https://editorconfig.org\nroot = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n[*.ts]\nquote_type = single\n\n[*.md]\nmax_line_length = off\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": "packages/ngx-guides/.gitignore",
    "content": "# See http://help.github.com/ignore-files/ for more about ignoring files.\n\n# Compiled output\n/dist\n/tmp\n/out-tsc\n/bazel-out\n\n# Node\n/node_modules\nnpm-debug.log\nyarn-error.log\n\n# IDEs and editors\n.idea/\n.project\n.classpath\n.c9/\n*.launch\n.settings/\n*.sublime-workspace\n\n# Visual Studio Code\n.vscode/*\n!.vscode/settings.json\n!.vscode/tasks.json\n!.vscode/launch.json\n!.vscode/extensions.json\n.history/*\n\n# Miscellaneous\n/.angular/cache\n.sass-cache/\n/connect.lock\n/coverage\n/libpeerconnection.log\ntestem.log\n/typings\n\n# System files\n.DS_Store\nThumbs.db\n"
  },
  {
    "path": "packages/ngx-guides/README.md",
    "content": "\n\n<p align=\"middle\" ><img src=\"https://raw.githubusercontent.com/daybrush/guides/master/demo/images/guides.png\"/></p>\n<h2 align=\"middle\">Angular Guides</h2>\n<p align=\"middle\">\n<a href=\"https://www.npmjs.com/package/ngx-guides\" target=\"_blank\"><img src=\"https://img.shields.io/npm/v/ngx-guides.svg?style=flat-square&color=007acc&label=version\" alt=\"npm version\" /></a>\n<img src=\"https://img.shields.io/badge/language-typescript-blue.svg?style=flat-square\"/>\n<a href=\"https://github.com/daybrush/guides/blob/master/LICENSE\" target=\"_blank\"><img src=\"https://img.shields.io/github/license/daybrush/guides.svg?style=flat-square&label=license&color=08CE5D\"/></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/react-guides\" target=\"_blank\"><img alt=\"React\" src=\"https://img.shields.io/static/v1.svg?label=&message=React&style=flat-square&color=61daeb\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/preact-guides\" target=\"_blank\"><img alt=\"Preact\" src=\"https://img.shields.io/static/v1.svg?label=&message=Preact&style=flat-square&color=673ab8\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/ngx-guides\" target=\"_blank\"><img alt=\"Angular\" src=\"https://img.shields.io/static/v1.svg?label=&message=Angular&style=flat-square&color=C82B38\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/vue-guides\" target=\"_blank\"><img\n    alt=\"Vue\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Vue2&style=flat-square&color=3fb984\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/ngx-guides\" target=\"_blank\"><img\n    alt=\"Vue3\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Vue3&style=flat-square&color=3fb984\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\" target=\"_blank\"><img\n    alt=\"Vue\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Svelte&style=flat-square&color=C82B38\"></a>\n</p>\n<p align=\"middle\">An Angular Guides component that can draw grids and scroll infinitely.</p>\n<p align=\"middle\">\n    <a href=\"https://daybrush.com/guides\" target=\"_blank\"><strong>Demo</strong></a> /\n    <a href=\"https://codesandbox.io/s/ngx-guides-demo-tdqjxo\" target=\"_blank\"><strong>CodeSandbox</strong></a> /\n    <a href=\"https://daybrush.com/guides/release/latest/doc/\" target=\"_blank\"><strong>API</strong></a> /\n    <a href=\"https://github.com/daybrush/ruler\" target=\"_blank\"><strong>Ruler</strong></a> /\n    <a href=\"https://github.com/daybrush/scena\" target=\"_blank\"><strong>Main Project</strong></a>\n</p>\n\n\n## ⚙️ Installation\n### npm\n```sh\n$ npm i ngx-guides\n```\n\n## 🚀 How to use\n* app.component.html\n```html\n<div class=\"guides\">\n  <ngx-guides\n    type=\"horizontal\" ref=\"guides\"\n    v-on:changeGuides=\"onChangeGuides\"\n  ></ngx-guides>\n</div>\n```\n* app.module.ts\n```ts\nimport { BrowserModule } from \"@angular/platform-browser\";\nimport { NgModule } from \"@angular/core\";\nimport { NgxGuidesModule } from \"ngx-guides\";\nimport { AppComponent } from \"./app.component\";\n\n@NgModule({\n  declarations: [AppComponent],\n  imports: [BrowserModule, NgxGuidesModule],\n  providers: [],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n```\n\n\n## ⚙️ Developments\n### `npm run start`\n\nRuns the app in the development mode.<br>\nOpen [http://localhost:4200](http://localhost:4200) to view it in the browser.\n\nThe page will reload if you make edits.<br>\nYou will also see any lint errors in the console.\n\n\n\n## ⭐️ Show Your Support\nPlease give a ⭐️ if this project helped you!\n\n## 👏 Contributing\n\nIf you have any questions or requests or want to contribute to `ngx-guides` or other packages, please write the [issue](https://github.com/daybrush/guides/issues) or give me a Pull Request freely.\n\n## 🐞 Bug Report\n\nIf you find a bug, please report to us opening a new [Issue](https://github.com/daybrush/guides/issues) on GitHub.\n\n\n## 📝 License\n\nThis project is [MIT](https://github.com/daybrush/guides/blob/master/LICENSE) licensed.\n\n```\nMIT License\n\nCopyright (c) 2019 Daybrush\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```\n\n"
  },
  {
    "path": "packages/ngx-guides/angular.json",
    "content": "{\n  \"$schema\": \"./node_modules/@angular/cli/lib/config/schema.json\",\n  \"version\": 1,\n  \"newProjectRoot\": \"projects\",\n  \"projects\": {\n    \"ngx-guides-project\": {\n      \"projectType\": \"application\",\n      \"schematics\": {\n        \"@schematics/angular:application\": {\n          \"strict\": true\n        }\n      },\n      \"root\": \"\",\n      \"sourceRoot\": \"src\",\n      \"prefix\": \"app\",\n      \"architect\": {\n        \"build\": {\n          \"builder\": \"@angular-devkit/build-angular:browser\",\n          \"options\": {\n            \"outputPath\": \"dist/ngx-guides-project\",\n            \"index\": \"src/index.html\",\n            \"main\": \"src/main.ts\",\n            \"polyfills\": \"src/polyfills.ts\",\n            \"tsConfig\": \"tsconfig.app.json\",\n            \"assets\": [\n              \"src/favicon.ico\",\n              \"src/assets\"\n            ],\n            \"styles\": [\n              \"src/styles.css\"\n            ],\n            \"scripts\": []\n          },\n          \"configurations\": {\n            \"production\": {\n              \"budgets\": [\n                {\n                  \"type\": \"initial\",\n                  \"maximumWarning\": \"500kb\",\n                  \"maximumError\": \"1mb\"\n                },\n                {\n                  \"type\": \"anyComponentStyle\",\n                  \"maximumWarning\": \"2kb\",\n                  \"maximumError\": \"4kb\"\n                }\n              ],\n              \"fileReplacements\": [\n                {\n                  \"replace\": \"src/environments/environment.ts\",\n                  \"with\": \"src/environments/environment.prod.ts\"\n                }\n              ],\n              \"outputHashing\": \"all\"\n            },\n            \"development\": {\n              \"buildOptimizer\": false,\n              \"optimization\": false,\n              \"vendorChunk\": true,\n              \"extractLicenses\": false,\n              \"sourceMap\": true,\n              \"namedChunks\": true\n            }\n          },\n          \"defaultConfiguration\": \"production\"\n        },\n        \"serve\": {\n          \"builder\": \"@angular-devkit/build-angular:dev-server\",\n          \"configurations\": {\n            \"production\": {\n              \"browserTarget\": \"ngx-guides-project:build:production\"\n            },\n            \"development\": {\n              \"browserTarget\": \"ngx-guides-project:build:development\"\n            }\n          },\n          \"defaultConfiguration\": \"development\"\n        },\n        \"extract-i18n\": {\n          \"builder\": \"@angular-devkit/build-angular:extract-i18n\",\n          \"options\": {\n            \"browserTarget\": \"ngx-guides-project:build\"\n          }\n        },\n        \"test\": {\n          \"builder\": \"@angular-devkit/build-angular:karma\",\n          \"options\": {\n            \"main\": \"src/test.ts\",\n            \"polyfills\": \"src/polyfills.ts\",\n            \"tsConfig\": \"tsconfig.spec.json\",\n            \"karmaConfig\": \"karma.conf.js\",\n            \"assets\": [\n              \"src/favicon.ico\",\n              \"src/assets\"\n            ],\n            \"styles\": [\n              \"src/styles.css\"\n            ],\n            \"scripts\": []\n          }\n        }\n      }\n    },\n    \"ngx-guides\": {\n      \"projectType\": \"library\",\n      \"root\": \"projects/ngx-guides\",\n      \"sourceRoot\": \"projects/ngx-guides/src\",\n      \"prefix\": \"lib\",\n      \"architect\": {\n        \"build\": {\n          \"builder\": \"@angular-devkit/build-angular:ng-packagr\",\n          \"options\": {\n            \"project\": \"projects/ngx-guides/ng-package.json\"\n          },\n          \"configurations\": {\n            \"production\": {\n              \"tsConfig\": \"projects/ngx-guides/tsconfig.lib.prod.json\"\n            },\n            \"development\": {\n              \"tsConfig\": \"projects/ngx-guides/tsconfig.lib.json\"\n            }\n          },\n          \"defaultConfiguration\": \"production\"\n        },\n        \"test\": {\n          \"builder\": \"@angular-devkit/build-angular:karma\",\n          \"options\": {\n            \"main\": \"projects/ngx-guides/src/test.ts\",\n            \"tsConfig\": \"projects/ngx-guides/tsconfig.spec.json\",\n            \"karmaConfig\": \"projects/ngx-guides/karma.conf.js\"\n          }\n        }\n      }\n    }\n  },\n  \"defaultProject\": \"ngx-guides-project\"\n}\n"
  },
  {
    "path": "packages/ngx-guides/karma.conf.js",
    "content": "// Karma configuration file, see link for more information\n// https://karma-runner.github.io/1.0/config/configuration-file.html\n\nmodule.exports = function (config) {\n  config.set({\n    basePath: '',\n    frameworks: ['jasmine', '@angular-devkit/build-angular'],\n    plugins: [\n      require('karma-jasmine'),\n      require('karma-chrome-launcher'),\n      require('karma-jasmine-html-reporter'),\n      require('karma-coverage'),\n      require('@angular-devkit/build-angular/plugins/karma')\n    ],\n    client: {\n      jasmine: {\n        // you can add configuration options for Jasmine here\n        // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html\n        // for example, you can disable the random execution with `random: false`\n        // or set a specific seed with `seed: 4321`\n      },\n      clearContext: false // leave Jasmine Spec Runner output visible in browser\n    },\n    jasmineHtmlReporter: {\n      suppressAll: true // removes the duplicated traces\n    },\n    coverageReporter: {\n      dir: require('path').join(__dirname, './coverage/ngx-guides-project'),\n      subdir: '.',\n      reporters: [\n        { type: 'html' },\n        { type: 'text-summary' }\n      ]\n    },\n    reporters: ['progress', 'kjhtml'],\n    port: 9876,\n    colors: true,\n    logLevel: config.LOG_INFO,\n    autoWatch: true,\n    browsers: ['Chrome'],\n    singleRun: false,\n    restartOnFileChange: true\n  });\n};\n"
  },
  {
    "path": "packages/ngx-guides/package.json",
    "content": "{\n  \"name\": \"ngx-guides-project\",\n  \"version\": \"0.0.0\",\n  \"scripts\": {\n    \"ng\": \"ng\",\n    \"start\": \"ng serve\",\n    \"build\": \"ng build ngx-guides --configuration production\",\n    \"watch\": \"ng build --watch --configuration development\",\n    \"test\": \"ng test\"\n  },\n  \"private\": true,\n  \"lernaHelperPublishPath\": \"./dist/ngx-guides\",\n  \"dependencies\": {\n    \"@angular/animations\": \"~13.3.0\",\n    \"@angular/common\": \"~13.3.0\",\n    \"@angular/compiler\": \"~13.3.0\",\n    \"@angular/core\": \"~13.3.0\",\n    \"@angular/forms\": \"~13.3.0\",\n    \"@angular/platform-browser\": \"~13.3.0\",\n    \"@angular/platform-browser-dynamic\": \"~13.3.0\",\n    \"@angular/router\": \"~13.3.0\",\n    \"@scena/guides\": \"~0.29.2\",\n    \"rxjs\": \"~7.5.0\",\n    \"tslib\": \"^2.3.0\",\n    \"zone.js\": \"~0.11.4\"\n  },\n  \"devDependencies\": {\n    \"@angular-devkit/build-angular\": \"~13.3.9\",\n    \"@angular/cli\": \"~13.3.9\",\n    \"@angular/compiler-cli\": \"~13.3.0\",\n    \"@types/jasmine\": \"~3.10.0\",\n    \"@types/node\": \"^12.11.1\",\n    \"jasmine-core\": \"~4.0.0\",\n    \"karma\": \"~6.3.0\",\n    \"karma-chrome-launcher\": \"~3.1.0\",\n    \"karma-coverage\": \"~2.1.0\",\n    \"karma-jasmine\": \"~4.0.0\",\n    \"karma-jasmine-html-reporter\": \"~1.7.0\",\n    \"ng-packagr\": \"^13.0.0\",\n    \"typescript\": \"^4.5.0 <4.6.0\"\n  }\n}\n"
  },
  {
    "path": "packages/ngx-guides/projects/ngx-guides/.browserslistrc",
    "content": "# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.\n# For additional information regarding the format and rule options, please see:\n# https://github.com/browserslist/browserslist#queries\n\n# For the full list of supported browsers by the Angular framework, please see:\n# https://angular.io/guide/browser-support\n\n# You can see what browsers were selected by your queries by running:\n#   npx browserslist\n\nlast 1 Chrome version\nlast 1 Firefox version\nlast 2 Edge major versions\nlast 2 Safari major versions\nlast 2 iOS major versions\nFirefox ESR\n"
  },
  {
    "path": "packages/ngx-guides/projects/ngx-guides/CHANGELOG.md",
    "content": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://conventionalcommits.org) for commit guidelines.\n\n## [0.28.2](https://github.com/daybrush/guides/compare/ngx-guides@0.28.1...ngx-guides@0.28.2) (2023-07-29)\n\n\n### :mega: Other\n\n* publish packages ([9b659fe](https://github.com/daybrush/guides/commit/9b659fe71eb2fcb53b731e88b1561a0b18b9fcdc))\n\n\n\n## [0.28.1](https://github.com/daybrush/guides/compare/ngx-guides@0.28.0...ngx-guides@0.28.1) (2023-07-23)\n\n\n### :mega: Other\n\n* publish packages ([73e2427](https://github.com/daybrush/guides/commit/73e24270c27eec1f30cc051fe84569e79f85822c))\n\n\n\n## [0.28.0](https://github.com/daybrush/guides/compare/ngx-guides@0.27.0...ngx-guides@0.28.0) (2023-07-22)\n\n\n### :mega: Other\n\n* publish packages ([324f848](https://github.com/daybrush/guides/commit/324f848e0bae231c82b33be29ee2534d58a6d6b1))\n\n\n\n## [0.27.0](https://github.com/daybrush/guides/compare/ngx-guides@0.26.0...ngx-guides@0.27.0) (2023-06-02)\n\n\n### :mega: Other\n\n* publish packages ([53d07f3](https://github.com/daybrush/guides/commit/53d07f3e31011ee6bff1a2558380dc6e61e98337))\n\n\n\n## [0.26.0](https://github.com/daybrush/guides/compare/ngx-guides@0.25.5...ngx-guides@0.26.0) (2023-06-01)\n\n\n### :mega: Other\n\n* publish packages ([d038e92](https://github.com/daybrush/guides/commit/d038e92046e55f0f65f4ddde24f12ed117fd64e2))\n\n\n\n## [0.25.5](https://github.com/daybrush/guides/compare/ngx-guides@0.25.4...ngx-guides@0.25.5) (2023-05-16)\n\n\n### :mega: Other\n\n* publish packages ([78ed8c7](https://github.com/daybrush/guides/commit/78ed8c708759927cabeb53b8c607fc6f54324371))\n\n\n\n## [0.25.4](https://github.com/daybrush/guides/compare/ngx-guides@0.25.2...ngx-guides@0.25.4) (2023-05-15)\n\n\n### :mega: Other\n\n* publish packages ([1898b89](https://github.com/daybrush/guides/commit/1898b895d5c812a5fd77d99a5928f7e420152772))\n* update packages ([d8db884](https://github.com/daybrush/guides/commit/d8db884cdf43c19f77ad9c5721d3a466808853c3))\n\n\n\n## [0.25.2](https://github.com/daybrush/guides/compare/ngx-guides@0.25.0...ngx-guides@0.25.2) (2023-05-07)\n\n\n### :mega: Other\n\n* publish packages ([e1fb57c](https://github.com/daybrush/guides/commit/e1fb57c59a4a8e6b3e55ffb68cfea64760270288))\n* update croact version ([2fd28db](https://github.com/daybrush/guides/commit/2fd28dbbfd648b8ee6fee39f3972057fce580ae0))\n\n\n\n## [0.25.0](https://github.com/daybrush/guides/compare/ngx-guides@0.24.0...ngx-guides@0.25.0) (2023-04-12)\n\n\n### :mega: Other\n\n* publish packages ([548990d](https://github.com/daybrush/guides/commit/548990d8577ffe565b8605f74edd9eb5a6519deb))\n\n\n\n## [0.24.0](https://github.com/daybrush/guides/compare/ngx-guides@0.23.0...ngx-guides@0.24.0) (2023-04-06)\n\n\n### :rocket: New Features\n\n* add croact-guides ([a7be435](https://github.com/daybrush/guides/commit/a7be435704e24b6d80af80e069a6cc4047d645bc))\n\n\n### :memo: Documentation\n\n* fix Angular README #79 ([4f8b64d](https://github.com/daybrush/guides/commit/4f8b64d1a36e496431e785ea2d2e0cb18b94d9c4))\n\n\n### :mega: Other\n\n* publish packages ([f30e2ba](https://github.com/daybrush/guides/commit/f30e2bad78e1bc02307c8dde8cb1b69ecccdf116))\n\n\n\n## [0.23.0](https://github.com/daybrush/guides/compare/ngx-guides@0.22.3...ngx-guides@0.23.0) (2023-03-04)\n\n\n### :mega: Other\n\n* publish packages ([1afbe1d](https://github.com/daybrush/guides/commit/1afbe1d193cf2457dc9f3296b73d38b5859c0ee0))\n\n\n\n## [0.22.3](https://github.com/daybrush/guides/compare/ngx-guides@0.22.2...ngx-guides@0.22.3) (2023-02-04)\n\n\n### :mega: Other\n\n* publish packages ([ae0d147](https://github.com/daybrush/guides/commit/ae0d14738d83b4f5352463b69f89efe7cc111baf))\n\n\n\n## [0.22.2](https://github.com/daybrush/guides/compare/ngx-guides@0.22.1...ngx-guides@0.22.2) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([0f7949a](https://github.com/daybrush/guides/commit/0f7949a9954e2093d6a599dc545f988ed624d41f))\n\n\n\n## [0.22.1](https://github.com/daybrush/guides/compare/ngx-guides@0.22.0...ngx-guides@0.22.1) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([ab753c1](https://github.com/daybrush/guides/commit/ab753c1c820463c1c0b7805d428c803c5eacc1e3))\n\n\n\n## [0.22.0](https://github.com/daybrush/guides/compare/ngx-guides@0.21.0...ngx-guides@0.22.0) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([6f83fa0](https://github.com/daybrush/guides/commit/6f83fa0c75f494aa79fff98f4a57f86ab295b67d))\n\n\n\n## [0.21.0](https://github.com/daybrush/guides/compare/ngx-guides@0.20.1...ngx-guides@0.21.0) (2023-01-28)\n\n\n### :mega: Other\n\n* publish packages ([9473e84](https://github.com/daybrush/guides/commit/9473e8464fbd4c374ac6251ff995586afd163719))\n\n\n\n## [0.20.1](https://github.com/daybrush/guides/compare/ngx-guides@0.20.0...ngx-guides@0.20.1) (2023-01-27)\n\n\n### :mega: Other\n\n* publish packages ([628b944](https://github.com/daybrush/guides/commit/628b9444bb9e6f5546c7a5edd55a090126f52dd5))\n\n\n\n## [0.20.0](https://github.com/daybrush/guides/compare/ngx-guides@0.19.0...ngx-guides@0.20.0) (2023-01-20)\n\n\n### :bug: Bug Fix\n\n* fix missing guideStyle prop #69 ([1520b89](https://github.com/daybrush/guides/commit/1520b896c29a2f11d96d55d2dbf51c0c06d9a113))\n\n\n### :mega: Other\n\n* publish packages ([095e7c6](https://github.com/daybrush/guides/commit/095e7c670d3bd0bdc168e2f3c11b5dbb8074b26b))\n* publish packages ([1daa6ea](https://github.com/daybrush/guides/commit/1daa6ea441f6c96b8f354953605cd6ac89117878))\n* publish packages ([e143c21](https://github.com/daybrush/guides/commit/e143c2175309bf480ef17731321f6728b8d6bcc2))\n* publish packages ([ce2037a](https://github.com/daybrush/guides/commit/ce2037a18f5f6bbcd750e1fd72cbfc60e3f2c217))\n* publish packages ([0abcba2](https://github.com/daybrush/guides/commit/0abcba24e8b83ea51cf369124e8c2d85fee1ef7e))\n\n\n\n## [0.19.0](https://github.com/daybrush/guides/compare/ngx-guides@0.18.0...ngx-guides@0.19.0) (2022-11-13)\n\n\n### :rocket: New Features\n\n* add scrollOptions #64 ([e0dc92a](https://github.com/daybrush/guides/commit/e0dc92a9ed417dff071b43a68b065907f8f1b8ad))\n\n\n### :bug: Bug Fix\n\n* fix scroll event name ([6eba67b](https://github.com/daybrush/guides/commit/6eba67b33c0de50e1c68ff75882889227db663bc))\n\n\n### :mega: Other\n\n* publish packages ([9cc8e3a](https://github.com/daybrush/guides/commit/9cc8e3ae5f83aa1513c1560166c6babbbe31dfd7))\n\n\n\n## [0.18.0](https://github.com/daybrush/guides/compare/ngx-guides@0.17.3...ngx-guides@0.18.0) (2022-09-21)\n\n\n### :mega: Other\n\n* publish packages ([83de3e4](https://github.com/daybrush/guides/commit/83de3e4ae4bad11905939a44dfa2776fe7d6987d))\n"
  },
  {
    "path": "packages/ngx-guides/projects/ngx-guides/README.md",
    "content": "\n\n<p align=\"middle\" ><img src=\"https://raw.githubusercontent.com/daybrush/guides/master/demo/images/guides.png\"/></p>\n<h2 align=\"middle\">Angular Guides</h2>\n<p align=\"middle\">\n<a href=\"https://www.npmjs.com/package/ngx-guides\" target=\"_blank\"><img src=\"https://img.shields.io/npm/v/ngx-guides.svg?style=flat-square&color=007acc&label=version\" alt=\"npm version\" /></a>\n<img src=\"https://img.shields.io/badge/language-typescript-blue.svg?style=flat-square\"/>\n<a href=\"https://github.com/daybrush/guides/blob/master/LICENSE\" target=\"_blank\"><img src=\"https://img.shields.io/github/license/daybrush/guides.svg?style=flat-square&label=license&color=08CE5D\"/></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/react-guides\" target=\"_blank\"><img alt=\"React\" src=\"https://img.shields.io/static/v1.svg?label=&message=React&style=flat-square&color=61daeb\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/preact-guides\" target=\"_blank\"><img alt=\"Preact\" src=\"https://img.shields.io/static/v1.svg?label=&message=Preact&style=flat-square&color=673ab8\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/ngx-guides\" target=\"_blank\"><img alt=\"Angular\" src=\"https://img.shields.io/static/v1.svg?label=&message=Angular&style=flat-square&color=C82B38\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/vue-guides\" target=\"_blank\"><img\n    alt=\"Vue\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Vue2&style=flat-square&color=3fb984\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/ngx-guides\" target=\"_blank\"><img\n    alt=\"Vue3\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Vue3&style=flat-square&color=3fb984\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\" target=\"_blank\"><img\n    alt=\"Vue\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Svelte&style=flat-square&color=C82B38\"></a>\n</p>\n<p align=\"middle\">An Angular Guides component that can draw grids and scroll infinitely.</p>\n<p align=\"middle\">\n    <a href=\"https://daybrush.com/guides\" target=\"_blank\"><strong>Demo</strong></a> /\n    <a href=\"https://codesandbox.io/s/ngx-guides-demo-tdqjxo\" target=\"_blank\"><strong>CodeSandbox</strong></a> /\n    <a href=\"https://daybrush.com/guides/release/latest/doc/\" target=\"_blank\"><strong>API</strong></a> /\n    <a href=\"https://github.com/daybrush/ruler\" target=\"_blank\"><strong>Ruler</strong></a> /\n    <a href=\"https://github.com/daybrush/scena\" target=\"_blank\"><strong>Main Project</strong></a>\n</p>\n\n\n## ⚙️ Installation\n### npm\n```sh\n$ npm i ngx-guides\n```\n\n## 🚀 How to use\n* app.component.html\n```html\n<div class=\"guides\">\n  <ngx-guides\n    type=\"horizontal\" ref=\"guides\"\n    v-on:changeGuides=\"onChangeGuides\"\n  ></ngx-guides>\n</div>\n```\n* app.module.ts\n```ts\nimport { BrowserModule } from \"@angular/platform-browser\";\nimport { NgModule } from \"@angular/core\";\nimport { NgxGuidesModule } from \"ngx-guides\";\nimport { AppComponent } from \"./app.component\";\n\n@NgModule({\n  declarations: [AppComponent],\n  imports: [BrowserModule, NgxGuidesModule],\n  providers: [],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n```\n\n\n## ⚙️ Developments\n### `npm run start`\n\nRuns the app in the development mode.<br>\nOpen [http://localhost:4200](http://localhost:4200) to view it in the browser.\n\nThe page will reload if you make edits.<br>\nYou will also see any lint errors in the console.\n\n\n\n## ⭐️ Show Your Support\nPlease give a ⭐️ if this project helped you!\n\n## 👏 Contributing\n\nIf you have any questions or requests or want to contribute to `ngx-guides` or other packages, please write the [issue](https://github.com/daybrush/guides/issues) or give me a Pull Request freely.\n\n## 🐞 Bug Report\n\nIf you find a bug, please report to us opening a new [Issue](https://github.com/daybrush/guides/issues) on GitHub.\n\n\n## 📝 License\n\nThis project is [MIT](https://github.com/daybrush/guides/blob/master/LICENSE) licensed.\n\n```\nMIT License\n\nCopyright (c) 2019 Daybrush\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```\n\n"
  },
  {
    "path": "packages/ngx-guides/projects/ngx-guides/karma.conf.js",
    "content": "// Karma configuration file, see link for more information\n// https://karma-runner.github.io/1.0/config/configuration-file.html\n\nmodule.exports = function (config) {\n  config.set({\n    basePath: '',\n    frameworks: ['jasmine', '@angular-devkit/build-angular'],\n    plugins: [\n      require('karma-jasmine'),\n      require('karma-chrome-launcher'),\n      require('karma-jasmine-html-reporter'),\n      require('karma-coverage'),\n      require('@angular-devkit/build-angular/plugins/karma')\n    ],\n    client: {\n      jasmine: {\n        // you can add configuration options for Jasmine here\n        // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html\n        // for example, you can disable the random execution with `random: false`\n        // or set a specific seed with `seed: 4321`\n      },\n      clearContext: false // leave Jasmine Spec Runner output visible in browser\n    },\n    jasmineHtmlReporter: {\n      suppressAll: true // removes the duplicated traces\n    },\n    coverageReporter: {\n      dir: require('path').join(__dirname, '../../coverage/ngx-guides'),\n      subdir: '.',\n      reporters: [\n        { type: 'html' },\n        { type: 'text-summary' }\n      ]\n    },\n    reporters: ['progress', 'kjhtml'],\n    port: 9876,\n    colors: true,\n    logLevel: config.LOG_INFO,\n    autoWatch: true,\n    browsers: ['Chrome'],\n    singleRun: false,\n    restartOnFileChange: true\n  });\n};\n"
  },
  {
    "path": "packages/ngx-guides/projects/ngx-guides/ng-package.json",
    "content": "{\n  \"$schema\": \"../../node_modules/ng-packagr/ng-package.schema.json\",\n  \"dest\": \"../../dist/ngx-guides\",\n  \"lib\": {\n    \"entryFile\": \"src/public-api.ts\"\n  },\n  \"allowedNonPeerDependencies\": [\n    \"@scena/guides\"\n  ]\n}\n"
  },
  {
    "path": "packages/ngx-guides/projects/ngx-guides/package.json",
    "content": "{\n  \"name\": \"ngx-guides\",\n  \"version\": \"0.28.2\",\n  \"description\": \"An Angular Guides component that can draw ruler and manage guidelines.\",\n  \"keywords\": [\n    \"scene\",\n    \"scenejs\",\n    \"scene.js\",\n    \"scena\",\n    \"ruler\",\n    \"guidelines\",\n    \"guides\",\n    \"scroller\",\n    \"angular\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/daybrush/guides.git\"\n  },\n  \"author\": \"Daybrush\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/daybrush/guides/issues\"\n  },\n  \"homepage\": \"https://daybrush.com/guides\",\n  \"dependencies\": {\n    \"@scena/guides\": \"~0.29.2\",\n    \"tslib\": \"^2.3.0\"\n  }\n}\n"
  },
  {
    "path": "packages/ngx-guides/projects/ngx-guides/src/lib/consts.ts",
    "content": "// auto\n// eslint-disable-next-line max-len\nexport const ANGULAR_GUIDES_INPUTS: [\"className\",\"rulerStyle\",\"snapThreshold\",\"snaps\",\"displayDragPos\",\"cspNonce\",\"dragPosFormat\",\"defaultGuides\",\"showGuides\",\"scrollOptions\",\"guideStyle\",\"guidesOffset\",\"digit\",\"defaultGuidesPos\",\"dragGuideStyle\",\"displayGuidePos\",\"guidePosFormat\",\"guidePosStyle\",\"lockGuides\",\"guidesZoom\",\"type\",\"width\",\"height\",\"unit\",\"zoom\",\"direction\",\"textAlign\",\"font\",\"segment\",\"mainLineSize\",\"longLineSize\",\"shortLineSize\",\"lineOffset\",\"textOffset\",\"negativeRuler\",\"range\",\"scrollPos\",\"defaultScrollPos\",\"style\",\"backgroundColor\",\"rangeBackgroundColor\",\"lineColor\",\"textColor\",\"textBackgroundColor\",\"textFormat\",\"warpSelf\",\"selectedBackgroundColor\",\"selectedRanges\",\"defaultPixelScale\",\"useResizeObserver\",\"selectedRangesText\",\"selectedRangesTextColor\",\"selectedRangesTextOffset\",\"marks\",\"markColor\"] = [\"className\",\"rulerStyle\",\"snapThreshold\",\"snaps\",\"displayDragPos\",\"cspNonce\",\"dragPosFormat\",\"defaultGuides\",\"showGuides\",\"scrollOptions\",\"guideStyle\",\"guidesOffset\",\"digit\",\"defaultGuidesPos\",\"dragGuideStyle\",\"displayGuidePos\",\"guidePosFormat\",\"guidePosStyle\",\"lockGuides\",\"guidesZoom\",\"type\",\"width\",\"height\",\"unit\",\"zoom\",\"direction\",\"textAlign\",\"font\",\"segment\",\"mainLineSize\",\"longLineSize\",\"shortLineSize\",\"lineOffset\",\"textOffset\",\"negativeRuler\",\"range\",\"scrollPos\",\"defaultScrollPos\",\"style\",\"backgroundColor\",\"rangeBackgroundColor\",\"lineColor\",\"textColor\",\"textBackgroundColor\",\"textFormat\",\"warpSelf\",\"selectedBackgroundColor\",\"selectedRanges\",\"defaultPixelScale\",\"useResizeObserver\",\"selectedRangesText\",\"selectedRangesTextColor\",\"selectedRangesTextOffset\",\"marks\",\"markColor\"];\nexport const ANGULAR_GUIDES_OUTPUTS: [\"changeGuides\",\"requestScroll\",\"dragStart\",\"drag\",\"dragEnd\",\"clickRuler\"] = [\"changeGuides\",\"requestScroll\",\"dragStart\",\"drag\",\"dragEnd\",\"clickRuler\"];\n"
  },
  {
    "path": "packages/ngx-guides/projects/ngx-guides/src/lib/ngx-guides.component.spec.ts",
    "content": "import { async, ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { NgxGuidesComponent } from './ngx-guides.component';\n\ndescribe('NgxGuidesComponent', () => {\n  let component: NgxGuidesComponent;\n  let fixture: ComponentFixture<NgxGuidesComponent>;\n\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [ NgxGuidesComponent ]\n    })\n    .compileComponents();\n  }));\n\n  beforeEach(() => {\n    fixture = TestBed.createComponent(NgxGuidesComponent);\n    component = fixture.componentInstance;\n    fixture.detectChanges();\n  });\n\n  it('should create', () => {\n    expect(component).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "packages/ngx-guides/projects/ngx-guides/src/lib/ngx-guides.component.ts",
    "content": "import {\n  Component, AfterViewInit, ViewChild,\n  ElementRef, OnChanges, SimpleChanges,\n  OnDestroy, EventEmitter\n} from '@angular/core';\nimport Guides, { EVENTS, PROPERTIES, GuideOptions } from '@scena/guides';\nimport { NgxGuidesInterface } from './ngx-guides.interface';\nimport { ANGULAR_GUIDES_INPUTS, ANGULAR_GUIDES_OUTPUTS } from './consts';\n\n@Component({\n  selector: 'ngx-guides',\n  template: `\n    <div class=\"guides\" #guidesRef></div>\n  `,\n  styles: [],\n  inputs: ANGULAR_GUIDES_INPUTS,\n  outputs: ANGULAR_GUIDES_OUTPUTS,\n})\nexport class NgxGuidesComponent extends NgxGuidesInterface implements AfterViewInit, OnChanges, OnDestroy {\n  @ViewChild('guidesRef', { static: false }) private guidesRef!: ElementRef;\n  constructor() {\n    super();\n    EVENTS.forEach(name => {\n      (this as any)[name] = new EventEmitter();\n    });\n  }\n  ngOnChanges(changes: SimpleChanges): void {\n    const guides = this.guides;\n\n    if (!guides) {\n      return;\n    }\n    for (const name in changes) {\n      const { previousValue, currentValue } = changes[name];\n\n      if (previousValue === currentValue) {\n        continue;\n      }\n      if (name === 'style') {\n        this.setStyle();\n      } else {\n        (guides as any)[name] = currentValue;\n      }\n    }\n  }\n  ngAfterViewInit() {\n    const el = this.guidesRef.nativeElement;\n    const options: GuideOptions = {};\n\n    PROPERTIES.forEach(name => {\n      if (name === \"style\") {\n        return;\n      }\n      if (name in this) {\n        (options as any)[name] = this[name];\n      }\n    });\n\n    options.warpSelf = true;\n    const guides = new Guides(el, options);\n\n    this.guides = guides;\n    this.setStyle();\n\n    EVENTS.forEach(name => {\n      guides.on(name as any, e => {\n        (this as any)[name].emit(e as any);\n      });\n    });\n  }\n  ngOnDestroy() {\n    this.guides.destroy();\n  }\n  setStyle() {\n    const el = this.guidesRef.nativeElement;\n    const elStyle = el.style;\n    const style = this.style;\n\n    for (const name in style) {\n      if (elStyle[name] === style[name]) {\n        continue;\n      }\n      elStyle[name] = style[name];\n    }\n  }\n}\n"
  },
  {
    "path": "packages/ngx-guides/projects/ngx-guides/src/lib/ngx-guides.interface.ts",
    "content": "import VanillaGuides, { METHODS, GuidesInterface, GuidesOptions } from '@scena/guides';\nimport { withMethods, MethodInterface } from 'framework-utils';\nimport { NgxGuidesComponent } from './ngx-guides.component';\nimport { NgxGuidesEvents } from './types';\n\nexport class NgxGuidesInterface {\n  @withMethods(METHODS as any)\n  protected guides!: VanillaGuides;\n}\nexport interface NgxGuidesInterface\nextends MethodInterface<GuidesInterface, VanillaGuides, NgxGuidesComponent>,\nRequired<GuidesOptions>, NgxGuidesEvents {}\n"
  },
  {
    "path": "packages/ngx-guides/projects/ngx-guides/src/lib/ngx-guides.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { NgxGuidesComponent } from './ngx-guides.component';\n\n\n\n@NgModule({\n  declarations: [NgxGuidesComponent],\n  imports: [\n  ],\n  exports: [NgxGuidesComponent]\n})\nexport class NgxGuidesModule { }\n"
  },
  {
    "path": "packages/ngx-guides/projects/ngx-guides/src/lib/ngx-guides.service.spec.ts",
    "content": "import { TestBed } from '@angular/core/testing';\n\nimport { NgxGuidesService } from './ngx-guides.service';\n\ndescribe('NgxGuidesService', () => {\n  beforeEach(() => TestBed.configureTestingModule({}));\n\n  it('should be created', () => {\n    const service: NgxGuidesService = TestBed.get(NgxGuidesService);\n    expect(service).toBeTruthy();\n  });\n});\n"
  },
  {
    "path": "packages/ngx-guides/projects/ngx-guides/src/lib/ngx-guides.service.ts",
    "content": "import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NgxGuidesService {\n\n  constructor() { }\n}\n"
  },
  {
    "path": "packages/ngx-guides/projects/ngx-guides/src/lib/types.ts",
    "content": "import { EventEmitter } from '@angular/core';\nimport { GuidesEvents } from '@scena/guides';\n\nexport type NgxGuidesEvents = {\n  [key in keyof GuidesEvents]: EventEmitter<GuidesEvents[key]>\n};\n"
  },
  {
    "path": "packages/ngx-guides/projects/ngx-guides/src/public-api.ts",
    "content": "/*\n * Public API Surface of ngx-guides\n */\n\nexport * from './lib/ngx-guides.service';\nexport * from './lib/ngx-guides.component';\nexport * from './lib/ngx-guides.module';\n"
  },
  {
    "path": "packages/ngx-guides/projects/ngx-guides/src/test.ts",
    "content": "// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n\nimport 'zone.js';\nimport 'zone.js/testing';\nimport { getTestBed } from '@angular/core/testing';\nimport {\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting\n} from '@angular/platform-browser-dynamic/testing';\n\ndeclare const require: {\n  context(path: string, deep?: boolean, filter?: RegExp): {\n    <T>(id: string): T;\n    keys(): string[];\n  };\n};\n\n// First, initialize the Angular testing environment.\ngetTestBed().initTestEnvironment(\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting(),\n);\n\n// Then we find all the tests.\nconst context = require.context('./', true, /\\.spec\\.ts$/);\n// And load the modules.\ncontext.keys().map(context);\n"
  },
  {
    "path": "packages/ngx-guides/projects/ngx-guides/tsconfig.lib.json",
    "content": "/* To learn more about this file see: https://angular.io/config/tsconfig. */\n{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../out-tsc/lib\",\n    \"declaration\": true,\n    \"declarationMap\": true,\n    \"inlineSources\": true,\n    \"types\": []\n  },\n  \"exclude\": [\n    \"src/test.ts\",\n    \"**/*.spec.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/ngx-guides/projects/ngx-guides/tsconfig.lib.prod.json",
    "content": "/* To learn more about this file see: https://angular.io/config/tsconfig. */\n{\n  \"extends\": \"./tsconfig.lib.json\",\n  \"compilerOptions\": {\n    \"declarationMap\": false\n  },\n  \"angularCompilerOptions\": {\n    \"compilationMode\": \"partial\"\n  }\n}\n"
  },
  {
    "path": "packages/ngx-guides/projects/ngx-guides/tsconfig.spec.json",
    "content": "/* To learn more about this file see: https://angular.io/config/tsconfig. */\n{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../../out-tsc/spec\",\n    \"types\": [\n      \"jasmine\"\n    ]\n  },\n  \"files\": [\n    \"src/test.ts\"\n  ],\n  \"include\": [\n    \"**/*.spec.ts\",\n    \"**/*.d.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/ngx-guides/src/app/app.component.css",
    "content": ""
  },
  {
    "path": "packages/ngx-guides/src/app/app.component.html",
    "content": "<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -->\n<!-- * * * * * * * * * * * The content below * * * * * * * * * * * -->\n<!-- * * * * * * * * * * is only a placeholder * * * * * * * * * * -->\n<!-- * * * * * * * * * * and can be replaced. * * * * * * * * * * * -->\n<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -->\n<!-- * * * * * * * * * Delete the template below * * * * * * * * * * -->\n<!-- * * * * * * * to get started with your project! * * * * * * * * -->\n<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -->\n\n<style>\n  :host {\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n    font-size: 14px;\n    color: #333;\n    box-sizing: border-box;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n  }\n\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6 {\n    margin: 8px 0;\n  }\n\n  p {\n    margin: 0;\n  }\n\n  .spacer {\n    flex: 1;\n  }\n\n  .toolbar {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    height: 60px;\n    display: flex;\n    align-items: center;\n    background-color: #1976d2;\n    color: white;\n    font-weight: 600;\n  }\n\n  .toolbar img {\n    margin: 0 16px;\n  }\n\n  .toolbar #twitter-logo {\n    height: 40px;\n    margin: 0 8px;\n  }\n\n  .toolbar #youtube-logo {\n    height: 40px;\n    margin: 0 16px;\n  }\n\n  .toolbar #twitter-logo:hover,\n  .toolbar #youtube-logo:hover {\n    opacity: 0.8;\n  }\n\n  .content {\n    display: flex;\n    margin: 82px auto 32px;\n    padding: 0 16px;\n    max-width: 960px;\n    flex-direction: column;\n    align-items: center;\n  }\n\n  svg.material-icons {\n    height: 24px;\n    width: auto;\n  }\n\n  svg.material-icons:not(:last-child) {\n    margin-right: 8px;\n  }\n\n  .card svg.material-icons path {\n    fill: #888;\n  }\n\n  .card-container {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: center;\n    margin-top: 16px;\n  }\n\n  .card {\n    all: unset;\n    border-radius: 4px;\n    border: 1px solid #eee;\n    background-color: #fafafa;\n    height: 40px;\n    width: 200px;\n    margin: 0 8px 16px;\n    padding: 16px;\n    display: flex;\n    flex-direction: row;\n    justify-content: center;\n    align-items: center;\n    transition: all 0.2s ease-in-out;\n    line-height: 24px;\n  }\n\n  .card-container .card:not(:last-child) {\n    margin-right: 0;\n  }\n\n  .card.card-small {\n    height: 16px;\n    width: 168px;\n  }\n\n  .card-container .card:not(.highlight-card) {\n    cursor: pointer;\n  }\n\n  .card-container .card:not(.highlight-card):hover {\n    transform: translateY(-3px);\n    box-shadow: 0 4px 17px rgba(0, 0, 0, 0.35);\n  }\n\n  .card-container .card:not(.highlight-card):hover .material-icons path {\n    fill: rgb(105, 103, 103);\n  }\n\n  .card.highlight-card {\n    background-color: #1976d2;\n    color: white;\n    font-weight: 600;\n    border: none;\n    width: auto;\n    min-width: 30%;\n    position: relative;\n  }\n\n  .card.card.highlight-card span {\n    margin-left: 60px;\n  }\n\n  svg#rocket {\n    width: 80px;\n    position: absolute;\n    left: -10px;\n    top: -24px;\n  }\n\n  svg#rocket-smoke {\n    height: calc(100vh - 95px);\n    position: absolute;\n    top: 10px;\n    right: 180px;\n    z-index: -10;\n  }\n\n  a,\n  a:visited,\n  a:hover {\n    color: #1976d2;\n    text-decoration: none;\n  }\n\n  a:hover {\n    color: #125699;\n  }\n\n  .terminal {\n    position: relative;\n    width: 80%;\n    max-width: 600px;\n    border-radius: 6px;\n    padding-top: 45px;\n    margin-top: 8px;\n    overflow: hidden;\n    background-color: rgb(15, 15, 16);\n  }\n\n  .terminal::before {\n    content: \"\\2022 \\2022 \\2022\";\n    position: absolute;\n    top: 0;\n    left: 0;\n    height: 4px;\n    background: rgb(58, 58, 58);\n    color: #c2c3c4;\n    width: 100%;\n    font-size: 2rem;\n    line-height: 0;\n    padding: 14px 0;\n    text-indent: 4px;\n  }\n\n  .terminal pre {\n    font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;\n    color: white;\n    padding: 0 1rem 1rem;\n    margin: 0;\n  }\n\n  .circle-link {\n    height: 40px;\n    width: 40px;\n    border-radius: 40px;\n    margin: 8px;\n    background-color: white;\n    border: 1px solid #eeeeee;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    cursor: pointer;\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);\n    transition: 1s ease-out;\n  }\n\n  .circle-link:hover {\n    transform: translateY(-0.25rem);\n    box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.2);\n  }\n\n  footer {\n    margin-top: 8px;\n    display: flex;\n    align-items: center;\n    line-height: 20px;\n  }\n\n  footer a {\n    display: flex;\n    align-items: center;\n  }\n\n  .github-star-badge {\n    color: #24292e;\n    display: flex;\n    align-items: center;\n    font-size: 12px;\n    padding: 3px 10px;\n    border: 1px solid rgba(27,31,35,.2);\n    border-radius: 3px;\n    background-image: linear-gradient(-180deg,#fafbfc,#eff3f6 90%);\n    margin-left: 4px;\n    font-weight: 600;\n  }\n\n  .github-star-badge:hover {\n    background-image: linear-gradient(-180deg,#f0f3f6,#e6ebf1 90%);\n    border-color: rgba(27,31,35,.35);\n    background-position: -.5em;\n  }\n\n  .github-star-badge .material-icons {\n    height: 16px;\n    width: 16px;\n    margin-right: 4px;\n  }\n\n  svg#clouds {\n    position: fixed;\n    bottom: -160px;\n    left: -230px;\n    z-index: -10;\n    width: 1920px;\n  }\n\n  /* Responsive Styles */\n  @media screen and (max-width: 767px) {\n    .card-container > *:not(.circle-link) ,\n    .terminal {\n      width: 100%;\n    }\n\n    .card:not(.highlight-card) {\n      height: 16px;\n      margin: 8px 0;\n    }\n\n    .card.highlight-card span {\n      margin-left: 72px;\n    }\n\n    svg#rocket-smoke {\n      right: 120px;\n      transform: rotate(-5deg);\n    }\n  }\n\n  @media screen and (max-width: 575px) {\n    svg#rocket-smoke {\n      display: none;\n      visibility: hidden;\n    }\n  }\n</style>\n\n<!-- Toolbar -->\n<div class=\"toolbar\" role=\"banner\">\n  <img\n    width=\"40\"\n    alt=\"Angular Logo\"\n    src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTAgMjUwIj4KICAgIDxwYXRoIGZpbGw9IiNERDAwMzEiIGQ9Ik0xMjUgMzBMMzEuOSA2My4ybDE0LjIgMTIzLjFMMTI1IDIzMGw3OC45LTQzLjcgMTQuMi0xMjMuMXoiIC8+CiAgICA8cGF0aCBmaWxsPSIjQzMwMDJGIiBkPSJNMTI1IDMwdjIyLjItLjFWMjMwbDc4LjktNDMuNyAxNC4yLTEyMy4xTDEyNSAzMHoiIC8+CiAgICA8cGF0aCAgZmlsbD0iI0ZGRkZGRiIgZD0iTTEyNSA1Mi4xTDY2LjggMTgyLjZoMjEuN2wxMS43LTI5LjJoNDkuNGwxMS43IDI5LjJIMTgzTDEyNSA1Mi4xem0xNyA4My4zaC0zNGwxNy00MC45IDE3IDQwLjl6IiAvPgogIDwvc3ZnPg==\"\n  />\n  <span>Welcome</span>\n    <div class=\"spacer\"></div>\n    <a aria-label=\"Angular on twitter\" target=\"_blank\" rel=\"noopener\" href=\"https://twitter.com/angular\" title=\"Twitter\">\n      <svg id=\"twitter-logo\" height=\"24\" data-name=\"Logo\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 400 400\">\n        <rect width=\"400\" height=\"400\" fill=\"none\"/>\n        <path d=\"M153.62,301.59c94.34,0,145.94-78.16,145.94-145.94,0-2.22,0-4.43-.15-6.63A104.36,104.36,0,0,0,325,122.47a102.38,102.38,0,0,1-29.46,8.07,51.47,51.47,0,0,0,22.55-28.37,102.79,102.79,0,0,1-32.57,12.45,51.34,51.34,0,0,0-87.41,46.78A145.62,145.62,0,0,1,92.4,107.81a51.33,51.33,0,0,0,15.88,68.47A50.91,50.91,0,0,1,85,169.86c0,.21,0,.43,0,.65a51.31,51.31,0,0,0,41.15,50.28,51.21,51.21,0,0,1-23.16.88,51.35,51.35,0,0,0,47.92,35.62,102.92,102.92,0,0,1-63.7,22A104.41,104.41,0,0,1,75,278.55a145.21,145.21,0,0,0,78.62,23\" fill=\"#fff\"/>\n      </svg>\n    </a>\n    <a aria-label=\"Angular on YouTube\" target=\"_blank\" rel=\"noopener\" href=\"https://youtube.com/angular\" title=\"YouTube\">\n      <svg id=\"youtube-logo\" height=\"24\" width=\"24\" data-name=\"Logo\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"#fff\">\n        <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n        <path d=\"M21.58 7.19c-.23-.86-.91-1.54-1.77-1.77C18.25 5 12 5 12 5s-6.25 0-7.81.42c-.86.23-1.54.91-1.77 1.77C2 8.75 2 12 2 12s0 3.25.42 4.81c.23.86.91 1.54 1.77 1.77C5.75 19 12 19 12 19s6.25 0 7.81-.42c.86-.23 1.54-.91 1.77-1.77C22 15.25 22 12 22 12s0-3.25-.42-4.81zM10 15V9l5.2 3-5.2 3z\"/>\n      </svg>\n    </a>\n</div>\n\n<div class=\"content\" role=\"main\">\n\n  <!-- Highlight Card -->\n  <div class=\"card highlight-card card-small\">\n\n    <svg id=\"rocket\" xmlns=\"http://www.w3.org/2000/svg\" width=\"101.678\" height=\"101.678\" viewBox=\"0 0 101.678 101.678\">\n      <title>Rocket Ship</title>\n      <g id=\"Group_83\" data-name=\"Group 83\" transform=\"translate(-141 -696)\">\n        <circle id=\"Ellipse_8\" data-name=\"Ellipse 8\" cx=\"50.839\" cy=\"50.839\" r=\"50.839\" transform=\"translate(141 696)\" fill=\"#dd0031\"/>\n        <g id=\"Group_47\" data-name=\"Group 47\" transform=\"translate(165.185 720.185)\">\n          <path id=\"Path_33\" data-name=\"Path 33\" d=\"M3.4,42.615a3.084,3.084,0,0,0,3.553,3.553,21.419,21.419,0,0,0,12.215-6.107L9.511,30.4A21.419,21.419,0,0,0,3.4,42.615Z\" transform=\"translate(0.371 3.363)\" fill=\"#fff\"/>\n          <path id=\"Path_34\" data-name=\"Path 34\" d=\"M53.3,3.221A3.09,3.09,0,0,0,50.081,0,48.227,48.227,0,0,0,18.322,13.437c-6-1.666-14.991-1.221-18.322,7.218A33.892,33.892,0,0,1,9.439,25.1l-.333.666a3.013,3.013,0,0,0,.555,3.553L23.985,43.641a2.9,2.9,0,0,0,3.553.555l.666-.333A33.892,33.892,0,0,1,32.647,53.3c8.55-3.664,8.884-12.326,7.218-18.322A48.227,48.227,0,0,0,53.3,3.221ZM34.424,9.772a6.439,6.439,0,1,1,9.106,9.106,6.368,6.368,0,0,1-9.106,0A6.467,6.467,0,0,1,34.424,9.772Z\" transform=\"translate(0 0.005)\" fill=\"#fff\"/>\n        </g>\n      </g>\n    </svg>\n\n    <span>{{ title }} app is running!</span>\n\n    <svg id=\"rocket-smoke\" xmlns=\"http://www.w3.org/2000/svg\" width=\"516.119\" height=\"1083.632\" viewBox=\"0 0 516.119 1083.632\">\n      <title>Rocket Ship Smoke</title>\n      <path id=\"Path_40\" data-name=\"Path 40\" d=\"M644.6,141S143.02,215.537,147.049,870.207s342.774,201.755,342.774,201.755S404.659,847.213,388.815,762.2c-27.116-145.51-11.551-384.124,271.9-609.1C671.15,139.365,644.6,141,644.6,141Z\" transform=\"translate(-147.025 -140.939)\" fill=\"#f5f5f5\"/>\n    </svg>\n\n  </div>\n\n  <!-- Resources -->\n  <h2>Resources</h2>\n  <p>Here are some links to help you get started:</p>\n\n  <div class=\"card-container\">\n    <a class=\"card\" target=\"_blank\" rel=\"noopener\" href=\"https://angular.io/tutorial\">\n      <svg class=\"material-icons\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M5 13.18v4L12 21l7-3.82v-4L12 17l-7-3.82zM12 3L1 9l11 6 9-4.91V17h2V9L12 3z\"/></svg>\n      <span>Learn Angular</span>\n      <svg class=\"material-icons\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/></svg>    </a>\n\n    <a class=\"card\" target=\"_blank\" rel=\"noopener\" href=\"https://angular.io/cli\">\n      <svg class=\"material-icons\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z\"/></svg>\n      <span>CLI Documentation</span>\n      <svg class=\"material-icons\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/></svg>\n    </a>\n\n    <a class=\"card\" target=\"_blank\" rel=\"noopener\" href=\"https://material.angular.io\">\n      <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"margin-right: 8px\" width=\"21.813\" height=\"23.453\" viewBox=\"0 0 21.813 23.453\"><path d=\"M4099.584,972.736h0l-10.882,3.9,1.637,14.4,9.245,5.153,9.245-5.153,1.686-14.4Z\" transform=\"translate(-4088.702 -972.736)\" fill=\"#808080\"/><path d=\"M4181.516,972.736v23.453l9.245-5.153,1.686-14.4Z\" transform=\"translate(-4170.633 -972.736)\" fill=\"#808080\"/><path d=\"M4137.529,1076.127l-7.7-3.723,4.417-2.721,7.753,3.723Z\" transform=\"translate(-4125.003 -1058.315)\" fill=\"#ffe0b2\"/><path d=\"M4137.529,1051.705l-7.7-3.723,4.417-2.721,7.753,3.723Z\" transform=\"translate(-4125.003 -1036.757)\" fill=\"#fff3e0\"/><path d=\"M4137.529,1027.283l-7.7-3.723,4.417-2.721,7.753,3.723Z\" transform=\"translate(-4125.003 -1015.199)\" fill=\"#fff\"/></svg>\n      <span>Angular Material</span>\n      <svg class=\"material-icons\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/></svg>\n    </a>\n\n    <a class=\"card\" target=\"_blank\" rel=\"noopener\" href=\"https://blog.angular.io/\">\n      <svg class=\"material-icons\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M13.5.67s.74 2.65.74 4.8c0 2.06-1.35 3.73-3.41 3.73-2.07 0-3.63-1.67-3.63-3.73l.03-.36C5.21 7.51 4 10.62 4 14c0 4.42 3.58 8 8 8s8-3.58 8-8C20 8.61 17.41 3.8 13.5.67zM11.71 19c-1.78 0-3.22-1.4-3.22-3.14 0-1.62 1.05-2.76 2.81-3.12 1.77-.36 3.6-1.21 4.62-2.58.39 1.29.59 2.65.59 4.04 0 2.65-2.15 4.8-4.8 4.8z\"/></svg>\n      <span>Angular Blog</span>\n      <svg class=\"material-icons\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/></svg>\n    </a>\n\n    <a class=\"card\" target=\"_blank\" rel=\"noopener\" href=\"https://angular.io/devtools/\">\n      <svg class=\"material-icons\" xmlns=\"http://www.w3.org/2000/svg\" enable-background=\"new 0 0 24 24\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><g><rect fill=\"none\" height=\"24\" width=\"24\"/></g><g><g><path d=\"M14.73,13.31C15.52,12.24,16,10.93,16,9.5C16,5.91,13.09,3,9.5,3S3,5.91,3,9.5C3,13.09,5.91,16,9.5,16 c1.43,0,2.74-0.48,3.81-1.27L19.59,21L21,19.59L14.73,13.31z M9.5,14C7.01,14,5,11.99,5,9.5S7.01,5,9.5,5S14,7.01,14,9.5 S11.99,14,9.5,14z\"/><polygon points=\"10.29,8.44 9.5,6 8.71,8.44 6.25,8.44 8.26,10.03 7.49,12.5 9.5,10.97 11.51,12.5 10.74,10.03 12.75,8.44\"/></g></g></svg>\n      <span>Angular DevTools</span>\n      <svg class=\"material-icons\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/></svg>\n    </a>\n\n  </div>\n\n  <!-- Next Steps -->\n  <h2>Next Steps</h2>\n  <p>What do you want to do next with your app?</p>\n\n  <input type=\"hidden\" #selection>\n\n  <div class=\"card-container\">\n    <button class=\"card card-small\" (click)=\"selection.value = 'component'\" tabindex=\"0\">\n      <svg class=\"material-icons\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"/></svg>\n      <span>New Component</span>\n    </button>\n\n    <button class=\"card card-small\" (click)=\"selection.value = 'material'\" tabindex=\"0\">\n      <svg class=\"material-icons\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"/></svg>\n      <span>Angular Material</span>\n    </button>\n\n    <button class=\"card card-small\" (click)=\"selection.value = 'pwa'\" tabindex=\"0\">\n      <svg class=\"material-icons\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"/></svg>\n      <span>Add PWA Support</span>\n    </button>\n\n    <button class=\"card card-small\" (click)=\"selection.value = 'dependency'\" tabindex=\"0\">\n      <svg class=\"material-icons\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"/></svg>\n      <span>Add Dependency</span>\n    </button>\n\n    <button class=\"card card-small\" (click)=\"selection.value = 'test'\" tabindex=\"0\">\n      <svg class=\"material-icons\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"/></svg>\n      <span>Run and Watch Tests</span>\n    </button>\n\n    <button class=\"card card-small\" (click)=\"selection.value = 'build'\" tabindex=\"0\">\n      <svg class=\"material-icons\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"/></svg>\n      <span>Build for Production</span>\n    </button>\n  </div>\n\n  <!-- Terminal -->\n  <div class=\"terminal\" [ngSwitch]=\"selection.value\">\n      <pre *ngSwitchDefault>ng generate component xyz</pre>\n      <pre *ngSwitchCase=\"'material'\">ng add @angular/material</pre>\n      <pre *ngSwitchCase=\"'pwa'\">ng add @angular/pwa</pre>\n      <pre *ngSwitchCase=\"'dependency'\">ng add _____</pre>\n      <pre *ngSwitchCase=\"'test'\">ng test</pre>\n      <pre *ngSwitchCase=\"'build'\">ng build</pre>\n  </div>\n\n  <!-- Links -->\n  <div class=\"card-container\">\n    <a class=\"circle-link\" title=\"Find a Local Meetup\" href=\"https://www.meetup.com/find/?keywords=angular\" target=\"_blank\" rel=\"noopener\">\n      <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24.607\" height=\"23.447\" viewBox=\"0 0 24.607 23.447\">\n        <title>Meetup Logo</title>\n        <path id=\"logo--mSwarm\" d=\"M21.221,14.95A4.393,4.393,0,0,1,17.6,19.281a4.452,4.452,0,0,1-.8.069c-.09,0-.125.035-.154.117a2.939,2.939,0,0,1-2.506,2.091,2.868,2.868,0,0,1-2.248-.624.168.168,0,0,0-.245-.005,3.926,3.926,0,0,1-2.589.741,4.015,4.015,0,0,1-3.7-3.347,2.7,2.7,0,0,1-.043-.38c0-.106-.042-.146-.143-.166a3.524,3.524,0,0,1-1.516-.69A3.623,3.623,0,0,1,2.23,14.557a3.66,3.66,0,0,1,1.077-3.085.138.138,0,0,0,.026-.2,3.348,3.348,0,0,1-.451-1.821,3.46,3.46,0,0,1,2.749-3.28.44.44,0,0,0,.355-.281,5.072,5.072,0,0,1,3.863-3,5.028,5.028,0,0,1,3.555.666.31.31,0,0,0,.271.03A4.5,4.5,0,0,1,18.3,4.7a4.4,4.4,0,0,1,1.334,2.751,3.658,3.658,0,0,1,.022.706.131.131,0,0,0,.1.157,2.432,2.432,0,0,1,1.574,1.645,2.464,2.464,0,0,1-.7,2.616c-.065.064-.051.1-.014.166A4.321,4.321,0,0,1,21.221,14.95ZM13.4,14.607a2.09,2.09,0,0,0,1.409,1.982,4.7,4.7,0,0,0,1.275.221,1.807,1.807,0,0,0,.9-.151.542.542,0,0,0,.321-.545.558.558,0,0,0-.359-.534,1.2,1.2,0,0,0-.254-.078c-.262-.047-.526-.086-.787-.138a.674.674,0,0,1-.617-.75,3.394,3.394,0,0,1,.218-1.109c.217-.658.509-1.286.79-1.918a15.609,15.609,0,0,0,.745-1.86,1.95,1.95,0,0,0,.06-1.073,1.286,1.286,0,0,0-1.051-1.033,1.977,1.977,0,0,0-1.521.2.339.339,0,0,1-.446-.042c-.1-.092-.2-.189-.307-.284a1.214,1.214,0,0,0-1.643-.061,7.563,7.563,0,0,1-.614.512A.588.588,0,0,1,10.883,8c-.215-.115-.437-.215-.659-.316a2.153,2.153,0,0,0-.695-.248A2.091,2.091,0,0,0,7.541,8.562a9.915,9.915,0,0,0-.405.986c-.559,1.545-1.015,3.123-1.487,4.7a1.528,1.528,0,0,0,.634,1.777,1.755,1.755,0,0,0,1.5.211,1.35,1.35,0,0,0,.824-.858c.543-1.281,1.032-2.584,1.55-3.875.142-.355.28-.712.432-1.064a.548.548,0,0,1,.851-.24.622.622,0,0,1,.185.539,2.161,2.161,0,0,1-.181.621c-.337.852-.68,1.7-1.018,2.552a2.564,2.564,0,0,0-.173.528.624.624,0,0,0,.333.71,1.073,1.073,0,0,0,.814.034,1.22,1.22,0,0,0,.657-.655q.758-1.488,1.511-2.978.35-.687.709-1.37a1.073,1.073,0,0,1,.357-.434.43.43,0,0,1,.463-.016.373.373,0,0,1,.153.387.7.7,0,0,1-.057.236c-.065.157-.127.316-.2.469-.42.883-.846,1.763-1.262,2.648A2.463,2.463,0,0,0,13.4,14.607Zm5.888,6.508a1.09,1.09,0,0,0-2.179.006,1.09,1.09,0,0,0,2.179-.006ZM1.028,12.139a1.038,1.038,0,1,0,.01-2.075,1.038,1.038,0,0,0-.01,2.075ZM13.782.528a1.027,1.027,0,1,0-.011,2.055A1.027,1.027,0,0,0,13.782.528ZM22.21,6.95a.882.882,0,0,0-1.763.011A.882.882,0,0,0,22.21,6.95ZM4.153,4.439a.785.785,0,1,0,.787-.78A.766.766,0,0,0,4.153,4.439Zm8.221,18.22a.676.676,0,1,0-.677.666A.671.671,0,0,0,12.374,22.658ZM22.872,12.2a.674.674,0,0,0-.665.665.656.656,0,0,0,.655.643.634.634,0,0,0,.655-.644A.654.654,0,0,0,22.872,12.2ZM7.171-.123A.546.546,0,0,0,6.613.43a.553.553,0,1,0,1.106,0A.539.539,0,0,0,7.171-.123ZM24.119,9.234a.507.507,0,0,0-.493.488.494.494,0,0,0,.494.494.48.48,0,0,0,.487-.483A.491.491,0,0,0,24.119,9.234Zm-19.454,9.7a.5.5,0,0,0-.488-.488.491.491,0,0,0-.487.5.483.483,0,0,0,.491.479A.49.49,0,0,0,4.665,18.936Z\" transform=\"translate(0 0.123)\" fill=\"#f64060\"/>\n      </svg>\n    </a>\n\n    <a class=\"circle-link\" title=\"Join the Conversation on Discord\" href=\"https://discord.gg/angular\" target=\"_blank\" rel=\"noopener\">\n      <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" viewBox=\"0 0 245 240\">\n        <title>Discord Logo</title>\n        <path d=\"M104.4 103.9c-5.7 0-10.2 5-10.2 11.1s4.6 11.1 10.2 11.1c5.7 0 10.2-5 10.2-11.1.1-6.1-4.5-11.1-10.2-11.1zM140.9 103.9c-5.7 0-10.2 5-10.2 11.1s4.6 11.1 10.2 11.1c5.7 0 10.2-5 10.2-11.1s-4.5-11.1-10.2-11.1z\"/>\n        <path d=\"M189.5 20h-134C44.2 20 35 29.2 35 40.6v135.2c0 11.4 9.2 20.6 20.5 20.6h113.4l-5.3-18.5 12.8 11.9 12.1 11.2 21.5 19V40.6c0-11.4-9.2-20.6-20.5-20.6zm-38.6 130.6s-3.6-4.3-6.6-8.1c13.1-3.7 18.1-11.9 18.1-11.9-4.1 2.7-8 4.6-11.5 5.9-5 2.1-9.8 3.5-14.5 4.3-9.6 1.8-18.4 1.3-25.9-.1-5.7-1.1-10.6-2.7-14.7-4.3-2.3-.9-4.8-2-7.3-3.4-.3-.2-.6-.3-.9-.5-.2-.1-.3-.2-.4-.3-1.8-1-2.8-1.7-2.8-1.7s4.8 8 17.5 11.8c-3 3.8-6.7 8.3-6.7 8.3-22.1-.7-30.5-15.2-30.5-15.2 0-32.2 14.4-58.3 14.4-58.3 14.4-10.8 28.1-10.5 28.1-10.5l1 1.2c-18 5.2-26.3 13.1-26.3 13.1s2.2-1.2 5.9-2.9c10.7-4.7 19.2-6 22.7-6.3.6-.1 1.1-.2 1.7-.2 6.1-.8 13-1 20.2-.2 9.5 1.1 19.7 3.9 30.1 9.6 0 0-7.9-7.5-24.9-12.7l1.4-1.6s13.7-.3 28.1 10.5c0 0 14.4 26.1 14.4 58.3 0 0-8.5 14.5-30.6 15.2z\"/>\n      </svg>\n    </a>\n  </div>\n\n  <!-- Footer -->\n  <footer>\n      Love Angular?&nbsp;\n      <a href=\"https://github.com/angular/angular\" target=\"_blank\" rel=\"noopener\"> Give our repo a star.\n        <div class=\"github-star-badge\">\n            <svg class=\"material-icons\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z\"/></svg>\n          Star\n        </div>\n      </a>\n      <a href=\"https://github.com/angular/angular\" target=\"_blank\" rel=\"noopener\">\n        <svg class=\"material-icons\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" fill=\"#1976d2\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>\n      </a>\n  </footer>\n\n  <svg id=\"clouds\" xmlns=\"http://www.w3.org/2000/svg\" width=\"2611.084\" height=\"485.677\" viewBox=\"0 0 2611.084 485.677\">\n    <title>Gray Clouds Background</title>\n    <path id=\"Path_39\" data-name=\"Path 39\" d=\"M2379.709,863.793c10-93-77-171-168-149-52-114-225-105-264,15-75,3-140,59-152,133-30,2.83-66.725,9.829-93.5,26.25-26.771-16.421-63.5-23.42-93.5-26.25-12-74-77-130-152-133-39-120-212-129-264-15-54.084-13.075-106.753,9.173-138.488,48.9-31.734-39.726-84.4-61.974-138.487-48.9-52-114-225-105-264,15a162.027,162.027,0,0,0-103.147,43.044c-30.633-45.365-87.1-72.091-145.206-58.044-52-114-225-105-264,15-75,3-140,59-152,133-53,5-127,23-130,83-2,42,35,72,70,86,49,20,106,18,157,5a165.625,165.625,0,0,0,120,0c47,94,178,113,251,33,61.112,8.015,113.854-5.72,150.492-29.764a165.62,165.62,0,0,0,110.861-3.236c47,94,178,113,251,33,31.385,4.116,60.563,2.495,86.487-3.311,25.924,5.806,55.1,7.427,86.488,3.311,73,80,204,61,251-33a165.625,165.625,0,0,0,120,0c51,13,108,15,157-5a147.188,147.188,0,0,0,33.5-18.694,147.217,147.217,0,0,0,33.5,18.694c49,20,106,18,157,5a165.625,165.625,0,0,0,120,0c47,94,178,113,251,33C2446.709,1093.793,2554.709,922.793,2379.709,863.793Z\" transform=\"translate(142.69 -634.312)\" fill=\"#eee\"/>\n  </svg>\n\n</div>\n\n<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -->\n<!-- * * * * * * * * * * * The content above * * * * * * * * * * * -->\n<!-- * * * * * * * * * * is only a placeholder * * * * * * * * * * -->\n<!-- * * * * * * * * * * and can be replaced. * * * * * * * * * * * -->\n<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -->\n<!-- * * * * * * * * * * End of Placeholder * * * * * * * * * * * -->\n<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -->\n\n"
  },
  {
    "path": "packages/ngx-guides/src/app/app.component.spec.ts",
    "content": "import { TestBed } from '@angular/core/testing';\nimport { AppComponent } from './app.component';\n\ndescribe('AppComponent', () => {\n  beforeEach(async () => {\n    await TestBed.configureTestingModule({\n      declarations: [\n        AppComponent\n      ],\n    }).compileComponents();\n  });\n\n  it('should create the app', () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    const app = fixture.componentInstance;\n    expect(app).toBeTruthy();\n  });\n\n  it(`should have as title 'ngx-guides-project'`, () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    const app = fixture.componentInstance;\n    expect(app.title).toEqual('ngx-guides-project');\n  });\n\n  it('should render title', () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    const compiled = fixture.nativeElement as HTMLElement;\n    expect(compiled.querySelector('.content span')?.textContent).toContain('ngx-guides-project app is running!');\n  });\n});\n"
  },
  {
    "path": "packages/ngx-guides/src/app/app.component.ts",
    "content": "import { Component } from '@angular/core';\n\n@Component({\n  selector: 'app-root',\n  templateUrl: './app.component.html',\n  styleUrls: ['./app.component.css']\n})\nexport class AppComponent {\n  title = 'ngx-guides-project';\n}\n"
  },
  {
    "path": "packages/ngx-guides/src/app/app.module.ts",
    "content": "import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\n\nimport { AppComponent } from './app.component';\n\n@NgModule({\n  declarations: [\n    AppComponent\n  ],\n  imports: [\n    BrowserModule\n  ],\n  providers: [],\n  bootstrap: [AppComponent]\n})\nexport class AppModule { }\n"
  },
  {
    "path": "packages/ngx-guides/src/assets/.gitkeep",
    "content": ""
  },
  {
    "path": "packages/ngx-guides/src/environments/environment.prod.ts",
    "content": "export const environment = {\n  production: true\n};\n"
  },
  {
    "path": "packages/ngx-guides/src/environments/environment.ts",
    "content": "// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n  production: false\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/plugins/zone-error';  // Included with Angular CLI.\n"
  },
  {
    "path": "packages/ngx-guides/src/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\">\n  <title>NgxGuidesProject</title>\n  <base href=\"/\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  <link rel=\"icon\" type=\"image/x-icon\" href=\"favicon.ico\">\n</head>\n<body>\n  <app-root></app-root>\n</body>\n</html>\n"
  },
  {
    "path": "packages/ngx-guides/src/main.ts",
    "content": "import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n  enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n  .catch(err => console.error(err));\n"
  },
  {
    "path": "packages/ngx-guides/src/polyfills.ts",
    "content": "/**\n * This file includes polyfills needed by Angular and is loaded before the app.\n * You can add your own extra polyfills to this file.\n *\n * This file is divided into 2 sections:\n *   1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.\n *   2. Application imports. Files imported after ZoneJS that should be loaded before your main\n *      file.\n *\n * The current setup is for so-called \"evergreen\" browsers; the last versions of browsers that\n * automatically update themselves. This includes recent versions of Safari, Chrome (including\n * Opera), Edge on the desktop, and iOS and Chrome on mobile.\n *\n * Learn more in https://angular.io/guide/browser-support\n */\n\n/***************************************************************************************************\n * BROWSER POLYFILLS\n */\n\n/**\n * By default, zone.js will patch all possible macroTask and DomEvents\n * user can disable parts of macroTask/DomEvents patch by setting following flags\n * because those flags need to be set before `zone.js` being loaded, and webpack\n * will put import in the top of bundle, so user need to create a separate file\n * in this directory (for example: zone-flags.ts), and put the following flags\n * into that file, and then add the following code before importing zone.js.\n * import './zone-flags';\n *\n * The flags allowed in zone-flags.ts are listed here.\n *\n * The following flags will work for all browsers.\n *\n * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame\n * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick\n * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames\n *\n *  in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js\n *  with the following flag, it will bypass `zone.js` patch for IE/Edge\n *\n *  (window as any).__Zone_enable_cross_context_check = true;\n *\n */\n\n/***************************************************************************************************\n * Zone JS is required by default for Angular itself.\n */\nimport 'zone.js';  // Included with Angular CLI.\n\n\n/***************************************************************************************************\n * APPLICATION IMPORTS\n */\n"
  },
  {
    "path": "packages/ngx-guides/src/styles.css",
    "content": "/* You can add global styles to this file, and also import other style files */\n"
  },
  {
    "path": "packages/ngx-guides/src/test.ts",
    "content": "// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n\nimport 'zone.js/testing';\nimport { getTestBed } from '@angular/core/testing';\nimport {\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting\n} from '@angular/platform-browser-dynamic/testing';\n\ndeclare const require: {\n  context(path: string, deep?: boolean, filter?: RegExp): {\n    <T>(id: string): T;\n    keys(): string[];\n  };\n};\n\n// First, initialize the Angular testing environment.\ngetTestBed().initTestEnvironment(\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting(),\n);\n\n// Then we find all the tests.\nconst context = require.context('./', true, /\\.spec\\.ts$/);\n// And load the modules.\ncontext.keys().map(context);\n"
  },
  {
    "path": "packages/ngx-guides/tsconfig.app.json",
    "content": "/* To learn more about this file see: https://angular.io/config/tsconfig. */\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"./out-tsc/app\",\n    \"types\": []\n  },\n  \"files\": [\n    \"src/main.ts\",\n    \"src/polyfills.ts\"\n  ],\n  \"include\": [\n    \"src/**/*.d.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/ngx-guides/tsconfig.json",
    "content": "/* To learn more about this file see: https://angular.io/config/tsconfig. */\n{\n  \"compileOnSave\": false,\n  \"compilerOptions\": {\n    \"baseUrl\": \"./\",\n    \"outDir\": \"./dist/out-tsc\",\n    \"forceConsistentCasingInFileNames\": true,\n    \"strict\": true,\n    \"noImplicitOverride\": true,\n    \"noPropertyAccessFromIndexSignature\": true,\n    \"noImplicitReturns\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"sourceMap\": true,\n    \"paths\": {\n      \"ngx-guides\": [\n        \"dist/ngx-guides/ngx-guides\",\n        \"dist/ngx-guides\"\n      ]\n    },\n    \"declaration\": false,\n    \"downlevelIteration\": true,\n    \"experimentalDecorators\": true,\n    \"moduleResolution\": \"node\",\n    \"importHelpers\": true,\n    \"target\": \"es2017\",\n    \"module\": \"es2020\",\n    \"lib\": [\n      \"es2020\",\n      \"dom\"\n    ]\n  },\n  \"angularCompilerOptions\": {\n    \"enableI18nLegacyMessageIdFormat\": false,\n    \"strictInjectionParameters\": true,\n    \"strictInputAccessModifiers\": true,\n    \"strictTemplates\": true\n  }\n}\n"
  },
  {
    "path": "packages/ngx-guides/tsconfig.spec.json",
    "content": "/* To learn more about this file see: https://angular.io/config/tsconfig. */\n{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"./out-tsc/spec\",\n    \"types\": [\n      \"jasmine\"\n    ]\n  },\n  \"files\": [\n    \"src/test.ts\",\n    \"src/polyfills.ts\"\n  ],\n  \"include\": [\n    \"src/**/*.spec.ts\",\n    \"src/**/*.d.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/preact-guides/CHANGELOG.md",
    "content": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://conventionalcommits.org) for commit guidelines.\n\n## [0.28.2](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.28.1...preact-guides@0.28.2) (2023-07-29)\n\n\n### :mega: Other\n\n* publish packages ([9b659fe](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/9b659fe71eb2fcb53b731e88b1561a0b18b9fcdc))\n\n\n\n## [0.28.1](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.28.0...preact-guides@0.28.1) (2023-07-23)\n\n\n### :mega: Other\n\n* publish packages ([73e2427](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/73e24270c27eec1f30cc051fe84569e79f85822c))\n\n\n\n## [0.28.0](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.27.0...preact-guides@0.28.0) (2023-07-22)\n\n\n### :mega: Other\n\n* publish packages ([324f848](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/324f848e0bae231c82b33be29ee2534d58a6d6b1))\n\n\n\n## [0.27.0](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.26.0...preact-guides@0.27.0) (2023-06-02)\n\n\n### :rocket: New Features\n\n* update ruler and add drawRuler method ([20b1182](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/20b1182c3e8c93980418f34e1360cb4c81a2a0d3))\n\n\n### :mega: Other\n\n* publish packages ([53d07f3](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/53d07f3e31011ee6bff1a2558380dc6e61e98337))\n\n\n\n## [0.26.0](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.25.3...preact-guides@0.26.0) (2023-06-01)\n\n\n### :rocket: New Features\n\n* update ruler and modules ([f528ce4](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/f528ce4c7ef6dd554112a7b86a0f7449d7cd230f))\n\n\n### :mega: Other\n\n* publish packages ([d038e92](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/d038e92046e55f0f65f4ddde24f12ed117fd64e2))\n\n\n\n## [0.25.3](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.25.2...preact-guides@0.25.3) (2023-05-16)\n\n\n### :bug: Bug Fix\n\n* update css-styled version ([7327395](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/7327395786810c872f53678d47602b80db127197))\n\n\n### :mega: Other\n\n* publish packages ([78ed8c7](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/78ed8c708759927cabeb53b8c607fc6f54324371))\n\n\n\n## [0.25.2](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.25.1...preact-guides@0.25.2) (2023-05-15)\n\n\n### :rocket: New Features\n\n* update depency modules ([21b67a8](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/21b67a80dfd61183e175d9ac6c64502c092aba74))\n\n\n### :mega: Other\n\n* publish packages ([1898b89](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/1898b895d5c812a5fd77d99a5928f7e420152772))\n\n\n\n## [0.25.1](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.25.0...preact-guides@0.25.1) (2023-05-07)\n\n\n### :mega: Other\n\n* publish packages ([e1fb57c](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/e1fb57c59a4a8e6b3e55ffb68cfea64760270288))\n\n\n\n## [0.25.0](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.24.0...preact-guides@0.25.0) (2023-04-12)\n\n\n### :mega: Other\n\n* publish packages ([548990d](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/548990d8577ffe565b8605f74edd9eb5a6519deb))\n\n\n\n## [0.24.0](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.23.0...preact-guides@0.24.0) (2023-04-06)\n\n\n### :rocket: New Features\n\n* add croact-guides ([a7be435](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/a7be435704e24b6d80af80e069a6cc4047d645bc))\n\n\n### :mega: Other\n\n* publish packages ([f30e2ba](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/f30e2bad78e1bc02307c8dde8cb1b69ecccdf116))\n\n\n\n## [0.23.0](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.22.3...preact-guides@0.23.0) (2023-03-04)\n\n\n### :rocket: New Features\n\n* update ruler ([f59fa59](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/f59fa5988f3c4dd96925677ca787e4fb55b150f1))\n\n\n### :mega: Other\n\n* publish packages ([1afbe1d](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/1afbe1d193cf2457dc9f3296b73d38b5859c0ee0))\n\n\n\n## [0.22.3](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.22.2...preact-guides@0.22.3) (2023-02-04)\n\n\n### :mega: Other\n\n* publish packages ([ae0d147](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/ae0d14738d83b4f5352463b69f89efe7cc111baf))\n\n\n\n## [0.22.2](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.22.1...preact-guides@0.22.2) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([0f7949a](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/0f7949a9954e2093d6a599dc545f988ed624d41f))\n\n\n\n## [0.22.1](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.22.0...preact-guides@0.22.1) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([ab753c1](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/ab753c1c820463c1c0b7805d428c803c5eacc1e3))\n\n\n\n## [0.22.0](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.21.0...preact-guides@0.22.0) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([6f83fa0](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/6f83fa0c75f494aa79fff98f4a57f86ab295b67d))\n\n\n\n## [0.21.0](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.20.1...preact-guides@0.21.0) (2023-01-28)\n\n\n### :mega: Other\n\n* publish packages ([9473e84](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/9473e8464fbd4c374ac6251ff995586afd163719))\n\n\n\n## [0.20.1](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.20.0...preact-guides@0.20.1) (2023-01-27)\n\n\n### :mega: Other\n\n* publish packages ([628b944](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/628b9444bb9e6f5546c7a5edd55a090126f52dd5))\n\n\n\n## [0.20.0](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.19.0...preact-guides@0.20.0) (2023-01-20)\n\n\n### :bug: Bug Fix\n\n* fix files field #67 ([28bf5b3](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/28bf5b3bd97cebd94eaf2195f0e99750f14e7ecb))\n\n\n### :mega: Other\n\n* publish packages ([095e7c6](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/095e7c670d3bd0bdc168e2f3c11b5dbb8074b26b))\n* publish packages ([1daa6ea](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/1daa6ea441f6c96b8f354953605cd6ac89117878))\n* publish packages ([e143c21](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/e143c2175309bf480ef17731321f6728b8d6bcc2))\n* publish packages ([ce2037a](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/ce2037a18f5f6bbcd750e1fd72cbfc60e3f2c217))\n* publish packages ([0abcba2](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/0abcba24e8b83ea51cf369124e8c2d85fee1ef7e))\n\n\n\n## [0.19.0](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.18.0...preact-guides@0.19.0) (2022-11-13)\n\n\n### :rocket: New Features\n\n* add scrollOptions #64 ([e0dc92a](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/e0dc92a9ed417dff071b43a68b065907f8f1b8ad))\n\n\n### :bug: Bug Fix\n\n* fix scroll event name ([6eba67b](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/6eba67b33c0de50e1c68ff75882889227db663bc))\n* update dependencies ([054e101](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/054e101d1b177bdfefab74bf440a4cb3cf8137be))\n\n\n### :mega: Other\n\n* publish packages ([9cc8e3a](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/9cc8e3ae5f83aa1513c1560166c6babbbe31dfd7))\n\n\n\n## [0.18.0](https://github.com/daybrush/guides/blob/master/packages/preact-guides/compare/preact-guides@0.17.1...preact-guides@0.18.0) (2022-09-21)\n\n\n### :mega: Other\n\n* publish packages ([83de3e4](https://github.com/daybrush/guides/blob/master/packages/preact-guides/commit/83de3e4ae4bad11905939a44dfa2776fe7d6987d))\n"
  },
  {
    "path": "packages/preact-guides/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019 Daybrush\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "packages/preact-guides/README.md",
    "content": "\n\n<p align=\"middle\" ><img src=\"https://raw.githubusercontent.com/daybrush/guides/master/demo/images/guides.png\"/></p>\n<h2 align=\"middle\">Preact Guides</h2>\n<p align=\"middle\">\n<a href=\"https://www.npmjs.com/package/preact-guides\" target=\"_blank\"><img src=\"https://img.shields.io/npm/v/preact-guides.svg?style=flat-square&color=007acc&label=version\" alt=\"npm version\" /></a>\n<img src=\"https://img.shields.io/badge/language-typescript-blue.svg?style=flat-square\"/>\n<a href=\"https://github.com/daybrush/guides/blob/master/LICENSE\" target=\"_blank\"><img src=\"https://img.shields.io/github/license/daybrush/guides.svg?style=flat-square&label=license&color=08CE5D\"/></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/react-guides\" target=\"_blank\"><img alt=\"React\" src=\"https://img.shields.io/static/v1.svg?label=&message=React&style=flat-square&color=61daeb\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/preact-guides\" target=\"_blank\"><img alt=\"Preact\" src=\"https://img.shields.io/static/v1.svg?label=&message=Preact&style=flat-square&color=673ab8\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/ngx-guides\" target=\"_blank\"><img alt=\"Angular\" src=\"https://img.shields.io/static/v1.svg?label=&message=Angular&style=flat-square&color=C82B38\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/vue-guides\" target=\"_blank\"><img\n    alt=\"Vue\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Vue&style=flat-square&color=3fb984\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\" target=\"_blank\"><img\n    alt=\"Vue\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Svelte&style=flat-square&color=C82B38\"></a>\n</p>\n<p align=\"middle\">A Preact Guides component that can draw ruler and manage guidelines.</p>\n<p align=\"middle\">\n    <a href=\"https://daybrush.com/guides\" target=\"_blank\"><strong>Demo</strong></a> /\n    <a href=\"https://daybrush.com/guides/release/latest/doc/\" target=\"_blank\"><strong>API</strong></a> /\n    <a href=\"https://github.com/daybrush/ruler\" target=\"_blank\"><strong>Ruler</strong></a> /\n    <a href=\"https://github.com/daybrush/scena\" target=\"_blank\"><strong>Main Project</strong></a>\n</p>\n\n\n## ⚙️ Installation\n### npm\n```sh\n$ npm i preact-guides\n```\n\n## 🚀 How to use\n```tsx\n\nimport { Component, h } from \"preact\";\nimport Guides from \"preact-guides\";\n\nexport default class App extends Component {\n    render() {\n        return (<Guides\n            ref={e => {\n                this.guides = e;\n            }}\n            type=\"horizontal\"\n            setGuides={guides => {\n                console.log(guides);\n            }}\n        />);\n    }\n    componentDidMount() {\n        this.guides.resize();\n        let scrollX = 0;\n        let scrollY = 0;\n\n        window.addEventListener(\"wheel\", e => {\n            scrollX += e.deltaX;\n            scrollY += e.deltaY;\n\n            this.guides.scrollGuides(scrollY);\n            this.guides.scroll(scrollX);\n        });\n        window.addEventListener(\"resize\", () => {\n            this.guides.resize();\n        });\n    }\n}\n\nexport interface RulerProps {\n    type?: \"horizontal\" | \"vertical\";\n    width?: number;\n    height?: number;\n    unit?: number;\n    zoom?: number;\n    direction?: \"start\" | \"end\";\n    style?: IObject<any>;\n    backgroundColor?: string;\n    lineColor?: string;\n    textColor?: string;\n}\n\nexport interface GuidesProps extends RulerProps {\n    className?: string;\n    setGuides?: (guides: number[]) => any;\n    rulerStyle?: IObject<any>;\n    snapThreshold?: number;\n    snaps?: number[];\n}\n\nexport interface GuidesInterface {\n    getGuides(): number[];\n    scroll(pos: number): void;\n    scrollGuides(pos: number): void;\n    loadGuides(guides: number[]): void;\n    resize(): void;\n}\n\n\n```\n\n\n\n## ⚙️ Developments\n### `npm run start`\n\nRuns the app in the development mode.<br>\nOpen [http://localhost:3000](http://localhost:3000) to view it in the browser.\n\nThe page will reload if you make edits.<br>\nYou will also see any lint errors in the console.\n\n\n\n## ⭐️ Show Your Support\nPlease give a ⭐️ if this project helped you!\n\n## 👏 Contributing\n\nIf you have any questions or requests or want to contribute to `@scena/react-guides` or other packages, please write the [issue](https://github.com/daybrush/guides/issues) or give me a Pull Request freely.\n\n## 🐞 Bug Report\n\nIf you find a bug, please report to us opening a new [Issue](https://github.com/daybrush/guides/issues) on GitHub.\n\n\n## 📝 License\n\nThis project is [MIT](https://github.com/daybrush/guides/blob/master/LICENSE) licensed.\n\n```\nMIT License\n\nCopyright (c) 2019 Daybrush\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```\n"
  },
  {
    "path": "packages/preact-guides/demo/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <title>Preact App</title>\n    <link rel=\"stylesheet\" href=\"./dist/index.css\" />\n  </head>\n  <body>\n    <noscript>You need to enable JavaScript to run this app.</noscript>\n    <div id=\"root\"></div>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n  <script src=\"./dist/index.js\"></script>\n</html>\n"
  },
  {
    "path": "packages/preact-guides/package.json",
    "content": "{\n    \"name\": \"preact-guides\",\n    \"version\": \"0.28.2\",\n    \"description\": \"A Preact Guides component that can draw ruler and manage guidelines.\",\n    \"main\": \"./dist/guides.cjs.js\",\n    \"module\": \"./dist/guides.esm.js\",\n    \"sideEffects\": false,\n    \"types\": \"declaration/index.d.ts\",\n    \"scripts\": {\n        \"lint\": \"tslint -c tslint.json 'src/**/*.ts'\",\n        \"start\": \"open ./demo/index.html && rollup -c rollup.config.demo.js -w\",\n        \"build\": \"rollup -c && npm run declaration && print-sizes ./dist \",\n        \"declaration\": \"rm -rf declaration && tsc -p tsconfig.declaration.json && npm run declaration:cp\",\n        \"declaration:cp\": \"cp src/preact-guides/Guides.d.ts declaration/Guides.d.ts\"\n    },\n    \"keywords\": [\n        \"scene\",\n        \"scenejs\",\n        \"scene.js\",\n        \"scena\",\n        \"guides\",\n        \"scroller\",\n        \"preact\"\n    ],\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/daybrush/guides/blob/master/packages/preact-guides\"\n    },\n    \"author\": \"Daybrush\",\n    \"license\": \"MIT\",\n    \"bugs\": {\n        \"url\": \"https://github.com/daybrush/guides/issues\"\n    },\n    \"files\": [\n        \"./*\",\n        \"src/*\",\n        \"dist/*\",\n        \"declaration/*\",\n        \"README.md\"\n    ],\n    \"homepage\": \"https://daybrush.com/guides\",\n    \"devDependencies\": {\n        \"@daybrush/builder\": \"^0.1.0\",\n        \"@scenejs/effects\": \"^1.0.1\",\n        \"keycon\": \"^0.3.0\",\n        \"preact\": \"^10.0.0\",\n        \"print-sizes\": \"^0.2.0\",\n        \"rollup-plugin-css-bundle\": \"^1.0.4\",\n        \"rollup-plugin-preact\": \"^0.5.2\",\n        \"scenejs\": \"^1.1.4\",\n        \"shape-svg\": \"^0.3.3\",\n        \"tslint\": \"^5.16.0\",\n        \"typescript\": \"^4.5.0 <4.6.0\"\n    },\n    \"dependencies\": {\n        \"@daybrush/utils\": \"^1.12.1\",\n        \"@scena/dragscroll\": \"^1.3.0\",\n        \"@scena/react-guides\": \"~0.28.2\",\n        \"css-to-mat\": \"^1.0.3\",\n        \"framework-utils\": \"^1.1.0\",\n        \"gesto\": \"^1.18.1\",\n        \"preact-css-styled\": \"^1.1.8\",\n        \"preact-ruler\": \"^0.19.0\",\n        \"react-css-styled\": \"^1.1.8\"\n    }\n}\n"
  },
  {
    "path": "packages/preact-guides/rollup.config.demo.js",
    "content": "import builder from \"@daybrush/builder\";\nimport css from \"rollup-plugin-css-bundle\";\nconst preact = require(\"rollup-plugin-preact\");\n\n\n\n\nexport default builder({\n    input: \"./src/demo/index.tsx\",\n    tsconfig: \"./tsconfig.build.json\",\n    sourcemap: false,\n    format: \"umd\",\n    output: \"./demo/dist/index.js\",\n    name: \"app\",\n    exports: \"named\",\n    plugins: [\n        css({ output: \"./demo/dist/index.css\" }),\n        preact({\n            noPropTypes: true,\n            noEnv: true,\n            noReactIs: true,\n            resolvePreactCompat: true,\n            // usePreactX: true,\n        }),\n    ],\n});\n"
  },
  {
    "path": "packages/preact-guides/rollup.config.js",
    "content": "import builder from \"@daybrush/builder\";\nconst preact = require(\"rollup-plugin-preact\");\n\n\nconst defaultOptions = {\n    tsconfig: \"tsconfig.build.json\",\n    external: {\n        \"@daybrush/utils\": \"utils\",\n        \"gesto\": \"Gesto\",\n        \"preact\": \"Preact\",\n        \"preact/compat\": \"preact/compat\",\n        \"preact-compat\": \"preact-compat\",\n        \"preact-css-styled\": \"preact-css-styled\",\n        \"preact-ruler\": \"preact-ruler\",\n        \"framework-utils\": \"framework-utils\",\n        \"@egjs/agent\": \"eg.Agent\",\n        \"@egjs/children-differ\": \"eg.ChildrenDiffer\",\n        \"css-to-mat\": \"CssToMat\",\n    },\n    exports: \"named\",\n    plugins: [\n        preact({\n            noPropTypes: false,\n            noEnv: false,\n            noReactIs: false,\n            usePreactX: true,\n            aliasModules: {\n                \"react-css-styled\": \"preact-css-styled\",\n                \"@scena/react-ruler\": \"preact-ruler\",\n            },\n        }),\n    ],\n    sourcemap: false,\n};\n\nexport default builder([\n    {\n        ...defaultOptions,\n        input: \"src/preact-guides/index.esm.ts\",\n        output: \"./dist/guides.esm.js\",\n        format: \"es\",\n    },\n    {\n        ...defaultOptions,\n        input: \"src/preact-guides/index.umd.ts\",\n        output: \"./dist/guides.cjs.js\",\n        format: \"cjs\",\n        exports: \"default\",\n    },\n]);\n"
  },
  {
    "path": "packages/preact-guides/src/demo/App.css",
    "content": "@import url(\"https://fonts.googleapis.com/css?family=Open+Sans:300,400,600&display=swap\");\n@import url(\"https://fonts.googleapis.com/css?family=Roboto:100&display=swap\");\nhtml, body {\n    font-family: \"Open Sans\", sans-serif;\n    position: relative;\n    margin: 0;\n    padding: 0;\n    height: 100%;\n    color: #333;\n    letter-spacing: 1px;\n    background: #f5f5f5;\n    font-weight: 300;\n    touch-action: manipulation;\n}\n#root, .page {\n    position: relative;\n    width: 100%;\n    height: 100%;\n    overflow: hidden;\n}\na {\n    text-decoration: none;\n    color: #333;\n}\n.ruler {\n    position:absolute;\n    top: 0;\n    left: 0;\n}\n.ruler.horizontal {\n    left: 0px;\n    width: 100%;\n    height: 30px;\n}\n.ruler.vertical {\n    top: 0px;\n    width: 30px;\n    height: 100%;\n}\n.box {\n    position: relative;\n    width: 30px;\n    height: 30px;\n    background: #444;\n    box-sizing: border-box;\n    z-index: 21;\n}\n.box:before, .box:after {\n    position: absolute;\n    content: \"\";\n    background: #777;\n}\n.box:before {\n    width: 1px;\n    height: 100%;\n    left: 100%;\n}\n.box:after {\n    height: 1px;\n    width: 100%;\n    top: 100%;\n}\n\n.container {\n    position: relative;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n    text-align: center;\n    max-width: calc(100% - 60px);\n    width: 100%;\n}\n\n.badges {\n    padding: 10px;\n}\n.badges img {\n    height: 20px;\n    margin: 0px 2px;\n}\n.buttons {\n    text-align: center;\n    margin: 0;\n    padding: 10px;\n}\n.buttons a {\n    margin: 0;\n    position: relative;\n    text-decoration: none;\n    color: #333;\n    border: 1px solid #333;\n    padding: 12px 30px;\n    min-width: 140px;\n    text-align: center;\n    display: inline-block;\n    box-sizing: border-box;\n    margin: 5px;\n    transition: all ease 0.5s;\n}\n.buttons a:hover {\n    background: #333;\n    color: #fff;\n}\n\np {\n    padding: 0;\n    margin: 0;\n}\n\n.dragit {\n    font-weight: bold;\n}\n"
  },
  {
    "path": "packages/preact-guides/src/demo/App.tsx",
    "content": "import { Component, h } from \"preact\";\nimport Scene from \"scenejs\";\nimport \"./App.css\";\nimport Guides from \"../preact-guides/Guides\";\nimport { ref } from \"framework-utils\";\nimport Gesto from \"gesto\";\n\nexport default class App extends Component<{}> {\n    private scene: Scene = new Scene();\n    // private editor!: Editor;\n    private guides1: Guides;\n    private guides2: Guides;\n    private scrollX: number = 0;\n    private scrollY: number = 0;\n    public render() {\n        return (<div className=\"page\">\n            <div className=\"box\" onClick={this.restore}></div>\n            <div className=\"ruler horizontal\">\n                <Guides ref={ref(this, \"guides1\")}\n                    type=\"horizontal\"\n                    rulerStyle={{ left: \"30px\", width: \"calc(100% - 30px)\", height: \"100%\" }}\n                    setGuides={(guides) => {\n                        console.log(\"horizontal\", guides);\n                    }}\n                />\n            </div>\n            <div className=\"ruler vertical\">\n                <Guides ref={ref(this, \"guides2\")}\n                    type=\"vertical\"\n                    rulerStyle={{ top: \"30px\", height: \"calc(100% - 30px)\", width: \"100%\" }}\n                    setGuides={(guides) => {\n                        console.log(\"vertical\", guides);\n                    }}\n                />\n            </div>\n            <div className=\"container\">\n                <img src=\"https://daybrush.com/guides/images/guides.png\" width=\"200\" alt=\"guides\" />\n                <p className=\"dragit\">Drag Screen & Rulers!</p>\n                <p className=\"badges\">\n                    <a href=\"https://www.npmjs.com/package/svelte-guides\" target=\"_blank\">\n                        <img src=\"https://img.shields.io/npm/v/svelte-guides.svg?style=flat-square&color=007acc&label=version\"\n                            alt=\"npm version\" /></a>\n                    <a href=\"https://github.com/daybrush/guides\" target=\"_blank\">\n                        <img src=\"https://img.shields.io/github/stars/daybrush/guides.svg?color=42b883&style=flat-square\" /></a>\n                    <a href=\"https://github.com/daybrush/guides\" target=\"_blank\">\n                        <img src=\"https://img.shields.io/badge/language-typescript-blue.svg?style=flat-square\" />\n                    </a>\n                    <a href=\"https://github.com/daybrush/guides/blob/master/LICENSE\" target=\"_blank\">\n                        <img\n                            src=\"https://img.shields.io/github/license/daybrush/guides.svg?style=flat-square&label=license&color=08CE5D\" />\n                    </a>\n                    <a href=\"https://github.com/daybrush/guides/tree/master/packages/react-guides\" target=\"_blank\"><img alt=\"React\"\n                        src=\"https://img.shields.io/static/v1.svg?label=&message=React&style=flat-square&color=61daeb\" /></a>\n                    <a href=\"https://github.com/daybrush/guides/tree/master/packages/preact-guides\" target=\"_blank\"><img alt=\"Preact\"\n                        src=\"https://img.shields.io/static/v1.svg?label=&message=Preact&style=flat-square&color=673ab8\" /></a>\n                    <a href=\"https://github.com/daybrush/guides/tree/master/packages/ngx-guides\" target=\"_blank\"><img alt=\"Angular\"\n                        src=\"https://img.shields.io/static/v1.svg?label=&message=Angular&style=flat-square&color=C82B38\" /></a>\n                    <a href=\"https://github.com/daybrush/guides/tree/master/packages/vue-guides\" target=\"_blank\"><img alt=\"Vue\"\n                        src=\"https://img.shields.io/static/v1.svg?label=&message=Vue&style=flat-square&color=3fb984\" /></a>\n                    <a href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\" target=\"_blank\"><img alt=\"Svelte\"\n                        src=\"https://img.shields.io/static/v1.svg?label=&message=Svelte&style=flat-square&color=C82B38\" /></a>\n                </p>\n                <p className=\"description\">A Preact Guides component that can draw ruler and manage guidelines.</p>\n                <div className=\"buttons\">\n                    <a href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\" target=\"_blank\">Download</a>\n                </div>\n            </div>\n        </div>\n        );\n    }\n    public componentDidMount() {\n        new Gesto(document.body, {\n            drag: e => {\n                this.scrollX -= e.deltaX;\n                this.scrollY -= e.deltaY;\n\n                this.guides1.scrollGuides(this.scrollY);\n                this.guides1.scroll(this.scrollX);\n\n                this.guides2.scrollGuides(this.scrollX);\n                this.guides2.scroll(this.scrollY);\n            },\n        });\n        window.addEventListener(\"resize\", () => {\n            this.guides1.resize();\n            this.guides2.resize();\n        });\n    }\n    public restore = () => {\n        this.scrollX = 0;\n        this.scrollY = 0;\n        this.guides1.scroll(0);\n        this.guides1.scrollGuides(0);\n        this.guides2.scroll(0);\n        this.guides2.scrollGuides(0);\n    }\n}\n"
  },
  {
    "path": "packages/preact-guides/src/demo/index.tsx",
    "content": "import { render, h } from \"preact\";\nimport App from \"./App\";\n\nrender(<App />, document.getElementById(\"root\")!);\n"
  },
  {
    "path": "packages/preact-guides/src/preact-guides/Guides.d.ts",
    "content": "import { GuidesInterface, GuidesProps, GuidesState } from \"@scena/react-guides/declaration/types\";\nimport Preact, { Component } from \"preact\";\n\nexport default class PreactGuides extends Component<GuidesProps, GuidesState> {\n    public render(): any;\n}\nexport default interface PreactGuides extends Component<GuidesProps, GuidesState>, GuidesInterface {}\n"
  },
  {
    "path": "packages/preact-guides/src/preact-guides/Guides.js",
    "content": "import Guides from \"@scena/react-guides\";\nexport default Guides;\n"
  },
  {
    "path": "packages/preact-guides/src/preact-guides/index.esm.ts",
    "content": "import Guides from \"./Guides\";\n\nexport default Guides;\nexport * from \"@scena/react-guides\";\n"
  },
  {
    "path": "packages/preact-guides/src/preact-guides/index.ts",
    "content": "import Guides from \"./Guides\";\n\nexport * from \"@scena/react-guides/declaration/types\";\nexport default Guides;\n"
  },
  {
    "path": "packages/preact-guides/src/preact-guides/index.umd.ts",
    "content": "import Guides, * as others from \"./index.esm\";\n\nfor (const name in others) {\n    (Guides as any)[name] = (others as any)[name];\n}\n\nexport default Guides;\n"
  },
  {
    "path": "packages/preact-guides/tsconfig.build.json",
    "content": "{\n    \"extends\": \"./tsconfig\",\n    \"compilerOptions\": {\n      \"jsx\": \"react\",\n      \"jsxFactory\": \"h\",\n    },\n  }\n"
  },
  {
    "path": "packages/preact-guides/tsconfig.declaration.json",
    "content": "{\n    \"extends\": \"./tsconfig\",\n    \"compilerOptions\": {\n        \"allowJs\": false,\n        \"noEmit\": false,\n        \"isolatedModules\": false,\n        \"removeComments\": false,\n        \"declaration\": true,\n        \"emitDeclarationOnly\": true,\n        \"declarationDir\": \"declaration\"\n    },\n    \"include\": [\n        \"./src/preact-guides/**/*\"\n    ]\n}\n"
  },
  {
    "path": "packages/preact-guides/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"outDir\": \"./outjs/\",\n    \"esModuleInterop\": false,\n    \"sourceMap\": true,\n    \"module\": \"esnext\",\n    \"target\": \"es5\",\n    \"experimentalDecorators\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"es2015\",\n      \"dom\"\n    ],\n    \"allowJs\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"strict\": true,\n    \"strictNullChecks\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": true\n  },\n  \"include\": [\n    \"./src/**/*.ts\", \"src/preact-guides/Guides.js\", \"src/preact-guides/Guides.d.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/preact-guides/tslint.json",
    "content": "{\n\t\"defaultSeverity\": \"error\",\n\t\"extends\": [\n\t\t\"tslint:recommended\"\n\t],\n\t\"rules\": {\n\t\t\"typedef\": [true, \"parameter\"],\n\t\t\"jsdoc-format\": false,\n\t\t\"forin\": false,\n\t\t\"no-console\": false,\n\t\t\"no-any\": false,\n\t\t\"interface-name\": false,\n\t\t\"indent\": [\n\t\t\ttrue,\n\t\t\t\"spaces\",\n\t\t\t4\n\t\t],\n\t\t\"ordered-imports\": false,\n\t\t\"object-literal-sort-keys\": false,\n\t\t\"no-unused-expression\": false,\n\t\t\"arrow-parens\": [\n\t\t\ttrue,\n\t\t\t\"ban-single-arg-parens\"\n\t\t],\n\t\t\"max-line-length\": [\n\t\t\ttrue,\n\t\t\t{\n\t\t\t\t\"limit\": 120,\n\t\t\t\t\"ignore-pattern\": \"(\\\\* @)|//\"\n\t\t\t}\n\t\t],\n\t\t\"trailing-comma\": [\n\t\t\ttrue,\n\t\t\t{\n\t\t\t\t\"multiline\": {\n\t\t\t\t\t\"objects\": \"always\",\n\t\t\t\t\t\"arrays\": \"always\",\n\t\t\t\t\t\"functions\": \"always\",\n\t\t\t\t\t\"typeLiterals\": \"ignore\"\n\t\t\t\t},\n\t\t\t\t\"esSpecCompliant\": true\n\t\t\t}\n\t\t]\n\t}\n}"
  },
  {
    "path": "packages/react-guides/CHANGELOG.md",
    "content": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://conventionalcommits.org) for commit guidelines.\n\n## [0.28.2](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.28.1...@scena/react-guides@0.28.2) (2023-07-29)\n\n\n### :bug: Bug Fix\n\n* remove console.log #71 ([ebe4518](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/ebe451868f594f0afd4d040bc7f054bce50e4e97))\n\n\n### :mega: Other\n\n* publish packages ([9b659fe](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/9b659fe71eb2fcb53b731e88b1561a0b18b9fcdc))\n\n\n\n## [0.28.1](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.28.0...@scena/react-guides@0.28.1) (2023-07-23)\n\n\n### :bug: Bug Fix\n\n* fix guides zoom #83 ([207f218](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/207f218266968c0a206df10a0732312e3a6508de))\n\n\n### :mega: Other\n\n* publish packages ([73e2427](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/73e24270c27eec1f30cc051fe84569e79f85822c))\n\n\n\n## [0.28.0](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.27.0...@scena/react-guides@0.28.0) (2023-07-22)\n\n\n### :rocket: New Features\n\n* add `guidesZoom` prop #83 ([42694cc](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/42694cc48173a31df52e430697a43dfe2569426b))\n\n\n### :mega: Other\n\n* publish packages ([324f848](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/324f848e0bae231c82b33be29ee2534d58a6d6b1))\n\n\n\n## [0.27.0](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.26.0...@scena/react-guides@0.27.0) (2023-06-02)\n\n\n### :rocket: New Features\n\n* update ruler and add drawRuler method ([20b1182](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/20b1182c3e8c93980418f34e1360cb4c81a2a0d3))\n\n\n### :mega: Other\n\n* publish packages ([53d07f3](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/53d07f3e31011ee6bff1a2558380dc6e61e98337))\n\n\n\n## [0.26.0](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.25.3...@scena/react-guides@0.26.0) (2023-06-01)\n\n\n### :rocket: New Features\n\n* update ruler and modules ([f528ce4](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/f528ce4c7ef6dd554112a7b86a0f7449d7cd230f))\n\n\n### :mega: Other\n\n* publish packages ([d038e92](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/d038e92046e55f0f65f4ddde24f12ed117fd64e2))\n\n\n\n## [0.25.3](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.25.2...@scena/react-guides@0.25.3) (2023-05-16)\n\n\n### :mega: Other\n\n* publish packages ([78ed8c7](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/78ed8c708759927cabeb53b8c607fc6f54324371))\n\n\n\n## [0.25.2](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.25.1...@scena/react-guides@0.25.2) (2023-05-15)\n\n\n### :rocket: New Features\n\n* update depency modules ([21b67a8](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/21b67a80dfd61183e175d9ac6c64502c092aba74))\n\n\n### :mega: Other\n\n* publish packages ([1898b89](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/1898b895d5c812a5fd77d99a5928f7e420152772))\n\n\n\n## [0.25.1](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.25.0...@scena/react-guides@0.25.1) (2023-05-07)\n\n\n### :bug: Bug Fix\n\n* fix resize observer ([29cf3b0](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/29cf3b076abf7095fd22c65f6a2baf9ac70287cb))\n\n\n### :mega: Other\n\n* publish packages ([e1fb57c](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/e1fb57c59a4a8e6b3e55ffb68cfea64760270288))\n\n\n\n## [0.25.0](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.24.0...@scena/react-guides@0.25.0) (2023-04-12)\n\n\n### :rocket: New Features\n\n* add defaultGuidesPos prop ([a7d31ea](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/a7d31eacc9ecc429fc0aa3cf6e909eb02047acba))\n* add resize cursor ([85fb038](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/85fb038c910e9c6c6f7432ad64acf54eaac1d0eb))\n\n\n### :mega: Other\n\n* publish packages ([548990d](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/548990d8577ffe565b8605f74edd9eb5a6519deb))\n\n\n\n## [0.24.0](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.23.0...@scena/react-guides@0.24.0) (2023-04-06)\n\n\n### :rocket: New Features\n\n* add croact-guides ([a7be435](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/a7be435704e24b6d80af80e069a6cc4047d645bc))\n\n\n### :mega: Other\n\n* publish packages ([f30e2ba](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/f30e2bad78e1bc02307c8dde8cb1b69ecccdf116))\n\n\n\n## [0.23.0](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.22.3...@scena/react-guides@0.23.0) (2023-03-04)\n\n\n### :rocket: New Features\n\n* update ruler ([f59fa59](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/f59fa5988f3c4dd96925677ca787e4fb55b150f1))\n\n\n### :bug: Bug Fix\n\n* update Guides.tsx (#75) ([a11951c](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/a11951c622818d2d80aa47d45dae9fc4379fc2c2))\n\n\n### :memo: Documentation\n\n* fix type docs ([a5946eb](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/a5946eb64d86079fb5f17810f9f511bc78802e1c))\n\n\n### :mega: Other\n\n* publish packages ([1afbe1d](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/1afbe1d193cf2457dc9f3296b73d38b5859c0ee0))\n\n\n\n## [0.22.3](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.22.2...@scena/react-guides@0.22.3) (2023-02-04)\n\n\n### :bug: Bug Fix\n\n* added missing Guide Options Properties (#73) ([182c6c3](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/182c6c39f5bf1bba19486b84f7db1f1327fc989d))\n* fix typo ([b58e3a7](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/b58e3a7c7adab44e7a9228f1dfe783996182c1e6))\n\n\n### :mega: Other\n\n* publish packages ([ae0d147](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/ae0d14738d83b4f5352463b69f89efe7cc111baf))\n\n\n\n## [0.22.2](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.22.1...@scena/react-guides@0.22.2) (2023-01-29)\n\n\n### :bug: Bug Fix\n\n* fix missing property #72 ([b14c179](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/b14c17987e9305fb9cc8d5d59318179f00d33693))\n\n\n### :mega: Other\n\n* publish packages ([0f7949a](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/0f7949a9954e2093d6a599dc545f988ed624d41f))\n\n\n\n## [0.22.1](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.22.0...@scena/react-guides@0.22.1) (2023-01-29)\n\n\n### :bug: Bug Fix\n\n* remove console.log ([c1c55b7](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/c1c55b7965edb34a1ad83f9b03886ba5a52a4c92))\n\n\n### :mega: Other\n\n* publish packages ([ab753c1](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/ab753c1c820463c1c0b7805d428c803c5eacc1e3))\n\n\n\n## [0.22.0](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.21.0...@scena/react-guides@0.22.0) (2023-01-29)\n\n\n### :rocket: New Features\n\n* add zoomTo prop #62 ([ac19fee](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/ac19fee790aee7a984beec551e1873dba8ef4d9f))\n\n\n### :mega: Other\n\n* publish packages ([6f83fa0](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/6f83fa0c75f494aa79fff98f4a57f86ab295b67d))\n\n\n\n## [0.21.0](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.20.1...@scena/react-guides@0.21.0) (2023-01-28)\n\n\n### :rocket: New Features\n\n* add guidesOffset prop #49 ([6335663](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/6335663a713bf0d9e312757e9e082f62d79cd9e7))\n\n\n### :bug: Bug Fix\n\n* fix remove index #9 ([54907a3](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/54907a38e036973c2dbe07266bfc3bdf633676c6))\n\n\n### :mega: Other\n\n* publish packages ([9473e84](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/9473e8464fbd4c374ac6251ff995586afd163719))\n\n\n\n## [0.20.1](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.20.0...@scena/react-guides@0.20.1) (2023-01-27)\n\n\n### :mega: Other\n\n* publish packages ([628b944](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/628b9444bb9e6f5546c7a5edd55a090126f52dd5))\n\n\n\n## [0.20.0](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.19.0...@scena/react-guides@0.20.0) (2023-01-20)\n\n\n### :rocket: New Features\n\n* add getGuideScrollPos, getRulerScrollPos ([9687c89](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/9687c89598ab9136c6d26cb06ebba2ca45dc26ae))\n\n\n### :bug: Bug Fix\n\n* fix base class names ([25e00d0](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/25e00d08a9e1410134ba6b352ae722af57f5ff38))\n* fix dragScroll #68 ([62f7871](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/62f787157fff4a3ea95c2a840fcb94a6f03ad6bb))\n* fix files field #67 ([28bf5b3](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/28bf5b3bd97cebd94eaf2195f0e99750f14e7ecb))\n* fix first defaultGuides prop ([b07ea2e](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/b07ea2ee9a2f5485a2468323a1e23cfda788163b))\n* fix missing guideStyle prop #69 ([1520b89](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/1520b896c29a2f11d96d55d2dbf51c0c06d9a113))\n* fix types #63 ([ee8706f](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/ee8706f2598045e7693bcb4119a2754c1cb81701))\n\n\n### :mega: Other\n\n* publish packages ([095e7c6](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/095e7c670d3bd0bdc168e2f3c11b5dbb8074b26b))\n* publish packages ([1daa6ea](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/1daa6ea441f6c96b8f354953605cd6ac89117878))\n* publish packages ([e143c21](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/e143c2175309bf480ef17731321f6728b8d6bcc2))\n* publish packages ([ce2037a](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/ce2037a18f5f6bbcd750e1fd72cbfc60e3f2c217))\n* publish packages ([0abcba2](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/0abcba24e8b83ea51cf369124e8c2d85fee1ef7e))\n\n\n\n## [0.19.0](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.18.0...@scena/react-guides@0.19.0) (2022-11-13)\n\n\n### :rocket: New Features\n\n* add getElement method, index property #63 #66 ([627cd2b](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/627cd2bdeb15aeeb41171e5318edc6c4a20ffc7a))\n* add scrollOptions #64 ([e0dc92a](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/e0dc92a9ed417dff071b43a68b065907f8f1b8ad))\n\n\n### :bug: Bug Fix\n\n* fix same pos guideline #65 ([94a7b6a](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/94a7b6af76128782fe3e1fa6d5ae3d5ff70b8276))\n* fix scroll event name ([6eba67b](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/6eba67b33c0de50e1c68ff75882889227db663bc))\n* update dependencies ([054e101](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/054e101d1b177bdfefab74bf440a4cb3cf8137be))\n\n\n### :mega: Other\n\n* publish packages ([9cc8e3a](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/9cc8e3ae5f83aa1513c1560166c6babbbe31dfd7))\n\n\n\n## [0.18.0](https://github.com/daybrush/guides/blob/master/packages/react-guides/compare/@scena/react-guides@0.17.1...@scena/react-guides@0.18.0) (2022-09-21)\n\n\n### :mega: Other\n\n* publish packages ([83de3e4](https://github.com/daybrush/guides/blob/master/packages/react-guides/commit/83de3e4ae4bad11905939a44dfa2776fe7d6987d))\n"
  },
  {
    "path": "packages/react-guides/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019 Daybrush\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "packages/react-guides/README.md",
    "content": "\n\n<p align=\"middle\" ><img src=\"https://raw.githubusercontent.com/daybrush/guides/master/demo/images/guides.png\"/></p>\n<h2 align=\"middle\">React Guides</h2>\n<p align=\"middle\">\n<a href=\"https://www.npmjs.com/package/@scena/react-guides\" target=\"_blank\"><img src=\"https://img.shields.io/npm/v/@scena/react-guides.svg?style=flat-square&color=007acc&label=version\" alt=\"npm version\" /></a>\n<img src=\"https://img.shields.io/badge/language-typescript-blue.svg?style=flat-square\"/>\n<a href=\"https://github.com/daybrush/guides/blob/master/LICENSE\" target=\"_blank\"><img src=\"https://img.shields.io/github/license/daybrush/guides.svg?style=flat-square&label=license&color=08CE5D\"/></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/react-guides\" target=\"_blank\"><img alt=\"React\" src=\"https://img.shields.io/static/v1.svg?label=&message=React&style=flat-square&color=61daeb\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/preact-guides\" target=\"_blank\"><img alt=\"Preact\" src=\"https://img.shields.io/static/v1.svg?label=&message=Preact&style=flat-square&color=673ab8\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/ngx-guides\" target=\"_blank\"><img alt=\"Angular\" src=\"https://img.shields.io/static/v1.svg?label=&message=Angular&style=flat-square&color=C82B38\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/vue-guides\" target=\"_blank\"><img\n    alt=\"Vue\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Vue&style=flat-square&color=3fb984\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\" target=\"_blank\"><img\n    alt=\"Vue\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Svelte&style=flat-square&color=C82B38\"></a>\n</p>\n<p align=\"middle\">A React Guides component that can draw ruler and manage guidelines.</p>\n<p align=\"middle\">\n    <a href=\"https://daybrush.com/guides\" target=\"_blank\"><strong>Demo</strong></a> /\n    <a href=\"https://daybrush.com/guides/release/latest/doc/\" target=\"_blank\"><strong>API</strong></a> /\n    <a href=\"https://github.com/daybrush/ruler\" target=\"_blank\"><strong>Ruler</strong></a> /\n    <a href=\"https://github.com/daybrush/scena\" target=\"_blank\"><strong>Main Project</strong></a>\n</p>\n\n\n## ⚙️ Installation\n### npm\n```sh\n$ npm i @scena/react-guides\n```\n\n## 🚀 How to use\n* [React Codesandbox Demo](https://codesandbox.io/s/react-guides-dpwyqr)\n\n```tsx\nimport * as React from \"react\";\nimport Guides from \"@scena/react-guides\";\n\nexport default class App extends React.Component {\n    render() {\n        return (<Guides\n            ref={e => {\n                this.guides = e;\n            }}\n            type=\"horizontal\"\n            onChangeGuides={({ guides }) => {\n                console.log(guides);\n            }}\n        />);\n    }\n    componentDidMount() {\n        this.guides.resize();\n        let scrollX = 0;\n        let scrollY = 0;\n\n        window.addEventListener(\"wheel\", e => {\n            scrollX += e.deltaX;\n            scrollY += e.deltaY;\n\n            this.guides.scrollGuides(scrollY);\n            this.guides.scroll(scrollX);\n        });\n        window.addEventListener(\"resize\", () => {\n            this.guides.resize();\n        });\n    }\n}\n```\n\n### Ruler Units\n\nThe default unit is px, and a line is drawn every 50px. If you want to use a different unit instead of the px unit, use it like this:\n\n* 1px (Default)\n    * zoom: 1\n    * unit: 50 (every 50px)\n* 1cm = 37.7952px\n    * zoom: 37.7952\n    * unit: 1 (every 1cm)\n* 1in = 96px = 2.54cm\n    * zoom: 96\n    * unit: 1 (every 1in)\n\nSee: https://www.w3schools.com/cssref/css_units.asp\n\n\n## ⚙️ Developments\n### `npm run start`\n\nRuns the app in the development mode.<br>\nOpen [http://localhost:3000](http://localhost:3000) to view it in the browser.\n\nThe page will reload if you make edits.<br>\nYou will also see any lint errors in the console.\n\n\n\n## ⭐️ Show Your Support\nPlease give a ⭐️ if this project helped you!\n\n## 👏 Contributing\n\nIf you have any questions or requests or want to contribute to `@scena/react-guides` or other packages, please write the [issue](https://github.com/daybrush/guides/issues) or give me a Pull Request freely.\n\n## 🐞 Bug Report\n\nIf you find a bug, please report to us opening a new [Issue](https://github.com/daybrush/guides/issues) on GitHub.\n\n\n## 📝 License\n\nThis project is [MIT](https://github.com/daybrush/guides/blob/master/LICENSE) licensed.\n\n```\nMIT License\n\nCopyright (c) 2019 Daybrush\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```\n"
  },
  {
    "path": "packages/react-guides/package.json",
    "content": "{\n    \"name\": \"@scena/react-guides\",\n    \"version\": \"0.28.2\",\n    \"description\": \"A React Guides component that can draw ruler and manage guidelines.\",\n    \"main\": \"./dist/guides.cjs.js\",\n    \"module\": \"./dist/guides.esm.js\",\n    \"sideEffects\": false,\n    \"types\": \"declaration/index.d.ts\",\n    \"scripts\": {\n        \"lint\": \"tslint -c tslint.json 'src/**/*.ts'\",\n        \"start\": \"rm -rf ./node_modules/.cache && SKIP_PREFLIGHT_CHECK=true react-scripts start\",\n        \"build\": \"rollup -c && npm run declaration && print-sizes ./dist \",\n        \"declaration\": \"rm -rf declaration && tsc -p tsconfig.declaration.json\"\n    },\n    \"keywords\": [\n        \"scene\",\n        \"scenejs\",\n        \"scene.js\",\n        \"scena\",\n        \"guides\",\n        \"guidelines\",\n        \"scroller\",\n        \"ruler\",\n        \"react\"\n    ],\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/daybrush/guides/blob/master/packages/react-guides\"\n    },\n    \"author\": \"Daybrush\",\n    \"license\": \"MIT\",\n    \"bugs\": {\n        \"url\": \"https://github.com/daybrush/guides/issues\"\n    },\n    \"homepage\": \"https://daybrush.com/guides\",\n    \"files\": [\n        \"./*\",\n        \"src/*\",\n        \"dist/*\",\n        \"declaration/*\",\n        \"README.md\"\n    ],\n    \"devDependencies\": {\n        \"@daybrush/builder\": \"^0.1.0\",\n        \"@scenejs/effects\": \"^1.0.1\",\n        \"@types/react\": \"^16.8.18\",\n        \"@types/react-color\": \"^3.0.1\",\n        \"@types/react-dom\": \"^16.8.4\",\n        \"print-sizes\": \"^0.2.0\",\n        \"react\": \"^16.8.6\",\n        \"react-dom\": \"^16.8.6\",\n        \"react-infinite-viewer\": \"^0.20.0\",\n        \"react-scripts\": \"^3.0.1\",\n        \"shape-svg\": \"^0.3.3\",\n        \"tslint\": \"^5.20.1\",\n        \"typescript\": \"^4.5.0 <4.6.0\"\n    },\n    \"dependencies\": {\n        \"@daybrush/utils\": \"^1.12.1\",\n        \"@scena/dragscroll\": \"^1.3.0\",\n        \"@scena/react-ruler\": \"^0.19.0\",\n        \"css-to-mat\": \"^1.0.3\",\n        \"framework-utils\": \"^1.1.0\",\n        \"gesto\": \"^1.18.1\",\n        \"react-css-styled\": \"^1.1.8\"\n    },\n    \"browserslist\": {\n        \"production\": [\n            \">0.2%\",\n            \"not dead\",\n            \"not op_mini all\"\n        ],\n        \"development\": [\n            \"last 1 chrome version\",\n            \"last 1 firefox version\",\n            \"last 1 safari version\"\n        ]\n    }\n}\n"
  },
  {
    "path": "packages/react-guides/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link rel=\"shortcut icon\" href=\"%PUBLIC_URL%/favicon.ico\" />\n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <meta name=\"theme-color\" content=\"#000000\" />\n    <!--\n      manifest.json provides metadata used when your web app is installed on a\n      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/\n    -->\n    <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\" />\n    <!--\n      Notice the use of %PUBLIC_URL% in the tags above.\n      It will be replaced with the URL of the `public` folder during the build.\n      Only files inside the `public` folder can be referenced from the HTML.\n\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n      work correctly both with client-side routing and a non-root public URL.\n      Learn how to configure a non-root public URL by running `npm run build`.\n    -->\n    <title>React App</title>\n  </head>\n  <body>\n    <noscript>You need to enable JavaScript to run this app.</noscript>\n    <div id=\"root\"></div>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n</html>\n"
  },
  {
    "path": "packages/react-guides/public/manifest.json",
    "content": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n      \"sizes\": \"64x64 32x32 24x24 16x16\",\n      \"type\": \"image/x-icon\"\n    }\n  ],\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "packages/react-guides/rollup.config.js",
    "content": "import builder from \"@daybrush/builder\";\n\nconst defaultOptions = {\n    tsconfig: \"tsconfig.build.json\",\n    external: {\n        \"@daybrush/utils\": \"utils\",\n        \"gesto\": \"Gesto\",\n        \"@egjs/axes\": \"eg.Axes\",\n        \"react\": \"React\",\n        \"keycon\": \"KeyController\",\n        \"react-dom\": \"ReactDOM\",\n        \"react-css-styled\": \"styled\"\n    },\n};\n\nexport default builder([\n    {\n        ...defaultOptions,\n        input: \"src/react-guides/index.esm.ts\",\n        output: \"./dist/guides.esm.js\",\n        format: \"es\",\n        exports: \"named\",\n    },\n    {\n        ...defaultOptions,\n        input: \"src/react-guides/index.umd.ts\",\n        output: \"./dist/guides.cjs.js\",\n        format: \"cjs\",\n        exports: \"default\",\n    },\n]);\n"
  },
  {
    "path": "packages/react-guides/src/demo/App.css",
    "content": "@import url(\"https://fonts.googleapis.com/css?family=Open+Sans:300,400,600&display=swap\");\n@import url(\"https://fonts.googleapis.com/css?family=Roboto:100&display=swap\");\nhtml, body {\n    font-family: \"Open Sans\", sans-serif;\n    position: relative;\n    margin: 0;\n    padding: 0;\n    height: 100%;\n    color: #333;\n    letter-spacing: 1px;\n    background: #f5f5f5;\n    font-weight: 300;\n    touch-action: manipulation;\n}\n#root, .page {\n    position: relative;\n    width: 100%;\n    height: 100%;\n    overflow: hidden;\n}\na {\n    text-decoration: none;\n    color: #333;\n}\n.ruler {\n    position:absolute;\n    top: 0;\n    left: 0;\n}\n.ruler.horizontal {\n    left: 0px;\n    width: 100%;\n    height: 30px;\n}\n.ruler.vertical {\n    top: 0px;\n    width: 30px;\n    height: 100%;\n}\n.box {\n    position: relative;\n    width: 30px;\n    height: 30px;\n    background: #444;\n    box-sizing: border-box;\n    z-index: 21;\n}\n.box:before, .box:after {\n    position: absolute;\n    content: \"\";\n    background: #777;\n}\n.box:before {\n    width: 1px;\n    height: 100%;\n    left: 100%;\n}\n.box:after {\n    height: 1px;\n    width: 100%;\n    top: 100%;\n}\n\n.container {\n    position: relative;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n    text-align: center;\n    max-width: calc(100% - 60px);\n    width: 100%;\n}\n\n.badges {\n    padding: 10px;\n}\n.badges img {\n    height: 20px;\n    margin: 0px 2px;\n}\n.buttons {\n    text-align: center;\n    margin: 0;\n    padding: 10px;\n}\n.buttons a {\n    margin: 0;\n    position: relative;\n    text-decoration: none;\n    color: #333;\n    border: 1px solid #333;\n    padding: 12px 30px;\n    min-width: 140px;\n    text-align: center;\n    display: inline-block;\n    box-sizing: border-box;\n    margin: 5px;\n    transition: all ease 0.5s;\n}\n.buttons a:hover {\n    background: #333;\n    color: #fff;\n}\n\np {\n    padding: 0;\n    margin: 0;\n}\n\n.dragit {\n    font-weight: bold;\n}\n"
  },
  {
    "path": "packages/react-guides/src/demo/App.tsx",
    "content": "import { Component } from \"react\";\nimport * as React from \"react\";\nimport Scene from \"scenejs\";\nimport \"./App.css\";\nimport Guides from \"../react-guides/Guides\";\nimport { ref } from \"framework-utils\";\nimport Gesto from \"gesto\";\n\ninterface State {\n    lockAdd: boolean;\n    lockRemove: boolean;\n    lockChange: boolean;\n    unit: number;\n    horizontalZoom: number;\n    verticalZoom: number;\n}\n\nexport default class App extends Component<{}> {\n    public state: State = {\n        horizontalZoom: 1,\n        verticalZoom: 1,\n        unit: 37.7,\n        lockAdd: false,\n        lockChange: false,\n        lockRemove: false,\n    };\n    private scene: Scene = new Scene();\n    // private editor!: Editor;\n    private guides1: Guides;\n    private guides2: Guides;\n    private scrollX: number = 0;\n    private scrollY: number = 0;\n\n    private handleLockRemoveClick = () => {\n        const lockRemove = !this.state.lockRemove;\n\n        this.setState({ lockRemove });\n    }\n\n    private handleLockAddClick = () => {\n        const lockAdd = !this.state.lockAdd;\n        this.setState({ lockAdd });\n    }\n\n    private handleLockChangeClick = () => {\n        const lockChange = !this.state.lockChange;\n        const lockRemove = !this.state.lockRemove && true;\n        this.setState({ lockChange, lockRemove });\n    }\n\n    private handleLockToggleClick = () => {\n        this.setState({ lockAdd: false, lockRemove: false, lockChange: false });\n    }\n\n    public render() {\n        const lockGuides: Array<\"add\" | \"change\" | \"remove\"> = [];\n        if (this.state.lockAdd) {\n            lockGuides.push(\"add\");\n        }\n        if (this.state.lockChange) {\n            lockGuides.push(\"change\");\n        }\n        if (this.state.lockRemove) {\n            lockGuides.push(\"remove\");\n        }\n        const lockText = lockGuides.length ? 'unlock' : 'lock';\n        const isLockButtonActive = (lockType: boolean) => lockType && { background: '#333', color: '#fff' };\n        return (<div className=\"page\">\n            <div className=\"box\" onClick={this.restore}></div>\n            <div className=\"ruler horizontal\" style={{}}>\n                <Guides ref={ref(this, \"guides1\")}\n                    type=\"horizontal\"\n                    zoom={1}\n                    unit={50}\n                    lockGuides={lockGuides}\n                    snapThreshold={5}\n                    textFormat={v => `${v}px`}\n                    snaps={[1, 2, 3]}\n                    digit={1}\n                    style={{ height: \"30px\" }}\n                    rulerStyle={{ left: \"30px\", width: \"calc(100% - 30px)\", height: \"100%\" }}\n                    dragPosFormat={v => `${v}cm`}\n                    displayDragPos={true}\n                    displayGuidePos={true}\n                    guidesOffset={50}\n                    onChangeGuides={({ guides }) => {\n                        console.log(\"horizontal\", guides);\n                    }}\n                    onDragStart={e => {\n                        console.log(\"dragStart\", e);\n                    }}\n                    onDrag={e => {\n                        console.log(\"drag\", e);\n                    }}\n                    onDragEnd={e => {\n                        console.log(\"dragEnd\", e);\n                    }}\n                    onClickRuler={e => {\n                        console.log(\"?\", e);\n                    }}\n                />\n            </div>\n            <div className=\"ruler vertical\">\n                <Guides ref={ref(this, \"guides2\")}\n                    type=\"vertical\"\n                    lockGuides={lockGuides}\n                    zoom={1}\n                    unit={50}\n                    snaps={[100, 200, 400]}\n                    rulerStyle={{ top: \"30px\", height: \"calc(100% - 30px)\", width: \"100%\" }}\n                    displayDragPos={true}\n                    onChangeGuides={({ guides }) => {\n                        console.log(\"vertical\", guides);\n                    }}\n                    onDragStart={e => {\n                        console.log(\"dragStart\", e);\n                    }}\n                    onDrag={e => {\n                        console.log(\"drag\", e);\n                    }}\n                    onDragEnd={e => {\n                        console.log(\"dragEnd\", e);\n                    }}\n                />\n            </div>\n            <div className=\"container\">\n                <img src=\"https://daybrush.com/guides/images/guides.png\" width=\"200\" alt=\"guides\" />\n                <p className=\"dragit\">Drag Screen & Rulers!</p>\n                <p><button onClick={() => {\n                    this.setState({\n                        horizontalZoom: this.state.horizontalZoom / 2,\n                        verticalZoom: this.state.horizontalZoom / 2,\n                        unit: this.state.unit * 2,\n                    });\n                }}>-</button> / <button onClick={() => {\n                    this.setState({\n                        horizontalZoom: this.state.horizontalZoom * 2,\n                        verticalZoom: this.state.horizontalZoom * 2,\n                        unit: this.state.unit / 2,\n                    });\n                }}>+</button></p>\n                <div className=\"buttons\">\n                    <button onClick={this.handleLockToggleClick}>\n                        <i className={`fa fa-${lockText}`}></i>\n                        {\" \" + lockText[0].toUpperCase() + lockText.slice(1)} Guides\n                    </button>\n                    <button style={{ ...isLockButtonActive(this.state.lockAdd) }} onClick={this.handleLockAddClick}> Add</button>\n                    <button style={{ ...isLockButtonActive(this.state.lockChange) }} onClick={this.handleLockChangeClick}> Change</button>\n                    <button style={{ ...isLockButtonActive(this.state.lockRemove) }} onClick={this.handleLockRemoveClick}> Remove</button>\n                </div>\n                <p className=\"badges\">\n                    <a href=\"https://www.npmjs.com/package/svelte-guides\" target=\"_blank\">\n                        <img src=\"https://img.shields.io/npm/v/svelte-guides.svg?style=flat-square&color=007acc&label=version\"\n                            alt=\"npm version\" /></a>\n                    <a href=\"https://github.com/daybrush/guides\" target=\"_blank\">\n                        <img src=\"https://img.shields.io/github/stars/daybrush/guides.svg?color=42b883&style=flat-square\" /></a>\n                    <a href=\"https://github.com/daybrush/guides\" target=\"_blank\">\n                        <img src=\"https://img.shields.io/badge/language-typescript-blue.svg?style=flat-square\" />\n                    </a>\n                    <a href=\"https://github.com/daybrush/guides/blob/master/LICENSE\" target=\"_blank\">\n                        <img\n                            src=\"https://img.shields.io/github/license/daybrush/guides.svg?style=flat-square&label=license&color=08CE5D\" />\n                    </a>\n                    <a href=\"https://github.com/daybrush/guides/tree/master/packages/react-guides\" target=\"_blank\"><img alt=\"React\"\n                        src=\"https://img.shields.io/static/v1.svg?label=&message=React&style=flat-square&color=61daeb\" /></a>\n                    <a href=\"https://github.com/daybrush/guides/tree/master/packages/preact-guides\" target=\"_blank\"><img alt=\"Preact\"\n                        src=\"https://img.shields.io/static/v1.svg?label=&message=Preact&style=flat-square&color=673ab8\" /></a>\n                    <a href=\"https://github.com/daybrush/guides/tree/master/packages/ngx-guides\" target=\"_blank\"><img alt=\"Angular\"\n                        src=\"https://img.shields.io/static/v1.svg?label=&message=Angular&style=flat-square&color=C82B38\" /></a>\n                    <a href=\"https://github.com/daybrush/guides/tree/master/packages/vue-guides\" target=\"_blank\"><img alt=\"Vue\"\n                        src=\"https://img.shields.io/static/v1.svg?label=&message=Vue&style=flat-square&color=3fb984\" /></a>\n                    <a href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\" target=\"_blank\"><img alt=\"Svelte\"\n                        src=\"https://img.shields.io/static/v1.svg?label=&message=Svelte&style=flat-square&color=C82B38\" /></a>\n                </p>\n                <p className=\"description\">A React Guides component that can draw ruler and manage guidelines.</p>\n                <div className=\"buttons\">\n                    <a href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\" target=\"_blank\">Download</a>\n                </div>\n            </div>\n        </div>\n        );\n    }\n\n    public componentDidMount() {\n        new Gesto(document.body).on(\"drag\", e => {\n            this.scrollX -= e.deltaX;\n            this.scrollY -= e.deltaY;\n\n            this.guides1.scrollGuides(this.scrollY);\n            this.guides1.scroll(this.scrollX);\n\n            this.guides2.scrollGuides(this.scrollX);\n            this.guides2.scroll(this.scrollY);\n        });\n        window.addEventListener(\"resize\", () => {\n            this.guides1.resize();\n            this.guides2.resize();\n        });\n    }\n    public restore = () => {\n        this.scrollX = 0;\n        this.scrollY = 0;\n        this.guides1.scroll(0);\n        this.guides1.scrollGuides(0);\n        this.guides2.scroll(0);\n        this.guides2.scrollGuides(0);\n    }\n}\n\nObject.defineProperty(Array.prototype, \"remove\", {\n    value: function (value) {\n        for (let key in this) {\n            if (this[key] === value) {\n                this.splice(key, 1);\n            }\n        }\n        return this;\n    }\n});\n"
  },
  {
    "path": "packages/react-guides/src/demo/InfiniteViewer.css",
    "content": "html,\nbody,\n.App,\n#root {\n  padding: 0;\n  margin: 0;\n  position: relative;\n  height: 100%;\n}\n.guides.horizontal {\n  position: absolute;\n  height: 30px;\n  left: 30px;\n  width: calc(100% - 30px);\n}\n.guides.vertical {\n  position: absolute;\n  width: 30px;\n  top: 30px;\n  height: calc(100% - 30px);\n}\n.viewer {\n  position: absolute;\n  top: 30px;\n  left: 30px;\n  width: calc(100% - 30px);\n  height: calc(100% - 30px);\n}\n\n.viewport {\n  position: relative;\n  border: 2px solid #ccc;\n  width: 400px;\n  height: 600px;\n}\n"
  },
  {
    "path": "packages/react-guides/src/demo/InfiniteViewer.tsx",
    "content": "import React, { useState } from \"react\";\nimport Guides from \"../react-guides\";\nimport InfiniteViewer from \"react-infinite-viewer\";\n\nimport \"./InfiniteViewer.css\";\n\nexport default function App() {\n    const [horizontalZoom, setHorizontalZoom] = React.useState(1);\n    const [verticalZoom, setVerticalZoom] = React.useState(1);\n    const horizontalUnit = Math.round(Math.floor(1 / horizontalZoom) * 50) || 50;\n    const verticalUnit = Math.round(Math.floor(1 / verticalZoom) * 50) || 50;\n    const viewerRef = React.useRef<InfiniteViewer>(null);\n    const horizontalGuidesRef = React.useRef<Guides>(null);\n    const verticalGuidesRef = React.useRef<Guides>(null);\n    const [horizontalGuidelines, setHorizontalGuidelines] = useState<number[]>([]);\n    const [verticalGuidelines, setVerticalGuidelines] = useState<number[]>([]);\n\n    React.useEffect(() => {\n        viewerRef.current!.scrollCenter();\n    }, []);\n\n    return (\n        <div className=\"App\">\n            <div className=\"guides horizontal\">\n                <Guides\n                    ref={horizontalGuidesRef}\n                    type=\"horizontal\"\n                    useResizeObserver={true}\n                    displayDragPos={true}\n                    displayGuidePos={true}\n                    zoom={horizontalZoom}\n                    guidesZoom={verticalZoom}\n                    unit={horizontalUnit}\n                    marks={verticalGuidelines}\n                    onChangeGuides={({ guides }) => {\n                        console.log(\"horizontal\", guides);\n                        setHorizontalGuidelines(guides);\n                    }}\n                />\n            </div>\n            <div className=\"guides vertical\">\n                <Guides\n                    ref={verticalGuidesRef}\n                    type=\"vertical\"\n                    useResizeObserver={true}\n                    displayDragPos={true}\n                    displayGuidePos={true}\n                    zoom={verticalZoom}\n                    guidesZoom={horizontalZoom}\n                    unit={verticalUnit}\n                    marks={horizontalGuidelines}\n                    onChangeGuides={({ guides }) => {\n                        console.log(\"vertical\", guides);\n                        setVerticalGuidelines(guides);\n                    }}\n                />\n            </div>\n            <InfiniteViewer\n                ref={viewerRef}\n                className=\"viewer\"\n                useAutoZoom={true}\n                useWheelScroll={true}\n                onScroll={(e) => {\n                    horizontalGuidesRef.current!.scroll(e.scrollLeft);\n                    horizontalGuidesRef.current!.scrollGuides(e.scrollTop);\n\n                    verticalGuidesRef.current!.scroll(e.scrollTop);\n                    verticalGuidesRef.current!.scrollGuides(e.scrollLeft);\n                }}\n                onPinch={(e) => {\n                    const zoom = e.zoom;\n                    horizontalGuidesRef.current!.zoomTo(e.zoomX,);\n                    // verticalGuidesRef.current!.zoomTo(e.zoomY);\n                    setHorizontalZoom(e.zoomX);\n                }}\n            >\n                <div className=\"viewport\">Viewport</div>\n            </InfiniteViewer>\n        </div>\n    );\n}\n"
  },
  {
    "path": "packages/react-guides/src/demo/serviceWorker.ts",
    "content": "// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n  window.location.hostname === \"localhost\" ||\n    // [::1] is the IPv6 localhost address.\n    window.location.hostname === \"[::1]\" ||\n    // 127.0.0.1/8 is considered localhost for IPv4.\n    window.location.hostname.match(\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/,\n    ),\n);\n\ninterface Config {\n  onSuccess?: (registration: ServiceWorkerRegistration) => void;\n  onUpdate?: (registration: ServiceWorkerRegistration) => void;\n}\n\nexport function register(config?: Config) {\n  if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(\n      (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\n      window.location.href,\n    );\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener(\"load\", () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      if (isLocalhost) {\n        // This is running on localhost. Let's check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl, config);\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            \"This web app is being served cache-first by a service \" +\n              \"worker. To learn more, visit https://bit.ly/CRA-PWA\",\n          );\n        });\n      } else {\n        // Is not localhost. Just register service worker\n        registerValidSW(swUrl, config);\n      }\n    });\n  }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        if (installingWorker == null) {\n          return;\n        }\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === \"installed\") {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                \"New content is available and will be used when all \" +\n                  \"tabs for this page are closed. See https://bit.ly/CRA-PWA.\",\n              );\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration);\n              }\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log(\"Content is cached for offline use.\");\n\n              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration);\n              }\n            }\n          }\n        };\n      };\n    })\n    .catch(error => {\n      console.error(\"Error during service worker registration:\", error);\n    });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl)\n    .then(response => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      const contentType = response.headers.get(\"content-type\");\n      if (\n        response.status === 404 ||\n        (contentType != null && contentType.indexOf(\"javascript\") === -1)\n      ) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then(registration => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl, config);\n      }\n    })\n    .catch(() => {\n      console.log(\n        \"No internet connection found. App is running in offline mode.\",\n      );\n    });\n}\n\nexport function unregister() {\n  if (\"serviceWorker\" in navigator) {\n    navigator.serviceWorker.ready.then(registration => {\n      registration.unregister();\n    });\n  }\n}\n"
  },
  {
    "path": "packages/react-guides/src/index.tsx",
    "content": "import React from \"react\";\nimport ReactDOM from \"react-dom\";\n// import App from \"./demo/App\";\nimport App from \"./demo/InfiniteViewer\";\nimport * as serviceWorker from \"./demo/serviceWorker\";\n\nReactDOM.render(<App />, document.getElementById(\"root\"));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"
  },
  {
    "path": "packages/react-guides/src/react-app-env.d.ts",
    "content": "/// <reference types=\"react-scripts\" />\n"
  },
  {
    "path": "packages/react-guides/src/react-guides/Guides.tsx",
    "content": "import * as React from \"react\";\nimport Ruler, { DrawRulerOptions, PROPERTIES as RULER_PROPERTIES, RulerProps } from \"@scena/react-ruler\";\nimport { ref, refs } from \"framework-utils\";\nimport DragScroll from \"@scena/dragscroll\";\nimport Gesto, { OnDrag, OnDragEnd, OnDragStart } from \"gesto\";\nimport { styled } from \"react-css-styled\";\nimport { GUIDES, GUIDE, DRAGGING, ADDER, DISPLAY_DRAG, GUIDES_CSS } from \"./consts\";\nimport { prefix } from \"./utils\";\nimport { hasClass, addClass, removeClass } from \"@daybrush/utils\";\nimport { GuidesState, GuidesProps, GuidesInterface } from \"./types\";\nimport { getDistElementMatrix, calculateMatrixDist } from \"css-to-mat\";\n\nconst GuidesElement = styled(\"div\", GUIDES_CSS);\n\nexport default class Guides extends React.PureComponent<GuidesProps, GuidesState> implements GuidesInterface {\n    public static defaultProps: GuidesProps = {\n        className: \"\",\n        type: \"horizontal\",\n        zoom: 1,\n        guidesZoom: 0,\n        style: {},\n        snapThreshold: 5,\n        snaps: [],\n        digit: 0,\n        onClickRuler: () => { },\n        onChangeGuides: () => { },\n        onRequestScroll: () => { },\n        onDragStart: () => { },\n        onDrag: () => { },\n        onDragEnd: () => { },\n        displayDragPos: false,\n        dragPosFormat: v => v,\n        defaultGuides: [],\n        lockGuides: false,\n        showGuides: true,\n        guideStyle: {},\n        dragGuideStyle: {},\n        guidePosStyle: {},\n        defaultGuidesPos: 0,\n    };\n    public state: GuidesState = {\n        guides: [],\n    };\n    public adderElement!: HTMLElement;\n    public scrollPos: number = 0;\n    public ruler!: Ruler;\n    private managerRef = React.createRef<HTMLElement>();\n    private guidesElement!: HTMLElement;\n    private displayElement!: HTMLElement;\n    private originElement!: HTMLElement;\n    private gesto!: Gesto;\n    private guideElements: HTMLElement[] = [];\n    private _isFirstMove = false;\n    private _zoom = 1;\n    private _guidesZoom = 1;\n    private _observer: ResizeObserver | null = null;\n\n    constructor(props: GuidesProps) {\n        super(props);\n        this.state.guides = props.defaultGuides || [];\n        this.scrollPos = props.defaultGuidesPos || 0;\n    }\n    public render() {\n        const {\n            className,\n            type,\n            zoom,\n            guidesZoom,\n            style,\n            rulerStyle,\n            displayDragPos,\n            cspNonce,\n            dragGuideStyle,\n            guidePosStyle = {}\n        } = this.props as Required<GuidesProps>;\n        const props = this.props;\n        const translateName = this.getTranslateName();\n        const rulerProps: RulerProps = {};\n\n        RULER_PROPERTIES.forEach(name => {\n            if (name === \"style\" || name === \"warpSelf\" || name === \"useResizeObserver\") {\n                return;\n            }\n            (rulerProps as any)[name] = props[name];\n        });\n\n        this._zoom = zoom;\n        this._guidesZoom = guidesZoom || zoom;\n\n        return <GuidesElement\n            ref={this.managerRef}\n            cspNonce={cspNonce}\n            className={`${prefix(\"manager\", type)} ${className}`}\n            style={style}\n        >\n            <div className={prefix(\"guide-origin\")} ref={ref(this, \"originElement\")}></div>\n            <Ruler\n                ref={ref(this, \"ruler\")}\n                style={rulerStyle}\n                {...rulerProps}\n            />\n            <div className={GUIDES} ref={ref(this, \"guidesElement\")} style={{\n                transform: `${translateName}(${-this.scrollPos * this._guidesZoom}px)`,\n            }}>\n                {displayDragPos && <div className={DISPLAY_DRAG}\n                    ref={ref(this, \"displayElement\")} style={guidePosStyle || {}} />}\n                <div className={ADDER} ref={ref(this, \"adderElement\")} style={dragGuideStyle} />\n                {this.renderGuides()}\n            </div>\n        </GuidesElement>;\n    }\n    /**\n     * Draw ruler\n     */\n    public drawRuler(options: DrawRulerOptions) {\n        this.ruler.draw(options);\n    }\n    public renderGuides() {\n        const props = this.props;\n        const {\n            type,\n            showGuides,\n            guideStyle,\n            displayGuidePos,\n            guidePosStyle = {},\n            guidesOffset,\n        } = props as Required<GuidesProps>;\n\n        const zoom = this._guidesZoom;\n        const translateName = this.getTranslateName();\n        const guides = this.state.guides;\n        const guidePosFormat = props.guidePosFormat || props.dragPosFormat || (v => v);\n\n        this.guideElements = [];\n        if (showGuides) {\n            return guides.map((pos, i) => {\n                const guidePos = pos + (guidesOffset || 0);\n\n                return (<div className={prefix(\"guide\", type)}\n                    ref={refs(this, \"guideElements\", i)}\n                    key={i}\n                    data-index={i}\n                    data-pos={pos}\n                    style={{\n                        ...guideStyle,\n                        transform: `${translateName}(${guidePos * zoom}px) translateZ(0px)`,\n                    }}>\n                    {displayGuidePos && <div className={prefix(\"guide-pos\")} style={guidePosStyle || {}}>\n                        {guidePosFormat!(pos)}\n                    </div>}\n                </div>);\n            });\n        }\n        return;\n    }\n    public componentDidMount() {\n        this.gesto = new Gesto(this.managerRef.current!, {\n            container: document.body,\n        }).on(\"dragStart\", e => {\n            const {\n                type,\n                lockGuides,\n            } = this.props;\n            const zoom = this._guidesZoom;\n\n            if (lockGuides === true) {\n                e.stop();\n                return;\n            }\n            const inputEvent = e.inputEvent;\n            const target = inputEvent.target;\n            const datas = e.datas;\n            const canvasElement = this.ruler.canvasElement;\n            const guidesElement = this.guidesElement;\n            const isHorizontal = type === \"horizontal\";\n            const originRect = this.originElement.getBoundingClientRect();\n            const matrix = getDistElementMatrix(this.managerRef.current!);\n            const offsetPos = calculateMatrixDist(matrix, [\n                e.clientX - originRect.left,\n                e.clientY - originRect.top,\n            ]);\n            offsetPos[0] -= guidesElement.offsetLeft;\n            offsetPos[1] -= guidesElement.offsetTop;\n            offsetPos[isHorizontal ? 1 : 0] += this.scrollPos * zoom!;\n\n            datas.offsetPos = offsetPos;\n            datas.matrix = matrix;\n\n            let isLockAdd = lockGuides && lockGuides.indexOf(\"add\") > -1;\n            let isLockRemove = lockGuides && lockGuides.indexOf(\"remove\") > -1;\n            let isLockChange = lockGuides && lockGuides.indexOf(\"change\") > -1;\n\n            if (target === canvasElement) {\n                if (isLockAdd) {\n                    e.stop();\n                    return;\n                }\n                datas.fromRuler = true;\n                datas.target = this.adderElement;\n                // add\n            } else if (hasClass(target, GUIDE)) {\n                if (isLockRemove && isLockChange) {\n                    e.stop();\n                    return;\n                }\n                datas.target = target;\n                // change\n            } else {\n                e.stop();\n                return false;\n            }\n            this.onDragStart(e);\n        }).on(\"drag\", this._onDrag).on(\"dragEnd\", this.onDragEnd);\n\n        if (this.props.useResizeObserver) {\n            this._observer = new ResizeObserver(this._onCheck);\n            this._observer.observe(this.guidesElement, {\n                box: \"border-box\",\n            });\n            this._observer.observe(this.getRulerElement(), {\n                box: \"border-box\",\n            });\n        } else {\n            this._onCheck();\n        }\n    }\n    public componentWillUnmount() {\n        this.gesto.unset();\n        this._observer?.disconnect();\n    }\n    public componentDidUpdate(prevProps: any) {\n        const nextGuides = this.props.defaultGuides;\n\n        if (prevProps.defaultGuides !== nextGuides) {\n            // to dynamically update guides from code rather than dragging guidelines\n            this.setState({ guides: nextGuides || [] });\n        }\n    }\n    /**\n     * Load the current guidelines.\n     * @memberof Guides\n     * @instance\n     */\n    public loadGuides(guides: number[]) {\n        this.setState({\n            guides,\n        });\n    }\n    /**\n     * Get current guidelines.\n     * @memberof Guides\n     * @instance\n     */\n    public getGuides(): number[] {\n        return this.state.guides;\n    }\n    /**\n     * Scroll the positions of the guidelines opposite the ruler.\n     * @memberof Guides\n     * @instance\n     */\n    public scrollGuides(pos: number, nextZoom = this._guidesZoom) {\n        this._setZoom({ guidesZoom: nextZoom });\n        const translateName = this.getTranslateName();\n        const guidesElement = this.guidesElement;\n\n        this.scrollPos = pos;\n        guidesElement.style.transform = `${translateName}(${-pos * nextZoom}px)`;\n\n        const guides = this.state.guides;\n        const guidesOffset = this.props.guidesOffset || 0;\n        this.guideElements.forEach((el, i) => {\n            if (!el) {\n                return;\n            }\n            const guidePos = guides[i] + (guidesOffset || 0);\n\n            el.style.transform = `${translateName}(${guidePos * nextZoom}px) translateZ(0px)`;\n            el.style.display = -pos + guidePos < 0 ? \"none\" : \"block\";\n        });\n    }\n    /**\n     * Set to the next zoom.\n     * @memberof Guides\n     * @since 0.22.0\n     * @param nextZoom - next zoom\n     */\n    public zoomTo(nextZoom: number, nextGuidesZoom = nextZoom) {\n        this.scroll(this.getRulerScrollPos(), nextZoom);\n        this.scrollGuides(this.getGuideScrollPos(), nextGuidesZoom);\n    }\n    /**\n     * Get Guides DOM Element\n     * @memberof Guides\n     * @instance\n     */\n    public getElement() {\n        return this.managerRef.current!;\n    }\n    /**\n     * Get Ruler DOM Element\n     * @memberof Guides\n     * @instance\n     */\n    public getRulerElement() {\n        return this.ruler.canvasElement;\n    }\n    /**\n     * Scroll position of guides (horizontal: y, vertical: x)\n     */\n    public getGuideScrollPos() {\n        return this.scrollPos;\n    }\n    /**\n     * Scroll position of the ruler (horizontal: x, vertical: y)\n     */\n    public getRulerScrollPos() {\n        return this.ruler.getScrollPos();\n    }\n    /**\n     * Scroll the position of the ruler.\n     * @memberof Guides\n     * @instance\n     */\n    public scroll(pos: number, nextZoom = this._zoom) {\n        this._setZoom({ zoom: nextZoom });\n        this.ruler.scroll(pos, nextZoom);\n    }\n    /**\n     * Recalculate the size of the ruler.\n     * @memberof Guides\n     * @instance\n     */\n    public resize(nextZoom = this._zoom) {\n        this._setZoom({ zoom: nextZoom });\n        this.ruler.resize(nextZoom);\n    }\n    private onDragStart = (e: any) => {\n        const { datas, inputEvent } = e;\n\n        this._isFirstMove = true;\n        this.movePos(e);\n\n        /**\n         * When the drag starts, the dragStart event is called.\n         * @memberof Guides\n         * @event dragStart\n         * @param {OnDragStart} - Parameters for the dragStart event\n         */\n        this.props.onDragStart!({\n            ...e,\n            dragElement: datas.target,\n        });\n\n        if (!this.gesto.isFlag()) {\n            return;\n        }\n        inputEvent.stopPropagation();\n        inputEvent.preventDefault();\n\n\n        this._startDragScroll(e);\n    }\n    private _onDrag = (e: any) => {\n        if (this._isFirstMove) {\n            this._isFirstMove = false;\n            addClass(e.datas.target, DRAGGING);\n        }\n        const nextPos = this.movePos(e);\n\n        /**\n         * When dragging, the drag event is called.\n         * @memberof Guides\n         * @event drag\n         * @param {OnDrag} - Parameters for the drag event\n         */\n        this.props.onDrag!({\n            ...e,\n            dragElement: e.datas.target,\n        });\n\n        if (!this.gesto.isFlag()) {\n            this._endDragScroll(e);\n            return;\n        }\n\n        this._dragScroll(e);\n        return nextPos;\n    }\n    private onDragEnd = (e: OnDragEnd) => {\n        const { datas, isDouble, distX, distY } = e;\n        const pos = this.movePos(e);\n        let guides = this.state.guides;\n        const { onChangeGuides, displayDragPos, digit, lockGuides, guidesOffset } = this.props;\n        const zoom = this._guidesZoom;\n        const guidePos = parseFloat((pos / zoom!).toFixed(digit || 0));\n        const baseScrollPos = this.scrollPos - (guidesOffset || 0);\n\n        if (displayDragPos) {\n            this.displayElement.style.cssText += `display: none;`;\n        }\n        removeClass(datas.target, DRAGGING);\n        /**\n         * When the drag finishes, the dragEnd event is called.\n         * @memberof Guides\n         * @event dragEnd\n         * @param {OnDragEnd} - Parameters for the dragEnd event\n         */\n        this.props.onDragEnd!({\n            ...e,\n            dragElement: datas.target,\n        });\n\n        this._endDragScroll(e);\n        if (datas.fromRuler) {\n            if (this._isFirstMove) {\n                /**\n                 * When click the ruler, the click ruler is called.\n                 * @memberof Guides\n                 * @event clickRuler\n                 * @param {OnClickRuler} - Parameters for the clickRuler event\n                 */\n                this.props.onClickRuler!({\n                    ...e,\n                    pos: 0,\n                });\n            }\n            if (guidePos >= baseScrollPos && guides.indexOf(guidePos) < 0) {\n                this.setState({\n                    guides: [...guides, guidePos],\n                }, () => {\n                    /**\n                     * The `changeGuides` event occurs when the guideline is added / removed / changed.\n                     * @memberof Guides\n                     * @event changeGuides\n                     * @param {OnChangeGuides} - Parameters for the changeGuides event\n                     */\n                    onChangeGuides!({\n                        guides: this.state.guides,\n                        distX,\n                        distY,\n                        index: guides.length,\n                        isAdd: true,\n                        isRemove: false,\n                        isChange: false,\n                    });\n                });\n            }\n        } else {\n            const index = parseFloat(datas.target.getAttribute(\"data-index\"));\n            let isRemove = false;\n            let isChange = false;\n\n            guides = [...guides];\n\n            const guideIndex = guides.indexOf(guidePos);\n            if (\n                isDouble\n                || guidePos < baseScrollPos\n                || (guideIndex > -1 && guideIndex !== index)\n            ) {\n                if (lockGuides && (lockGuides === true || lockGuides.indexOf(\"remove\") > -1)) {\n                    return;\n                }\n                guides.splice(index, 1);\n                isRemove = true;\n            } else if (guideIndex > -1) {\n                return;\n            } else {\n                if (lockGuides && (lockGuides === true || lockGuides.indexOf(\"change\") > -1)) {\n                    return;\n                }\n                guides[index] = guidePos;\n                isChange = true;\n            }\n            this.setState({\n                guides,\n            }, () => {\n                const nextGuides = this.state.guides;\n                onChangeGuides!({\n                    distX,\n                    distY,\n                    guides: nextGuides,\n                    isAdd: false,\n                    index,\n                    isChange,\n                    isRemove,\n                });\n            });\n        }\n    }\n    private movePos(e: any) {\n        const { datas, distX, distY } = e;\n        const props = this.props;\n        const {\n            type, snaps, snapThreshold,\n            displayDragPos,\n            digit,\n        } = props;\n        const guidesOffset = props.guidesOffset || 0;\n        const zoom = this._guidesZoom;\n        const dragPosFormat = props.dragPosFormat || (v => v);\n        const isHorizontal = type === \"horizontal\";\n        const matrixPos = calculateMatrixDist(datas.matrix, [distX, distY]);\n        const offsetPos = datas.offsetPos;\n        const offsetX = matrixPos[0] + offsetPos[0];\n        const offsetY = matrixPos[1] + offsetPos[1];\n        const guidesZoomOffset = guidesOffset * zoom;\n        let nextPos = Math.round(isHorizontal ? offsetY : offsetX) - guidesOffset;\n        let guidePos = parseFloat((nextPos / zoom!).toFixed(digit || 0));\n        const guideSnaps = snaps!.slice().sort((a, b) => {\n            return Math.abs(guidePos - a) - Math.abs(guidePos - b);\n        });\n\n        if (guideSnaps.length && Math.abs(guideSnaps[0] * zoom! - nextPos) < snapThreshold!) {\n            guidePos = guideSnaps[0];\n            nextPos = guidePos * zoom!;\n        }\n        if (!datas.fromRuler || !this._isFirstMove) {\n            if (displayDragPos) {\n                const displayPos = type === \"horizontal\"\n                    ? [offsetX, nextPos + guidesZoomOffset]\n                    : [nextPos + guidesZoomOffset, offsetY];\n\n                this.displayElement.style.cssText += `display: block;`\n                    + `transform: translate(-50%, -50%) `\n                    + `translate(${displayPos.map(v => `${v}px`).join(\", \")})`;\n                this.displayElement.innerHTML = `${dragPosFormat!(guidePos)}`;\n            }\n            const target = datas.target;\n\n\n            target.setAttribute(\"data-pos\", guidePos);\n            target.style.transform = `${this.getTranslateName()}(${nextPos + guidesOffset * zoom}px)`;\n        }\n\n        return nextPos;\n    }\n    private getTranslateName() {\n        return this.props.type === \"horizontal\" ? \"translateY\" : \"translateX\";\n    }\n\n    private _startDragScroll(e: OnDragStart) {\n        const scrollOptions = this.props.scrollOptions;\n\n        if (!scrollOptions) {\n            return;\n        }\n        const datas = e.datas;\n        const dragScroll = new DragScroll();\n\n        datas.dragScroll = dragScroll;\n        dragScroll.on(\"scroll\", ({ container, direction }) => {\n            /**\n             * If scroll can be triggered through drag, the `requestScroll` event is fired.\n             * @memberof Guides\n             * @event requestScroll\n             * @param {OnRequestScroll} - Parameters for the `requestScroll` event\n             */\n            this.props.onRequestScroll?.({ container, direction });\n        }).on(\"move\", ({ offsetX, offsetY, inputEvent }) => {\n            this.gesto.scrollBy(offsetX, offsetY, inputEvent.inputEvent, true);\n        });\n        dragScroll.dragStart(e, {\n            container: scrollOptions.container,\n        });\n    }\n    private _dragScroll(e: OnDrag) {\n        const scrollOptions = this.props.scrollOptions;\n\n        if (!scrollOptions) {\n            return;\n        }\n        const dragScroll = e.datas.dragScroll as DragScroll;\n\n        dragScroll.drag(e, scrollOptions);\n    }\n    private _endDragScroll(e: OnDragEnd) {\n        e.datas.dragScroll?.dragEnd();\n        e.datas.dragScroll = null;\n    }\n    private _onCheck = () => {\n        this.resize();\n    }\n    private _setZoom(zooms: { zoom?: number; guidesZoom?: number }) {\n        const {\n            zoom: nextZoom,\n            guidesZoom: nextGuidesZoom,\n        } = zooms;\n        const hasZoom = !!this.props.zoom;\n        const hasGuidesZoom = !!this.props.guidesZoom;\n\n        if (hasGuidesZoom) {\n            if (nextGuidesZoom) {\n                this._guidesZoom = nextGuidesZoom;\n            }\n        } else {\n            if (nextGuidesZoom) {\n                this._zoom = nextGuidesZoom;\n                this._guidesZoom = nextGuidesZoom;\n            }\n            if (nextZoom) {\n                this._guidesZoom = nextZoom;\n            }\n        }\n        if (nextZoom) {\n            this._zoom  = nextZoom;\n        }\n    }\n}\n"
  },
  {
    "path": "packages/react-guides/src/react-guides/consts.ts",
    "content": "import { prefix } from \"./utils\";\nimport { prefixCSS } from \"framework-utils\";\nimport { GuidesOptions } from \"./types\";\nimport { PROPERTIES as RULER_PROPERTIES } from \"@scena/react-ruler\";\n\nexport const ADDER = prefix(\"guide\", \"adder\");\nexport const GUIDES = prefix(\"guides\");\nexport const GUIDE = prefix(\"guide\");\nexport const DRAGGING = prefix(\"dragging\");\nexport const DISPLAY_DRAG = prefix(\"display-drag\");\nexport const GUIDES_CSS = prefixCSS(\"scena-guides-\", `\n{\n    position: relative;\n    width: 100%;\n    height: 100%;\n}\ncanvas {\n    position: relative;\n}\n.guide-origin {\n    position: absolute;\n    width: 1px;\n    height: 1px;\n    top: 0;\n    left: 0;\n    opacity: 0;\n}\n.guides {\n    position: absolute;\n    bottom: 0;\n    right: 0;\n    will-change: transform;\n    z-index: 2000;\n}\n.guide-pos {\n    position: absolute;\n    font-weight: bold;\n    font-size: 12px;\n    color: #f33;\n}\n.horizontal .guide-pos {\n    bottom: 100%;\n    left: 50%;\n    transform: translate(-50%);\n}\n.vertical .guide-pos {\n    left: calc(100% + 2px);\n    top: 50%;\n    transform: translateY(-50%);\n}\n.display-drag {\n    position: absolute;\n    will-change: transform;\n    z-index: 2000;\n    font-weight: bold;\n    font-size: 12px;\n    display: none;\n    left: 20px;\n    top: -20px;\n    color: #f33;\n}\n:host.horizontal .guides {\n    width: 100%;\n    height: 0;\n}\n:host.vertical .guides {\n    height: 100%;\n    width: 0;\n}\n:host.horizontal canvas {\n    cursor: ns-resize;\n}\n:host.vertical canvas {\n    cursor: ew-resize;\n}\n.guide {\n    position: absolute;\n    background: #f33;\n    z-index: 2;\n}\n.guide.dragging:before {\n    position: absolute;\n    content: \"\";\n    width: 100%;\n    height: 100%;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n}\n:host.horizontal .guide {\n    width: 100%;\n    height: 1px;\n    cursor: row-resize;\n}\n:host.vertical .guide {\n    width: 1px;\n    height: 100%;\n    cursor: col-resize;\n}\n.mobile :host.horizontal .guide {\n    transform: scale(1, 2);\n}\n.mobile :host.vertical .guide {\n    transform: scale(2, 1);\n}\n:host.horizontal .guide:before {\n    height: 20px;\n}\n:host.vertical .guide:before {\n    width: 20px;\n}\n.adder {\n    display: none;\n}\n.adder.dragging {\n    display: block;\n}\n`);\n\nexport const PROPERTIES: Array<keyof GuidesOptions> = [\n    \"className\",\n    \"rulerStyle\",\n    'snapThreshold',\n    \"snaps\",\n    \"displayDragPos\",\n    \"cspNonce\",\n    'dragPosFormat',\n    \"defaultGuides\",\n    \"showGuides\",\n    \"scrollOptions\",\n    \"guideStyle\",\n    \"guidesOffset\",\n    \"digit\",\n    \"defaultGuidesPos\",\n    \"dragGuideStyle\",\n    \"displayGuidePos\",\n    \"guidePosFormat\",\n    \"guidePosStyle\",\n    \"lockGuides\",\n    \"guidesZoom\",\n    ...RULER_PROPERTIES,\n];\n\nexport const METHODS = [\n    \"getGuides\",\n    \"loadGuides\",\n    \"scroll\",\n    \"scrollGuides\",\n    \"resize\",\n    \"getElement\",\n    \"getRulerElement\",\n    \"forceUpdate\",\n    \"getRulerScrollPos\",\n    \"getGuideScrollPos\",\n    \"zoomTo\",\n    \"drawRuler\",\n] as const;\n\nexport const EVENTS = [\n    \"changeGuides\",\n    \"requestScroll\",\n    \"dragStart\",\n    \"drag\",\n    \"dragEnd\",\n    \"clickRuler\",\n] as const;\n"
  },
  {
    "path": "packages/react-guides/src/react-guides/index.esm.ts",
    "content": "import Guides from \"./Guides\";\n\nexport default Guides;\nexport { PROPERTIES, METHODS, EVENTS } from \"./consts\";\n"
  },
  {
    "path": "packages/react-guides/src/react-guides/index.ts",
    "content": "import Guides from \"./index.esm\";\n\nexport default Guides;\nexport * from \"./types\";\nexport * from \"./index.esm\";\n"
  },
  {
    "path": "packages/react-guides/src/react-guides/index.umd.ts",
    "content": "import Guides, * as others from \"./index.esm\";\n\nfor (const name in others) {\n    (Guides as any)[name] = (others as any)[name];\n}\nexport default Guides;\n"
  },
  {
    "path": "packages/react-guides/src/react-guides/types.ts",
    "content": "import { DrawRulerOptions, RulerProps } from \"@scena/react-ruler/declaration/types\";\nimport { IObject } from \"@daybrush/utils\";\nimport {\n    OnDragStart as OnGestoDragStart,\n    OnDrag as OnGestoDrag,\n    OnDragEnd as OnGestoDragEnd,\n} from \"gesto\";\nimport { DragScrollOptions } from \"@scena/dragscroll\";\n\n\nexport interface GuidesState {\n    guides: number[];\n}\n\n/**\n * @typedef\n * @memberof Guides\n * @extends Ruler.RulerProps\n */\nexport interface GuidesOptions extends RulerProps {\n    /**\n     * guides' class name\n     * @default \"\"\n     */\n    className?: string;\n    /**\n     * ruler's css style\n     * @default \"width 100%, height: 100%\"\n     */\n    rulerStyle?: IObject<any>;\n    /**\n     * Interval to snap\n     * @default 5\n     */\n    snapThreshold?: number;\n    /**\n     * Positions to snap\n     * @default []\n     */\n    snaps?: number[];\n    /**\n     * Whether to show the moving pos when dragging\n     * @default false\n     */\n    displayDragPos?: boolean;\n    /**\n     * guides zoom(side zoom). If not set, it is the same as `zoom`.\n     * @default zoom\n     * @since 0.29.0\n     */\n    guidesZoom?: number;\n    /**\n     * csp nonce\n     */\n    cspNonce?: string;\n    /**\n     * Format of drag pos\n     * @default self\n     */\n    dragPosFormat?: (value: number) => string | number;\n    /**\n     * default guidelines\n     * @default []\n     */\n    defaultGuides?: number[];\n    /**\n     * default guide pos for init\n     * @default 0\n     */\n    defaultGuidesPos?: number\n    /**\n     * Whether to show guidelines\n     * @default true\n     */\n    showGuides?: boolean;\n    /**\n     * Whether to lock add/remove/change functions via drag/click of guides\n     * @default false\n     */\n    lockGuides?: boolean | Array<\"add\" | \"change\" | \"remove\">;\n    /**\n     * pos digit of guidelines\n     * @default 0\n     */\n    digit?: number;\n    /**\n     * CSS style objects for guide elements\n     * @default \"{}\"\n     */\n    guideStyle?: Record<string, any>;\n    /**\n     * CSS style objects for drag guide element\n     * @default \"{}\"\n     */\n    dragGuideStyle?: Record<string, any>;\n    /**\n     * Whether to show the guide pos text\n     * @default false\n     */\n    displayGuidePos?: boolean;\n    /**\n     * Format of displayed guide pos\n     * @default dragPosFormat\n     */\n    guidePosFormat?: (value: number) => string | number;\n    /**\n     * CSS style objects for displayed guide pos text element\n     * @default: \"{}\"\n     */\n    guidePosStyle?: IObject<any>;\n    /**\n     * Set the scroll options, time, etc. to automatically scroll by dragging.\n     * @default null\n     */\n    scrollOptions?: DragScrollOptions | null;\n    /**\n     * Numerical value of how far away from the guideline position\n     * @since 0.22.0\n     * @default 0\n     */\n    guidesOffset?: number;\n}\n\n/**\n * @typedef\n * @memberof Guides\n * @extends Guides.GuidesOptions\n */\nexport interface GuideOptions extends GuidesOptions {\n}\n\n/**\n * @typedef\n * @memberof Guides\n * @extends Guides.GuidesOptions\n */\nexport interface GuidesProps extends GuidesOptions {\n    onChangeGuides?: (e: OnChangeGuides) => any;\n    onRequestScroll?: (e: OnRequestScroll) => any;\n    onDragStart?: (e: OnDragStart) => any;\n    onDrag?: (e: OnDrag) => any;\n    onDragEnd?: (e: OnDragEnd) => any;\n    onClickRuler?: (e: OnClickRuler) => any;\n}\n/**\n * @typedef\n * @memberof Guides\n */\nexport interface OnChangeGuides {\n    guides: number[];\n    isAdd: boolean;\n    isRemove: boolean;\n    isChange: boolean;\n    index: number;\n    distX: number;\n    distY: number;\n}\n/**\n * @typedef\n * @memberof Guides\n */\nexport interface OnRequestScroll {\n    container: HTMLElement | SVGElement;\n    direction: number[];\n}\n\n/**\n * @typedef\n * @memberof Guides\n * @extends Gesto.OnDragStart\n */\nexport interface OnDragStart extends OnGestoDragStart {\n    dragElement: HTMLElement;\n}\n/**\n * @typedef\n * @memberof Guides\n * @extends Gesto.OnDrag\n */\nexport interface OnDrag extends OnGestoDrag {\n    dragElement: HTMLElement;\n}\n/**\n * @typedef\n * @memberof Guides\n * @extends Gesto.OnDragEnd\n */\nexport interface OnDragEnd extends OnGestoDragEnd {\n    dragElement: HTMLElement;\n}\n/**\n * @typedef\n * @memberof Guides\n * @extends Gesto.OnDragEnd\n */\nexport interface OnClickRuler extends OnGestoDragEnd {\n    pos: number;\n}\n/**\n * @typedef\n * @memberof Guides\n */\nexport interface GuidesInterface {\n    getGuides(): number[];\n    scroll(pos: number): void;\n    scrollGuides(pos: number): void;\n    drawRuler(options: DrawRulerOptions): void;\n    loadGuides(guides: number[]): void;\n    resize(): void;\n    getElement(): HTMLElement;\n    getRulerElement(): HTMLCanvasElement;\n}\n\n/**\n * @typedef\n * @memberof Guides\n */\nexport interface GuidesEvents {\n    changeGuides: OnChangeGuides;\n    requestScroll: OnRequestScroll;\n    dragStart: OnDragStart;\n    drag: OnDrag;\n    dragEnd: OnDragEnd;\n    clickRuler: OnClickRuler;\n}\n"
  },
  {
    "path": "packages/react-guides/src/react-guides/utils.ts",
    "content": "import { prefixNames } from \"framework-utils\";\n\nexport function prefix(...classNames: string[]) {\n    return prefixNames(\"scena-guides-\", ...classNames);\n}\n"
  },
  {
    "path": "packages/react-guides/tsconfig.build.json",
    "content": "{\n    \"extends\": \"./tsconfig\",\n    \"compilerOptions\": {\n      \"jsx\": \"react\"\n    },\n  }\n"
  },
  {
    "path": "packages/react-guides/tsconfig.declaration.json",
    "content": "{\n    \"extends\": \"./tsconfig\",\n    \"compilerOptions\": {\n        \"allowJs\": false,\n        \"noEmit\": false,\n        \"isolatedModules\": false,\n        \"removeComments\": false,\n        \"declaration\": true,\n        \"emitDeclarationOnly\": true,\n        \"declarationDir\": \"declaration\"\n    },\n    \"include\": [\n        \"./src/react-guides/**/*\"\n    ]\n}\n"
  },
  {
    "path": "packages/react-guides/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"outDir\": \"./outjs/\",\n    \"esModuleInterop\": false,\n    \"sourceMap\": true,\n    \"module\": \"esnext\",\n    \"target\": \"es5\",\n    \"experimentalDecorators\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"preserve\",\n    \"lib\": [\n      \"es2015\",\n      \"dom\"\n    ],\n    \"allowJs\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"strict\": true,\n    \"strictNullChecks\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": true\n  },\n  \"include\": [\n    \"./src/**/*.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/react-guides/tslint.json",
    "content": "{\n\t\"defaultSeverity\": \"error\",\n\t\"extends\": [\n\t\t\"tslint:recommended\"\n\t],\n\t\"rules\": {\n\t\t\"typedef\": [true, \"parameter\"],\n\t\t\"jsdoc-format\": false,\n\t\t\"forin\": false,\n\t\t\"no-console\": false,\n        \"no-any\": false,\n        \"no-empty\": false,\n\t\t\"interface-name\": false,\n\t\t\"indent\": [\n\t\t\ttrue,\n\t\t\t\"spaces\",\n\t\t\t4\n\t\t],\n\t\t\"ordered-imports\": false,\n\t\t\"object-literal-sort-keys\": false,\n\t\t\"no-unused-expression\": false,\n\t\t\"arrow-parens\": [\n\t\t\ttrue,\n\t\t\t\"ban-single-arg-parens\"\n\t\t],\n\t\t\"max-line-length\": [\n\t\t\ttrue,\n\t\t\t{\n\t\t\t\t\"limit\": 120,\n\t\t\t\t\"ignore-pattern\": \"(\\\\* @)|//\"\n\t\t\t}\n\t\t],\n\t\t\"trailing-comma\": [\n\t\t\ttrue,\n\t\t\t{\n\t\t\t\t\"multiline\": {\n\t\t\t\t\t\"objects\": \"always\",\n\t\t\t\t\t\"arrays\": \"always\",\n\t\t\t\t\t\"functions\": \"always\",\n\t\t\t\t\t\"typeLiterals\": \"ignore\"\n\t\t\t\t},\n\t\t\t\t\"esSpecCompliant\": true\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "packages/svelte-guides/.gitignore",
    "content": ".DS_Store\nnode_modules\npublic/bundle.*\n"
  },
  {
    "path": "packages/svelte-guides/CHANGELOG.md",
    "content": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://conventionalcommits.org) for commit guidelines.\n\n## [0.28.2](https://github.com/daybrush/guides/compare/svelte-guides@0.28.1...svelte-guides@0.28.2) (2023-07-29)\n\n\n### :mega: Other\n\n* publish packages ([9b659fe](https://github.com/daybrush/guides/commit/9b659fe71eb2fcb53b731e88b1561a0b18b9fcdc))\n\n\n\n## [0.28.1](https://github.com/daybrush/guides/compare/svelte-guides@0.28.0...svelte-guides@0.28.1) (2023-07-23)\n\n\n### :mega: Other\n\n* publish packages ([73e2427](https://github.com/daybrush/guides/commit/73e24270c27eec1f30cc051fe84569e79f85822c))\n\n\n\n## [0.28.0](https://github.com/daybrush/guides/compare/svelte-guides@0.27.0...svelte-guides@0.28.0) (2023-07-22)\n\n\n### :mega: Other\n\n* publish packages ([324f848](https://github.com/daybrush/guides/commit/324f848e0bae231c82b33be29ee2534d58a6d6b1))\n\n\n\n## [0.27.0](https://github.com/daybrush/guides/compare/svelte-guides@0.26.0...svelte-guides@0.27.0) (2023-06-02)\n\n\n### :mega: Other\n\n* publish packages ([53d07f3](https://github.com/daybrush/guides/commit/53d07f3e31011ee6bff1a2558380dc6e61e98337))\n\n\n\n## [0.26.0](https://github.com/daybrush/guides/compare/svelte-guides@0.25.5...svelte-guides@0.26.0) (2023-06-01)\n\n\n### :rocket: New Features\n\n* support svelte types ([a401a7a](https://github.com/daybrush/guides/commit/a401a7a4f1325e8364aef55d1728a27167dc1c91))\n\n\n### :mega: Other\n\n* publish packages ([d038e92](https://github.com/daybrush/guides/commit/d038e92046e55f0f65f4ddde24f12ed117fd64e2))\n\n\n\n## [0.25.5](https://github.com/daybrush/guides/compare/svelte-guides@0.25.4...svelte-guides@0.25.5) (2023-05-16)\n\n\n### :mega: Other\n\n* publish packages ([78ed8c7](https://github.com/daybrush/guides/commit/78ed8c708759927cabeb53b8c607fc6f54324371))\n\n\n\n## [0.25.4](https://github.com/daybrush/guides/compare/svelte-guides@0.25.2...svelte-guides@0.25.4) (2023-05-15)\n\n\n### :mega: Other\n\n* publish packages ([1898b89](https://github.com/daybrush/guides/commit/1898b895d5c812a5fd77d99a5928f7e420152772))\n* update packages ([d8db884](https://github.com/daybrush/guides/commit/d8db884cdf43c19f77ad9c5721d3a466808853c3))\n\n\n\n## [0.25.2](https://github.com/daybrush/guides/compare/svelte-guides@0.25.0...svelte-guides@0.25.2) (2023-05-07)\n\n\n### :mega: Other\n\n* publish packages ([e1fb57c](https://github.com/daybrush/guides/commit/e1fb57c59a4a8e6b3e55ffb68cfea64760270288))\n* update croact version ([2fd28db](https://github.com/daybrush/guides/commit/2fd28dbbfd648b8ee6fee39f3972057fce580ae0))\n\n\n\n## [0.25.0](https://github.com/daybrush/guides/compare/svelte-guides@0.24.0...svelte-guides@0.25.0) (2023-04-12)\n\n\n### :bug: Bug Fix\n\n* fix svelte main field ([9157cef](https://github.com/daybrush/guides/commit/9157cef04c3688b7d14596043c5ad774f9aa5179))\n\n\n### :mega: Other\n\n* publish packages ([548990d](https://github.com/daybrush/guides/commit/548990d8577ffe565b8605f74edd9eb5a6519deb))\n\n\n\n## [0.24.0](https://github.com/daybrush/guides/compare/svelte-guides@0.23.0...svelte-guides@0.24.0) (2023-04-06)\n\n\n### :rocket: New Features\n\n* add croact-guides ([a7be435](https://github.com/daybrush/guides/commit/a7be435704e24b6d80af80e069a6cc4047d645bc))\n\n\n### :mega: Other\n\n* publish packages ([f30e2ba](https://github.com/daybrush/guides/commit/f30e2bad78e1bc02307c8dde8cb1b69ecccdf116))\n\n\n\n## [0.23.0](https://github.com/daybrush/guides/compare/svelte-guides@0.22.3...svelte-guides@0.23.0) (2023-03-04)\n\n\n### :mega: Other\n\n* publish packages ([1afbe1d](https://github.com/daybrush/guides/commit/1afbe1d193cf2457dc9f3296b73d38b5859c0ee0))\n\n\n\n## [0.22.3](https://github.com/daybrush/guides/compare/svelte-guides@0.22.2...svelte-guides@0.22.3) (2023-02-04)\n\n\n### :mega: Other\n\n* publish packages ([ae0d147](https://github.com/daybrush/guides/commit/ae0d14738d83b4f5352463b69f89efe7cc111baf))\n\n\n\n## [0.22.2](https://github.com/daybrush/guides/compare/svelte-guides@0.22.1...svelte-guides@0.22.2) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([0f7949a](https://github.com/daybrush/guides/commit/0f7949a9954e2093d6a599dc545f988ed624d41f))\n\n\n\n## [0.22.1](https://github.com/daybrush/guides/compare/svelte-guides@0.22.0...svelte-guides@0.22.1) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([ab753c1](https://github.com/daybrush/guides/commit/ab753c1c820463c1c0b7805d428c803c5eacc1e3))\n\n\n\n## [0.22.0](https://github.com/daybrush/guides/compare/svelte-guides@0.21.0...svelte-guides@0.22.0) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([6f83fa0](https://github.com/daybrush/guides/commit/6f83fa0c75f494aa79fff98f4a57f86ab295b67d))\n\n\n\n## [0.21.0](https://github.com/daybrush/guides/compare/svelte-guides@0.20.1...svelte-guides@0.21.0) (2023-01-28)\n\n\n### :mega: Other\n\n* publish packages ([9473e84](https://github.com/daybrush/guides/commit/9473e8464fbd4c374ac6251ff995586afd163719))\n\n\n\n## [0.20.1](https://github.com/daybrush/guides/compare/svelte-guides@0.20.0...svelte-guides@0.20.1) (2023-01-27)\n\n\n### :mega: Other\n\n* publish packages ([628b944](https://github.com/daybrush/guides/commit/628b9444bb9e6f5546c7a5edd55a090126f52dd5))\n\n\n\n## [0.20.0](https://github.com/daybrush/guides/compare/svelte-guides@0.19.0...svelte-guides@0.20.0) (2023-01-20)\n\n\n### :bug: Bug Fix\n\n* fix files field #67 ([28bf5b3](https://github.com/daybrush/guides/commit/28bf5b3bd97cebd94eaf2195f0e99750f14e7ecb))\n\n\n### :mega: Other\n\n* publish packages ([095e7c6](https://github.com/daybrush/guides/commit/095e7c670d3bd0bdc168e2f3c11b5dbb8074b26b))\n* publish packages ([1daa6ea](https://github.com/daybrush/guides/commit/1daa6ea441f6c96b8f354953605cd6ac89117878))\n* publish packages ([e143c21](https://github.com/daybrush/guides/commit/e143c2175309bf480ef17731321f6728b8d6bcc2))\n* publish packages ([ce2037a](https://github.com/daybrush/guides/commit/ce2037a18f5f6bbcd750e1fd72cbfc60e3f2c217))\n* publish packages ([0abcba2](https://github.com/daybrush/guides/commit/0abcba24e8b83ea51cf369124e8c2d85fee1ef7e))\n\n\n\n## [0.19.0](https://github.com/daybrush/guides/compare/svelte-guides@0.18.0...svelte-guides@0.19.0) (2022-11-13)\n\n\n### :rocket: New Features\n\n* add scrollOptions #64 ([e0dc92a](https://github.com/daybrush/guides/commit/e0dc92a9ed417dff071b43a68b065907f8f1b8ad))\n\n\n### :bug: Bug Fix\n\n* update dependencies ([054e101](https://github.com/daybrush/guides/commit/054e101d1b177bdfefab74bf440a4cb3cf8137be))\n\n\n### :mega: Other\n\n* publish packages ([9cc8e3a](https://github.com/daybrush/guides/commit/9cc8e3ae5f83aa1513c1560166c6babbbe31dfd7))\n\n\n\n## [0.18.0](https://github.com/daybrush/guides/compare/svelte-guides@0.17.3...svelte-guides@0.18.0) (2022-09-21)\n\n\n### :mega: Other\n\n* publish packages ([83de3e4](https://github.com/daybrush/guides/commit/83de3e4ae4bad11905939a44dfa2776fe7d6987d))\n"
  },
  {
    "path": "packages/svelte-guides/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019 Daybrush\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "packages/svelte-guides/README.md",
    "content": "\n\n<p align=\"middle\" ><img src=\"https://raw.githubusercontent.com/daybrush/guides/master/demo/images/guides.png\"/></p>\n<h2 align=\"middle\">Svelte Guides</h2>\n<p align=\"middle\">\n<a href=\"https://www.npmjs.com/package/svelte-guides\" target=\"_blank\"><img src=\"https://img.shields.io/npm/v/svelte-guides.svg?style=flat-square&color=007acc&label=version\" alt=\"npm version\" /></a>\n<img src=\"https://img.shields.io/badge/language-typescript-blue.svg?style=flat-square\"/>\n<a href=\"https://github.com/daybrush/guides/blob/master/LICENSE\" target=\"_blank\"><img src=\"https://img.shields.io/github/license/daybrush/guides.svg?style=flat-square&label=license&color=08CE5D\"/></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/react-guides\" target=\"_blank\"><img alt=\"React\" src=\"https://img.shields.io/static/v1.svg?label=&message=React&style=flat-square&color=61daeb\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/preact-guides\" target=\"_blank\"><img alt=\"Preact\" src=\"https://img.shields.io/static/v1.svg?label=&message=Preact&style=flat-square&color=673ab8\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/ngx-guides\" target=\"_blank\"><img alt=\"Angular\" src=\"https://img.shields.io/static/v1.svg?label=&message=Angular&style=flat-square&color=C82B38\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/vue-guides\" target=\"_blank\"><img\n    alt=\"Vue\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Vue&style=flat-square&color=3fb984\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\" target=\"_blank\"><img\n    alt=\"Vue\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Svelte&style=flat-square&color=C82B38\"></a>\n</p>\n<p align=\"middle\">A Svelte Guides component that can draw ruler and manage guidelines.</p>\n<p align=\"middle\">\n    <a href=\"https://daybrush.com/guides\" target=\"_blank\"><strong>Demo</strong></a> /\n    <a href=\"https://daybrush.com/guides/release/latest/doc/\" target=\"_blank\"><strong>API</strong></a> /\n    <a href=\"https://github.com/daybrush/ruler\" target=\"_blank\"><strong>Ruler</strong></a> /\n    <a href=\"https://github.com/daybrush/scena\" target=\"_blank\"><strong>Main Project</strong></a>\n</p>\n\n\n## ⚙️ Installation\n### npm\n```sh\n$ npm i svelte-guides\n```\n\n## 🚀 How to use\n```html\n<script>\nimport Guides from \"svelte-guides\";\nimport { onMount } from \"svelte\";\n\nlet guides;\nonMount(() => {\n    requestAnimationFrame(() => {\n        guides.resize();\n    });\n    let scrollX = 0;\n    let scrollY = 0;\n    window.addEventListener(\"resize\", () => {\n        guides.resize();\n    });\n    window.addEventListener(\"wheel\", e => {\n        scrollX += e.deltaX;\n        scrollY += e.deltaY;\n\n        guides.scrollGuides(scrollY);\n        guides.scroll(scrollX);\n    });\n})\n</script>\n<div class=\"guides\">\n    <Guides\n        type=\"horizontal\" bind:this={guides}\n        on:changeGuides={({ detail: e }) => {\n            console.log(e.guides);\n        }}\n        />\n</div>\n\n```\n```ts\n\nexport interface RulerProps {\n    type?: \"horizontal\" | \"vertical\";\n    width?: number;\n    height?: number;\n    unit?: number;\n    zoom?: number;\n    direction?: \"start\" | \"end\";\n    style?: IObject<any>;\n    backgroundColor?: string;\n    lineColor?: string;\n    textColor?: string;\n}\n\nexport interface GuidesOptions extends RulerProps {\n    className?: string;\n    setGuides?: (guides: number[]) => any;\n    rulerStyle?: IObject<any>;\n    snapThreshold?: number;\n    snaps?: number[];\n    displayDragPos?: boolean;\n    dragPosFormat?: (value: number) => string | number;\n}\n\nexport interface GuidesInterface {\n    getGuides(): number[];\n    scroll(pos: number): void;\n    scrollGuides(pos: number): void;\n    loadGuides(guides: number[]): void;\n    resize(): void;\n}\n\n```\n\n\n\n## ⚙️ Developments\n### `npm run dev`\n\nRuns the app in the development mode.<br>\nOpen [http://localhost:5000](http://localhost:5000) to view it in the browser.\n\nThe page will reload if you make edits.<br>\nYou will also see any lint errors in the console.\n\n\n\n## ⭐️ Show Your Support\nPlease give a ⭐️ if this project helped you!\n\n## 👏 Contributing\n\nIf you have any questions or requests or want to contribute to `guides` or other packages, please write the [issue](https://github.com/daybrush/guides/issues) or give me a Pull Request freely.\n\n## 🐞 Bug Report\n\nIf you find a bug, please report to us opening a new [Issue](https://github.com/daybrush/guides/issues) on GitHub.\n\n\n## 📝 License\n\nThis project is [MIT](https://github.com/daybrush/guides/blob/master/LICENSE) licensed.\n\n```\nMIT License\n\nCopyright (c) 2019 Daybrush\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```\n"
  },
  {
    "path": "packages/svelte-guides/package.json",
    "content": "{\n    \"name\": \"svelte-guides\",\n    \"version\": \"0.28.2\",\n    \"description\": \"A Svelte Guides component that can draw ruler and manage guidelines.\",\n    \"svelte\": \"./src/index.js\",\n    \"sideEffects\": false,\n    \"types\": \"src/index.d.ts\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"git+https://github.com/daybrush/guides.git\"\n    },\n    \"author\": \"Daybrush\",\n    \"license\": \"MIT\",\n    \"bugs\": {\n        \"url\": \"https://github.com/daybrush/guides/issues\"\n    },\n    \"homepage\": \"https://daybrush.com/guides\",\n    \"files\": [\n        \"./*\",\n        \"src/*\",\n        \"dist/*\",\n        \"declaration/*\",\n        \"README.md\"\n    ],\n    \"devDependencies\": {\n        \"@daybrush/builder\": \"^0.1.2\",\n        \"@pyoner/svelte-ts-preprocess\": \"^1.2.1\",\n        \"keycon\": \"^0.6.0\",\n        \"rollup\": \"^1.12.0\",\n        \"rollup-plugin-commonjs\": \"^10.0.0\",\n        \"rollup-plugin-livereload\": \"^1.0.4\",\n        \"rollup-plugin-node-resolve\": \"^5.2.0\",\n        \"rollup-plugin-svelte\": \"^7.1.0\",\n        \"rollup-plugin-terser\": \"^5.2.0\",\n        \"scenejs\": \"^1.1.5\",\n        \"sirv-cli\": \"^0.4.4\",\n        \"svelte\": \"^3.16.4\",\n        \"svelte-preprocess\": \"^3.2.2\",\n        \"tslib\": \"^1.10.0\",\n        \"typescript\": \"^4.5.0 <4.6.0\"\n    },\n    \"dependencies\": {\n        \"@scena/guides\": \"~0.29.2\"\n    },\n    \"scripts\": {\n        \"build\": \"rollup -c rollup.build.config.js\",\n        \"dev\": \"rollup -c -w\",\n        \"start\": \"sirv public --single\",\n        \"start:dev\": \"sirv public --single --dev\",\n        \"build:dev\": \"rollup -c\"\n    }\n}\n"
  },
  {
    "path": "packages/svelte-guides/public/global.css",
    "content": "html, body {\n\tposition: relative;\n\twidth: 100%;\n\theight: 100%;\n}\n\nbody {\n\tcolor: #333;\n\tmargin: 0;\n\tpadding: 8px;\n\tbox-sizing: border-box;\n\tfont-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n}\n\na {\n\tcolor: rgb(0,100,200);\n\ttext-decoration: none;\n}\n\na:hover {\n\ttext-decoration: underline;\n}\n\na:visited {\n\tcolor: rgb(0,80,160);\n}\n\nlabel {\n\tdisplay: block;\n}\n\ninput, button, select, textarea {\n\tfont-family: inherit;\n\tfont-size: inherit;\n\tpadding: 0.4em;\n\tmargin: 0 0 0.5em 0;\n\tbox-sizing: border-box;\n\tborder: 1px solid #ccc;\n\tborder-radius: 2px;\n}\n\ninput:disabled {\n\tcolor: #ccc;\n}\n\ninput[type=\"range\"] {\n\theight: 0;\n}\n\nbutton {\n\tcolor: #333;\n\tbackground-color: #f4f4f4;\n\toutline: none;\n}\n\nbutton:active {\n\tbackground-color: #ddd;\n}\n\nbutton:focus {\n\tborder-color: #666;\n}\n"
  },
  {
    "path": "packages/svelte-guides/public/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n\t<meta charset='utf-8'>\n\t<meta name='viewport' content='width=device-width'>\n\n\t<title>Svelte app</title>\n\n\t<link rel='icon' type='image/png' href='/favicon.png'>\n\t<link rel='stylesheet' href='/global.css'>\n\t<link rel='stylesheet' href='/bundle.css'>\n\n\t<script defer src='/bundle.js'></script>\n</head>\n\n<body>\n</body>\n</html>\n"
  },
  {
    "path": "packages/svelte-guides/rollup.build.config.js",
    "content": "import buildHelper from \"@daybrush/builder\";\nimport svelte from 'rollup-plugin-svelte';\nimport { preprocess } from \"@pyoner/svelte-ts-preprocess\";\n\nconst defaultOptions = {\n    tsconfig: \"\",\n    input: './src/index.js',\n    commonjs: true,\n    external: {\n        \"svelte\": \"svelte\",\n    },\n    plugins: [\n        svelte({\n            preprocess: preprocess(),\n        }),\n    ],\n}\nexport default buildHelper([\n    {\n        ...defaultOptions,\n        output: \"dist/guides.cjs.js\",\n        format: \"cjs\",\n    },\n    {\n        ...defaultOptions,\n        output: \"dist/guides.esm.js\",\n        format: \"es\",\n    },\n]);\n"
  },
  {
    "path": "packages/svelte-guides/rollup.config.js",
    "content": "import svelte from 'rollup-plugin-svelte';\nimport resolve from 'rollup-plugin-node-resolve';\nimport commonjs from 'rollup-plugin-commonjs';\nimport livereload from 'rollup-plugin-livereload';\nimport { terser } from 'rollup-plugin-terser';\nimport rollup_start_dev from './rollup_start_dev';\nimport { preprocess } from \"@pyoner/svelte-ts-preprocess\";\n\nconst production = !process.env.ROLLUP_WATCH;\n\nexport default {\n\tinput: 'src/main.js',\n\toutput: {\n\t\tsourcemap: true,\n\t\tformat: 'iife',\n\t\tname: 'app',\n\t\tfile: 'public/bundle.js'\n\t},\n\tplugins: [\n\t\tsvelte({\n\t\t\t// enable run-time checks when not in production\n\t\t\tdev: !production,\n\t\t\t// we'll extract any component CSS out into\n\t\t\t// a separate file — better for performance\n\t\t\tcss: css => {\n\t\t\t\tcss.write('public/bundle.css');\n            },\n            preprocess: preprocess(),\n\t\t}),\n\n\t\t// If you have external dependencies installed from\n\t\t// npm, you'll most likely need these plugins. In\n\t\t// some cases you'll need additional configuration —\n\t\t// consult the documentation for details:\n\t\t// https://github.com/rollup/rollup-plugin-commonjs\n\t\tresolve({\n\t\t\tbrowser: true,\n\t\t\tdedupe: importee => importee === 'svelte' || importee.startsWith('svelte/')\n\t\t}),\n\t\tcommonjs(),\n\n\t\t// In dev mode, call `npm run start:dev` once\n\t\t// the bundle has been generated\n\t\t!production && rollup_start_dev,\n\n\t\t// Watch the `public` directory and refresh the\n\t\t// browser on changes when not in production\n\t\t!production && livereload('public'),\n\n\t\t// If we're building for production (npm run build\n\t\t// instead of npm run dev), minify\n\t\tproduction && terser()\n\t],\n\twatch: {\n\t\tclearScreen: false\n\t}\n};\n"
  },
  {
    "path": "packages/svelte-guides/rollup_start_dev.js",
    "content": "import * as child_process from 'child_process';\n\nlet running_dev_server = false;\n\nexport default {\n\twriteBundle() {\n\t\tif (!running_dev_server) {\n\t\t\trunning_dev_server = true;\n\t\t\tchild_process.spawn('npm', ['run', 'start:dev'], { stdio: ['ignore', 'inherit', 'inherit'], shell: true });\n\t\t}\n\t}\n};\n"
  },
  {
    "path": "packages/svelte-guides/src/App.svelte",
    "content": "<script lang=\"ts\">\n  import Guides from \"./index\";\n  import { onMount } from \"svelte\";\n  import Gesto from \"gesto\";\n\n  let ruler1;\n  let guides1: Guides;\n  let guides2: Guides;\n  let box: HTMLElement;\n\n  onMount(() => {\n    requestAnimationFrame(() => {\n      guides1.resize();\n      guides2.resize();\n    });\n    new Gesto(document.body).on(\"dragStart\", e => {\n      if (e.inputEvent.target === box) {\n        return false;\n      }\n    }).on(\"drag\", e => {\n      scrollX -= e.deltaX;\n      scrollY -= e.deltaY;\n\n      guides1.scroll(scrollX);\n      guides1.scrollGuides(scrollY);\n      guides2.scroll(scrollY);\n      guides2.scrollGuides(scrollX);\n    });\n  });\n  function onRestore() {\n    scrollX = 0;\n    scrollY = 0;\n    guides1.scroll(0);\n    guides1.scrollGuides(0);\n    guides2.scroll(0);\n    guides2.scrollGuides(0);\n  }\n  function onResize() {\n    guides1.resize();\n    guides2.resize();\n  }\n</script>\n\n<style>\n  @import url(\"https://fonts.googleapis.com/css?family=Open+Sans:300,400,600&display=swap\");\n  @import url(\"https://fonts.googleapis.com/css?family=Roboto:100&display=swap\");\n\n  :global(html),\n  :global(body) {\n    font-family: \"Open Sans\", sans-serif;\n    position: relative;\n    margin: 0;\n    padding: 0;\n    height: 100%;\n    color: #333;\n    letter-spacing: 1px;\n    background: #f5f5f5;\n    font-weight: 300;\n    touch-action: manipulation;\n  }\n  #root,\n  .page {\n    position: relative;\n    width: 100%;\n    height: 100%;\n    overflow: hidden;\n  }\n  a {\n    text-decoration: none;\n    color: #333;\n  }\n  .ruler {\n    position: absolute;\n    top: 0;\n    left: 0;\n  }\n  .ruler.horizontal {\n    left: 0px;\n    width: 100%;\n    height: 30px;\n  }\n  .ruler.vertical {\n    top: 0px;\n    width: 30px;\n    height: 100%;\n  }\n  .box {\n    position: relative;\n    width: 30px;\n    height: 30px;\n    background: #444;\n    box-sizing: border-box;\n    z-index: 21;\n  }\n  .box:before,\n  .box:after {\n    position: absolute;\n    content: \"\";\n    background: #777;\n  }\n  .box:before {\n    width: 1px;\n    height: 100%;\n    left: 100%;\n  }\n  .box:after {\n    height: 1px;\n    width: 100%;\n    top: 100%;\n  }\n\n  .container {\n    position: relative;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n    text-align: center;\n    max-width: calc(100% - 60px);\n    width: 100%;\n  }\n\n  .badges {\n    padding: 10px;\n  }\n  .badges img {\n    height: 20px;\n    margin: 0px 2px;\n  }\n  .buttons {\n    text-align: center;\n    margin: 0;\n    padding: 10px;\n  }\n  .buttons a {\n    margin: 0;\n    position: relative;\n    text-decoration: none;\n    color: #333;\n    border: 1px solid #333;\n    padding: 12px 30px;\n    min-width: 140px;\n    text-align: center;\n    display: inline-block;\n    box-sizing: border-box;\n    margin: 5px;\n    transition: all ease 0.5s;\n  }\n  .buttons a:hover {\n    background: #333;\n    color: #fff;\n  }\n\n  p {\n    padding: 0;\n    margin: 0;\n  }\n\n  .dragit {\n    font-weight: bold;\n  }\n</style>\n\n<div class=\"box\" on:click={onRestore} bind:this={box} />\n<div class=\"ruler horizontal\">\n  <Guides bind:this={guides1} type=\"horizontal\" rulerStyle={{ left: \"30px\", width: \"calc(100% - 30px)\", height: \"30px\"}} />\n</div>\n<div class=\"ruler vertical\">\n  <Guides bind:this={guides2} type=\"vertical\"  rulerStyle={{ top: \"30px\", height: \"calc(100% - 30px)\", width: \"30px\"}}\n  on:changeGuides={({ detail: e }) => {\n    console.log(e);\n  }}\n  />\n</div>\n\n<div class=\"container\">\n  <img\n    src=\"https://daybrush.com/guides/images/guides.png\"\n    width=\"200\"\n    alt=\"guides\" />\n  <p class=\"dragit\">Drag Screen & Rulers!</p>\n  <p class=\"badges\">\n    <a href=\"https://www.npmjs.com/package/svelte-guides\" target=\"_blank\">\n      <img\n        src=\"https://img.shields.io/npm/v/svelte-guides.svg?style=flat-square&color=007acc&label=version\"\n        alt=\"npm version\" />\n    </a>\n    <a href=\"https://github.com/daybrush/guides\" target=\"_blank\">\n      <img\n        src=\"https://img.shields.io/github/stars/daybrush/guides.svg?color=42b883&style=flat-square\" />\n    </a>\n    <a href=\"https://github.com/daybrush/guides\" target=\"_blank\">\n      <img\n        src=\"https://img.shields.io/badge/language-typescript-blue.svg?style=flat-square\" />\n    </a>\n    <a\n      href=\"https://github.com/daybrush/guides/blob/master/LICENSE\"\n      target=\"_blank\">\n      <img\n        src=\"https://img.shields.io/github/license/daybrush/guides.svg?style=flat-square&label=license&color=08CE5D\" />\n    </a>\n    <a\n      href=\"https://github.com/daybrush/guides/tree/master/packages/react-guides\"\n      target=\"_blank\">\n      <img\n        alt=\"React\"\n        src=\"https://img.shields.io/static/v1.svg?label=&message=React&style=flat-square&color=61daeb\" />\n    </a>\n    <a\n      href=\"https://github.com/daybrush/guides/tree/master/packages/preact-guides\"\n      target=\"_blank\">\n      <img\n        alt=\"Preact\"\n        src=\"https://img.shields.io/static/v1.svg?label=&message=Preact&style=flat-square&color=673ab8\" />\n    </a>\n    <a\n      href=\"https://github.com/daybrush/guides/tree/master/packages/ngx-guides\"\n      target=\"_blank\">\n      <img\n        alt=\"Angular\"\n        src=\"https://img.shields.io/static/v1.svg?label=&message=Angular&style=flat-square&color=C82B38\" />\n    </a>\n    <a\n      href=\"https://github.com/daybrush/guides/tree/master/packages/vue-guides\"\n      target=\"_blank\">\n      <img\n        alt=\"Vue\"\n        src=\"https://img.shields.io/static/v1.svg?label=&message=Vue&style=flat-square&color=3fb984\" />\n    </a>\n    <a\n      href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\"\n      target=\"_blank\">\n      <img\n        alt=\"Svelte\"\n        src=\"https://img.shields.io/static/v1.svg?label=&message=Svelte&style=flat-square&color=C82B38\" />\n    </a>\n  </p>\n  <p class=\"description\">\n    A Svelte Guides component that can draw ruler and manage guidelines.\n  </p>\n  <div class=\"buttons\">\n    <a\n      href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\"\n      target=\"_blank\">\n      Download\n    </a>\n    <!-- <a href=\"./release/latest/doc\" target=\"_blank\">API</a> -->\n  </div>\n</div>\n"
  },
  {
    "path": "packages/svelte-guides/src/Guides.svelte",
    "content": "<script>\n  import VanillaGuides, {\n    PROPERTIES,\n    EVENTS\n  } from \"@scena/guides\";\n\n  import {\n    onMount,\n    onDestroy,\n    beforeUpdate,\n    createEventDispatcher\n  } from \"svelte\";\n  const dispatch = createEventDispatcher();\n\n  export let style = { width: \"100%\", height: \"100%\"};\n\n  let options = {};\n  let guides;\n  let guidesElement;\n\n  function setStyle() {\n    const elStyle = guidesElement.style;\n\n    for (const name in style) {\n      if (elStyle[name] === style[name]) {\n        continue;\n      }\n      elStyle[name] = style[name];\n    }\n  }\n  beforeUpdate(() => {\n    const props = $$props;\n\n    options = {};\n    PROPERTIES.forEach(name => {\n      if (name === \"style\") {\n        return;\n      }\n      if (name in props) {\n        options[name] = props[name];\n      }\n    });\n    if (guides) {\n      setStyle();\n      for (const name in options) {\n        guides[name] = options[name];\n      }\n    }\n  });\n  onMount(() => {\n    setStyle();\n    guides = new VanillaGuides(guidesElement, {\n      ...options,\n      warpSelf: true,\n    });\n\n    EVENTS.forEach((name, i) => {\n      guides.on(name, e => {\n        dispatch(name, e);\n      });\n    });\n  });\n  onDestroy(() => {\n    if (guides) guides.destroy();\n  });\n\n  export function getInstance() {\n    return guides;\n  }\n</script>\n<div class=\"guides\" bind:this={guidesElement} />\n"
  },
  {
    "path": "packages/svelte-guides/src/index.d.ts",
    "content": "/// <reference types=\"svelte\" />\nimport { SvelteComponentTyped } from \"svelte\";\nimport { GuidesInterface, GuidesOptions, GuidesEvents } from \"@scena/guides\";\n\nexport type SvelteGuidesEvents = {\n    [key in keyof GuidesEvents]: CustomEvent<GuidesEvents[key]>;\n}\nexport default class GuidesComponent extends SvelteComponentTyped<\n    GuidesOptions,\n    SvelteGuidesEvents\n> { }\n\nexport default interface GuidesComponent extends GuidesInterface {\n}\n\nexport * from \"@scena/guides\";\n"
  },
  {
    "path": "packages/svelte-guides/src/index.js",
    "content": "import Guides from \"./Guides.svelte\";\nimport { METHODS } from \"@scena/guides\";\n\nexport default /*#__PURE__*/ (() => {\n    const prototype = Guides.prototype;\n\n    if (!prototype) {\n        return Guides;\n    }\n    METHODS.forEach(name => {\n        prototype[name] = function (...args) {\n            const self = this.getInstance();\n            const result = self[name](...args);\n\n            if (result === self) {\n                return this;\n            } else {\n                return result;\n            }\n        };\n    });\n    return Guides;\n})();\n"
  },
  {
    "path": "packages/svelte-guides/src/main.js",
    "content": "import App from './App.svelte';\n\nconst app = new App({\n\ttarget: document.body,\n\tprops: {\n\t\tname: 'world'\n\t}\n});\n\nexport default app;"
  },
  {
    "path": "packages/svelte-guides/svelte.config.js",
    "content": "const sveltePreprocess = require('svelte-preprocess');\n\nmodule.exports = {\n    preprocess: sveltePreprocess(),\n};\n"
  },
  {
    "path": "packages/svelte-guides/tsconfig.json",
    "content": "{\n    \"include\": [\"src/**/*\"],\n    \"exclude\": [\"node_modules/*\"],\n    \"compilerOptions\": {\n      /* Basic Options */\n      \"target\": \"ESNEXT\",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */\n      \"module\": \"ESNEXT\",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */\n      // \"lib\": [],                             /* Specify library files to be included in the compilation. */\n      // \"allowJs\": true,                       /* Allow javascript files to be compiled. */\n      // \"checkJs\": true,                       /* Report errors in .js files. */\n      // \"jsx\": \"preserve\",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */\n      // \"declaration\": true,                   /* Generates corresponding '.d.ts' file. */\n      // \"declarationMap\": true,                /* Generates a sourcemap for each corresponding '.d.ts' file. */\n      // \"sourceMap\": true,                     /* Generates corresponding '.map' file. */\n      // \"outFile\": \"./\",                       /* Concatenate and emit output to single file. */\n      // \"outDir\": \"./\",                        /* Redirect output structure to the directory. */\n      // \"rootDir\": \"./\",                       /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */\n      // \"composite\": true,                     /* Enable project compilation */\n      // \"removeComments\": false,                /* Do not emit comments to output. */\n      // \"noEmit\": true,                        /* Do not emit outputs. */\n      // \"importHelpers\": true,                 /* Import emit helpers from 'tslib'. */\n      // \"downlevelIteration\": true,            /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */\n      // \"isolatedModules\": true,               /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */\n\n      /* Strict Type-Checking Options */\n      \"strict\": true,                           /* Enable all strict type-checking options. */\n      // \"noImplicitAny\": true,                 /* Raise error on expressions and declarations with an implied 'any' type. */\n      // \"strictNullChecks\": true,              /* Enable strict null checks. */\n      // \"strictFunctionTypes\": true,           /* Enable strict checking of function types. */\n      // \"strictBindCallApply\": true,           /* Enable strict 'bind', 'call', and 'apply' methods on functions. */\n      // \"strictPropertyInitialization\": true,  /* Enable strict checking of property initialization in classes. */\n      // \"noImplicitThis\": true,                /* Raise error on 'this' expressions with an implied 'any' type. */\n      // \"alwaysStrict\": true,                  /* Parse in strict mode and emit \"use strict\" for each source file. */\n\n      /* Additional Checks */\n      // \"noUnusedLocals\": true,                /* Report errors on unused locals. */\n      // \"noUnusedParameters\": true,            /* Report errors on unused parameters. */\n      // \"noImplicitReturns\": true,             /* Report error when not all code paths in function return a value. */\n      // \"noFallthroughCasesInSwitch\": true,    /* Report errors for fallthrough cases in switch statement. */\n\n      /* Module Resolution Options */\n      \"moduleResolution\": \"node\",            /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */\n      // \"baseUrl\": \"./\",                       /* Base directory to resolve non-absolute module names. */\n      // \"paths\": {},                           /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */\n      // \"rootDirs\": [],                        /* List of root folders whose combined content represents the structure of the project at runtime. */\n      // \"typeRoots\": [],                       /* List of folders to include type definitions from. */\n      \"types\": [\"svelte\"],                           /* Type declaration files to be included in compilation. */\n      \"allowSyntheticDefaultImports\": true,  /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */\n      \"esModuleInterop\": true                   /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */\n      // \"preserveSymlinks\": true,              /* Do not resolve the real path of symlinks. */\n\n      /* Source Map Options */\n      // \"sourceRoot\": \"\",                      /* Specify the location where debugger should locate TypeScript files instead of source locations. */\n      // \"mapRoot\": \"\",                         /* Specify the location where debugger should locate map files instead of generated locations. */\n      // \"inlineSourceMap\": true,               /* Emit a single file with source maps instead of having a separate file. */\n      // \"inlineSources\": true,                 /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */\n\n      /* Experimental Options */\n      // \"experimentalDecorators\": true,        /* Enables experimental support for ES7 decorators. */\n      // \"emitDecoratorMetadata\": true,         /* Enables experimental support for emitting type metadata for decorators. */\n    }\n  }\n"
  },
  {
    "path": "packages/vue-guides/.browserslistrc",
    "content": "> 1%\nlast 2 versions\n"
  },
  {
    "path": "packages/vue-guides/.eslintrc.js",
    "content": "module.exports = {\n  root: true,\n  env: {\n    node: true\n  },\n  'extends': [\n    'plugin:vue/essential',\n    'eslint:recommended',\n    '@vue/typescript'\n  ],\n  rules: {\n    'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',\n    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'\n  },\n  parserOptions: {\n    parser: '@typescript-eslint/parser'\n  }\n}\n"
  },
  {
    "path": "packages/vue-guides/.gitignore",
    "content": ".DS_Store\nnode_modules\n\n# local env files\n.env.local\n.env.*.local\n\n# Log files\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# Editor directories and files\n.idea\n.vscode\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "packages/vue-guides/CHANGELOG.md",
    "content": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://conventionalcommits.org) for commit guidelines.\n\n## [0.28.2](https://github.com/daybrush/guides/compare/vue-guides@0.28.1...vue-guides@0.28.2) (2023-07-29)\n\n\n### :mega: Other\n\n* publish packages ([9b659fe](https://github.com/daybrush/guides/commit/9b659fe71eb2fcb53b731e88b1561a0b18b9fcdc))\n\n\n\n## [0.28.1](https://github.com/daybrush/guides/compare/vue-guides@0.28.0...vue-guides@0.28.1) (2023-07-23)\n\n\n### :mega: Other\n\n* publish packages ([73e2427](https://github.com/daybrush/guides/commit/73e24270c27eec1f30cc051fe84569e79f85822c))\n\n\n\n## [0.28.0](https://github.com/daybrush/guides/compare/vue-guides@0.27.0...vue-guides@0.28.0) (2023-07-22)\n\n\n### :mega: Other\n\n* publish packages ([324f848](https://github.com/daybrush/guides/commit/324f848e0bae231c82b33be29ee2534d58a6d6b1))\n\n\n\n## [0.27.0](https://github.com/daybrush/guides/compare/vue-guides@0.26.0...vue-guides@0.27.0) (2023-06-02)\n\n\n### :mega: Other\n\n* publish packages ([53d07f3](https://github.com/daybrush/guides/commit/53d07f3e31011ee6bff1a2558380dc6e61e98337))\n\n\n\n## [0.26.0](https://github.com/daybrush/guides/compare/vue-guides@0.25.5...vue-guides@0.26.0) (2023-06-01)\n\n\n### :mega: Other\n\n* publish packages ([d038e92](https://github.com/daybrush/guides/commit/d038e92046e55f0f65f4ddde24f12ed117fd64e2))\n\n\n\n## [0.25.5](https://github.com/daybrush/guides/compare/vue-guides@0.25.4...vue-guides@0.25.5) (2023-05-16)\n\n\n### :mega: Other\n\n* publish packages ([78ed8c7](https://github.com/daybrush/guides/commit/78ed8c708759927cabeb53b8c607fc6f54324371))\n\n\n\n## [0.25.4](https://github.com/daybrush/guides/compare/vue-guides@0.25.2...vue-guides@0.25.4) (2023-05-15)\n\n\n### :mega: Other\n\n* publish packages ([1898b89](https://github.com/daybrush/guides/commit/1898b895d5c812a5fd77d99a5928f7e420152772))\n* update packages ([d8db884](https://github.com/daybrush/guides/commit/d8db884cdf43c19f77ad9c5721d3a466808853c3))\n\n\n\n## [0.25.2](https://github.com/daybrush/guides/compare/vue-guides@0.25.0...vue-guides@0.25.2) (2023-05-07)\n\n\n### :mega: Other\n\n* publish packages ([e1fb57c](https://github.com/daybrush/guides/commit/e1fb57c59a4a8e6b3e55ffb68cfea64760270288))\n* update croact version ([2fd28db](https://github.com/daybrush/guides/commit/2fd28dbbfd648b8ee6fee39f3972057fce580ae0))\n\n\n\n## [0.25.0](https://github.com/daybrush/guides/compare/vue-guides@0.24.0...vue-guides@0.25.0) (2023-04-12)\n\n\n### :mega: Other\n\n* publish packages ([548990d](https://github.com/daybrush/guides/commit/548990d8577ffe565b8605f74edd9eb5a6519deb))\n\n\n\n## [0.24.0](https://github.com/daybrush/guides/compare/vue-guides@0.23.0...vue-guides@0.24.0) (2023-04-06)\n\n\n### :rocket: New Features\n\n* add croact-guides ([a7be435](https://github.com/daybrush/guides/commit/a7be435704e24b6d80af80e069a6cc4047d645bc))\n\n\n### :mega: Other\n\n* publish packages ([f30e2ba](https://github.com/daybrush/guides/commit/f30e2bad78e1bc02307c8dde8cb1b69ecccdf116))\n\n\n\n## [0.23.0](https://github.com/daybrush/guides/compare/vue-guides@0.22.3...vue-guides@0.23.0) (2023-03-04)\n\n\n### :mega: Other\n\n* publish packages ([1afbe1d](https://github.com/daybrush/guides/commit/1afbe1d193cf2457dc9f3296b73d38b5859c0ee0))\n\n\n\n## [0.22.3](https://github.com/daybrush/guides/compare/vue-guides@0.22.2...vue-guides@0.22.3) (2023-02-04)\n\n\n### :mega: Other\n\n* publish packages ([ae0d147](https://github.com/daybrush/guides/commit/ae0d14738d83b4f5352463b69f89efe7cc111baf))\n\n\n\n## [0.22.2](https://github.com/daybrush/guides/compare/vue-guides@0.22.1...vue-guides@0.22.2) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([0f7949a](https://github.com/daybrush/guides/commit/0f7949a9954e2093d6a599dc545f988ed624d41f))\n\n\n\n## [0.22.1](https://github.com/daybrush/guides/compare/vue-guides@0.22.0...vue-guides@0.22.1) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([ab753c1](https://github.com/daybrush/guides/commit/ab753c1c820463c1c0b7805d428c803c5eacc1e3))\n\n\n\n## [0.22.0](https://github.com/daybrush/guides/compare/vue-guides@0.21.0...vue-guides@0.22.0) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([6f83fa0](https://github.com/daybrush/guides/commit/6f83fa0c75f494aa79fff98f4a57f86ab295b67d))\n\n\n\n## [0.21.0](https://github.com/daybrush/guides/compare/vue-guides@0.20.1...vue-guides@0.21.0) (2023-01-28)\n\n\n### :mega: Other\n\n* publish packages ([9473e84](https://github.com/daybrush/guides/commit/9473e8464fbd4c374ac6251ff995586afd163719))\n\n\n\n## [0.20.1](https://github.com/daybrush/guides/compare/vue-guides@0.20.0...vue-guides@0.20.1) (2023-01-27)\n\n\n### :mega: Other\n\n* publish packages ([628b944](https://github.com/daybrush/guides/commit/628b9444bb9e6f5546c7a5edd55a090126f52dd5))\n\n\n\n## [0.20.0](https://github.com/daybrush/guides/compare/vue-guides@0.19.0...vue-guides@0.20.0) (2023-01-20)\n\n\n### :bug: Bug Fix\n\n* fix files field #67 ([28bf5b3](https://github.com/daybrush/guides/commit/28bf5b3bd97cebd94eaf2195f0e99750f14e7ecb))\n\n\n### :mega: Other\n\n* publish packages ([095e7c6](https://github.com/daybrush/guides/commit/095e7c670d3bd0bdc168e2f3c11b5dbb8074b26b))\n* publish packages ([1daa6ea](https://github.com/daybrush/guides/commit/1daa6ea441f6c96b8f354953605cd6ac89117878))\n* publish packages ([e143c21](https://github.com/daybrush/guides/commit/e143c2175309bf480ef17731321f6728b8d6bcc2))\n* publish packages ([ce2037a](https://github.com/daybrush/guides/commit/ce2037a18f5f6bbcd750e1fd72cbfc60e3f2c217))\n* publish packages ([0abcba2](https://github.com/daybrush/guides/commit/0abcba24e8b83ea51cf369124e8c2d85fee1ef7e))\n\n\n\n## [0.19.0](https://github.com/daybrush/guides/compare/vue-guides@0.18.0...vue-guides@0.19.0) (2022-11-13)\n\n\n### :rocket: New Features\n\n* add scrollOptions #64 ([e0dc92a](https://github.com/daybrush/guides/commit/e0dc92a9ed417dff071b43a68b065907f8f1b8ad))\n\n\n### :bug: Bug Fix\n\n* update dependencies ([054e101](https://github.com/daybrush/guides/commit/054e101d1b177bdfefab74bf440a4cb3cf8137be))\n\n\n### :mega: Other\n\n* publish packages ([9cc8e3a](https://github.com/daybrush/guides/commit/9cc8e3ae5f83aa1513c1560166c6babbbe31dfd7))\n\n\n\n## [0.18.0](https://github.com/daybrush/guides/compare/vue-guides@0.17.3...vue-guides@0.18.0) (2022-09-21)\n\n\n### :mega: Other\n\n* publish packages ([83de3e4](https://github.com/daybrush/guides/commit/83de3e4ae4bad11905939a44dfa2776fe7d6987d))\n"
  },
  {
    "path": "packages/vue-guides/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019 Daybrush\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "packages/vue-guides/README.md",
    "content": "\n\n<p align=\"middle\" ><img src=\"https://raw.githubusercontent.com/daybrush/guides/master/demo/images/guides.png\"/></p>\n<h2 align=\"middle\">Vue Guides</h2>\n<p align=\"middle\">\n<a href=\"https://www.npmjs.com/package/vue-guides\" target=\"_blank\"><img src=\"https://img.shields.io/npm/v/vue-guides.svg?style=flat-square&color=007acc&label=version\" alt=\"npm version\" /></a>\n<img src=\"https://img.shields.io/badge/language-typescript-blue.svg?style=flat-square\"/>\n<a href=\"https://github.com/daybrush/guides/blob/master/LICENSE\" target=\"_blank\"><img src=\"https://img.shields.io/github/license/daybrush/guides.svg?style=flat-square&label=license&color=08CE5D\"/></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/react-guides\" target=\"_blank\"><img alt=\"React\" src=\"https://img.shields.io/static/v1.svg?label=&message=React&style=flat-square&color=61daeb\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/preact-guides\" target=\"_blank\"><img alt=\"Preact\" src=\"https://img.shields.io/static/v1.svg?label=&message=Preact&style=flat-square&color=673ab8\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/ngx-guides\" target=\"_blank\"><img alt=\"Angular\" src=\"https://img.shields.io/static/v1.svg?label=&message=Angular&style=flat-square&color=C82B38\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/vue-guides\" target=\"_blank\"><img\n    alt=\"Vue\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Vue&style=flat-square&color=3fb984\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\" target=\"_blank\"><img\n    alt=\"Vue\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Svelte&style=flat-square&color=C82B38\"></a>\n</p>\n<p align=\"middle\">A Vue Guides component that can draw grids and scroll infinitely.</p>\n<p align=\"middle\">\n    <a href=\"https://daybrush.com/guides\" target=\"_blank\"><strong>Demo</strong></a> /\n    <a href=\"https://github.com/daybrush/guides/tree/master/packages/vue3-guides\" target=\"_blank\"><strong>Vue 3</strong></a> /\n    <a href=\"https://daybrush.com/guides/release/latest/doc/\" target=\"_blank\"><strong>API</strong></a> /\n    <a href=\"https://github.com/daybrush/ruler\" target=\"_blank\"><strong>Ruler</strong></a> /\n    <a href=\"https://github.com/daybrush/scena\" target=\"_blank\"><strong>Main Project</strong></a>\n</p>\n\n\n## ⚙️ Installation\n### npm\n```sh\n$ npm i vue-guides\n```\n\n## 🚀 How to use\n```html\n<template>\n    <div class=\"guides\">\n        <vue-guides\n            type=\"horizontal\" ref=\"guides\"\n            v-on:changeGuides=\"onChangeGuides\"\n            />\n    </div>\n</template>\n<script>\n    import Guides from \"vue-guides\";\n\n    export default {\n        components: {\n            \"vue-guides\": Guides,\n        },\n        methods: {\n            onChangeGuides(e) {\n                console.log(e.guides);\n            },\n        },\n        mounted() {\n            const guides = this.$refs.guides;\n            let scrollX = 0;\n            let scrollY = 0;\n            guides.resize();\n\n            window.addEventListener(\"resize\", () => {\n                guides.resize();\n            });\n            window.addEventListener(\"wheel\", e => {\n                scrollX += e.deltaX;\n                scrollY += e.deltaY;\n                guides.scroll(scrollX);\n                guides.scrollGuides(scrollY);\n            });\n        },\n    };\n</script>\n```\n\n```ts\n\n\nexport interface RulerProps {\n    type?: \"horizontal\" | \"vertical\";\n    width?: number;\n    height?: number;\n    unit?: number;\n    zoom?: number;\n    direction?: \"start\" | \"end\";\n    style?: IObject<any>;\n    backgroundColor?: string;\n    lineColor?: string;\n    textColor?: string;\n}\n\nexport interface GuidesOptions extends RulerProps {\n    className?: string;\n    setGuides?: (guides: number[]) => any;\n    rulerStyle?: IObject<any>;\n    snapThreshold?: number;\n    snaps?: number[];\n    displayDragPos?: boolean;\n    dragPosFormat?: (value: number) => string | number;\n}\n\nexport interface GuidesInterface {\n    getGuides(): number[];\n    scroll(pos: number): void;\n    scrollGuides(pos: number): void;\n    loadGuides(guides: number[]): void;\n    resize(): void;\n}\n\n```\n\n\n## ⚙️ Developments\n### `npm run serve`\n\nRuns the app in the development mode.<br>\nOpen [http://localhost:8080](http://localhost:8080) to view it in the browser.\n\nThe page will reload if you make edits.<br>\nYou will also see any lint errors in the console.\n\n\n\n## ⭐️ Show Your Support\nPlease give a ⭐️ if this project helped you!\n\n## 👏 Contributing\n\nIf you have any questions or requests or want to contribute to `vue-guides` or other packages, please write the [issue](https://github.com/daybrush/guides/issues) or give me a Pull Request freely.\n\n## 🐞 Bug Report\n\nIf you find a bug, please report to us opening a new [Issue](https://github.com/daybrush/guides/issues) on GitHub.\n\n\n## 📝 License\n\nThis project is [MIT](https://github.com/daybrush/guides/blob/master/LICENSE) licensed.\n\n```\nMIT License\n\nCopyright (c) 2019 Daybrush\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```\n\n"
  },
  {
    "path": "packages/vue-guides/package.json",
    "content": "{\n    \"name\": \"vue-guides\",\n    \"version\": \"0.28.2\",\n    \"description\": \"A Vue Guides component that can draw grids and scroll infinitely.\",\n    \"main\": \"./dist/guides.cjs.js\",\n    \"module\": \"./dist/guides.esm.js\",\n    \"types\": \"declaration/index.d.ts\",\n    \"sideEffects\": false,\n    \"keywords\": [\n        \"scene\",\n        \"scenejs\",\n        \"scene.js\",\n        \"scena\",\n        \"guides\",\n        \"ruler\",\n        \"guidelines\",\n        \"scroller\",\n        \"vue\"\n    ],\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"git+https://github.com/daybrush/guides.git\"\n    },\n    \"author\": \"Daybrush\",\n    \"license\": \"MIT\",\n    \"bugs\": {\n        \"url\": \"https://github.com/daybrush/guides/issues\"\n    },\n    \"files\": [\n        \"./*\",\n        \"src/*\",\n        \"dist/*\",\n        \"declaration/*\",\n        \"README.md\"\n    ],\n    \"homepage\": \"https://daybrush.com/guides\",\n    \"scripts\": {\n        \"serve\": \"vue-cli-service serve\",\n        \"build\": \"rollup -c && npm run declaration\",\n        \"declaration\": \"rm -rf declaration && tsc -p tsconfig.declaration.json && cp ./src/components/Guides.vue.d.ts ./declaration/\",\n        \"lint\": \"vue-cli-service lint\"\n    },\n    \"dependencies\": {\n        \"@scena/guides\": \"~0.29.2\",\n        \"framework-utils\": \"^1.1.0\"\n    },\n    \"devDependencies\": {\n        \"@daybrush/builder\": \"^0.1.2\",\n        \"@vue/cli-plugin-eslint\": \"^4.0.0\",\n        \"@vue/cli-plugin-typescript\": \"^4.0.0\",\n        \"@vue/cli-service\": \"^4.0.0\",\n        \"@vue/compiler-sfc\": \"^2.7.0\",\n        \"@vue/eslint-config-typescript\": \"^4.0.0\",\n        \"eslint\": \"^5.16.0\",\n        \"eslint-plugin-vue\": \"^5.0.0\",\n        \"rollup-plugin-vue\": \"^5.1.9\",\n        \"typescript\": \"^4.5.0 <4.6.0\",\n        \"vue\": \"^2.6.12\",\n        \"vue-class-component\": \"^7.2.6\",\n        \"vue-property-decorator\": \"^9.1.2\",\n        \"vue-template-compiler\": \"^2.6.12\"\n    }\n}\n"
  },
  {
    "path": "packages/vue-guides/postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    autoprefixer: {}\n  }\n}\n"
  },
  {
    "path": "packages/vue-guides/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\">\n    <link rel=\"icon\" href=\"<%= BASE_URL %>favicon.ico\">\n    <title>vue-guides</title>\n  </head>\n  <body>\n    <noscript>\n      <strong>We're sorry but vue-guides doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>\n    </noscript>\n    <div id=\"app\"></div>\n    <!-- built files will be auto injected -->\n  </body>\n</html>\n"
  },
  {
    "path": "packages/vue-guides/rollup.config.js",
    "content": "\nimport builder from \"@daybrush/builder\";\nimport vuePlugin from \"rollup-plugin-vue\";\n\nexport default builder([\n    {\n        input: \"src/components/index.ts\",\n        output: \"./dist/guides.esm.js\",\n        exports: \"named\",\n        format: \"es\",\n        plugins: [\n            vuePlugin(),\n        ],\n    },\n    {\n        input: \"src/components/index.ts\",\n        output: \"./dist/guides.cjs.js\",\n        exports: \"default\",\n        format: \"cjs\",\n        plugins: [\n            vuePlugin(),\n        ],\n    },\n]);\n"
  },
  {
    "path": "packages/vue-guides/src/App.vue",
    "content": "<template>\n  <div class=\"page\">\n    <div class=\"box\" @click=\"onRestore\" ref=\"box\" />\n    <div class=\"ruler horizontal\">\n      <Guides\n        ref=\"guides1\"\n        type=\"horizontal\"\n        v-bind:rulerStyle=\"{\n          left: '30px',\n          width: 'calc(100% - 30px)',\n          height: '30px',\n        }\"\n      />\n    </div>\n    <div class=\"ruler vertical\">\n      <Guides\n        ref=\"guides2\"\n        type=\"vertical\"\n        displayDragPos=\"true\"\n        v-bind:rulerStyle=\"{\n          top: '30px',\n          height: 'calc(100% - 30px)',\n          width: '30px',\n        }\"\n        v-on:changeGuides=\"onChange\"\n      />\n    </div>\n\n    <div class=\"container\">\n      <img\n        src=\"https://daybrush.com/guides/images/guides.png\"\n        width=\"200\"\n        alt=\"guides\"\n      />\n      <p class=\"dragit\">Drag Screen & Rulers!</p>\n      <p class=\"badges\">\n        <a href=\"https://www.npmjs.com/package/svelte-guides\" target=\"_blank\">\n          <img\n            src=\"https://img.shields.io/npm/v/svelte-guides.svg?style=flat-square&color=007acc&label=version\"\n            alt=\"npm version\"\n          />\n        </a>\n        <a href=\"https://github.com/daybrush/guides\" target=\"_blank\">\n          <img\n            src=\"https://img.shields.io/github/stars/daybrush/guides.svg?color=42b883&style=flat-square\"\n          />\n        </a>\n        <a href=\"https://github.com/daybrush/guides\" target=\"_blank\">\n          <img\n            src=\"https://img.shields.io/badge/language-typescript-blue.svg?style=flat-square\"\n          />\n        </a>\n        <a\n          href=\"https://github.com/daybrush/guides/blob/master/LICENSE\"\n          target=\"_blank\"\n        >\n          <img\n            src=\"https://img.shields.io/github/license/daybrush/guides.svg?style=flat-square&label=license&color=08CE5D\"\n          />\n        </a>\n        <a\n          href=\"https://github.com/daybrush/guides/tree/master/packages/react-guides\"\n          target=\"_blank\"\n        >\n          <img\n            alt=\"React\"\n            src=\"https://img.shields.io/static/v1.svg?label=&message=React&style=flat-square&color=61daeb\"\n          />\n        </a>\n        <a\n          href=\"https://github.com/daybrush/guides/tree/master/packages/preact-guides\"\n          target=\"_blank\"\n        >\n          <img\n            alt=\"Preact\"\n            src=\"https://img.shields.io/static/v1.svg?label=&message=Preact&style=flat-square&color=673ab8\"\n          />\n        </a>\n        <a\n          href=\"https://github.com/daybrush/guides/tree/master/packages/ngx-guides\"\n          target=\"_blank\"\n        >\n          <img\n            alt=\"Angular\"\n            src=\"https://img.shields.io/static/v1.svg?label=&message=Angular&style=flat-square&color=C82B38\"\n          />\n        </a>\n        <a\n          href=\"https://github.com/daybrush/guides/tree/master/packages/vue-guides\"\n          target=\"_blank\"\n        >\n          <img\n            alt=\"Vue\"\n            src=\"https://img.shields.io/static/v1.svg?label=&message=Vue&style=flat-square&color=3fb984\"\n          />\n        </a>\n        <a\n          href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\"\n          target=\"_blank\"\n        >\n          <img\n            alt=\"Svelte\"\n            src=\"https://img.shields.io/static/v1.svg?label=&message=Svelte&style=flat-square&color=C82B38\"\n          />\n        </a>\n      </p>\n      <p class=\"description\">\n        A Svelte Guides component that can draw ruler and manage guidelines.\n      </p>\n      <div class=\"buttons\">\n        <a\n          href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\"\n          target=\"_blank\"\n          >Download</a\n        >\n        <!-- <a href=\"./release/latest/doc\" target=\"_blank\">API</a> -->\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { Component, Vue } from \"vue-property-decorator\";\nimport Gesto from \"gesto\";\nimport Guides from \"./components/Guides.vue\";\n\n@Component({\n  components: {\n    Guides,\n  },\n})\nexport default class App extends Vue {\n  scrollX = 0;\n  scrollY = 0;\n  protected mounted() {\n    const guides1 = this.$refs.guides1 as any;\n    const guides2 = this.$refs.guides2 as any;\n    this.onResize();\n\n    new Gesto(document.body).on(\"drag\", (e) => {\n      this.scrollX -= e.deltaX;\n      this.scrollY -= e.deltaY;\n\n      guides1.scroll(this.scrollX);\n      guides1.scrollGuides(this.scrollY);\n      guides2.scroll(this.scrollY);\n      guides2.scrollGuides(this.scrollX);\n    });\n    window.addEventListener(\"resize\", this.onResize);\n  }\n  onResize() {\n    const guides1 = this.$refs.guides1 as any;\n    const guides2 = this.$refs.guides2 as any;\n\n    guides1.resize();\n    guides2.resize();\n  }\n  onChange(e: any) {\n    console.log(e);\n  }\n  onRestore() {\n    console.log(this.scrollX, this.scrollY);\n    const guides1 = this.$refs.guides1 as any;\n    const guides2 = this.$refs.guides2 as any;\n    this.scrollX = 0;\n    this.scrollY = 0;\n    guides1.scroll(0);\n    guides1.scrollGuides(0);\n    guides2.scroll(0);\n    guides2.scrollGuides(0);\n  }\n}\n</script>\n\n<style>\n@import url(\"https://fonts.googleapis.com/css?family=Open+Sans:300,400,600&display=swap\");\n@import url(\"https://fonts.googleapis.com/css?family=Roboto:100&display=swap\");\n\nhtml,\nbody {\n  font-family: \"Open Sans\", sans-serif;\n  position: relative;\n  margin: 0;\n  padding: 0;\n  height: 100%;\n  color: #333;\n  letter-spacing: 1px;\n  background: #f5f5f5;\n  font-weight: 300;\n  touch-action: manipulation;\n}\n#root,\n.page {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n}\na {\n  text-decoration: none;\n  color: #333;\n}\n.ruler {\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n.ruler.horizontal {\n  left: 0px;\n  width: 100%;\n  height: 30px;\n}\n.ruler.vertical {\n  top: 0px;\n  width: 30px;\n  height: 100%;\n}\n.box {\n  position: relative;\n  width: 30px;\n  height: 30px;\n  background: #444;\n  box-sizing: border-box;\n  z-index: 21;\n}\n.box:before,\n.box:after {\n  position: absolute;\n  content: \"\";\n  background: #777;\n}\n.box:before {\n  width: 1px;\n  height: 100%;\n  left: 100%;\n}\n.box:after {\n  height: 1px;\n  width: 100%;\n  top: 100%;\n}\n\n.container {\n  position: relative;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  text-align: center;\n  max-width: calc(100% - 60px);\n  width: 100%;\n}\n\n.badges {\n  padding: 10px;\n}\n.badges img {\n  height: 20px;\n  margin: 0px 2px;\n}\n.buttons {\n  text-align: center;\n  margin: 0;\n  padding: 10px;\n}\n.buttons a {\n  margin: 0;\n  position: relative;\n  text-decoration: none;\n  color: #333;\n  border: 1px solid #333;\n  padding: 12px 30px;\n  min-width: 140px;\n  text-align: center;\n  display: inline-block;\n  box-sizing: border-box;\n  margin: 5px;\n  transition: all ease 0.5s;\n}\n.buttons a:hover {\n  background: #333;\n  color: #fff;\n}\n\np {\n  padding: 0;\n  margin: 0;\n}\n\n.dragit {\n  font-weight: bold;\n}\n</style>\n"
  },
  {
    "path": "packages/vue-guides/src/App2.vue",
    "content": "<template>\n  <div id=\"app\">\n    <img alt=\"Vue logo\" src=\"./assets/logo.png\">\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { Component, Vue } from 'vue-property-decorator';\n\n@Component({\n})\nexport default class App2 extends Vue {}\n</script>\n\n<style>\n#app {\n  font-family: 'Avenir', Helvetica, Arial, sans-serif;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  text-align: center;\n  color: #2c3e50;\n  margin-top: 60px;\n}\n</style>\n"
  },
  {
    "path": "packages/vue-guides/src/components/Guides.vue",
    "content": "<template>\n  <div ref=\"container\"></div>\n</template>\n<script lang=\"ts\">\nimport VanillaGuides, {\n  PROPERTIES,\n  METHODS,\n  GuidesOptions,\n  EVENTS,\n} from \"@scena/guides\";\nimport { isUndefined } from \"@daybrush/utils\";\nimport { VueGuidesInterface } from \"./types\";\n\nconst VUE_PROPERTIES = [...PROPERTIES];\n\nVUE_PROPERTIES.splice(VUE_PROPERTIES.indexOf(\"style\"), 1);\nconst methods: Record<string, any> = {};\nconst watch: Record<string, any> = {};\n\nVUE_PROPERTIES.forEach((name) => {\n  watch[name] = function (this: VueGuidesInterface, value: any) {\n    (this.$_guides as any)[name] = value;\n  };\n});\n\nwatch.vueStyle = function (this: VueGuidesInterface, value: any) {\n  (this.$_guides as any).style = value;\n};\n\nMETHODS.forEach((name) => {\n  methods[name] = function (this: VueGuidesInterface, ...args: any[]) {\n    return (this.$_guides as any)[name](...args);\n  };\n});\n\nexport default {\n  name: \"guides\",\n  methods,\n  watch,\n  props: [...VUE_PROPERTIES, \"vueStyle\"],\n  mounted(this: VueGuidesInterface) {\n    const options: Partial<GuidesOptions> = {};\n    const props = this.$props;\n    VUE_PROPERTIES.forEach((name) => {\n      const value = props[name];\n\n      if (!isUndefined(value)) {\n        (options as any)[name] = props[name];\n      }\n    });\n    const refs = this.$refs;\n    const container = refs.container as HTMLElement;\n\n    options.style = props.vueStyle;\n    options.warpSelf = true;\n\n    this.$_guides = new VanillaGuides(container, options);\n\n    const guides = this.$_guides;\n\n    EVENTS.forEach((name) => {\n      (guides as any).on(name, (e: any) => {\n        this.$emit(name, { ...e });\n      });\n    });\n  },\n  beforeDestroy(this: VueGuidesInterface) {\n    this.$_guides.destroy();\n  },\n};\n</script>\n"
  },
  {
    "path": "packages/vue-guides/src/components/Guides.vue.d.ts",
    "content": "import { VueGuidesInterface } from \"./types\";\n\ndeclare const VueGuides: VueGuidesInterface;\ntype VueGuides = VueGuidesInterface;\n\nexport default VueGuides;\n"
  },
  {
    "path": "packages/vue-guides/src/components/index.ts",
    "content": "import Guides from \"./Guides.vue\";\n\nexport default Guides;\n"
  },
  {
    "path": "packages/vue-guides/src/components/types.ts",
    "content": "import { MethodInterface } from \"framework-utils\";\nimport VanillaGuides, { GuideOptions, GuidesInterface } from \"@scena/guides\";\n\nexport interface VueGuidesInterface\n    extends MethodInterface<GuidesInterface, VanillaGuides, VueGuidesInterface> {\n    name: string;\n    $el: HTMLElement;\n    $props: GuideOptions & { vueStyle: Record<string, any> };\n    $refs: any;\n    $emit(name: string, e: any): void;\n    $_guides: VanillaGuides;\n}\n\n"
  },
  {
    "path": "packages/vue-guides/src/main.ts",
    "content": "import Vue from 'vue'\nimport App from './App.vue'\n\nVue.config.productionTip = false\n\nnew Vue({\n  render: h => h(App),\n}).$mount('#app')\n"
  },
  {
    "path": "packages/vue-guides/src/shims-tsx.d.ts",
    "content": "import Vue, { VNode } from 'vue'\n\ndeclare global {\n  namespace JSX {\n    // tslint:disable no-empty-interface\n    interface Element extends VNode {}\n    // tslint:disable no-empty-interface\n    interface ElementClass extends Vue {}\n    interface IntrinsicElements {\n      [elem: string]: any\n    }\n  }\n}\n"
  },
  {
    "path": "packages/vue-guides/src/shims-vue.d.ts",
    "content": "declare module '*.vue' {\n  import Vue from 'vue'\n  export default Vue\n}\n"
  },
  {
    "path": "packages/vue-guides/tsconfig.declaration.json",
    "content": "{\n  \"extends\": \"./tsconfig\",\n  \"compilerOptions\": {\n    \"removeComments\": false,\n    \"declaration\": true,\n    \"emitDeclarationOnly\": true,\n    \"declarationDir\": \"declaration\"\n  },\n  \"include\": [\n    \"src/components/**/*.ts\",\n  ],\n}\n"
  },
  {
    "path": "packages/vue-guides/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"module\": \"esnext\",\n    \"strict\": true,\n    \"jsx\": \"preserve\",\n    \"importHelpers\": true,\n    \"moduleResolution\": \"node\",\n    \"experimentalDecorators\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"sourceMap\": true,\n    \"baseUrl\": \".\",\n    \"types\": [\n      \"webpack-env\"\n    ],\n    \"paths\": {\n      \"@/*\": [\n        \"src/*\"\n      ]\n    },\n    \"lib\": [\n      \"esnext\",\n      \"dom\",\n      \"dom.iterable\",\n      \"scripthost\"\n    ]\n  },\n  \"include\": [\n    \"src/**/*.ts\",\n    \"src/**/*.tsx\",\n    \"src/**/*.vue\",\n    \"tests/**/*.ts\",\n    \"tests/**/*.tsx\"\n  ],\n  \"exclude\": [\n    \"node_modules\"\n  ]\n}\n"
  },
  {
    "path": "packages/vue3-guides/.browserslistrc",
    "content": "> 1%\nlast 2 versions\n"
  },
  {
    "path": "packages/vue3-guides/.gitignore",
    "content": ".DS_Store\nnode_modules\n/dist\n\n# local env files\n.env.local\n.env.*.local\n\n# Log files\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# Editor directories and files\n.idea\n.vscode\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "packages/vue3-guides/CHANGELOG.md",
    "content": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://conventionalcommits.org) for commit guidelines.\n\n## [0.12.2](https://github.com/daybrush/guides/compare/vue3-guides@0.12.1...vue3-guides@0.12.2) (2023-07-29)\n\n\n### :mega: Other\n\n* publish packages ([9b659fe](https://github.com/daybrush/guides/commit/9b659fe71eb2fcb53b731e88b1561a0b18b9fcdc))\n\n\n\n## [0.12.1](https://github.com/daybrush/guides/compare/vue3-guides@0.12.0...vue3-guides@0.12.1) (2023-07-23)\n\n\n### :mega: Other\n\n* publish packages ([73e2427](https://github.com/daybrush/guides/commit/73e24270c27eec1f30cc051fe84569e79f85822c))\n\n\n\n## [0.12.0](https://github.com/daybrush/guides/compare/vue3-guides@0.11.0...vue3-guides@0.12.0) (2023-07-22)\n\n\n### :mega: Other\n\n* publish packages ([324f848](https://github.com/daybrush/guides/commit/324f848e0bae231c82b33be29ee2534d58a6d6b1))\n\n\n\n## [0.11.0](https://github.com/daybrush/guides/compare/vue3-guides@0.10.0...vue3-guides@0.11.0) (2023-06-02)\n\n\n### :mega: Other\n\n* publish packages ([53d07f3](https://github.com/daybrush/guides/commit/53d07f3e31011ee6bff1a2558380dc6e61e98337))\n\n\n\n## [0.10.0](https://github.com/daybrush/guides/compare/vue3-guides@0.9.5...vue3-guides@0.10.0) (2023-06-01)\n\n\n### :mega: Other\n\n* publish packages ([d038e92](https://github.com/daybrush/guides/commit/d038e92046e55f0f65f4ddde24f12ed117fd64e2))\n\n\n\n## [0.9.5](https://github.com/daybrush/guides/compare/vue3-guides@0.9.4...vue3-guides@0.9.5) (2023-05-16)\n\n\n### :mega: Other\n\n* publish packages ([78ed8c7](https://github.com/daybrush/guides/commit/78ed8c708759927cabeb53b8c607fc6f54324371))\n\n\n\n## [0.9.4](https://github.com/daybrush/guides/compare/vue3-guides@0.9.2...vue3-guides@0.9.4) (2023-05-15)\n\n\n### :mega: Other\n\n* publish packages ([1898b89](https://github.com/daybrush/guides/commit/1898b895d5c812a5fd77d99a5928f7e420152772))\n* update packages ([d8db884](https://github.com/daybrush/guides/commit/d8db884cdf43c19f77ad9c5721d3a466808853c3))\n\n\n\n## [0.9.2](https://github.com/daybrush/guides/compare/vue3-guides@0.9.0...vue3-guides@0.9.2) (2023-05-07)\n\n\n### :mega: Other\n\n* publish packages ([e1fb57c](https://github.com/daybrush/guides/commit/e1fb57c59a4a8e6b3e55ffb68cfea64760270288))\n* update croact version ([2fd28db](https://github.com/daybrush/guides/commit/2fd28dbbfd648b8ee6fee39f3972057fce580ae0))\n\n\n\n## [0.9.0](https://github.com/daybrush/guides/compare/vue3-guides@0.8.0...vue3-guides@0.9.0) (2023-04-12)\n\n\n### :mega: Other\n\n* publish packages ([548990d](https://github.com/daybrush/guides/commit/548990d8577ffe565b8605f74edd9eb5a6519deb))\n\n\n\n## [0.8.0](https://github.com/daybrush/guides/compare/vue3-guides@0.7.0...vue3-guides@0.8.0) (2023-04-06)\n\n\n### :rocket: New Features\n\n* add croact-guides ([a7be435](https://github.com/daybrush/guides/commit/a7be435704e24b6d80af80e069a6cc4047d645bc))\n\n\n### :mega: Other\n\n* publish packages ([f30e2ba](https://github.com/daybrush/guides/commit/f30e2bad78e1bc02307c8dde8cb1b69ecccdf116))\n\n\n\n## [0.7.0](https://github.com/daybrush/guides/compare/vue3-guides@0.6.3...vue3-guides@0.7.0) (2023-03-04)\n\n\n### :mega: Other\n\n* publish packages ([1afbe1d](https://github.com/daybrush/guides/commit/1afbe1d193cf2457dc9f3296b73d38b5859c0ee0))\n\n\n\n## [0.6.3](https://github.com/daybrush/guides/compare/vue3-guides@0.6.2...vue3-guides@0.6.3) (2023-02-04)\n\n\n### :mega: Other\n\n* publish packages ([ae0d147](https://github.com/daybrush/guides/commit/ae0d14738d83b4f5352463b69f89efe7cc111baf))\n\n\n\n## [0.6.2](https://github.com/daybrush/guides/compare/vue3-guides@0.6.1...vue3-guides@0.6.2) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([0f7949a](https://github.com/daybrush/guides/commit/0f7949a9954e2093d6a599dc545f988ed624d41f))\n\n\n\n## [0.6.1](https://github.com/daybrush/guides/compare/vue3-guides@0.6.0...vue3-guides@0.6.1) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([ab753c1](https://github.com/daybrush/guides/commit/ab753c1c820463c1c0b7805d428c803c5eacc1e3))\n\n\n\n## [0.6.0](https://github.com/daybrush/guides/compare/vue3-guides@0.5.0...vue3-guides@0.6.0) (2023-01-29)\n\n\n### :mega: Other\n\n* publish packages ([6f83fa0](https://github.com/daybrush/guides/commit/6f83fa0c75f494aa79fff98f4a57f86ab295b67d))\n\n\n\n## [0.5.0](https://github.com/daybrush/guides/compare/vue3-guides@0.4.1...vue3-guides@0.5.0) (2023-01-28)\n\n\n### :mega: Other\n\n* publish packages ([9473e84](https://github.com/daybrush/guides/commit/9473e8464fbd4c374ac6251ff995586afd163719))\n\n\n\n## [0.4.1](https://github.com/daybrush/guides/compare/vue3-guides@0.4.0...vue3-guides@0.4.1) (2023-01-27)\n\n\n### :mega: Other\n\n* publish packages ([628b944](https://github.com/daybrush/guides/commit/628b9444bb9e6f5546c7a5edd55a090126f52dd5))\n\n\n\n## [0.4.0](https://github.com/daybrush/guides/compare/vue3-guides@0.3.0...vue3-guides@0.4.0) (2023-01-20)\n\n\n### :bug: Bug Fix\n\n* fix files field #67 ([28bf5b3](https://github.com/daybrush/guides/commit/28bf5b3bd97cebd94eaf2195f0e99750f14e7ecb))\n\n\n### :mega: Other\n\n* publish packages ([095e7c6](https://github.com/daybrush/guides/commit/095e7c670d3bd0bdc168e2f3c11b5dbb8074b26b))\n* publish packages ([1daa6ea](https://github.com/daybrush/guides/commit/1daa6ea441f6c96b8f354953605cd6ac89117878))\n* publish packages ([e143c21](https://github.com/daybrush/guides/commit/e143c2175309bf480ef17731321f6728b8d6bcc2))\n* publish packages ([ce2037a](https://github.com/daybrush/guides/commit/ce2037a18f5f6bbcd750e1fd72cbfc60e3f2c217))\n* publish packages ([0abcba2](https://github.com/daybrush/guides/commit/0abcba24e8b83ea51cf369124e8c2d85fee1ef7e))\n\n\n\n## [0.3.0](https://github.com/daybrush/guides/compare/vue3-guides@0.2.0...vue3-guides@0.3.0) (2022-11-13)\n\n\n### :rocket: New Features\n\n* add scrollOptions #64 ([e0dc92a](https://github.com/daybrush/guides/commit/e0dc92a9ed417dff071b43a68b065907f8f1b8ad))\n\n\n### :mega: Other\n\n* publish packages ([9cc8e3a](https://github.com/daybrush/guides/commit/9cc8e3ae5f83aa1513c1560166c6babbbe31dfd7))\n\n\n\n## [0.2.0](https://github.com/daybrush/guides/compare/vue3-guides@0.1.2...vue3-guides@0.2.0) (2022-09-21)\n\n\n### :mega: Other\n\n* publish packages ([83de3e4](https://github.com/daybrush/guides/commit/83de3e4ae4bad11905939a44dfa2776fe7d6987d))\n"
  },
  {
    "path": "packages/vue3-guides/README.md",
    "content": "\n\n<p align=\"middle\" ><img src=\"https://raw.githubusercontent.com/daybrush/guides/master/demo/images/guides.png\"/></p>\n<h2 align=\"middle\">Vue 3 Guides</h2>\n<p align=\"middle\">\n<a href=\"https://www.npmjs.com/package/vue3-guides\" target=\"_blank\"><img src=\"https://img.shields.io/npm/v/vue3-guides.svg?style=flat-square&color=007acc&label=version\" alt=\"npm version\" /></a>\n<img src=\"https://img.shields.io/badge/language-typescript-blue.svg?style=flat-square\"/>\n<a href=\"https://github.com/daybrush/guides/blob/master/LICENSE\" target=\"_blank\"><img src=\"https://img.shields.io/github/license/daybrush/guides.svg?style=flat-square&label=license&color=08CE5D\"/></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/react-guides\" target=\"_blank\"><img alt=\"React\" src=\"https://img.shields.io/static/v1.svg?label=&message=React&style=flat-square&color=61daeb\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/preact-guides\" target=\"_blank\"><img alt=\"Preact\" src=\"https://img.shields.io/static/v1.svg?label=&message=Preact&style=flat-square&color=673ab8\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/ngx-guides\" target=\"_blank\"><img alt=\"Angular\" src=\"https://img.shields.io/static/v1.svg?label=&message=Angular&style=flat-square&color=C82B38\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/vue-guides\" target=\"_blank\"><img\n    alt=\"Vue\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Vue2&style=flat-square&color=3fb984\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/vue3-guides\" target=\"_blank\"><img\n    alt=\"Vue3\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Vue3&style=flat-square&color=3fb984\"></a>\n<a href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\" target=\"_blank\"><img\n    alt=\"Vue\"\n    src=\"https://img.shields.io/static/v1.svg?label=&message=Svelte&style=flat-square&color=C82B38\"></a>\n</p>\n<p align=\"middle\">A Vue 3 Guides component that can draw grids and scroll infinitely.</p>\n<p align=\"middle\">\n    <a href=\"https://daybrush.com/guides\" target=\"_blank\"><strong>Demo</strong></a> /\n    <a href=\"https://github.com/daybrush/guides/tree/master/packages/vue-guides\" target=\"_blank\"><strong>Vue 2</strong></a> /\n    <a href=\"https://daybrush.com/guides/release/latest/doc/\" target=\"_blank\"><strong>API</strong></a> /\n    <a href=\"https://github.com/daybrush/ruler\" target=\"_blank\"><strong>Ruler</strong></a> /\n    <a href=\"https://github.com/daybrush/scena\" target=\"_blank\"><strong>Main Project</strong></a>\n</p>\n\n\n## ⚙️ Installation\n### npm\n```sh\n$ npm i vue3-guides\n```\n\n## 🚀 How to use\n```html\n<template>\n    <div class=\"guides\">\n        <vue-guides\n            type=\"horizontal\" ref=\"guides\"\n            v-on:changeGuides=\"onChangeGuides\"\n            />\n    </div>\n</template>\n<script>\n    import Guides from \"vue3-guides\";\n\n    export default {\n        components: {\n            \"vue-guides\": Guides,\n        },\n        methods: {\n            onChangeGuides(e) {\n                console.log(e.guides);\n            },\n        },\n        mounted() {\n            const guides = this.$refs.guides;\n            let scrollX = 0;\n            let scrollY = 0;\n            guides.resize();\n\n            window.addEventListener(\"resize\", () => {\n                guides.resize();\n            });\n            window.addEventListener(\"wheel\", e => {\n                scrollX += e.deltaX;\n                scrollY += e.deltaY;\n                guides.scroll(scrollX);\n                guides.scrollGuides(scrollY);\n            });\n        },\n    };\n</script>\n```\n\n```ts\n\n\nexport interface RulerProps {\n    type?: \"horizontal\" | \"vertical\";\n    width?: number;\n    height?: number;\n    unit?: number;\n    zoom?: number;\n    direction?: \"start\" | \"end\";\n    style?: IObject<any>;\n    backgroundColor?: string;\n    lineColor?: string;\n    textColor?: string;\n}\n\nexport interface GuidesOptions extends RulerProps {\n    className?: string;\n    setGuides?: (guides: number[]) => any;\n    rulerStyle?: IObject<any>;\n    snapThreshold?: number;\n    snaps?: number[];\n    displayDragPos?: boolean;\n    dragPosFormat?: (value: number) => string | number;\n}\n\nexport interface GuidesInterface {\n    getGuides(): number[];\n    scroll(pos: number): void;\n    scrollGuides(pos: number): void;\n    loadGuides(guides: number[]): void;\n    resize(): void;\n}\n\n```\n\n\n## ⚙️ Developments\n### `npm run serve`\n\nRuns the app in the development mode.<br>\nOpen [http://localhost:8080](http://localhost:8080) to view it in the browser.\n\nThe page will reload if you make edits.<br>\nYou will also see any lint errors in the console.\n\n\n\n## ⭐️ Show Your Support\nPlease give a ⭐️ if this project helped you!\n\n## 👏 Contributing\n\nIf you have any questions or requests or want to contribute to `vue3-guides` or other packages, please write the [issue](https://github.com/daybrush/guides/issues) or give me a Pull Request freely.\n\n## 🐞 Bug Report\n\nIf you find a bug, please report to us opening a new [Issue](https://github.com/daybrush/guides/issues) on GitHub.\n\n\n## 📝 License\n\nThis project is [MIT](https://github.com/daybrush/guides/blob/master/LICENSE) licensed.\n\n```\nMIT License\n\nCopyright (c) 2019 Daybrush\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```\n\n"
  },
  {
    "path": "packages/vue3-guides/demo/App.vue",
    "content": "<template>\n  <div class=\"page\">\n    <div class=\"box\" @click=\"onRestore\" ref=\"box\" />\n    <div class=\"ruler horizontal\">\n      <Guides\n        ref=\"guides1\"\n        type=\"horizontal\"\n        v-bind:rulerStyle=\"{\n          left: '30px',\n          width: 'calc(100% - 30px)',\n          height: '30px',\n        }\"\n      />\n    </div>\n    <div class=\"ruler vertical\">\n      <Guides\n        ref=\"guides2\"\n        type=\"vertical\"\n        displayDragPos=\"true\"\n        v-bind:rulerStyle=\"{\n          top: '30px',\n          height: 'calc(100% - 30px)',\n          width: '30px',\n        }\"\n        v-on:changeGuides=\"onChange\"\n      />\n    </div>\n\n    <div class=\"container\">\n      <img\n        src=\"https://daybrush.com/guides/images/guides.png\"\n        width=\"200\"\n        alt=\"guides\"\n      />\n      <p class=\"dragit\">Drag Screen & Rulers!</p>\n      <p class=\"badges\">\n        <a href=\"https://www.npmjs.com/package/svelte-guides\" target=\"_blank\">\n          <img\n            src=\"https://img.shields.io/npm/v/svelte-guides.svg?style=flat-square&color=007acc&label=version\"\n            alt=\"npm version\"\n          />\n        </a>\n        <a href=\"https://github.com/daybrush/guides\" target=\"_blank\">\n          <img\n            src=\"https://img.shields.io/github/stars/daybrush/guides.svg?color=42b883&style=flat-square\"\n          />\n        </a>\n        <a href=\"https://github.com/daybrush/guides\" target=\"_blank\">\n          <img\n            src=\"https://img.shields.io/badge/language-typescript-blue.svg?style=flat-square\"\n          />\n        </a>\n        <a\n          href=\"https://github.com/daybrush/guides/blob/master/LICENSE\"\n          target=\"_blank\"\n        >\n          <img\n            src=\"https://img.shields.io/github/license/daybrush/guides.svg?style=flat-square&label=license&color=08CE5D\"\n          />\n        </a>\n        <a\n          href=\"https://github.com/daybrush/guides/tree/master/packages/react-guides\"\n          target=\"_blank\"\n        >\n          <img\n            alt=\"React\"\n            src=\"https://img.shields.io/static/v1.svg?label=&message=React&style=flat-square&color=61daeb\"\n          />\n        </a>\n        <a\n          href=\"https://github.com/daybrush/guides/tree/master/packages/preact-guides\"\n          target=\"_blank\"\n        >\n          <img\n            alt=\"Preact\"\n            src=\"https://img.shields.io/static/v1.svg?label=&message=Preact&style=flat-square&color=673ab8\"\n          />\n        </a>\n        <a\n          href=\"https://github.com/daybrush/guides/tree/master/packages/ngx-guides\"\n          target=\"_blank\"\n        >\n          <img\n            alt=\"Angular\"\n            src=\"https://img.shields.io/static/v1.svg?label=&message=Angular&style=flat-square&color=C82B38\"\n          />\n        </a>\n        <a\n          href=\"https://github.com/daybrush/guides/tree/master/packages/vue-guides\"\n          target=\"_blank\"\n        >\n          <img\n            alt=\"Vue\"\n            src=\"https://img.shields.io/static/v1.svg?label=&message=Vue&style=flat-square&color=3fb984\"\n          />\n        </a>\n        <a\n          href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\"\n          target=\"_blank\"\n        >\n          <img\n            alt=\"Svelte\"\n            src=\"https://img.shields.io/static/v1.svg?label=&message=Svelte&style=flat-square&color=C82B38\"\n          />\n        </a>\n      </p>\n      <p class=\"description\">\n        A Svelte Guides component that can draw ruler and manage guidelines.\n      </p>\n      <div class=\"buttons\">\n        <a\n          href=\"https://github.com/daybrush/guides/tree/master/packages/svelte-guides\"\n          target=\"_blank\"\n          >Download</a\n        >\n        <!-- <a href=\"./release/latest/doc\" target=\"_blank\">API</a> -->\n      </div>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport Gesto from \"gesto\";\nimport Guides from \"../src/index\";\n\nexport default {\n  components: {\n    Guides,\n  },\n  data() {\n    return {\n        scrollX: 0,\n        scrollY: 0,\n    };\n  },\n  mounted() {\n    const guides1 = this.$refs.guides1 as any;\n    const guides2 = this.$refs.guides2 as any;\n    this.onResize();\n\n    new Gesto(document.body).on(\"drag\", (e) => {\n      this.scrollX -= e.deltaX;\n      this.scrollY -= e.deltaY;\n\n      guides1.scroll(this.scrollX);\n      guides1.scrollGuides(this.scrollY);\n      guides2.scroll(this.scrollY);\n      guides2.scrollGuides(this.scrollX);\n    });\n    window.addEventListener(\"resize\", this.onResize);\n  },\n  methods: {\n    onResize() {\n        const guides1 = this.$refs.guides1 as any;\n        const guides2 = this.$refs.guides2 as any;\n\n        guides1.resize();\n        guides2.resize();\n    },\n    onChange(e: any) {\n        console.log(e);\n    },\n    onRestore() {\n        console.log(this.scrollX, this.scrollY);\n        const guides1 = this.$refs.guides1 as any;\n        const guides2 = this.$refs.guides2 as any;\n        this.scrollX = 0;\n        this.scrollY = 0;\n        guides1.scroll(0);\n        guides1.scrollGuides(0);\n        guides2.scroll(0);\n        guides2.scrollGuides(0);\n    },\n  }\n};\n</script>\n\n<style>\n@import url(\"https://fonts.googleapis.com/css?family=Open+Sans:300,400,600&display=swap\");\n@import url(\"https://fonts.googleapis.com/css?family=Roboto:100&display=swap\");\n\nhtml,\nbody {\n  font-family: \"Open Sans\", sans-serif;\n  position: relative;\n  margin: 0;\n  padding: 0;\n  height: 100%;\n  color: #333;\n  letter-spacing: 1px;\n  background: #f5f5f5;\n  font-weight: 300;\n  touch-action: manipulation;\n}\n#app,\n.page {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n}\na {\n  text-decoration: none;\n  color: #333;\n}\n.ruler {\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n.ruler.horizontal {\n  left: 0px;\n  width: 100%;\n  height: 30px;\n}\n.ruler.vertical {\n  top: 0px;\n  width: 30px;\n  height: 100%;\n}\n.box {\n  position: relative;\n  width: 30px;\n  height: 30px;\n  background: #444;\n  box-sizing: border-box;\n  z-index: 21;\n}\n.box:before,\n.box:after {\n  position: absolute;\n  content: \"\";\n  background: #777;\n}\n.box:before {\n  width: 1px;\n  height: 100%;\n  left: 100%;\n}\n.box:after {\n  height: 1px;\n  width: 100%;\n  top: 100%;\n}\n\n.container {\n  position: relative;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  text-align: center;\n  max-width: calc(100% - 60px);\n  width: 100%;\n}\n\n.badges {\n  padding: 10px;\n}\n.badges img {\n  height: 20px;\n  margin: 0px 2px;\n}\n.buttons {\n  text-align: center;\n  margin: 0;\n  padding: 10px;\n}\n.buttons a {\n  margin: 0;\n  position: relative;\n  text-decoration: none;\n  color: #333;\n  border: 1px solid #333;\n  padding: 12px 30px;\n  min-width: 140px;\n  text-align: center;\n  display: inline-block;\n  box-sizing: border-box;\n  margin: 5px;\n  transition: all ease 0.5s;\n}\n.buttons a:hover {\n  background: #333;\n  color: #fff;\n}\n\np {\n  padding: 0;\n  margin: 0;\n}\n\n.dragit {\n  font-weight: bold;\n}\n</style>\n"
  },
  {
    "path": "packages/vue3-guides/demo/App2.vue",
    "content": "<template>\n  <div id=\"app\">\n    <img alt=\"Vue logo\" src=\"./assets/logo.png\">\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { Component, Vue } from 'vue-property-decorator';\n\n@Component({\n})\nexport default class App2 extends Vue {}\n</script>\n\n<style>\n#app {\n  font-family: 'Avenir', Helvetica, Arial, sans-serif;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  text-align: center;\n  color: #2c3e50;\n  margin-top: 60px;\n}\n</style>\n"
  },
  {
    "path": "packages/vue3-guides/demo/index.ts",
    "content": "import { createApp } from 'vue';\nimport App from './App.vue';\n\ncreateApp(App).mount('#app')\n"
  },
  {
    "path": "packages/vue3-guides/demo/shims-vue.d.ts",
    "content": "/* eslint-disable */\ndeclare module '*.vue' {\n    import type { DefineComponent } from 'vue'\n    const component: DefineComponent<{}, {}, any>\n    export default component\n  }\n"
  },
  {
    "path": "packages/vue3-guides/package.json",
    "content": "{\n    \"name\": \"vue3-guides\",\n    \"version\": \"0.12.2\",\n    \"description\": \"A Vue 3 Guides component that can draw grids and scroll infinitely.\",\n    \"main\": \"./dist/guides.cjs.js\",\n    \"module\": \"./dist/guides.esm.js\",\n    \"types\": \"declaration/index.d.ts\",\n    \"sideEffects\": false,\n    \"keywords\": [\n        \"scene\",\n        \"scenejs\",\n        \"scene.js\",\n        \"scena\",\n        \"guides\",\n        \"ruler\",\n        \"guidelines\",\n        \"scroller\",\n        \"vue\",\n        \"vue3\"\n    ],\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"git+https://github.com/daybrush/guides.git\"\n    },\n    \"files\": [\n        \"./*\",\n        \"src/*\",\n        \"dist/*\",\n        \"declaration/*\",\n        \"README.md\"\n    ],\n    \"author\": \"Daybrush\",\n    \"license\": \"MIT\",\n    \"bugs\": {\n        \"url\": \"https://github.com/daybrush/guides/issues\"\n    },\n    \"homepage\": \"https://daybrush.com/guides\",\n    \"scripts\": {\n        \"serve\": \"vue-cli-service serve demo\",\n        \"build\": \"rollup -c && npm run declaration\",\n        \"declaration\": \"rm -rf declaration && tsc -p tsconfig.declaration.json && cp ./src/Guides.vue.d.ts ./declaration/\",\n        \"lint\": \"vue-cli-service lint\"\n    },\n    \"dependencies\": {\n        \"@scena/guides\": \"~0.29.2\",\n        \"framework-utils\": \"^1.1.0\"\n    },\n    \"devDependencies\": {\n        \"@daybrush/builder\": \"^0.1.2\",\n        \"@vue/cli-plugin-typescript\": \"~4.5.0\",\n        \"@vue/cli-service\": \"~4.5.0\",\n        \"@vue/compiler-sfc\": \"^3.0.0\",\n        \"rollup-plugin-vue\": \"^6.0.0\",\n        \"tslib\": \"^2.3.1\",\n        \"typescript\": \"^4.5.0 <4.6.0\",\n        \"vue\": \"^3.1.1\",\n        \"vue-class-component\": \"^8.0.0-rc.1\"\n    }\n}\n"
  },
  {
    "path": "packages/vue3-guides/postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    autoprefixer: {}\n  }\n}\n"
  },
  {
    "path": "packages/vue3-guides/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\">\n    <link rel=\"icon\" href=\"<%= BASE_URL %>favicon.ico\">\n    <title>vue3-guides</title>\n  </head>\n  <body>\n    <noscript>\n      <strong>We're sorry but vue3-guides doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>\n    </noscript>\n    <div id=\"app\"></div>\n    <!-- built files will be auto injected -->\n  </body>\n</html>\n"
  },
  {
    "path": "packages/vue3-guides/rollup.config.js",
    "content": "const buildHelper = require(\"@daybrush/builder\");\nconst vuePlugin = require(\"rollup-plugin-vue\");\n\nconst defaultOptions = {\n    sourcemap: true,\n    input: \"./src/index.ts\",\n    exports: \"named\",\n    plugins: [\n        vuePlugin(),\n    ],\n    external: {\n        \"vue\": \"Vue\",\n    },\n};\nexport default buildHelper([\n    {\n        ...defaultOptions,\n        format: \"es\",\n        output: \"./dist/guides.esm.js\",\n    },\n    {\n        ...defaultOptions,\n        format: \"cjs\",\n        // input: \"./src/index.umd.ts\",\n        exports: \"default\",\n        output: \"./dist/guides.cjs.js\",\n    },\n]);\n"
  },
  {
    "path": "packages/vue3-guides/src/Guides.vue",
    "content": "<template>\n  <div ref=\"container\"></div>\n</template>\n<script lang=\"ts\">\nimport VanillaGuides, {\n  PROPERTIES,\n  METHODS,\n  GuidesOptions,\n  EVENTS,\n} from \"@scena/guides\";\nimport { isUndefined } from \"@daybrush/utils\";\nimport { VueGuidesInterface } from \"./types\";\n\nconst VUE_PROPERTIES = [...PROPERTIES];\n\nVUE_PROPERTIES.splice(VUE_PROPERTIES.indexOf(\"style\"), 1);\nconst methods: Record<string, any> = {};\nconst watch: Record<string, any> = {};\n\nVUE_PROPERTIES.forEach((name) => {\n  watch[name] = function (this: VueGuidesInterface, value: any) {\n    (this.$_guides as any)[name] = value;\n  };\n});\n\nwatch.vueStyle = function (this: VueGuidesInterface, value: any) {\n  (this.$_guides as any).style = value;\n};\n\nMETHODS.forEach((name) => {\n  methods[name] = function (this: VueGuidesInterface, ...args: any[]) {\n    return (this.$_guides as any)[name](...args);\n  };\n});\n\nexport default {\n  name: \"guides\",\n  methods,\n  watch,\n  props: [...VUE_PROPERTIES, \"vueStyle\"],\n  mounted(this: VueGuidesInterface) {\n    const options: Partial<GuidesOptions> = {};\n    const props = this.$props;\n    VUE_PROPERTIES.forEach((name) => {\n      const value = props[name];\n\n      if (!isUndefined(value)) {\n        (options as any)[name] = props[name];\n      }\n    });\n    const refs = this.$refs;\n    const container = refs.container as HTMLElement;\n\n    options.style = props.vueStyle;\n    options.warpSelf = true;\n\n    this.$_guides = new VanillaGuides(container, options);\n\n    const guides = this.$_guides;\n\n    EVENTS.forEach((name) => {\n      (guides as any).on(name, (e: any) => {\n        this.$emit(name, { ...e });\n      });\n    });\n  },\n  beforeUnmount(this: VueGuidesInterface) {\n    this.$_guides.destroy();\n  },\n};\n</script>\n"
  },
  {
    "path": "packages/vue3-guides/src/Guides.vue.d.ts",
    "content": "import { VueGuidesInterface } from \"./types\";\n\ndeclare const VueGuides: VueGuidesInterface;\ntype VueGuides = VueGuidesInterface;\n\nexport default VueGuides;\n"
  },
  {
    "path": "packages/vue3-guides/src/index.ts",
    "content": "import Guides from \"./Guides.vue\";\n\nexport * from \"./types\";\nexport default Guides;\n"
  },
  {
    "path": "packages/vue3-guides/src/types.ts",
    "content": "import { MethodInterface } from \"framework-utils\";\nimport VanillaGuides, { GuideOptions, GuidesInterface } from \"@scena/guides\";\n\nexport interface VueGuidesInterface\n    extends MethodInterface<GuidesInterface, VanillaGuides, VueGuidesInterface> {\n    name: string;\n    $el: HTMLElement;\n    $props: GuideOptions & { vueStyle: Record<string, any> };\n    $refs: any;\n    $emit(name: string, e: any): void;\n    $_guides: VanillaGuides;\n}\n\n"
  },
  {
    "path": "packages/vue3-guides/tsconfig.declaration.json",
    "content": "{\n  \"extends\": \"./tsconfig\",\n  \"compilerOptions\": {\n    \"removeComments\": false,\n    \"declaration\": true,\n    \"emitDeclarationOnly\": true,\n    \"declarationDir\": \"declaration\"\n  },\n  \"include\": [\n    \"src/**/*.ts\",\n    \"src/**/*.tsx\",\n    \"src/**/*.vue\"\n  ]\n}\n"
  },
  {
    "path": "packages/vue3-guides/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"module\": \"esnext\",\n    \"strict\": true,\n    \"jsx\": \"preserve\",\n    \"importHelpers\": true,\n    \"moduleResolution\": \"node\",\n    \"experimentalDecorators\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"sourceMap\": true,\n    \"baseUrl\": \".\",\n    \"types\": [\n      \"webpack-env\"\n    ],\n    \"paths\": {\n      \"@/*\": [\n        \"src/*\"\n      ]\n    },\n    \"lib\": [\n      \"esnext\",\n      \"dom\",\n      \"dom.iterable\",\n      \"scripthost\"\n    ]\n  },\n  \"include\": [\n    \"src/**/*.ts\",\n    \"src/**/*.tsx\",\n    \"src/**/*.vue\",\n    \"tests/**/*.ts\",\n    \"tests/**/*.tsx\"\n  ],\n  \"exclude\": [\n    \"node_modules\"\n  ]\n}\n"
  },
  {
    "path": "rollup.config.js",
    "content": "\nimport builder from \"@daybrush/builder\";\nimport compat from \"rollup-plugin-react-compat\";\n\n\nconst reactCompat = compat({\n    useCroact: true,\n    aliasModules: {\n        \"@scena/react-guides\": \"croact-guides\",\n    },\n});\nconst resolveReactCompat = compat({\n    useCroact: true,\n    resolveCompat: true,\n});\n\nconst external = {\n    \"croact\": \"croact\",\n    \"croact-guides\": \"croact-guides\",\n    \"@egjs/component\": \"@egjs/component\",\n    \"@daybrush/utils\": \"@daybrush/utils\",\n    \"gesto\": \"gesto\",\n    \"framework-utils\": \"framework-utils\",\n    \"@egjs/agent\": \"eg.Agent\",\n    \"@egjs/children-differ\": \"eg.ChildrenDiffer\",\n};\nexport default builder([\n    {\n        name: \"Guides\",\n        input: \"src/index.umd.ts\",\n        output: \"./dist/guides.js\",\n        plugins: [resolveReactCompat],\n\n    },\n    {\n        name: \"Guides\",\n        input: \"src/index.umd.ts\",\n        output: \"./dist/guides.min.js\",\n        plugins: [resolveReactCompat],\n        uglify: true,\n    },\n    {\n        input: \"src/index.esm.ts\",\n        output: \"./dist/guides.esm.js\",\n        exports: \"named\",\n        format: \"es\",\n        plugins: [reactCompat],\n        external,\n    },\n    {\n        input: \"src/index.cjs.ts\",\n        output: \"./dist/guides.cjs.js\",\n        exports: \"named\",\n        format: \"cjs\",\n        plugins: [reactCompat],\n        external,\n    },\n]);\n"
  },
  {
    "path": "static/scripts/custom.js",
    "content": "(function () {\n    window.dataLayer = window.dataLayer || [];\n    function gtag() { dataLayer.push(arguments); }\n    gtag('js', new Date());\n\n    gtag('config', 'G-TRBNXHQ0ZF');\n    var script = document.createElement(\"script\");\n\n    script.src = \"https://www.googletagmanager.com/gtag/js?id=G-TRBNXHQ0ZF\";\n\n    document.body.appendChild(script);\n})();\n"
  },
  {
    "path": "tsconfig.declaration.json",
    "content": "{\n  \"extends\": \"./tsconfig\",\n  \"compilerOptions\": {\n    \"removeComments\": false,\n    \"declaration\": true,\n    \"emitDeclarationOnly\": true,\n    \"declarationDir\": \"declaration\"\n  }\n}\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"outDir\": \"./outjs/\",\n    \"esModuleInterop\": false,\n    \"sourceMap\": true,\n    \"module\": \"es2015\",\n    \"target\": \"es5\",\n    \"experimentalDecorators\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"react\",\n    \"lib\": [\n      \"es2015\",\n      \"dom\"\n    ],\n  },\n  \"include\": [\n    \"./src/**/*.ts\"\n  ]\n}\n"
  },
  {
    "path": "tsconfig.test.json",
    "content": "{\n  \"extends\": \"./tsconfig\",\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"noImplicitAny\": false,\n    \"types\": [\n      \"karma-chai\",\n      \"mocha\"\n    ]\n  },\n  \"include\": [\n    \"./src/**/*.ts\",\n    \"./test/**/*.ts\"\n  ]\n}"
  },
  {
    "path": "tslint.json",
    "content": "{\n\t\"defaultSeverity\": \"error\",\n\t\"extends\": [\n\t\t\"tslint:recommended\"\n\t],\n\t\"rules\": {\n\t\t\"jsdoc-format\": false,\n\t\t\"forin\": false,\n\t\t\"no-console\": false,\n        \"no-any\": false,\n        \"no-empty-interface\": false,\n\t\t\"interface-name\": false,\n\t\t\"indent\": [\n\t\t\ttrue,\n\t\t\t\"spaces\",\n\t\t\t4\n\t\t],\n\t\t\"ordered-imports\": false,\n\t\t\"object-literal-sort-keys\": false,\n\t\t\"no-unused-expression\": false,\n\t\t\"arrow-parens\": [\n\t\t\ttrue,\n\t\t\t\"ban-single-arg-parens\"\n\t\t],\n\t\t\"max-line-length\": [\n\t\t\ttrue,\n\t\t\t{\n\t\t\t\t\"limit\": 120,\n\t\t\t\t\"ignore-pattern\": \"(\\\\* @)|//\"\n\t\t\t}\n\t\t],\n\t\t\"trailing-comma\": [\n\t\t\ttrue,\n\t\t\t{\n\t\t\t\t\"multiline\": {\n\t\t\t\t\t\"objects\": \"always\",\n\t\t\t\t\t\"arrays\": \"always\",\n\t\t\t\t\t\"functions\": \"always\",\n\t\t\t\t\t\"typeLiterals\": \"ignore\"\n\t\t\t\t},\n\t\t\t\t\"esSpecCompliant\": true\n\t\t\t}\n\t\t]\n\t}\n}\n"
  }
]