@searpent/react-image-annotate 2.0.75 → 2.0.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/.babelrc +6 -0
  2. package/.env +1 -0
  3. package/.flowconfig +2 -0
  4. package/.github/workflows/release-on-master.yml +32 -0
  5. package/.github/workflows/test.yml +16 -0
  6. package/.prettierrc +3 -0
  7. package/.releaserc.js +18 -0
  8. package/.storybook/addons.js +2 -0
  9. package/.storybook/config.js +16 -0
  10. package/LICENSE +21 -0
  11. package/package.json +1 -1
  12. package/public/favicon.ico +0 -0
  13. package/public/index.html +38 -0
  14. package/src/Annotator/bike-pic.png +0 -0
  15. package/src/Annotator/bike-pic2.png +0 -0
  16. package/src/Annotator/dab-keyframes.story.json +1 -0
  17. package/src/Annotator/exampleImages.js +48 -0
  18. package/src/Annotator/examplePhotos.js +7603 -0
  19. package/src/Annotator/index.js +380 -0
  20. package/src/Annotator/index.story.js +877 -0
  21. package/src/Annotator/poses.story.js +150 -0
  22. package/src/Annotator/reducers/combine-reducers.js +7 -0
  23. package/src/Annotator/reducers/convert-expanding-line-to-polygon.js +53 -0
  24. package/{Annotator → src/Annotator}/reducers/fix-twisted.js +5 -3
  25. package/src/Annotator/reducers/general-reducer.js +1228 -0
  26. package/src/Annotator/reducers/get-active-image.js +21 -0
  27. package/src/Annotator/reducers/get-implied-video-regions.js +115 -0
  28. package/src/Annotator/reducers/history-handler.js +60 -0
  29. package/src/Annotator/reducers/image-reducer.js +23 -0
  30. package/src/Annotator/reducers/video-reducer.js +85 -0
  31. package/src/Annotator/video.story.js +51 -0
  32. package/src/ClassSelectionMenu/index.js +112 -0
  33. package/src/Crosshairs/index.js +64 -0
  34. package/src/DebugSidebarBox/index.js +36 -0
  35. package/src/DemoSite/Editor.js +235 -0
  36. package/src/DemoSite/ErrorBoundaryDialog.js +34 -0
  37. package/src/DemoSite/index.js +41 -0
  38. package/src/DemoSite/index.story.js +10 -0
  39. package/src/DemoSite/simple-segmentation-example.json +572 -0
  40. package/src/Editor/annotation-plugin/annotation.js +536 -0
  41. package/src/Editor/index.js +50 -0
  42. package/src/Editor/readOnly.js +21 -0
  43. package/{Editor → src/Editor}/tools.js +3 -2
  44. package/src/Errorer/index.js +13 -0
  45. package/src/FullImageSegmentationAnnotator/hard1.story.jpg +0 -0
  46. package/src/FullImageSegmentationAnnotator/hard2.story.jpg +0 -0
  47. package/src/FullImageSegmentationAnnotator/hard3.story.jpg +0 -0
  48. package/src/FullImageSegmentationAnnotator/index.js +7 -0
  49. package/src/FullImageSegmentationAnnotator/index.story.js +177 -0
  50. package/src/FullImageSegmentationAnnotator/orange.story.png +0 -0
  51. package/src/GroupSelectorSidebarBox/index.js +48 -0
  52. package/src/GroupsEditorSidebarBox/index.js +108 -0
  53. package/src/HelpSidebarBox/index.js +43 -0
  54. package/src/HighlightBox/index.js +143 -0
  55. package/src/HistorySidebarBox/index.js +78 -0
  56. package/src/ImageCanvas/dancing-man.story.jpg +0 -0
  57. package/src/ImageCanvas/index.js +515 -0
  58. package/src/ImageCanvas/index.story.js +314 -0
  59. package/src/ImageCanvas/mouse_mask.story.png +0 -0
  60. package/src/ImageCanvas/region-tools.js +171 -0
  61. package/src/ImageCanvas/seves_desk.story.jpg +0 -0
  62. package/{ImageCanvas → src/ImageCanvas}/styles.js +8 -12
  63. package/src/ImageCanvas/use-mouse.js +168 -0
  64. package/src/ImageCanvas/use-project-box.js +23 -0
  65. package/src/ImageCanvas/use-wasd-mode.js +50 -0
  66. package/src/ImageMask/index.js +127 -0
  67. package/src/ImageMask/load-image.js +32 -0
  68. package/src/ImageSelectorSidebarBox/index.js +54 -0
  69. package/src/KeyframeTimeline/get-time-string.js +25 -0
  70. package/src/KeyframeTimeline/index.js +223 -0
  71. package/src/KeyframesSelectorSidebarBox/index.js +93 -0
  72. package/src/LandingPage/content.md +57 -0
  73. package/src/LandingPage/github-markdown.css +964 -0
  74. package/src/LandingPage/index.js +147 -0
  75. package/src/Locker/index.js +13 -0
  76. package/src/MainLayout/RightSidebarItemsWrapper.js +21 -0
  77. package/src/MainLayout/icon-dictionary.js +79 -0
  78. package/src/MainLayout/index.js +564 -0
  79. package/src/MainLayout/index.story.js +240 -0
  80. package/{MainLayout → src/MainLayout}/styles.js +7 -6
  81. package/src/MainLayout/types.js +171 -0
  82. package/src/MainLayout/use-implied-video-regions.js +17 -0
  83. package/src/MetadataEditorSidebarBox/index.js +160 -0
  84. package/src/PageSelector/index.js +159 -0
  85. package/src/PointDistances/index.js +90 -0
  86. package/src/PreventScrollToParents/index.js +48 -0
  87. package/src/PreventScrollToParents/index.story.js +23 -0
  88. package/src/RegionLabel/index.js +236 -0
  89. package/{RegionLabel → src/RegionLabel}/styles.js +15 -12
  90. package/src/RegionSelectAndTransformBoxes/index.js +236 -0
  91. package/src/RegionSelectorSidebarBox/index.js +220 -0
  92. package/{RegionSelectorSidebarBox → src/RegionSelectorSidebarBox}/styles.js +14 -13
  93. package/src/RegionShapes/index.js +254 -0
  94. package/src/RegionTags/index.js +136 -0
  95. package/src/SettingsDialog/index.js +58 -0
  96. package/src/SettingsProvider/index.js +57 -0
  97. package/src/Shortcuts/ShortcutField.js +44 -0
  98. package/src/Shortcuts/index.js +129 -0
  99. package/src/ShortcutsManager/index.js +162 -0
  100. package/src/Sidebar/index.js +117 -0
  101. package/src/SidebarBoxContainer/index.js +93 -0
  102. package/src/SmallToolButton/index.js +57 -0
  103. package/src/TagsSidebarBox/index.js +93 -0
  104. package/src/TaskDescriptionSidebarBox/index.js +43 -0
  105. package/src/Theme/index.js +36 -0
  106. package/src/VideoOrImageCanvasBackground/index.js +170 -0
  107. package/src/colors.js +32 -0
  108. package/src/hooks/use-colors.js +75 -0
  109. package/src/hooks/use-event-callback.js +11 -0
  110. package/src/hooks/use-exclude-pattern.js +27 -0
  111. package/src/hooks/use-load-image.js +21 -0
  112. package/src/hooks/use-window-size.js +46 -0
  113. package/{hooks → src/hooks}/xpattern.js +1 -1
  114. package/src/hooks/xpattern.png +0 -0
  115. package/src/index.js +18 -0
  116. package/src/lib.js +7 -0
  117. package/src/screenshot.png +0 -0
  118. package/src/site.css +5 -0
  119. package/src/stories.js +2 -0
  120. package/src/utils/blocks-to-article.js +61 -0
  121. package/{utils → src/utils}/blocks-to-article.test.js +8 -5
  122. package/{utils → src/utils}/default-locked-until.js +1 -2
  123. package/{utils → src/utils}/filter-only-unique.js +1 -1
  124. package/src/utils/get-from-local-storage.js +7 -0
  125. package/src/utils/get-hotkey-help-text.js +11 -0
  126. package/src/utils/get-landmarks-with-transform.js +23 -0
  127. package/src/utils/photosToImages.js +67 -0
  128. package/src/utils/regions-groups.js +19 -0
  129. package/src/utils/regions-to-blocks.js +16 -0
  130. package/src/utils/saveable-actions-enum.js +5 -0
  131. package/src/utils/set-in-local-storage.js +6 -0
  132. package/src/utils/sleep.js +3 -0
  133. package/src/utils/uuid-to-hash.js +5 -0
  134. package/Annotator/exampleImages.js +0 -41
  135. package/Annotator/examplePhotos.js +0 -6980
  136. package/Annotator/index.js +0 -417
  137. package/Annotator/reducers/combine-reducers.js +0 -14
  138. package/Annotator/reducers/convert-expanding-line-to-polygon.js +0 -73
  139. package/Annotator/reducers/general-reducer.js +0 -1430
  140. package/Annotator/reducers/get-active-image.js +0 -27
  141. package/Annotator/reducers/get-implied-video-regions.js +0 -180
  142. package/Annotator/reducers/history-handler.js +0 -38
  143. package/Annotator/reducers/image-reducer.js +0 -20
  144. package/Annotator/reducers/video-reducer.js +0 -88
  145. package/ClassSelectionMenu/index.js +0 -140
  146. package/Crosshairs/index.js +0 -53
  147. package/DebugSidebarBox/index.js +0 -20
  148. package/DemoSite/Editor.js +0 -194
  149. package/DemoSite/ErrorBoundaryDialog.js +0 -64
  150. package/DemoSite/index.js +0 -40
  151. package/Editor/annotation-plugin/annotation.js +0 -647
  152. package/Editor/index.js +0 -93
  153. package/Editor/readOnly.js +0 -73
  154. package/Errorer/index.js +0 -11
  155. package/FullImageSegmentationAnnotator/index.js +0 -7
  156. package/GroupSelectorSidebarBox/index.js +0 -63
  157. package/GroupsEditorSidebarBox/index.js +0 -138
  158. package/HelpSidebarBox/index.js +0 -58
  159. package/HighlightBox/index.js +0 -102
  160. package/HistorySidebarBox/index.js +0 -71
  161. package/ImageCanvas/index.js +0 -441
  162. package/ImageCanvas/region-tools.js +0 -165
  163. package/ImageCanvas/use-mouse.js +0 -180
  164. package/ImageCanvas/use-project-box.js +0 -27
  165. package/ImageCanvas/use-wasd-mode.js +0 -62
  166. package/ImageMask/index.js +0 -133
  167. package/ImageMask/load-image.js +0 -25
  168. package/ImageSelectorSidebarBox/index.js +0 -60
  169. package/KeyframeTimeline/get-time-string.js +0 -27
  170. package/KeyframeTimeline/index.js +0 -233
  171. package/KeyframesSelectorSidebarBox/index.js +0 -93
  172. package/LandingPage/index.js +0 -159
  173. package/Locker/index.js +0 -11
  174. package/MainLayout/RightSidebarItemsWrapper.js +0 -19
  175. package/MainLayout/icon-dictionary.js +0 -104
  176. package/MainLayout/index.js +0 -526
  177. package/MainLayout/types.js +0 -0
  178. package/MainLayout/use-implied-video-regions.js +0 -13
  179. package/MetadataEditorSidebarBox/index.js +0 -231
  180. package/PageSelector/index.js +0 -180
  181. package/PointDistances/index.js +0 -73
  182. package/PreventScrollToParents/index.js +0 -51
  183. package/RegionLabel/index.js +0 -232
  184. package/RegionSelectAndTransformBoxes/index.js +0 -169
  185. package/RegionSelectorSidebarBox/index.js +0 -254
  186. package/RegionShapes/index.js +0 -294
  187. package/RegionTags/index.js +0 -144
  188. package/SettingsDialog/index.js +0 -52
  189. package/SettingsProvider/index.js +0 -60
  190. package/Shortcuts/ShortcutField.js +0 -46
  191. package/Shortcuts/index.js +0 -133
  192. package/ShortcutsManager/index.js +0 -155
  193. package/Sidebar/index.js +0 -69
  194. package/SidebarBoxContainer/index.js +0 -93
  195. package/SmallToolButton/index.js +0 -42
  196. package/TagsSidebarBox/index.js +0 -105
  197. package/TaskDescriptionSidebarBox/index.js +0 -58
  198. package/Theme/index.js +0 -30
  199. package/VideoOrImageCanvasBackground/index.js +0 -151
  200. package/colors.js +0 -14
  201. package/hooks/use-colors.js +0 -97
  202. package/hooks/use-event-callback.js +0 -10
  203. package/hooks/use-exclude-pattern.js +0 -24
  204. package/hooks/use-load-image.js +0 -26
  205. package/hooks/use-window-size.js +0 -46
  206. package/index.js +0 -3
  207. package/lib.js +0 -3
  208. package/stories.js +0 -5
  209. package/utils/blocks-to-article.js +0 -60
  210. package/utils/get-from-local-storage.js +0 -7
  211. package/utils/get-hotkey-help-text.js +0 -9
  212. package/utils/get-landmarks-with-transform.js +0 -40
  213. package/utils/photosToImages.js +0 -85
  214. package/utils/regions-groups.js +0 -28
  215. package/utils/regions-to-blocks.js +0 -18
  216. package/utils/saveable-actions-enum.js +0 -3
  217. package/utils/set-in-local-storage.js +0 -3
  218. package/utils/sleep.js +0 -7
  219. package/utils/uuid-to-hash.js +0 -5
  220. /package/{Editor → src/Editor}/annotation-plugin/annotation.css +0 -0
  221. /package/{Errorer → src/Errorer}/errorer.css +0 -0
  222. /package/{Locker → src/Locker}/locker.css +0 -0
  223. /package/{PageSelector → src/PageSelector}/page-selector.css +0 -0
  224. /package/{utils → src/utils}/next-group-id.js +0 -0
@@ -0,0 +1,235 @@
1
+ // @flow
2
+
3
+ import React, { useState } from "react"
4
+ import Button from "@mui/material/Button"
5
+ import { makeStyles } from "@mui/styles"
6
+ import { createTheme, ThemeProvider } from "@mui/material/styles"
7
+ import Select from "react-select"
8
+ import Code from "react-syntax-highlighter"
9
+ import Dialog from "@mui/material/Dialog"
10
+ import DialogTitle from "@mui/material/DialogTitle"
11
+ import DialogContent from "@mui/material/DialogContent"
12
+ import DialogActions from "@mui/material/DialogActions"
13
+ import MonacoEditor from "react-monaco-editor"
14
+
15
+ const theme = createTheme()
16
+ const useStyles = makeStyles((theme) => ({
17
+ editBar: {
18
+ padding: 10,
19
+ borderBottom: "1px solid #ccc",
20
+ backgroundColor: "#f8f8f8",
21
+ display: "flex",
22
+ alignItems: "center",
23
+ "& .button": { margin: 5 },
24
+ },
25
+ select: { width: 240, fontSize: 14 },
26
+ contentArea: {
27
+ padding: 10,
28
+ },
29
+ specificationArea: {
30
+ padding: 10,
31
+ },
32
+ }))
33
+
34
+ const loadSavedInput = () => {
35
+ try {
36
+ return JSON.parse(window.localStorage.getItem("customInput") || "{}")
37
+ } catch (e) {
38
+ return {}
39
+ }
40
+ }
41
+
42
+ export const examples = {
43
+ "Simple Bounding Box": () => ({
44
+ taskDescription:
45
+ "Annotate each image according to this _markdown_ specification.",
46
+ // regionTagList: [],
47
+ // regionClsList: ["hotdog"],
48
+ regionTagList: ["has-bun"],
49
+ regionClsList: ["hotdog", "not-hotdog"],
50
+ enabledTools: ["select", "create-box"],
51
+ // showTags: true,
52
+ images: [
53
+ {
54
+ src: "https://images.unsplash.com/photo-1496905583330-eb54c7e5915a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=634&q=80",
55
+ name: "hot-dogs-1",
56
+ },
57
+ {
58
+ src: "https://www.bianchi.com/wp-content/uploads/2019/07/YPB17I555K.jpg",
59
+ name: "bianchi-oltre-xr4",
60
+ },
61
+ ],
62
+ allowComments: true,
63
+ }),
64
+ "Simple Segmentation": () => ({
65
+ taskDescription:
66
+ "Annotate each image according to this _markdown_ specification.",
67
+ regionClsList: ["car", "truck"],
68
+ enabledTools: ["select", "create-polygon"],
69
+ images: [
70
+ {
71
+ src: "https://images.unsplash.com/photo-1561518776-e76a5e48f731?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=750&q=80",
72
+ name: "car-image-1",
73
+ },
74
+ ],
75
+ }),
76
+ Custom: () => loadSavedInput(),
77
+ }
78
+
79
+ const Editor = ({ onOpenAnnotator, lastOutput }: any) => {
80
+ const c = useStyles()
81
+ const [currentError, changeCurrentError] = useState()
82
+ const [selectedExample, changeSelectedExample] = useState(
83
+ window.localStorage.getItem("customInput")
84
+ ? "Custom"
85
+ : "Simple Bounding Box"
86
+ )
87
+ const [outputDialogOpen, changeOutputOpen] = useState(false)
88
+ const [currentJSONValue, changeCurrentJSONValue] = useState(
89
+ JSON.stringify(examples[selectedExample](), null, " ")
90
+ )
91
+ return (
92
+ <ThemeProvider theme={theme}>
93
+ <div>
94
+ <div className={c.editBar}>
95
+ <h3>React Image Annotate</h3>
96
+ <div style={{ flexGrow: 1 }} />
97
+ <div>
98
+ <div style={{ display: "inline-flex" }}>
99
+ <Select
100
+ className={c.select}
101
+ value={{ label: selectedExample, value: selectedExample }}
102
+ options={Object.keys(examples).map((s) => ({
103
+ label: s,
104
+ value: s,
105
+ }))}
106
+ onChange={(selectedOption) => {
107
+ changeSelectedExample(selectedOption.value)
108
+
109
+ changeCurrentJSONValue(
110
+ JSON.stringify(
111
+ selectedOption.value === "Custom"
112
+ ? loadSavedInput()
113
+ : examples[selectedOption.value](),
114
+ null,
115
+ " "
116
+ )
117
+ )
118
+ }}
119
+ />
120
+ </div>
121
+ <Button
122
+ className="button"
123
+ disabled={!lastOutput}
124
+ onClick={() => changeOutputOpen(true)}
125
+ >
126
+ View Output
127
+ </Button>
128
+ <Button
129
+ className="button"
130
+ variant="outlined"
131
+ disabled={Boolean(currentError)}
132
+ onClick={() => {
133
+ onOpenAnnotator(
134
+ selectedExample === "Custom"
135
+ ? loadSavedInput()
136
+ : examples[selectedExample]
137
+ )
138
+ }}
139
+ >
140
+ Open Annotator
141
+ </Button>
142
+ </div>
143
+ </div>
144
+ <div
145
+ className={c.contentArea}
146
+ style={
147
+ currentError
148
+ ? { border: "2px solid #f00" }
149
+ : { border: "2px solid #fff" }
150
+ }
151
+ >
152
+ <div>
153
+ <MonacoEditor
154
+ value={currentJSONValue}
155
+ language="javascript"
156
+ onChange={(code) => {
157
+ try {
158
+ window.localStorage.setItem(
159
+ "customInput",
160
+ JSON.stringify(JSON.parse(code))
161
+ )
162
+ changeCurrentError(null)
163
+ } catch (e) {
164
+ changeCurrentError(e.toString())
165
+ }
166
+ changeCurrentJSONValue(code)
167
+ }}
168
+ width="100%"
169
+ height="550px"
170
+ />
171
+ </div>
172
+ </div>
173
+ <div className={c.specificationArea}>
174
+ <h2>React Image Annotate Format</h2>
175
+ <Code language="javascript">{`
176
+ {
177
+ taskDescription?: string, // markdown
178
+ regionTagList?: Array<string>,
179
+ regionClsList?: Array<string>,
180
+ imageTagList?: Array<string>,
181
+ imageClsList?: Array<string>,
182
+ // all tools are enabled by default
183
+ enabledTools?: Array< "select" | "create-point" | "create-box" | "create-polygon" | "create-line">,
184
+ selectedImage?: string, // initial selected image
185
+ images: Array<{
186
+ src: string,
187
+ thumbnailSrc?: string, // use this if you are using high-res images
188
+ name: string,
189
+ regions?: Array<{
190
+ id: string | number,
191
+ cls?: string,
192
+ color?: string,
193
+ tags?: Array<string>,
194
+
195
+ // Point
196
+ type: "point",
197
+ x: number, // [0-1] % of image width
198
+ y: number, // [0-1] % of image height
199
+
200
+ // Bounding Box
201
+ type: "box",
202
+ x: number, // [0-1] % of image width
203
+ y: number, // [0-1] % of image height
204
+ w: number, // [0-1] % of image width
205
+ h: number, // [0-1] % of image height
206
+
207
+ // Polygon
208
+ type: "polygon",
209
+ open?: boolean, // should last and first points be connected, default: true
210
+ points: Array<[number, number]> // [0-1] % of image width/height
211
+ }>
212
+ }>,
213
+ }
214
+ `}</Code>
215
+ </div>
216
+ <Dialog fullScreen open={outputDialogOpen}>
217
+ <DialogTitle>React Image Annotate Output</DialogTitle>
218
+ <DialogContent style={{ minWidth: 400 }}>
219
+ <MonacoEditor
220
+ value={JSON.stringify(lastOutput, null, " ")}
221
+ language="javascript"
222
+ width="100%"
223
+ height="550px"
224
+ />
225
+ </DialogContent>
226
+ <DialogActions>
227
+ <Button onClick={() => changeOutputOpen(false)}>Close</Button>
228
+ </DialogActions>
229
+ </Dialog>
230
+ </div>
231
+ </ThemeProvider>
232
+ )
233
+ }
234
+
235
+ export default Editor
@@ -0,0 +1,34 @@
1
+ // @flow
2
+
3
+ import React, { Component } from "react"
4
+ import Dialog from "@mui/material/Dialog"
5
+ import Button from "@mui/material/Button"
6
+ import DialogTitle from "@mui/material/DialogTitle"
7
+ import DialogContent from "@mui/material/DialogContent"
8
+ import DialogActions from "@mui/material/DialogActions"
9
+
10
+ export default class ErrorBoundaryDialog extends Component {
11
+ state = { hasError: false, err: "" }
12
+ componentDidCatch(err, info) {
13
+ this.setState({
14
+ hasError: true,
15
+ err: err.toString() + "\n\n" + info.componentStack,
16
+ })
17
+ }
18
+ render() {
19
+ if (this.state.hasError) {
20
+ return (
21
+ <Dialog open={this.state.hasError} onClose={this.props.onClose}>
22
+ <DialogTitle>Error Loading Annotator</DialogTitle>
23
+ <DialogContent>
24
+ <pre>{this.state.err}</pre>
25
+ </DialogContent>
26
+ <DialogActions>
27
+ <Button onClick={this.props.onClose}>Close</Button>
28
+ </DialogActions>
29
+ </Dialog>
30
+ )
31
+ }
32
+ return this.props.children
33
+ }
34
+ }
@@ -0,0 +1,41 @@
1
+ // @flow
2
+ import React, { useState } from "react"
3
+ import ReactDOM from "react-dom"
4
+ import Editor, { examples } from "./Editor"
5
+ import Annotator from "../Annotator"
6
+ import ErrorBoundaryDialog from "./ErrorBoundaryDialog.js"
7
+
8
+ export default () => {
9
+ const [annotatorOpen, changeAnnotatorOpen] = useState(false)
10
+ const [annotatorProps, changeAnnotatorProps] = useState(examples["Custom"]())
11
+ const [lastOutput, changeLastOutput] = useState()
12
+
13
+ return (
14
+ <div>
15
+ {annotatorOpen ? (
16
+ <ErrorBoundaryDialog
17
+ onClose={() => {
18
+ changeAnnotatorOpen(false)
19
+ }}
20
+ >
21
+ <Annotator
22
+ {...(annotatorProps: any)}
23
+ onExit={(output) => {
24
+ delete (output: any)["lastAction"]
25
+ changeLastOutput(output)
26
+ changeAnnotatorOpen(false)
27
+ }}
28
+ />
29
+ </ErrorBoundaryDialog>
30
+ ) : (
31
+ <Editor
32
+ lastOutput={lastOutput}
33
+ onOpenAnnotator={(props) => {
34
+ changeAnnotatorProps(props)
35
+ changeAnnotatorOpen(true)
36
+ }}
37
+ />
38
+ )}
39
+ </div>
40
+ )
41
+ }
@@ -0,0 +1,10 @@
1
+ // @flow
2
+
3
+ import React from "react"
4
+
5
+ import { storiesOf } from "@storybook/react"
6
+ import { action } from "@storybook/addon-actions"
7
+
8
+ import DemoSite from "./"
9
+
10
+ storiesOf("DemoSite", module).add("Basic", () => <DemoSite />)