├── .babelrc ├── .circleci └── config.yml ├── .eslintrc ├── .gitignore ├── .prettierrc ├── CHANGELOG.md ├── LICENSE ├── README.md ├── bundle.js ├── bundle.js.map ├── composable-annotation.gif ├── package.json ├── public ├── css │ └── flexboxgrid.min.css ├── favicon.ico ├── img │ ├── a-badge.png │ ├── a-bracket.png │ ├── a-callout.png │ ├── a-circle.png │ ├── a-curve.png │ ├── a-custom.png │ ├── a-elbow.png │ ├── a-label.png │ ├── a-rect.png │ ├── a-threshold.png │ ├── anatomy.png │ ├── arrow.png │ ├── basis.png │ ├── bottom.png │ ├── cardinal.png │ ├── classes.png │ ├── curve.png │ ├── dot.png │ ├── dots.png │ ├── dynamic.png │ ├── elbow.png │ ├── heart.png │ ├── horizontal.png │ ├── left.png │ ├── leftRight.png │ ├── line.png │ ├── linear.png │ ├── menu.png │ ├── middle.png │ ├── none.png │ ├── right.png │ ├── step.png │ ├── top.png │ ├── topBottom.png │ └── vertical.png ├── index.html └── prism.js ├── src ├── components │ ├── Annotation.js │ ├── Connector │ │ ├── Connector.js │ │ ├── ConnectorCurve.js │ │ ├── ConnectorElbow.js │ │ ├── ConnectorEnd.js │ │ ├── ConnectorEndArrow.js │ │ ├── ConnectorEndDot.js │ │ └── ConnectorLine.js │ ├── EditableAnnotation.js │ ├── Handle.js │ ├── Note │ │ ├── BracketNote.js │ │ ├── JSXNote.js │ │ └── Note.js │ ├── Subject │ │ ├── Subject.js │ │ ├── SubjectBadge.js │ │ ├── SubjectBracket.js │ │ ├── SubjectCircle.js │ │ ├── SubjectCustom.js │ │ ├── SubjectRect.js │ │ └── SubjectThreshold.js │ ├── Types │ │ ├── AnnotationBadge.js │ │ ├── AnnotationBracket.js │ │ ├── AnnotationCallout.js │ │ ├── AnnotationCalloutCircle.js │ │ ├── AnnotationCalloutCurve.js │ │ ├── AnnotationCalloutCustom.js │ │ ├── AnnotationCalloutElbow.js │ │ ├── AnnotationCalloutRect.js │ │ ├── AnnotationLabel.js │ │ ├── AnnotationXYThreshold.js │ │ └── Type.js │ ├── classnames.js │ ├── index.js │ └── web.js ├── docs │ ├── Examples.js │ ├── Icons.js │ ├── Sections.js │ ├── Types.js │ ├── data │ │ ├── stock.json │ │ └── yearNetwork.json │ ├── index.css │ ├── index.js │ ├── prism.css │ └── theme.js └── index.js ├── tests.md ├── webpack.config.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "production": { 4 | "presets": [ 5 | [ 6 | "@babel/preset-env", 7 | { 8 | "debug": false, 9 | "modules": "commonjs" 10 | } 11 | ], 12 | "@babel/preset-react" 13 | ], 14 | "plugins": [["@babel/plugin-proposal-class-properties"]] 15 | }, 16 | "development": { 17 | "presets": [ 18 | [ 19 | "@babel/preset-env", 20 | { 21 | "debug": false, 22 | "modules": "commonjs" 23 | } 24 | ], 25 | "@babel/preset-react" 26 | ], 27 | "plugins": [["@babel/plugin-proposal-class-properties"]] 28 | }, 29 | "test": { 30 | "presets": [ 31 | [ 32 | "@babel/preset-env", 33 | { 34 | "debug": false, 35 | "modules": "commonjs" 36 | } 37 | ], 38 | "@babel/preset-react" 39 | ], 40 | "plugins": [["@babel/plugin-proposal-class-properties"]] 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | # Javascript Node CircleCI 2.0 configuration file 2 | # 3 | # Check https://circleci.com/docs/2.0/language-javascript/ for more details 4 | # 5 | version: 2 6 | jobs: 7 | build: 8 | docker: 9 | # specify the version you desire here 10 | - image: circleci/node:7.10 11 | 12 | # Specify service dependencies here if necessary 13 | # CircleCI maintains a library of pre-built images 14 | # documented at https://circleci.com/docs/2.0/circleci-images/ 15 | # - image: circleci/mongo:3.4.4 16 | 17 | working_directory: ~/repo 18 | 19 | steps: 20 | - checkout 21 | 22 | # Download and cache dependencies 23 | - restore_cache: 24 | keys: 25 | - v1-dependencies-{{ checksum "package.json" }} 26 | # fallback to using the latest cache if no exact match is found 27 | - v1-dependencies- 28 | 29 | - run: npm install 30 | 31 | - save_cache: 32 | paths: 33 | - node_modules 34 | key: v1-dependencies-{{ checksum "package.json" }} 35 | 36 | # run tests! 37 | - run: npm run cypress 38 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "babel-eslint", 3 | "plugins": ["react"], 4 | 5 | "rules": { 6 | "array-bracket-spacing": 0, 7 | "curly": 0, 8 | "indent": [2, 2], 9 | "no-var": 2, 10 | "object-curly-spacing": 0, 11 | "quotes": 0, 12 | "eqeqeq": 2, 13 | "eol-last": 0, 14 | "prefer-const": 0, 15 | "no-cond-assign": 0, 16 | "space-before-blocks": 2, 17 | "no-unused-vars": 2, 18 | "no-loop-func": 0, 19 | "dot-notation": 2, 20 | "comma-dangle": 2, 21 | "no-unused-expressions": [ 22 | 2, 23 | { "allowShortCircuit": true, "allowTernary": true } 24 | ], 25 | "no-multiple-empty-lines": 0, 26 | "react/jsx-pascal-case": 0, 27 | "react/jsx-no-undef": 2, 28 | "react/jsx-uses-vars": 2, 29 | "react/jsx-wrap-multilines": 1, 30 | "no-sequences": 0 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | public/ga.js 4 | 5 | # dependencies 6 | node_modules 7 | 8 | # testing 9 | coverage 10 | 11 | # production 12 | dist 13 | build 14 | build.zip 15 | lib 16 | 17 | # misc 18 | .DS_Store 19 | .env 20 | npm-debug.log 21 | *.zip -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false 3 | } 4 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | 2 | # [1.0.0](https://github.com/reactstrap/component-template/compare/0.2.0...v1.0.0) (2017-01-28) 3 | 4 | 5 | ### Features 6 | 7 | * **lint:** add eslint to test setup ([4756833](https://github.com/reactstrap/component-template/commit/4756833)) 8 | 9 | 10 | 11 | 12 | # 0.2.0 (2016-09-25) 13 | 14 | 15 | ### Features 16 | 17 | * **HelloWorld:** add hello world component ([a2da070](https://github.com/reactstrap/component-template/commit/a2da070)) 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | 180 | APPENDIX: How to apply the Apache License to your work. 181 | 182 | To apply the Apache License to your work, attach the following 183 | boilerplate notice, with the fields enclosed by brackets "[]" 184 | replaced with your own identifying information. (Don't include 185 | the brackets!) The text should be enclosed in the appropriate 186 | comment syntax for the file format. We also recommend that a 187 | file or class name and description of purpose be included on the 188 | same "printed page" as the copyright notice for easier 189 | identification within third-party archives. 190 | 191 | Copyright (c) 2017, Susie Lu 192 | 193 | Licensed under the Apache License, Version 2.0 (the "License"); 194 | you may not use this file except in compliance with the License. 195 | You may obtain a copy of the License at 196 | 197 | http://www.apache.org/licenses/LICENSE-2.0 198 | 199 | Unless required by applicable law or agreed to in writing, software 200 | distributed under the License is distributed on an "AS IS" BASIS, 201 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 202 | See the License for the specific language governing permissions and 203 | limitations under the License. 204 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # react-annotation 2 | 3 | Full documentation: [http://react-annotation.susielu.com](http://react-annotation.susielu.com) 4 | 5 |  6 | 7 | ## Setup 8 | 9 | ### Using NPM 10 | 11 | You can add react-annotation as a node module by running 12 | 13 | ```bash 14 | npm i react-annotation -S 15 | ``` 16 | 17 | If you're new to using React, I suggest using [create-react-app](https://github.com/facebookincubator/create-react-app) to start your project 18 | 19 | ## Local Setup and Build 20 | 21 | This project uses [yarn](https://yarnpkg.com/lang/en/docs/install/#mac-stable), make sure that is set up prior to installing and building. To test out the library and run the docs locally, clone the repo and then run: 22 | 23 | ```js 24 | yarn install 25 | ``` 26 | 27 | Then run the start command to have a process watch for changes and build the docs site: 28 | 29 | ```js 30 | yarn start 31 | ``` 32 | 33 | If you want to make a production build of the docs run: 34 | 35 | ```js 36 | yarn build 37 | //this includes the yarn run prebuild command below 38 | ``` 39 | 40 | If you want to make a production build of just the components and the bundle.js that can be used as a codepen import run: 41 | 42 | ```js 43 | yarn prebuild 44 | ``` 45 | 46 | ## Feedback 47 | 48 | I would love to hear from you about any additional features that would be useful, please say hi on twitter [@DataToViz](https://www.twitter.com/DataToViz). 49 | 50 | ## Prior art 51 | 52 | - [Andrew Mollica](https://bl.ocks.org/armollica/67f3cf7bf08a02d95d48dc9f0c91f26c), [d3-ring-note](https://github.com/armollica/d3-ring-note) D3 plugin for placing circle and text annotation, and [HTML Annotation](http://bl.ocks.org/armollica/78894d0b3cbd46d8d8d19d135c6ca34d) 53 | 54 | - [Scatterplot with d3-annotate](https://bl.ocks.org/cmpolis/f9805a98b8a455aaccb56e5ee59964f8), by Chris Polis, example using [d3-annotate](https://github.com/cmpolis/d3-annotate) 55 | 56 | - [Rickshaw](http://code.shutterstock.com/rickshaw/) has an annotation tool 57 | 58 | - [Benn Stancil](https://modeanalytics.com/benn/reports/21ebfb6b6138) has an annotation example for a line chart 59 | 60 | - [Adam Pearce](http://blockbuilder.org/1wheel/68073eeba4d19c454a8c25fcd6e9e68a) has arc-arrows and [swoopy drag](http://1wheel.github.io/swoopy-drag/) 61 | 62 | - [Micah Stubbs](http://bl.ocks.org/micahstubbs/fa129089b7989975e96b166077f74de4#annotations.json) has a nice VR chart based on swoopy drag 63 | 64 | - [Scott Logic](http://blog.scottlogic.com/2014/08/26/two-line-components-for-d3-charts.html) evokes “line annotation” in a graph (different concept). 65 | 66 | - [Seven Features You’ll Want In Your Next Charting Tool](http://vis4.net/blog/posts/seven-features-youll-wantin-your-next-charting-tool/) shows how the NYT does annotations 67 | 68 | - [John Burn-Murdoch](https://bl.ocks.org/johnburnmurdoch/bcdb4e85c7523a2b0e64961f0d227154) example with adding/removing and repositioning annotations 69 | -------------------------------------------------------------------------------- /composable-annotation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/composable-annotation.gif -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-annotation", 3 | "description": "React components for annotating SVG elements ", 4 | "version": "2.2.1", 5 | "homepage": ".", 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/susielu/react-annotation.git" 9 | }, 10 | "license": "Apache-2.0", 11 | "bugs": { 12 | "url": "https://github.com/susielu/react-annotation/issues" 13 | }, 14 | "main": "lib/index.js", 15 | "scripts": { 16 | "start": "react-scripts start", 17 | "build": "react-scripts build && npm run webpack", 18 | "test": "react-scripts test --env=jsdom", 19 | "lint": "eslint src", 20 | "webpack": "NODE_ENV=production webpack", 21 | "prebuild": "babel src/components --out-dir lib --ignore test.js" 22 | }, 23 | "devDependencies": { 24 | "@babel/cli": "7.0.0-beta.56", 25 | "@babel/core": "7.0.0-beta.56", 26 | "@babel/plugin-proposal-class-properties": "7.0.0-beta.56", 27 | "@babel/preset-env": "7.0.0-beta.56", 28 | "@babel/preset-react": "7.0.0-beta.56", 29 | "babel-loader": "8.0.0-beta.0", 30 | "conventional-changelog-cli": "1.1.1", 31 | "conventional-recommended-bump": "0.3.0", 32 | "d3-array": "1.2.1", 33 | "d3-axis": "1.0.8", 34 | "d3-scale": "1.0.6", 35 | "d3-shape": "~1.0.4", 36 | "dentist": "1.0.3", 37 | "envify": "4.1.0", 38 | "enzyme": "2.9.1", 39 | "eslint": "5.3.0", 40 | "eslint-plugin-react": "^7.10.0", 41 | "history": "4.2.0", 42 | "material-ui": "^0.17.1", 43 | "react": "^15.5.0", 44 | "react-addons-css-transition-group": "15.3.2", 45 | "react-addons-test-utils": "^15.3.2", 46 | "react-addons-transition-group": "15.3.2", 47 | "react-dom": "^15.4.2", 48 | "react-markdown": "^3.3.0", 49 | "react-prism": "4.3.1", 50 | "react-router": "^4.0.0-beta.6", 51 | "react-router-dom": "4.0.0", 52 | "react-scripts": "0.8.5", 53 | "react-sticky": "git://github.com/susielu/react-sticky.git#23141c78f7e0501dc6a7b31b9e33db2e367b185f", 54 | "react-tap-event-plugin": "2.0.1", 55 | "react-test-renderer": "15.6.1", 56 | "uglify-js": "3.1.4", 57 | "uglifyify": "4.0.4", 58 | "webpack": "^4.16.4", 59 | "webpack-cli": "^3.1.0" 60 | }, 61 | "peerDependencies": { 62 | "react": "^15.0.0 || ^16.0.0", 63 | "react-dom": "^15.0.0 || ^16.0.0" 64 | }, 65 | "dependencies": { 66 | "prop-types": "15.6.2", 67 | "viz-annotation": "0.0.5" 68 | }, 69 | "files": [ 70 | "LICENSE", 71 | "README.md", 72 | "CHANGELOG.md", 73 | "lib" 74 | ], 75 | "keywords": [ 76 | "react", 77 | "component", 78 | "components", 79 | "annotation", 80 | "svg", 81 | "react-component" 82 | ] 83 | } 84 | -------------------------------------------------------------------------------- /public/css/flexboxgrid.min.css: -------------------------------------------------------------------------------- 1 | /* .container, 2 | .container-fluid { 3 | margin-right: auto; 4 | margin-left: auto; 5 | } */ 6 | /* .container-fluid { 7 | padding-right: 2rem; 8 | padding-left: 2rem; 9 | } */ 10 | .row { 11 | box-sizing: border-box; 12 | display: -webkit-box; 13 | display: -ms-flexbox; 14 | display: flex; 15 | -webkit-box-flex: 0; 16 | -ms-flex: 0 1 auto; 17 | flex: 0 1 auto; 18 | -webkit-box-orient: horizontal; 19 | -webkit-box-direction: normal; 20 | -ms-flex-direction: row; 21 | flex-direction: row; 22 | -ms-flex-wrap: wrap; 23 | flex-wrap: wrap; 24 | /* margin-right: -.5rem; 25 | margin-left: -.5rem; */ 26 | } 27 | .row.reverse { 28 | -webkit-box-orient: horizontal; 29 | -webkit-box-direction: reverse; 30 | -ms-flex-direction: row-reverse; 31 | flex-direction: row-reverse; 32 | } 33 | .col.reverse { 34 | -webkit-box-orient: vertical; 35 | -webkit-box-direction: reverse; 36 | -ms-flex-direction: column-reverse; 37 | flex-direction: column-reverse; 38 | } 39 | .col-xs, 40 | .col-xs-1, 41 | .col-xs-10, 42 | .col-xs-11, 43 | .col-xs-12, 44 | .col-xs-2, 45 | .col-xs-3, 46 | .col-xs-4, 47 | .col-xs-5, 48 | .col-xs-6, 49 | .col-xs-7, 50 | .col-xs-8, 51 | .col-xs-9, 52 | .col-xs-offset-0, 53 | .col-xs-offset-1, 54 | .col-xs-offset-10, 55 | .col-xs-offset-11, 56 | .col-xs-offset-12, 57 | .col-xs-offset-2, 58 | .col-xs-offset-3, 59 | .col-xs-offset-4, 60 | .col-xs-offset-5, 61 | .col-xs-offset-6, 62 | .col-xs-offset-7, 63 | .col-xs-offset-8, 64 | .col-xs-offset-9 { 65 | box-sizing: border-box; 66 | -webkit-box-flex: 0; 67 | -ms-flex: 0 0 auto; 68 | flex: 0 0 auto; 69 | padding-right: 0.5rem; 70 | padding-left: 0.5rem; 71 | } 72 | .col-xs { 73 | -webkit-box-flex: 1; 74 | -ms-flex-positive: 1; 75 | flex-grow: 1; 76 | -ms-flex-preferred-size: 0; 77 | flex-basis: 0; 78 | max-width: 100%; 79 | } 80 | .col-xs-1 { 81 | -ms-flex-preferred-size: 8.33333333%; 82 | flex-basis: 8.33333333%; 83 | max-width: 8.33333333%; 84 | } 85 | .col-xs-2 { 86 | -ms-flex-preferred-size: 16.66666667%; 87 | flex-basis: 16.66666667%; 88 | max-width: 16.66666667%; 89 | } 90 | .col-xs-3 { 91 | -ms-flex-preferred-size: 25%; 92 | flex-basis: 25%; 93 | max-width: 25%; 94 | } 95 | .col-xs-4 { 96 | -ms-flex-preferred-size: 33.33333333%; 97 | flex-basis: 33.33333333%; 98 | max-width: 33.33333333%; 99 | } 100 | .col-xs-5 { 101 | -ms-flex-preferred-size: 41.66666667%; 102 | flex-basis: 41.66666667%; 103 | max-width: 41.66666667%; 104 | } 105 | .col-xs-6 { 106 | -ms-flex-preferred-size: 50%; 107 | flex-basis: 50%; 108 | max-width: 50%; 109 | } 110 | .col-xs-7 { 111 | -ms-flex-preferred-size: 58.33333333%; 112 | flex-basis: 58.33333333%; 113 | max-width: 58.33333333%; 114 | } 115 | .col-xs-8 { 116 | -ms-flex-preferred-size: 66.66666667%; 117 | flex-basis: 66.66666667%; 118 | max-width: 66.66666667%; 119 | } 120 | .col-xs-9 { 121 | -ms-flex-preferred-size: 75%; 122 | flex-basis: 75%; 123 | max-width: 75%; 124 | } 125 | .col-xs-10 { 126 | -ms-flex-preferred-size: 83.33333333%; 127 | flex-basis: 83.33333333%; 128 | max-width: 83.33333333%; 129 | } 130 | .col-xs-11 { 131 | -ms-flex-preferred-size: 91.66666667%; 132 | flex-basis: 91.66666667%; 133 | max-width: 91.66666667%; 134 | } 135 | .col-xs-12 { 136 | -ms-flex-preferred-size: 100%; 137 | flex-basis: 100%; 138 | max-width: 100%; 139 | } 140 | .col-xs-offset-0 { 141 | margin-left: 0; 142 | } 143 | .col-xs-offset-1 { 144 | margin-left: 8.33333333%; 145 | } 146 | .col-xs-offset-2 { 147 | margin-left: 16.66666667%; 148 | } 149 | .col-xs-offset-3 { 150 | margin-left: 25%; 151 | } 152 | .col-xs-offset-4 { 153 | margin-left: 33.33333333%; 154 | } 155 | .col-xs-offset-5 { 156 | margin-left: 41.66666667%; 157 | } 158 | .col-xs-offset-6 { 159 | margin-left: 50%; 160 | } 161 | .col-xs-offset-7 { 162 | margin-left: 58.33333333%; 163 | } 164 | .col-xs-offset-8 { 165 | margin-left: 66.66666667%; 166 | } 167 | .col-xs-offset-9 { 168 | margin-left: 75%; 169 | } 170 | .col-xs-offset-10 { 171 | margin-left: 83.33333333%; 172 | } 173 | .col-xs-offset-11 { 174 | margin-left: 91.66666667%; 175 | } 176 | .start-xs { 177 | -webkit-box-pack: start; 178 | -ms-flex-pack: start; 179 | justify-content: flex-start; 180 | text-align: start; 181 | } 182 | .center-xs { 183 | -webkit-box-pack: center; 184 | -ms-flex-pack: center; 185 | justify-content: center; 186 | text-align: center; 187 | } 188 | .end-xs { 189 | -webkit-box-pack: end; 190 | -ms-flex-pack: end; 191 | justify-content: flex-end; 192 | text-align: end; 193 | } 194 | .top-xs { 195 | -webkit-box-align: start; 196 | -ms-flex-align: start; 197 | align-items: flex-start; 198 | } 199 | .middle-xs { 200 | -webkit-box-align: center; 201 | -ms-flex-align: center; 202 | align-items: center; 203 | } 204 | .bottom-xs { 205 | -webkit-box-align: end; 206 | -ms-flex-align: end; 207 | align-items: flex-end; 208 | } 209 | .around-xs { 210 | -ms-flex-pack: distribute; 211 | justify-content: space-around; 212 | } 213 | .between-xs { 214 | -webkit-box-pack: justify; 215 | -ms-flex-pack: justify; 216 | justify-content: space-between; 217 | } 218 | .first-xs { 219 | -webkit-box-ordinal-group: 0; 220 | -ms-flex-order: -1; 221 | order: -1; 222 | } 223 | .last-xs { 224 | -webkit-box-ordinal-group: 2; 225 | -ms-flex-order: 1; 226 | order: 1; 227 | } 228 | @media only screen and (min-width: 48em) { 229 | .container { 230 | width: 49rem; 231 | } 232 | .col-sm, 233 | .col-sm-1, 234 | .col-sm-10, 235 | .col-sm-11, 236 | .col-sm-12, 237 | .col-sm-2, 238 | .col-sm-3, 239 | .col-sm-4, 240 | .col-sm-5, 241 | .col-sm-6, 242 | .col-sm-7, 243 | .col-sm-8, 244 | .col-sm-9, 245 | .col-sm-offset-0, 246 | .col-sm-offset-1, 247 | .col-sm-offset-10, 248 | .col-sm-offset-11, 249 | .col-sm-offset-12, 250 | .col-sm-offset-2, 251 | .col-sm-offset-3, 252 | .col-sm-offset-4, 253 | .col-sm-offset-5, 254 | .col-sm-offset-6, 255 | .col-sm-offset-7, 256 | .col-sm-offset-8, 257 | .col-sm-offset-9 { 258 | box-sizing: border-box; 259 | -webkit-box-flex: 0; 260 | -ms-flex: 0 0 auto; 261 | flex: 0 0 auto; 262 | padding-right: 0.5rem; 263 | padding-left: 0.5rem; 264 | } 265 | .col-sm { 266 | -webkit-box-flex: 1; 267 | -ms-flex-positive: 1; 268 | flex-grow: 1; 269 | -ms-flex-preferred-size: 0; 270 | flex-basis: 0; 271 | max-width: 100%; 272 | } 273 | .col-sm-1 { 274 | -ms-flex-preferred-size: 8.33333333%; 275 | flex-basis: 8.33333333%; 276 | max-width: 8.33333333%; 277 | } 278 | .col-sm-2 { 279 | -ms-flex-preferred-size: 16.66666667%; 280 | flex-basis: 16.66666667%; 281 | max-width: 16.66666667%; 282 | } 283 | .col-sm-3 { 284 | -ms-flex-preferred-size: 25%; 285 | flex-basis: 25%; 286 | max-width: 25%; 287 | } 288 | .col-sm-4 { 289 | -ms-flex-preferred-size: 33.33333333%; 290 | flex-basis: 33.33333333%; 291 | max-width: 33.33333333%; 292 | } 293 | .col-sm-5 { 294 | -ms-flex-preferred-size: 41.66666667%; 295 | flex-basis: 41.66666667%; 296 | max-width: 41.66666667%; 297 | } 298 | .col-sm-6 { 299 | -ms-flex-preferred-size: 50%; 300 | flex-basis: 50%; 301 | max-width: 50%; 302 | } 303 | .col-sm-7 { 304 | -ms-flex-preferred-size: 58.33333333%; 305 | flex-basis: 58.33333333%; 306 | max-width: 58.33333333%; 307 | } 308 | .col-sm-8 { 309 | -ms-flex-preferred-size: 66.66666667%; 310 | flex-basis: 66.66666667%; 311 | max-width: 66.66666667%; 312 | } 313 | .col-sm-9 { 314 | -ms-flex-preferred-size: 75%; 315 | flex-basis: 75%; 316 | max-width: 75%; 317 | } 318 | .col-sm-10 { 319 | -ms-flex-preferred-size: 83.33333333%; 320 | flex-basis: 83.33333333%; 321 | max-width: 83.33333333%; 322 | } 323 | .col-sm-11 { 324 | -ms-flex-preferred-size: 91.66666667%; 325 | flex-basis: 91.66666667%; 326 | max-width: 91.66666667%; 327 | } 328 | .col-sm-12 { 329 | -ms-flex-preferred-size: 100%; 330 | flex-basis: 100%; 331 | max-width: 100%; 332 | } 333 | .col-sm-offset-0 { 334 | margin-left: 0; 335 | } 336 | .col-sm-offset-1 { 337 | margin-left: 8.33333333%; 338 | } 339 | .col-sm-offset-2 { 340 | margin-left: 16.66666667%; 341 | } 342 | .col-sm-offset-3 { 343 | margin-left: 25%; 344 | } 345 | .col-sm-offset-4 { 346 | margin-left: 33.33333333%; 347 | } 348 | .col-sm-offset-5 { 349 | margin-left: 41.66666667%; 350 | } 351 | .col-sm-offset-6 { 352 | margin-left: 50%; 353 | } 354 | .col-sm-offset-7 { 355 | margin-left: 58.33333333%; 356 | } 357 | .col-sm-offset-8 { 358 | margin-left: 66.66666667%; 359 | } 360 | .col-sm-offset-9 { 361 | margin-left: 75%; 362 | } 363 | .col-sm-offset-10 { 364 | margin-left: 83.33333333%; 365 | } 366 | .col-sm-offset-11 { 367 | margin-left: 91.66666667%; 368 | } 369 | .start-sm { 370 | -webkit-box-pack: start; 371 | -ms-flex-pack: start; 372 | justify-content: flex-start; 373 | text-align: start; 374 | } 375 | .center-sm { 376 | -webkit-box-pack: center; 377 | -ms-flex-pack: center; 378 | justify-content: center; 379 | text-align: center; 380 | } 381 | .end-sm { 382 | -webkit-box-pack: end; 383 | -ms-flex-pack: end; 384 | justify-content: flex-end; 385 | text-align: end; 386 | } 387 | .top-sm { 388 | -webkit-box-align: start; 389 | -ms-flex-align: start; 390 | align-items: flex-start; 391 | } 392 | .middle-sm { 393 | -webkit-box-align: center; 394 | -ms-flex-align: center; 395 | align-items: center; 396 | } 397 | .bottom-sm { 398 | -webkit-box-align: end; 399 | -ms-flex-align: end; 400 | align-items: flex-end; 401 | } 402 | .around-sm { 403 | -ms-flex-pack: distribute; 404 | justify-content: space-around; 405 | } 406 | .between-sm { 407 | -webkit-box-pack: justify; 408 | -ms-flex-pack: justify; 409 | justify-content: space-between; 410 | } 411 | .first-sm { 412 | -webkit-box-ordinal-group: 0; 413 | -ms-flex-order: -1; 414 | order: -1; 415 | } 416 | .last-sm { 417 | -webkit-box-ordinal-group: 2; 418 | -ms-flex-order: 1; 419 | order: 1; 420 | } 421 | } 422 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/favicon.ico -------------------------------------------------------------------------------- /public/img/a-badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/a-badge.png -------------------------------------------------------------------------------- /public/img/a-bracket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/a-bracket.png -------------------------------------------------------------------------------- /public/img/a-callout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/a-callout.png -------------------------------------------------------------------------------- /public/img/a-circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/a-circle.png -------------------------------------------------------------------------------- /public/img/a-curve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/a-curve.png -------------------------------------------------------------------------------- /public/img/a-custom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/a-custom.png -------------------------------------------------------------------------------- /public/img/a-elbow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/a-elbow.png -------------------------------------------------------------------------------- /public/img/a-label.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/a-label.png -------------------------------------------------------------------------------- /public/img/a-rect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/a-rect.png -------------------------------------------------------------------------------- /public/img/a-threshold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/a-threshold.png -------------------------------------------------------------------------------- /public/img/anatomy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/anatomy.png -------------------------------------------------------------------------------- /public/img/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/arrow.png -------------------------------------------------------------------------------- /public/img/basis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/basis.png -------------------------------------------------------------------------------- /public/img/bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/bottom.png -------------------------------------------------------------------------------- /public/img/cardinal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/cardinal.png -------------------------------------------------------------------------------- /public/img/classes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/classes.png -------------------------------------------------------------------------------- /public/img/curve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/curve.png -------------------------------------------------------------------------------- /public/img/dot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/dot.png -------------------------------------------------------------------------------- /public/img/dots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/dots.png -------------------------------------------------------------------------------- /public/img/dynamic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/dynamic.png -------------------------------------------------------------------------------- /public/img/elbow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/elbow.png -------------------------------------------------------------------------------- /public/img/heart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/heart.png -------------------------------------------------------------------------------- /public/img/horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/horizontal.png -------------------------------------------------------------------------------- /public/img/left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/left.png -------------------------------------------------------------------------------- /public/img/leftRight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/leftRight.png -------------------------------------------------------------------------------- /public/img/line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/line.png -------------------------------------------------------------------------------- /public/img/linear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/linear.png -------------------------------------------------------------------------------- /public/img/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/menu.png -------------------------------------------------------------------------------- /public/img/middle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/middle.png -------------------------------------------------------------------------------- /public/img/none.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/none.png -------------------------------------------------------------------------------- /public/img/right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/right.png -------------------------------------------------------------------------------- /public/img/step.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/step.png -------------------------------------------------------------------------------- /public/img/top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/top.png -------------------------------------------------------------------------------- /public/img/topBottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/topBottom.png -------------------------------------------------------------------------------- /public/img/vertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/susielu/react-annotation/7736da03fc9d8a99fbaf0ea8899d1b02ffeb18aa/public/img/vertical.png -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 | 7 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |