@searpent/react-image-annotate 2.0.77 → 2.0.78

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/Annotator/exampleImages.js +41 -0
  2. package/Annotator/examplePhotos.js +6980 -0
  3. package/Annotator/index.js +417 -0
  4. package/Annotator/reducers/combine-reducers.js +14 -0
  5. package/Annotator/reducers/convert-expanding-line-to-polygon.js +73 -0
  6. package/{src/Annotator → Annotator}/reducers/fix-twisted.js +3 -5
  7. package/Annotator/reducers/general-reducer.js +1430 -0
  8. package/Annotator/reducers/get-active-image.js +27 -0
  9. package/Annotator/reducers/get-implied-video-regions.js +180 -0
  10. package/Annotator/reducers/history-handler.js +38 -0
  11. package/Annotator/reducers/image-reducer.js +20 -0
  12. package/Annotator/reducers/video-reducer.js +88 -0
  13. package/ClassSelectionMenu/index.js +140 -0
  14. package/Crosshairs/index.js +53 -0
  15. package/DebugSidebarBox/index.js +20 -0
  16. package/DemoSite/Editor.js +194 -0
  17. package/DemoSite/ErrorBoundaryDialog.js +64 -0
  18. package/DemoSite/index.js +40 -0
  19. package/Editor/annotation-plugin/annotation.js +697 -0
  20. package/Editor/index.js +93 -0
  21. package/Editor/readOnly.js +123 -0
  22. package/{src/Editor → Editor}/tools.js +2 -3
  23. package/Errorer/index.js +11 -0
  24. package/FullImageSegmentationAnnotator/index.js +7 -0
  25. package/GroupSelectorSidebarBox/index.js +63 -0
  26. package/GroupsEditorSidebarBox/index.js +138 -0
  27. package/HelpSidebarBox/index.js +58 -0
  28. package/HighlightBox/index.js +102 -0
  29. package/HistorySidebarBox/index.js +71 -0
  30. package/ImageCanvas/index.js +441 -0
  31. package/ImageCanvas/region-tools.js +165 -0
  32. package/{src/ImageCanvas → ImageCanvas}/styles.js +12 -8
  33. package/ImageCanvas/use-mouse.js +180 -0
  34. package/ImageCanvas/use-project-box.js +27 -0
  35. package/ImageCanvas/use-wasd-mode.js +62 -0
  36. package/ImageMask/index.js +133 -0
  37. package/ImageMask/load-image.js +25 -0
  38. package/ImageSelectorSidebarBox/index.js +60 -0
  39. package/KeyframeTimeline/get-time-string.js +27 -0
  40. package/KeyframeTimeline/index.js +233 -0
  41. package/KeyframesSelectorSidebarBox/index.js +93 -0
  42. package/LandingPage/index.js +159 -0
  43. package/Locker/index.js +11 -0
  44. package/MainLayout/RightSidebarItemsWrapper.js +19 -0
  45. package/MainLayout/icon-dictionary.js +104 -0
  46. package/MainLayout/index.js +526 -0
  47. package/{src/MainLayout → MainLayout}/styles.js +6 -7
  48. package/MainLayout/types.js +0 -0
  49. package/MainLayout/use-implied-video-regions.js +13 -0
  50. package/MetadataEditorSidebarBox/index.js +231 -0
  51. package/PageSelector/index.js +180 -0
  52. package/PointDistances/index.js +73 -0
  53. package/PreventScrollToParents/index.js +51 -0
  54. package/RegionLabel/index.js +232 -0
  55. package/{src/RegionLabel → RegionLabel}/styles.js +12 -15
  56. package/RegionSelectAndTransformBoxes/index.js +169 -0
  57. package/RegionSelectorSidebarBox/index.js +254 -0
  58. package/{src/RegionSelectorSidebarBox → RegionSelectorSidebarBox}/styles.js +13 -14
  59. package/RegionShapes/index.js +294 -0
  60. package/RegionTags/index.js +144 -0
  61. package/SettingsDialog/index.js +52 -0
  62. package/SettingsProvider/index.js +60 -0
  63. package/Shortcuts/ShortcutField.js +46 -0
  64. package/Shortcuts/index.js +133 -0
  65. package/ShortcutsManager/index.js +155 -0
  66. package/Sidebar/index.js +69 -0
  67. package/SidebarBoxContainer/index.js +93 -0
  68. package/SmallToolButton/index.js +42 -0
  69. package/TagsSidebarBox/index.js +105 -0
  70. package/TaskDescriptionSidebarBox/index.js +58 -0
  71. package/Theme/index.js +30 -0
  72. package/VideoOrImageCanvasBackground/index.js +151 -0
  73. package/colors.js +14 -0
  74. package/hooks/use-colors.js +127 -0
  75. package/hooks/use-event-callback.js +10 -0
  76. package/hooks/use-exclude-pattern.js +24 -0
  77. package/hooks/use-load-image.js +26 -0
  78. package/hooks/use-window-size.js +46 -0
  79. package/{src/hooks → hooks}/xpattern.js +1 -1
  80. package/index.js +3 -0
  81. package/lib.js +3 -0
  82. package/package.json +1 -1
  83. package/stories.js +5 -0
  84. package/utils/blocks-to-article.js +60 -0
  85. package/{src/utils → utils}/blocks-to-article.test.js +5 -8
  86. package/{src/utils → utils}/default-locked-until.js +2 -1
  87. package/{src/utils → utils}/filter-only-unique.js +1 -1
  88. package/utils/get-from-local-storage.js +7 -0
  89. package/utils/get-hotkey-help-text.js +9 -0
  90. package/utils/get-landmarks-with-transform.js +40 -0
  91. package/utils/photosToImages.js +85 -0
  92. package/utils/regions-groups.js +28 -0
  93. package/utils/regions-to-blocks.js +18 -0
  94. package/utils/saveable-actions-enum.js +3 -0
  95. package/utils/set-in-local-storage.js +3 -0
  96. package/utils/sleep.js +7 -0
  97. package/utils/uuid-to-hash.js +5 -0
  98. package/.babelrc +0 -6
  99. package/.env +0 -1
  100. package/.flowconfig +0 -2
  101. package/.github/workflows/release-on-master.yml +0 -32
  102. package/.github/workflows/test.yml +0 -16
  103. package/.prettierrc +0 -3
  104. package/.releaserc.js +0 -18
  105. package/.storybook/addons.js +0 -2
  106. package/.storybook/config.js +0 -16
  107. package/LICENSE +0 -21
  108. package/public/favicon.ico +0 -0
  109. package/public/index.html +0 -38
  110. package/src/Annotator/bike-pic.png +0 -0
  111. package/src/Annotator/bike-pic2.png +0 -0
  112. package/src/Annotator/dab-keyframes.story.json +0 -1
  113. package/src/Annotator/exampleImages.js +0 -48
  114. package/src/Annotator/examplePhotos.js +0 -7603
  115. package/src/Annotator/index.js +0 -380
  116. package/src/Annotator/index.story.js +0 -899
  117. package/src/Annotator/poses.story.js +0 -150
  118. package/src/Annotator/reducers/combine-reducers.js +0 -7
  119. package/src/Annotator/reducers/convert-expanding-line-to-polygon.js +0 -53
  120. package/src/Annotator/reducers/general-reducer.js +0 -1228
  121. package/src/Annotator/reducers/get-active-image.js +0 -21
  122. package/src/Annotator/reducers/get-implied-video-regions.js +0 -115
  123. package/src/Annotator/reducers/history-handler.js +0 -60
  124. package/src/Annotator/reducers/image-reducer.js +0 -23
  125. package/src/Annotator/reducers/video-reducer.js +0 -85
  126. package/src/Annotator/video.story.js +0 -51
  127. package/src/ClassSelectionMenu/index.js +0 -112
  128. package/src/Crosshairs/index.js +0 -64
  129. package/src/DebugSidebarBox/index.js +0 -36
  130. package/src/DemoSite/Editor.js +0 -235
  131. package/src/DemoSite/ErrorBoundaryDialog.js +0 -34
  132. package/src/DemoSite/index.js +0 -41
  133. package/src/DemoSite/index.story.js +0 -10
  134. package/src/DemoSite/simple-segmentation-example.json +0 -572
  135. package/src/Editor/annotation-plugin/annotation.js +0 -546
  136. package/src/Editor/index.js +0 -50
  137. package/src/Editor/readOnly.js +0 -31
  138. package/src/Errorer/index.js +0 -13
  139. package/src/FullImageSegmentationAnnotator/hard1.story.jpg +0 -0
  140. package/src/FullImageSegmentationAnnotator/hard2.story.jpg +0 -0
  141. package/src/FullImageSegmentationAnnotator/hard3.story.jpg +0 -0
  142. package/src/FullImageSegmentationAnnotator/index.js +0 -7
  143. package/src/FullImageSegmentationAnnotator/index.story.js +0 -177
  144. package/src/FullImageSegmentationAnnotator/orange.story.png +0 -0
  145. package/src/GroupSelectorSidebarBox/index.js +0 -48
  146. package/src/GroupsEditorSidebarBox/index.js +0 -108
  147. package/src/HelpSidebarBox/index.js +0 -43
  148. package/src/HighlightBox/index.js +0 -143
  149. package/src/HistorySidebarBox/index.js +0 -78
  150. package/src/ImageCanvas/dancing-man.story.jpg +0 -0
  151. package/src/ImageCanvas/index.js +0 -515
  152. package/src/ImageCanvas/index.story.js +0 -314
  153. package/src/ImageCanvas/mouse_mask.story.png +0 -0
  154. package/src/ImageCanvas/region-tools.js +0 -171
  155. package/src/ImageCanvas/seves_desk.story.jpg +0 -0
  156. package/src/ImageCanvas/use-mouse.js +0 -168
  157. package/src/ImageCanvas/use-project-box.js +0 -23
  158. package/src/ImageCanvas/use-wasd-mode.js +0 -50
  159. package/src/ImageMask/index.js +0 -127
  160. package/src/ImageMask/load-image.js +0 -32
  161. package/src/ImageSelectorSidebarBox/index.js +0 -54
  162. package/src/KeyframeTimeline/get-time-string.js +0 -25
  163. package/src/KeyframeTimeline/index.js +0 -223
  164. package/src/KeyframesSelectorSidebarBox/index.js +0 -93
  165. package/src/LandingPage/content.md +0 -57
  166. package/src/LandingPage/github-markdown.css +0 -964
  167. package/src/LandingPage/index.js +0 -147
  168. package/src/Locker/index.js +0 -13
  169. package/src/MainLayout/RightSidebarItemsWrapper.js +0 -21
  170. package/src/MainLayout/icon-dictionary.js +0 -79
  171. package/src/MainLayout/index.js +0 -564
  172. package/src/MainLayout/index.story.js +0 -240
  173. package/src/MainLayout/types.js +0 -171
  174. package/src/MainLayout/use-implied-video-regions.js +0 -17
  175. package/src/MetadataEditorSidebarBox/index.js +0 -160
  176. package/src/PageSelector/index.js +0 -159
  177. package/src/PointDistances/index.js +0 -90
  178. package/src/PreventScrollToParents/index.js +0 -48
  179. package/src/PreventScrollToParents/index.story.js +0 -23
  180. package/src/RegionLabel/index.js +0 -236
  181. package/src/RegionSelectAndTransformBoxes/index.js +0 -236
  182. package/src/RegionSelectorSidebarBox/index.js +0 -220
  183. package/src/RegionShapes/index.js +0 -254
  184. package/src/RegionTags/index.js +0 -136
  185. package/src/SettingsDialog/index.js +0 -58
  186. package/src/SettingsProvider/index.js +0 -57
  187. package/src/Shortcuts/ShortcutField.js +0 -44
  188. package/src/Shortcuts/index.js +0 -129
  189. package/src/ShortcutsManager/index.js +0 -162
  190. package/src/Sidebar/index.js +0 -117
  191. package/src/SidebarBoxContainer/index.js +0 -93
  192. package/src/SmallToolButton/index.js +0 -57
  193. package/src/TagsSidebarBox/index.js +0 -93
  194. package/src/TaskDescriptionSidebarBox/index.js +0 -43
  195. package/src/Theme/index.js +0 -36
  196. package/src/VideoOrImageCanvasBackground/index.js +0 -170
  197. package/src/colors.js +0 -32
  198. package/src/hooks/use-colors.js +0 -95
  199. package/src/hooks/use-event-callback.js +0 -11
  200. package/src/hooks/use-exclude-pattern.js +0 -27
  201. package/src/hooks/use-load-image.js +0 -21
  202. package/src/hooks/use-window-size.js +0 -46
  203. package/src/hooks/xpattern.png +0 -0
  204. package/src/index.js +0 -18
  205. package/src/lib.js +0 -7
  206. package/src/screenshot.png +0 -0
  207. package/src/site.css +0 -5
  208. package/src/stories.js +0 -2
  209. package/src/utils/blocks-to-article.js +0 -61
  210. package/src/utils/get-from-local-storage.js +0 -7
  211. package/src/utils/get-hotkey-help-text.js +0 -11
  212. package/src/utils/get-landmarks-with-transform.js +0 -23
  213. package/src/utils/photosToImages.js +0 -67
  214. package/src/utils/regions-groups.js +0 -19
  215. package/src/utils/regions-to-blocks.js +0 -16
  216. package/src/utils/saveable-actions-enum.js +0 -5
  217. package/src/utils/set-in-local-storage.js +0 -6
  218. package/src/utils/sleep.js +0 -3
  219. package/src/utils/uuid-to-hash.js +0 -5
  220. /package/{src/Editor → Editor}/annotation-plugin/annotation.css +0 -0
  221. /package/{src/Errorer → Errorer}/errorer.css +0 -0
  222. /package/{src/Locker → Locker}/locker.css +0 -0
  223. /package/{src/PageSelector → PageSelector}/page-selector.css +0 -0
  224. /package/{src/utils → utils}/next-group-id.js +0 -0
@@ -1,177 +0,0 @@
1
- // @flow
2
-
3
- import React from "react"
4
-
5
- import { storiesOf } from "@storybook/react"
6
- import { action } from "@storybook/addon-actions"
7
- import orange from "./orange.story.png"
8
- import hard1 from "./hard1.story.jpg"
9
- import hard2 from "./hard2.story.jpg"
10
- import hard3 from "./hard3.story.jpg"
11
-
12
- import FullImageSegmentationAnnotator from "./"
13
-
14
- storiesOf("FullImageSegmentationAnnotator.Basic", module)
15
- .add("Orange 2 Class", () => (
16
- <div style={{ width: "95vw", height: "95vh" }}>
17
- <FullImageSegmentationAnnotator
18
- images={[
19
- {
20
- name: "Seve's Desk",
21
- // src:
22
- // "https://a.allegroimg.com/s128/113a6e/09d2c0ed4f278610e555c95b1d50/Rama-BIANCHI-OLTRE-XR4-DISC-carbon-Vision-ACR-51cm-Dedykowany-a-do-kolarstwo-szosowe",
23
- // src: "https://i.imgur.com/Dv5lkQZ.png",
24
- src: orange,
25
- regions: [
26
- [1, 40, 280],
27
- [1, 10, 10],
28
- [1, 240, 300],
29
- ]
30
- .map(([cls, y, x], i) => ({
31
- cls: ["fg", "bg"][cls],
32
- color: "hsl(162,100%,50%)",
33
- editingLabels: false,
34
- highlighted: false,
35
- id: "a" + i,
36
- type: "point",
37
- x: x / 320,
38
- y: y / 249,
39
- }))
40
- .concat([
41
- {
42
- cls: "fg",
43
- color: "hsl(162,100%,50%)",
44
- editingLabels: false,
45
- highlighted: false,
46
- id: "bb",
47
- type: "box",
48
- x: 0.3,
49
- y: 0.25,
50
- w: 0.35,
51
- h: 0.38,
52
- },
53
- ]),
54
- },
55
- ]}
56
- regionClsList={["bg", "fg"]}
57
- onExit={action("onExit")}
58
- />
59
- </div>
60
- ))
61
- .add("S3 CORS domain", () => (
62
- <div style={{ width: "95vw", height: "95vh" }}>
63
- <FullImageSegmentationAnnotator
64
- images={[
65
- {
66
- name: "Seve's Desk",
67
- src: "https://s3.amazonaws.com/datasets.workaround.online/faces/010041.jpg",
68
- regions: [
69
- [0, 100, 125],
70
- [0, 100, 150],
71
- [1, 40, 280],
72
- [1, 10, 10],
73
- [1, 240, 300],
74
- ].map(([cls, y, x], i) => ({
75
- cls: ["fg", "bg"][cls],
76
- color: "hsl(162,100%,50%)",
77
- editingLabels: false,
78
- highlighted: false,
79
- id: "a" + i,
80
- type: "point",
81
- x: x / 320,
82
- y: y / 249,
83
- })),
84
- },
85
- ]}
86
- regionClsList={["bg", "fg"]}
87
- onExit={action("onExit")}
88
- />
89
- </div>
90
- ))
91
- .add("Orange 3 Class", () => (
92
- <div style={{ width: "95vw", height: "95vh" }}>
93
- <FullImageSegmentationAnnotator
94
- images={[
95
- {
96
- name: "Seve's Desk",
97
- src: orange,
98
- regions: [
99
- [0, 100, 125],
100
- [0, 100, 150],
101
- [1, 40, 280],
102
- [1, 10, 10],
103
- [1, 240, 300],
104
- ].map(([cls, y, x], i) => ({
105
- cls: ["orange", "bg", "hand"][cls],
106
- color: "hsl(162,100%,50%)",
107
- editingLabels: false,
108
- highlighted: false,
109
- id: "a" + i,
110
- type: "point",
111
- x: x / 320,
112
- y: y / 249,
113
- })),
114
- },
115
- ]}
116
- regionClsList={["bg", "orange", "hand"]}
117
- onExit={action("onExit")}
118
- />
119
- </div>
120
- ))
121
- .add("Hard 1, 8 Class, Simple Mode", () => (
122
- <div style={{ width: "95vw", height: "95vh" }}>
123
- <FullImageSegmentationAnnotator
124
- images={[
125
- {
126
- name: "Hard",
127
- src: hard1,
128
- },
129
- ]}
130
- regionClsList={["bg", "1", "2", "3", "4", "5", "6", "7", "8"]}
131
- onExit={action("onExit")}
132
- autoSegmentationOptions={{ type: "simple" }}
133
- />
134
- </div>
135
- ))
136
- .add("Hard 1, 8 Class", () => (
137
- <div style={{ width: "95vw", height: "95vh" }}>
138
- <FullImageSegmentationAnnotator
139
- images={[
140
- {
141
- name: "Hard",
142
- src: hard1,
143
- },
144
- ]}
145
- regionClsList={["1", "2", "3", "4", "5", "6", "7", "8"]}
146
- onExit={action("onExit")}
147
- />
148
- </div>
149
- ))
150
- .add("Hard 2, 8 Class", () => (
151
- <div style={{ width: "95vw", height: "95vh" }}>
152
- <FullImageSegmentationAnnotator
153
- images={[
154
- {
155
- name: "Really Hard",
156
- src: hard2,
157
- },
158
- ]}
159
- regionClsList={["1", "2", "3", "4", "5", "6", "7", "8"]}
160
- onExit={action("onExit")}
161
- />
162
- </div>
163
- ))
164
- .add("Hard 3, 8 Class", () => (
165
- <div style={{ width: "95vw", height: "95vh" }}>
166
- <FullImageSegmentationAnnotator
167
- images={[
168
- {
169
- name: "Extremely Hard",
170
- src: hard3,
171
- },
172
- ]}
173
- regionClsList={["1", "2", "3", "4", "5", "6", "7", "8"]}
174
- onExit={action("onExit")}
175
- />
176
- </div>
177
- ))
@@ -1,48 +0,0 @@
1
- // @flow
2
-
3
- import React, { memo } from "react"
4
- import { makeStyles } from "@mui/styles"
5
- import { createTheme, ThemeProvider } from "@mui/material/styles"
6
- import SidebarBoxContainer from "../SidebarBoxContainer"
7
- import CollectionsIcon from "@mui/icons-material/Collections"
8
- import { grey } from "@mui/material/colors"
9
- import List from "@mui/material/List"
10
- import ListItem from "@mui/material/ListItem"
11
- import ListItemText from "@mui/material/ListItemText"
12
- import uuidToHash from '../utils/uuid-to-hash';
13
-
14
- const theme = createTheme()
15
- const useStyles = makeStyles((theme) => ({
16
- img: { width: 40, height: 40, borderRadius: 8 },
17
- }))
18
-
19
- export const GroupSelectorSidebarBox = ({ title, subtitle, groups, onSelect, selectedGroupId }) => {
20
- const classes = useStyles()
21
- return (
22
- <ThemeProvider theme={theme}>
23
- <SidebarBoxContainer
24
- title={title || ''}
25
- subTitle={subtitle || ''}
26
- icon={<CollectionsIcon style={{ color: grey[700] }} />}
27
- >
28
- <List>
29
- {groups.map(({ id, title: groupTitle, subtitle: groupSubtitle, color }, i) => (
30
- <ListItem button onClick={() => onSelect(id)} dense key={id} style={{
31
- backgroundColor: id === selectedGroupId ? '#bbdefb' : null
32
- }}>
33
- <ListItemText
34
- primary={<strong style={{
35
- color
36
- }}>{uuidToHash(groupTitle)}</strong>}
37
- secondary={groupSubtitle}
38
- />
39
- </ListItem>
40
- ))}
41
- </List>
42
-
43
- </SidebarBoxContainer>
44
- </ThemeProvider>
45
- )
46
- }
47
-
48
- export default GroupSelectorSidebarBox
@@ -1,108 +0,0 @@
1
- // @flow
2
-
3
- import React, { memo, useState } from "react"
4
- import SidebarBoxContainer from "../SidebarBoxContainer"
5
- import FilterNoneIcon from '@mui/icons-material/FilterNone';
6
- import { styled } from "@mui/material/styles"
7
- import { createTheme, ThemeProvider } from "@mui/material/styles"
8
- import { grey } from "@mui/material/colors"
9
- import uuidToHash from "../utils/uuid-to-hash";
10
-
11
- const theme = createTheme()
12
-
13
- const GroupItemDiv = styled("div")(({ theme }) => ({
14
- display: "flex",
15
- flexDirection: "column",
16
- marginBottom: "1rem",
17
- "& > label": {
18
- fontSize: "1rem",
19
- marginBottom: ".5rem",
20
- textTransform: "capitalize"
21
- }
22
- }))
23
-
24
- const GroupItem = ({ group }) => {
25
- return (
26
- <GroupItemDiv>
27
- {uuidToHash(group.id)}
28
- </GroupItemDiv>
29
- )
30
- }
31
-
32
- const GroupList = ({ groups }) => (
33
- <div>
34
- <h2>Groups</h2>
35
- {
36
- groups.map((g, idx) => <GroupItem key={`${g}-${idx}`} group={g} />)
37
- }
38
- </div>
39
- )
40
-
41
- const AddGroupFormDiv = styled("div")(({ theme }) => ({
42
- display: "flex",
43
- flexDirection: "row",
44
- }))
45
-
46
- const AddGroupFrom = ({ onAddGroup }) => {
47
- const [value, setValue] = useState("");
48
-
49
- const handleChange = (e) => {
50
- setValue(e.target.value)
51
- }
52
-
53
- const handleSubmit = (e) => {
54
- e.preventDefault();
55
- onAddGroup(value);
56
- setValue('')
57
- }
58
-
59
- return (
60
- <AddGroupFormDiv>
61
- <form onSubmit={handleSubmit} style={{
62
- display: "flex",
63
- paddingRight: "6px",
64
- }}>
65
- <input type="text" value={value} name="new-group" placeholder="New group name" onChange={handleChange} style={{
66
- marginRight: "1rem",
67
- }} />
68
- <input type="submit" value="Create group" />
69
- </form >
70
- </AddGroupFormDiv>
71
- )
72
- }
73
-
74
-
75
- const DivContainer = styled("div")(({ theme }) => ({
76
- paddingLeft: 16,
77
- paddingRight: 16,
78
- fontSize: 12,
79
- "& h1": { fontSize: 18 },
80
- "& h2": { fontSize: 14 },
81
- "& h3": { fontSize: 12 },
82
- "& h4": { fontSize: 12 },
83
- "& h5": { fontSize: 12 },
84
- "& h6": { fontSize: 12 },
85
- "& p": { fontSize: 12 },
86
- "& a": {},
87
- "& img": { width: "100%" },
88
- }))
89
-
90
- export const GroupsEditorSidebarBox = ({ groups, onAddGroup }) => {
91
- return (
92
- <ThemeProvider theme={theme}>
93
- <SidebarBoxContainer
94
- title="Groups"
95
- icon={<FilterNoneIcon style={{ color: grey[700] }} />}
96
- expandedByDefault={true}
97
- >
98
- <DivContainer>
99
- <h2>Add new group</h2>
100
- <AddGroupFrom onAddGroup={onAddGroup} />
101
- <GroupList groups={groups} />
102
- </DivContainer>
103
- </SidebarBoxContainer>
104
- </ThemeProvider>
105
- )
106
- }
107
-
108
- export default memo(GroupsEditorSidebarBox)
@@ -1,43 +0,0 @@
1
- // @flow
2
-
3
- import React, { memo } from "react"
4
- import SidebarBoxContainer from "../SidebarBoxContainer"
5
- import HelpIcon from '@mui/icons-material/Help';
6
- import { styled } from "@mui/material/styles"
7
- import { createTheme, ThemeProvider } from "@mui/material/styles"
8
- import { grey } from "@mui/material/colors"
9
- import Markdown from "react-markdown"
10
-
11
- const theme = createTheme()
12
- const MarkdownContainer = styled("div")(({ theme }) => ({
13
- paddingLeft: 16,
14
- paddingRight: 16,
15
- fontSize: 12,
16
- "& h1": { fontSize: 18 },
17
- "& h2": { fontSize: 14 },
18
- "& h3": { fontSize: 12 },
19
- "& h4": { fontSize: 12 },
20
- "& h5": { fontSize: 12 },
21
- "& h6": { fontSize: 12 },
22
- "& p": { fontSize: 12 },
23
- "& a": {},
24
- "& img": { width: "100%" },
25
- }))
26
-
27
- export const HelpSidebarBox = ({ help }) => {
28
- return (
29
- <ThemeProvider theme={theme}>
30
- <SidebarBoxContainer
31
- title="Help"
32
- icon={<HelpIcon style={{ color: grey[700] }} />}
33
- expandedByDefault={help && help !== "" ? false : true}
34
- >
35
- <MarkdownContainer>
36
- <Markdown source={help} />
37
- </MarkdownContainer>
38
- </SidebarBoxContainer>
39
- </ThemeProvider>
40
- )
41
- }
42
-
43
- export default memo(HelpSidebarBox)
@@ -1,143 +0,0 @@
1
- // @flow
2
-
3
- import React from "react"
4
- import classnames from "classnames"
5
- import { makeStyles } from "@mui/styles"
6
- import { createTheme, ThemeProvider } from "@mui/material/styles"
7
-
8
- const theme = createTheme()
9
- const useStyles = makeStyles((theme) => ({
10
- "@keyframes borderDance": {
11
- from: { strokeDashoffset: 0 },
12
- to: { strokeDashoffset: 100 },
13
- },
14
- highlightBox: {
15
- zIndex: 2,
16
- transition: "opacity 500ms",
17
- "&.highlighted": {
18
- zIndex: 3,
19
- },
20
- "&:not(.highlighted)": {
21
- opacity: 0,
22
- },
23
- "&:not(.highlighted):hover": {
24
- opacity: 0.6,
25
- },
26
- "& path": {
27
- // NOTE: attributes below commnted because resetting screen caused old frame to highlight
28
- // vectorEffect: "non-scaling-stroke",
29
- // strokeWidth: 2,
30
- // stroke: "#FFF",
31
- // strokeDasharray: 5,
32
- fill: "none",
33
- animationName: "$borderDance",
34
- animationDuration: "4s",
35
- animationTimingFunction: "linear",
36
- animationIterationCount: "infinite",
37
- animationPlayState: "running",
38
- },
39
- },
40
- }))
41
-
42
- export const HighlightBox = ({
43
- mouseEvents,
44
- dragWithPrimary,
45
- zoomWithPrimary,
46
- createWithPrimary,
47
- onBeginMovePoint,
48
- onSelectRegion,
49
- region: r,
50
- pbox,
51
- }: {
52
- mouseEvents: any,
53
- dragWithPrimary: boolean,
54
- zoomWithPrimary: boolean,
55
- createWithPrimary: boolean,
56
- onBeginMovePoint: Function,
57
- onSelectRegion: Function,
58
- region: any,
59
- pbox: { x: number, y: number, w: number, h: number },
60
- }) => {
61
- const classes = useStyles()
62
- if (!pbox.w || pbox.w === Infinity) return null
63
- if (!pbox.h || pbox.h === Infinity) return null
64
- if (r.unfinished) return null
65
-
66
- const styleCoords =
67
- r.type === "point"
68
- ? {
69
- left: pbox.x + pbox.w / 2 - 30,
70
- top: pbox.y + pbox.h / 2 - 30,
71
- width: 60,
72
- height: 60,
73
- }
74
- : {
75
- left: pbox.x - 5,
76
- top: pbox.y - 5,
77
- width: pbox.w + 10,
78
- height: pbox.h + 10,
79
- }
80
-
81
- const pathD =
82
- r.type === "point"
83
- ? `M5,5 L${styleCoords.width - 5} 5L${styleCoords.width - 5} ${styleCoords.height - 5
84
- }L5 ${styleCoords.height - 5}Z`
85
- : `M5,5 L${pbox.w + 5},5 L${pbox.w + 5},${pbox.h + 5} L5,${pbox.h + 5} Z`
86
-
87
- return (
88
- <ThemeProvider theme={theme}>
89
- <svg
90
- key={r.id}
91
- className={classnames(classes.highlightBox, {
92
- highlighted: r.highlighted,
93
- })}
94
- {...mouseEvents}
95
- {...(!zoomWithPrimary && !dragWithPrimary
96
- ? {
97
- onMouseDown: (e) => {
98
- if (
99
- !r.locked &&
100
- r.type === "point" &&
101
- r.highlighted &&
102
- e.button === 0
103
- ) {
104
- return onBeginMovePoint(r)
105
- }
106
- if (e.button === 0 && !createWithPrimary)
107
- return onSelectRegion({ ...r, ctrlKey: e.ctrlKey })
108
- mouseEvents.onMouseDown(e)
109
- },
110
- }
111
- : {})}
112
- style={{
113
- ...(r.highlighted
114
- ? {
115
- pointerEvents: r.type !== "point" ? "none" : undefined,
116
- cursor: "grab",
117
- }
118
- : {
119
- cursor: !(
120
- zoomWithPrimary ||
121
- dragWithPrimary ||
122
- createWithPrimary
123
- )
124
- ? "pointer"
125
- : undefined,
126
- pointerEvents:
127
- zoomWithPrimary ||
128
- dragWithPrimary ||
129
- (createWithPrimary && !r.highlighted)
130
- ? "none"
131
- : undefined,
132
- }),
133
- position: "absolute",
134
- ...styleCoords,
135
- }}
136
- >
137
- <path d={pathD} />
138
- </svg>
139
- </ThemeProvider>
140
- )
141
- }
142
-
143
- export default HighlightBox
@@ -1,78 +0,0 @@
1
- // @flow
2
-
3
- import React, { setState, memo } from "react"
4
- import { makeStyles } from "@mui/styles"
5
- import { createTheme, ThemeProvider } from "@mui/material/styles"
6
- import SidebarBoxContainer from "../SidebarBoxContainer"
7
- import HistoryIcon from "@mui/icons-material/History"
8
- import List from "@mui/material/List"
9
- import ListItem from "@mui/material/ListItem"
10
- import ListItemText from "@mui/material/ListItemText"
11
- import IconButton from "@mui/material/IconButton"
12
- import ListItemSecondaryAction from "@mui/material/ListItemSecondaryAction"
13
- import UndoIcon from "@mui/icons-material/Undo"
14
- import moment from "moment"
15
- import { grey } from "@mui/material/colors"
16
- import isEqual from "lodash/isEqual"
17
- import Box from "@mui/material/Box"
18
-
19
- const theme = createTheme()
20
- const useStyles = makeStyles((theme) => ({
21
- emptyText: {
22
- fontSize: 14,
23
- fontWeight: "bold",
24
- color: grey[500],
25
- textAlign: "center",
26
- padding: 20,
27
- },
28
- }))
29
-
30
- const listItemTextStyle = { paddingLeft: 16 }
31
-
32
- export const HistorySidebarBox = ({
33
- history,
34
- onRestoreHistory,
35
- }: {
36
- history: Array<{ name: string, time: Date }>,
37
- }) => {
38
- const classes = useStyles()
39
-
40
- return (
41
- <ThemeProvider theme={theme}>
42
- <SidebarBoxContainer
43
- title="History"
44
- icon={<HistoryIcon style={{ color: grey[700] }} />}
45
- expandedByDefault
46
- >
47
- <List>
48
- {history.length === 0 && (
49
- <div className={classes.emptyText}>No History Yet</div>
50
- )}
51
- {history.map(({ name, time }, i) => (
52
- <ListItem button dense key={i}>
53
- <ListItemText
54
- style={listItemTextStyle}
55
- primary={name}
56
- secondary={moment(time).format("LT")}
57
- />
58
- {i === 0 && (
59
- <ListItemSecondaryAction onClick={() => onRestoreHistory()}>
60
- <IconButton>
61
- <UndoIcon />
62
- </IconButton>
63
- </ListItemSecondaryAction>
64
- )}
65
- </ListItem>
66
- ))}
67
- </List>
68
- </SidebarBoxContainer>
69
- </ThemeProvider>
70
- )
71
- }
72
-
73
- export default memo(HistorySidebarBox, (prevProps, nextProps) =>
74
- isEqual(
75
- prevProps.history.map((a) => [a.name, a.time]),
76
- nextProps.history.map((a) => [a.name, a.time])
77
- )
78
- )