lost-sia 2.0.1-alpha8 → 3.0.0

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 (280) hide show
  1. package/README.md +4 -0
  2. package/dist/Annotation/logic/Annotation.d.ts +17 -0
  3. package/dist/Annotation/logic/Annotation.js +1 -0
  4. package/dist/Annotation/ui/AnnotationComponent.d.ts +24 -0
  5. package/dist/Annotation/ui/AnnotationComponent.js +1 -0
  6. package/dist/Annotation/ui/atoms/AnnoBar.d.ts +15 -0
  7. package/dist/Annotation/ui/atoms/AnnoBar.js +1 -0
  8. package/dist/Annotation/ui/atoms/DaviIcon.d.ts +9 -0
  9. package/dist/Annotation/ui/atoms/DaviIcon.js +19 -0
  10. package/dist/Annotation/ui/atoms/Edge.d.ts +17 -0
  11. package/dist/Annotation/ui/atoms/Edge.js +1 -0
  12. package/dist/Annotation/ui/atoms/Node.d.ts +17 -0
  13. package/dist/Annotation/ui/atoms/Node.js +1 -0
  14. package/dist/Annotation/ui/atoms/PolygonArea.d.ts +16 -0
  15. package/dist/Annotation/ui/atoms/PolygonArea.js +1 -0
  16. package/dist/Annotation/ui/tools/BBox.d.ts +21 -0
  17. package/dist/Annotation/ui/tools/BBox.js +1 -0
  18. package/dist/Annotation/ui/tools/Line.d.ts +21 -0
  19. package/dist/Annotation/ui/tools/Line.js +1 -0
  20. package/dist/Annotation/ui/tools/Point.d.ts +16 -0
  21. package/dist/Annotation/ui/tools/Point.js +1 -0
  22. package/dist/Annotation/ui/tools/Polygon.d.ts +23 -0
  23. package/dist/Annotation/ui/tools/Polygon.js +1 -0
  24. package/dist/Canvas/Canvas.d.ts +31 -0
  25. package/dist/Canvas/Canvas.js +1 -0
  26. package/dist/Canvas/LabelInput.d.ts +11 -0
  27. package/dist/Canvas/LabelInput.js +1 -0
  28. package/dist/IconButton.d.ts +25 -0
  29. package/dist/IconButton.js +1 -0
  30. package/dist/Sia.d.ts +33 -0
  31. package/dist/Sia.js +1 -0
  32. package/dist/Toolbar/Toolbar.d.ts +21 -0
  33. package/dist/Toolbar/Toolbar.js +1 -0
  34. package/dist/Toolbar/ToolbarItems/AccessibilityTools.d.ts +7 -0
  35. package/dist/Toolbar/ToolbarItems/AccessibilityTools.js +1 -0
  36. package/dist/Toolbar/ToolbarItems/AnnoToolSelector.d.ts +11 -0
  37. package/dist/Toolbar/ToolbarItems/AnnoToolSelector.js +1 -0
  38. package/dist/Toolbar/ToolbarItems/ImageToolItems/ImageLabelInput.d.ts +11 -0
  39. package/dist/Toolbar/ToolbarItems/ImageToolItems/ImageLabelInput.js +1 -0
  40. package/dist/Toolbar/ToolbarItems/ImageToolItems/TagLabel.d.ts +11 -0
  41. package/dist/Toolbar/ToolbarItems/ImageToolItems/TagLabel.js +1 -0
  42. package/dist/Toolbar/ToolbarItems/ImageTools.d.ts +13 -0
  43. package/dist/Toolbar/ToolbarItems/ImageTools.js +1 -0
  44. package/dist/Toolbar/ToolbarItems/Instructions.d.ts +2 -0
  45. package/dist/Toolbar/ToolbarItems/Instructions.js +1 -0
  46. package/dist/Toolbar/ToolbarItems/InstructionsModal.d.ts +6 -0
  47. package/dist/Toolbar/ToolbarItems/InstructionsModal.js +1 -0
  48. package/dist/assets/SIA-BV1tYu3P.css +1 -0
  49. package/dist/assets/brand-icons-Cu_C0hZ4.svg +1008 -0
  50. package/dist/assets/brand-icons-F3SPCeH1.woff +0 -0
  51. package/dist/assets/brand-icons-XL9sxUpA.woff2 +0 -0
  52. package/dist/assets/brand-icons-sqJ2Pg7a.eot +0 -0
  53. package/dist/assets/brand-icons-ubhWoxly.ttf +0 -0
  54. package/dist/assets/flags-DOLqOU7Y.png +0 -0
  55. package/dist/assets/icons-BOCtAERH.woff +0 -0
  56. package/dist/assets/icons-CHzK1VD9.eot +0 -0
  57. package/dist/assets/icons-D29ZQHHw.ttf +0 -0
  58. package/dist/assets/icons-Du6TOHnR.woff2 +0 -0
  59. package/dist/assets/icons-RwhydX30.svg +1518 -0
  60. package/dist/assets/node_modules/semantic-ui-css/semantic.min-Bvulf91l.css +346 -0
  61. package/dist/assets/outline-icons-BfdLr8tr.svg +366 -0
  62. package/dist/assets/outline-icons-DD8jm0uy.ttf +0 -0
  63. package/dist/assets/outline-icons-DInHoiqI.woff2 +0 -0
  64. package/dist/assets/outline-icons-LX8adJ4n.eot +0 -0
  65. package/dist/assets/outline-icons-aQ88nltS.woff +0 -0
  66. package/dist/index.d.ts +5 -0
  67. package/dist/index.js +1 -0
  68. package/dist/models/AnnotationMode.d.ts +11 -0
  69. package/dist/models/AnnotationMode.js +1 -0
  70. package/dist/models/AnnotationStatus.d.ts +8 -0
  71. package/dist/models/AnnotationStatus.js +1 -0
  72. package/dist/models/AnnotationTool.d.ts +7 -0
  73. package/dist/models/AnnotationTool.js +1 -0
  74. package/dist/models/CanvasAction.d.ts +28 -0
  75. package/dist/models/CanvasAction.js +1 -0
  76. package/dist/models/Direction.d.ts +7 -0
  77. package/dist/models/Direction.js +1 -0
  78. package/dist/models/EditorModes.d.ts +11 -0
  79. package/dist/models/EditorModes.js +1 -0
  80. package/dist/models/KeyAction.d.ts +22 -0
  81. package/dist/models/KeyAction.js +1 -0
  82. package/dist/models/NotificationType.d.ts +7 -0
  83. package/dist/models/NotificationType.js +1 -0
  84. package/dist/models/index.d.ts +6 -0
  85. package/dist/models/index.js +1 -0
  86. package/dist/stories/AnnotationTools.stories.d.ts +40 -0
  87. package/dist/stories/Canvas/Canvas.stories.d.ts +50 -0
  88. package/dist/stories/Canvas/CanvasOffset.d.ts +13 -0
  89. package/dist/stories/Canvas/CanvasWithOffset.stories.d.ts +36 -0
  90. package/dist/stories/FilterDropdown.stories.d.ts +19 -0
  91. package/dist/stories/MinimalSia.stories.d.ts +66 -0
  92. package/dist/stories/SIA/DemoWrapper.d.ts +8 -0
  93. package/dist/stories/SIA/DemoWrapper.stories.d.ts +27 -0
  94. package/dist/stories/SIA/SIA.stories.d.ts +72 -0
  95. package/dist/stories/Toolbar/ImageTools/TagLabel.stories.d.ts +21 -0
  96. package/dist/stories/Toolbar/Instructions.stories.d.ts +11 -0
  97. package/dist/stories/Toolbar/Toolbar.stories.d.ts +37 -0
  98. package/dist/stories/exampleData/exampleAnnotations.d.ts +8 -0
  99. package/dist/stories/exampleData/exampleExternalAnnotations.d.ts +8 -0
  100. package/dist/stories/exampleData/exampleImage.d.ts +2 -0
  101. package/dist/stories/exampleData/exampleLabels.d.ts +6 -0
  102. package/dist/types.d.ts +57 -0
  103. package/dist/types.js +1 -0
  104. package/dist/utils/KeyMapper.d.ts +9 -0
  105. package/dist/utils/KeyMapper.js +1 -0
  106. package/dist/utils/TimeUtils.d.ts +4 -0
  107. package/dist/utils/TimeUtils.js +1 -0
  108. package/dist/utils/color.d.ts +2 -0
  109. package/dist/utils/color.js +1 -0
  110. package/dist/utils/index.d.ts +2 -0
  111. package/dist/utils/index.js +1 -0
  112. package/dist/utils/mouse.d.ts +6 -0
  113. package/dist/utils/mouse.js +1 -0
  114. package/dist/utils/siaIcons.js +12 -0
  115. package/dist/utils/transform.d.ts +28 -0
  116. package/dist/utils/transform.js +1 -0
  117. package/dist/utils/uiConfig.js +1 -0
  118. package/dist/utils/windowViewport.d.ts +22 -0
  119. package/dist/utils/windowViewport.js +1 -0
  120. package/package.json +19 -16
  121. package/src/AnnoExampleViewer.jsx +18 -18
  122. package/src/Annotation/logic/Annotation.ts +24 -26
  123. package/src/Annotation/ui/AnnotationComponent.tsx +115 -86
  124. package/src/Annotation/ui/atoms/AnnoBar.tsx +51 -53
  125. package/src/Annotation/ui/atoms/DaviIcon.tsx +12 -22
  126. package/src/Annotation/ui/atoms/Edge.tsx +25 -22
  127. package/src/Annotation/ui/atoms/Node.tsx +56 -50
  128. package/src/Annotation/ui/atoms/PolygonArea.tsx +30 -35
  129. package/src/Annotation/ui/tools/BBox.tsx +136 -150
  130. package/src/Annotation/ui/tools/Line.tsx +94 -91
  131. package/src/Annotation/ui/tools/Point.tsx +19 -17
  132. package/src/Annotation/ui/tools/Polygon.tsx +126 -95
  133. package/src/Canvas/Canvas.tsx +748 -594
  134. package/src/Canvas/LabelInput.tsx +68 -45
  135. package/src/IconButton.tsx +119 -0
  136. package/src/InfoBoxes/AnnoDetails.jsx +53 -53
  137. package/src/InfoBoxes/AnnoStats.jsx +41 -41
  138. package/src/InfoBoxes/InfoBox.jsx +16 -16
  139. package/src/InfoBoxes/InfoBoxArea.jsx +32 -34
  140. package/src/InfoBoxes/LabelInfo.jsx +30 -30
  141. package/src/SIASettingButton.jsx +25 -25
  142. package/src/Sia.tsx +484 -0
  143. package/src/Toolbar/Toolbar.tsx +38 -31
  144. package/src/Toolbar/ToolbarItems/AccessibilityTools.tsx +26 -46
  145. package/src/Toolbar/ToolbarItems/AnnoToolSelector.tsx +53 -46
  146. package/src/Toolbar/ToolbarItems/ImageToolItems/ImageLabelInput.tsx +127 -0
  147. package/src/Toolbar/ToolbarItems/ImageToolItems/TagLabel.tsx +29 -28
  148. package/src/Toolbar/ToolbarItems/ImageTools.tsx +43 -40
  149. package/src/Toolbar/ToolbarItems/Instructions.tsx +47 -50
  150. package/src/Toolbar/ToolbarItems/InstructionsModal.tsx +8 -8
  151. package/src/index.ts +9 -13
  152. package/src/models/{AnnotationMode.tsx → AnnotationMode.ts} +1 -1
  153. package/src/models/{AnnotationStatus.tsx → AnnotationStatus.ts} +1 -1
  154. package/src/models/{AnnotationTool.tsx → AnnotationTool.ts} +1 -1
  155. package/src/models/{CanvasAction.tsx → CanvasAction.ts} +1 -1
  156. package/src/models/{Direction.tsx → Direction.ts} +1 -1
  157. package/src/models/{EditorModes.tsx → EditorModes.ts} +1 -1
  158. package/src/models/{KeyAction.tsx → KeyAction.ts} +3 -1
  159. package/src/models/NotificationType.ts +8 -0
  160. package/src/models/index.ts +6 -7
  161. package/src/siaDummyData.js +71 -71
  162. package/src/stories/AnnotationTools.mdx +27 -0
  163. package/src/stories/AnnotationTools.stories.tsx +104 -0
  164. package/src/stories/Canvas/Canvas.stories.tsx +59 -113
  165. package/src/stories/Canvas/CanvasOffset.tsx +54 -38
  166. package/src/stories/Canvas/CanvasWithOffset.stories.tsx +42 -113
  167. package/src/stories/FilterDropdown.stories.ts +13 -11
  168. package/src/stories/MinimalSIA.mdx +20 -0
  169. package/src/stories/MinimalSia.stories.tsx +90 -0
  170. package/src/stories/SIA/DemoWrapper.stories.tsx +71 -0
  171. package/src/stories/SIA/DemoWrapper.tsx +55 -0
  172. package/src/stories/SIA/SIA.stories.tsx +79 -45
  173. package/src/stories/Toolbar/ImageTools/TagLabel.stories.tsx +11 -12
  174. package/src/stories/Toolbar/Instructions.stories.tsx +11 -11
  175. package/src/stories/Toolbar/Toolbar.stories.tsx +32 -47
  176. package/src/stories/Welcome.mdx +5 -0
  177. package/src/stories/development/CoordinateSystems.mdx +25 -0
  178. package/src/stories/exampleData/exampleAnnotations.ts +65 -0
  179. package/src/stories/exampleData/exampleExternalAnnotations.ts +115 -0
  180. package/src/stories/{siaDummyData2.ts → exampleData/exampleImage.ts} +3 -264
  181. package/src/stories/exampleData/exampleLabels.ts +146 -0
  182. package/src/stories/main.scss +6 -0
  183. package/src/styles/style.scss +1 -26
  184. package/src/types.ts +67 -0
  185. package/src/utils/KeyMapper.ts +76 -74
  186. package/src/utils/TimeUtils.ts +11 -0
  187. package/src/utils/color.ts +25 -25
  188. package/src/utils/hist.js +22 -22
  189. package/src/utils/index.ts +2 -3
  190. package/src/utils/mouse.ts +45 -0
  191. package/src/utils/siaIcons.jsx +5 -7
  192. package/src/utils/transform.ts +186 -0
  193. package/src/utils/uiConfig.js +19 -22
  194. package/src/utils/windowViewport.ts +34 -0
  195. package/src/AnnoLabelInput.jsx +0 -109
  196. package/src/AnnoToolBar.jsx +0 -153
  197. package/src/Annotation/AnnoBar.jsx +0 -154
  198. package/src/Annotation/Annotation.jsx +0 -395
  199. package/src/Annotation/Annotation.scss +0 -47
  200. package/src/Annotation/BBox.jsx +0 -299
  201. package/src/Annotation/Edge.jsx +0 -92
  202. package/src/Annotation/InfSelectionArea.jsx +0 -72
  203. package/src/Annotation/Line.jsx +0 -68
  204. package/src/Annotation/Node.jsx +0 -282
  205. package/src/Annotation/Point.jsx +0 -200
  206. package/src/Annotation/Polygon.jsx +0 -404
  207. package/src/Annotation/logic/AnnotationUtils.ts +0 -30
  208. package/src/Canvas.jsx +0 -2194
  209. package/src/ImgBar.jsx +0 -131
  210. package/src/LabelInput.jsx +0 -238
  211. package/src/Prompt.jsx +0 -45
  212. package/src/SIAFilterButton.jsx +0 -186
  213. package/src/Sia.jsx +0 -478
  214. package/src/Sia2.tsx +0 -392
  215. package/src/SiaPopup.jsx +0 -15
  216. package/src/ToolBar.jsx +0 -463
  217. package/src/Toolbar/NavigationButtons.tsx +0 -21
  218. package/src/Toolbar/ToolbarItem.jsx +0 -30
  219. package/src/Toolbar/ToolbarItems/ImageToolItems/ImageLabel.tsx +0 -62
  220. package/src/Toolbar.css +0 -13
  221. package/src/ToolbarItem.jsx +0 -31
  222. package/src/filterTools.js +0 -5
  223. package/src/models/AllowedTools.tsx +0 -9
  224. package/src/models/AnnotationSettings.tsx +0 -9
  225. package/src/models/ExternalAnnotation.ts +0 -15
  226. package/src/models/Label.tsx +0 -8
  227. package/src/models/UiConfig.tsx +0 -6
  228. package/src/stories/Button.jsx +0 -54
  229. package/src/stories/Button.stories.js +0 -48
  230. package/src/stories/Header.jsx +0 -69
  231. package/src/stories/Header.stories.js +0 -28
  232. package/src/stories/Page.jsx +0 -87
  233. package/src/stories/Page.stories.js +0 -28
  234. package/src/stories/SIA2/DemoWrapper.stories.tsx +0 -167
  235. package/src/stories/SIA2/DemoWrapper.tsx +0 -54
  236. package/src/stories/SIA2/Sia2.stories.tsx +0 -62
  237. package/src/stories/Toolbar/ImageTools/ImageLabel.stories.tsx +0 -32
  238. package/src/stories/assets/accessibility.png +0 -0
  239. package/src/stories/assets/accessibility.svg +0 -5
  240. package/src/stories/assets/addon-library.png +0 -0
  241. package/src/stories/assets/assets.png +0 -0
  242. package/src/stories/assets/avif-test-image.avif +0 -0
  243. package/src/stories/assets/context.png +0 -0
  244. package/src/stories/assets/discord.svg +0 -15
  245. package/src/stories/assets/docs.png +0 -0
  246. package/src/stories/assets/figma-plugin.png +0 -0
  247. package/src/stories/assets/github.svg +0 -3
  248. package/src/stories/assets/share.png +0 -0
  249. package/src/stories/assets/styling.png +0 -0
  250. package/src/stories/assets/testing.png +0 -0
  251. package/src/stories/assets/theming.png +0 -0
  252. package/src/stories/assets/tutorials.svg +0 -12
  253. package/src/stories/assets/youtube.svg +0 -4
  254. package/src/stories/button.css +0 -30
  255. package/src/stories/header.css +0 -32
  256. package/src/stories/lost.js +0 -54
  257. package/src/stories/page.css +0 -69
  258. package/src/stories/siaDummyData.js +0 -263
  259. package/src/stories/store.js +0 -18
  260. package/src/test.js +0 -7
  261. package/src/types/annoStatus.js +0 -4
  262. package/src/types/canvasActions.js +0 -58
  263. package/src/types/cursorstyles.js +0 -3
  264. package/src/types/modes.js +0 -9
  265. package/src/types/notificationType.js +0 -11
  266. package/src/types/toolbarEvents.js +0 -35
  267. package/src/types/tools.js +0 -17
  268. package/src/types.tsx +0 -11
  269. package/src/utils/annoConversion.js +0 -145
  270. package/src/utils/annoConversion2.ts +0 -145
  271. package/src/utils/colorlut.js +0 -68
  272. package/src/utils/constraints.js +0 -81
  273. package/src/utils/index.js +0 -1
  274. package/src/utils/keyActions.js +0 -113
  275. package/src/utils/mouse.js +0 -14
  276. package/src/utils/mouse2.ts +0 -35
  277. package/src/utils/transform.js +0 -336
  278. package/src/utils/transform2.ts +0 -343
  279. package/src/utils/windowViewport.js +0 -34
  280. package/src/utils/windowViewport2.ts +0 -50
package/src/Sia2.tsx DELETED
@@ -1,392 +0,0 @@
1
- import { useEffect, useState, ReactElement, useRef } from "react";
2
- import { CSpinner } from "@coreui/react";
3
- import Canvas from "./Canvas/Canvas";
4
- import AllowedTools from "./models/AllowedTools";
5
- import AnnotationTool from "./models/AnnotationTool";
6
- import Toolbar from "./Toolbar/Toolbar";
7
- import UiConfig from "./models/UiConfig";
8
- import Label from "./models/Label";
9
- import Annotation from "./Annotation/logic/Annotation";
10
- import ExternalAnnotation from "./models/ExternalAnnotation";
11
- import AnnotationMode from "./models/AnnotationMode";
12
- import AnnotationSettings from "./models/AnnotationSettings";
13
- import AnnotationStatus from "./models/AnnotationStatus";
14
- import { PolygonOperationResult } from "./types";
15
-
16
- type SiaProps = {
17
- additionalButtons?: ReactElement | undefined;
18
- allowedTools?: AllowedTools;
19
- polygonOperationResult?: PolygonOperationResult;
20
- annotationSettings?: AnnotationSettings;
21
- defaultAnnotationTool?: AnnotationTool;
22
- image?: string;
23
- isLoading?: boolean;
24
- isPolygonSelectionMode?: boolean;
25
- initialAnnotations?: ExternalAnnotation[];
26
- initialImageLabelIds?: number[];
27
- initialIsImageJunk?: boolean;
28
- possibleLabels: Label[];
29
- uiConfig?: UiConfig;
30
- onAnnoCreated?: (createdAnno: Annotation, allAnnos: Annotation[]) => void;
31
- onAnnoCreationFinished?: (
32
- createdAnno: Annotation,
33
- allAnnos: Annotation[],
34
- ) => void;
35
- onAnnoChanged?: (changedAnno: Annotation, allAnnos: Annotation[]) => void;
36
- onAnnoDeleted?: (deletedAnno: Annotation, allAnnos: Annotation[]) => void;
37
- onImageLabelsChanged?: (selectedImageIds: number[]) => void;
38
- onIsImageJunk?: (isJunk: boolean) => void;
39
- onSelectAnnotation: (annotation?: Annotation) => void;
40
- };
41
-
42
- const Sia2 = ({
43
- additionalButtons,
44
- allowedTools: propAllowedTools,
45
- polygonOperationResult = { annotationsToDelete: [], polygonsToCreate: [] },
46
- annotationSettings: propAnnotationSettings,
47
- uiConfig: propUiConfig,
48
- defaultAnnotationTool,
49
- image,
50
- isLoading = false,
51
- isPolygonSelectionMode = false,
52
- initialAnnotations = [],
53
- initialImageLabelIds = [],
54
- initialIsImageJunk = false,
55
- possibleLabels,
56
- onAnnoCreated = (_, __) => {},
57
- onAnnoCreationFinished = (_, __) => {},
58
- onAnnoChanged = (_, __) => {},
59
- onAnnoDeleted = (_, __) => {},
60
- onImageLabelsChanged = () => {},
61
- onIsImageJunk = () => {},
62
- onSelectAnnotation = () => {},
63
- }: SiaProps) => {
64
- const marginBetweenToolbarAndContainerPixels: number = 10;
65
-
66
- // ref for accessing the toolbar height (adjustable by screen size + custom components)
67
- const toolbarContainerRef = useRef(null);
68
-
69
- const [allowedTools, setAllowedTools] = useState<AllowedTools>();
70
-
71
- const [annotations, setAnnotations] = useState<Annotation[]>([]);
72
- const [annotationSettings, setAnnotationSettings] =
73
- useState<AnnotationSettings>();
74
-
75
- const [uiConfig, setUiConfig] = useState<UiConfig>();
76
-
77
- const [selectedAnnotation, setSelectedAnnotation] = useState<Annotation>();
78
-
79
- const [selectedAnnoTool, setSelectedAnnoTool] = useState<AnnotationTool>(
80
- defaultAnnotationTool !== undefined
81
- ? defaultAnnotationTool
82
- : AnnotationTool.Point,
83
- );
84
-
85
- // for adjusting the container/canvas size
86
- const [toolbarHeight, setToolbarHeight] = useState<number>(-1);
87
-
88
- const [outerContainerStyle, setOuterContainerStyle] = useState({
89
- height: `100%`,
90
- });
91
-
92
- const [imageLabelIds, setImageLabelIds] =
93
- useState<number[]>(initialImageLabelIds);
94
-
95
- const [isImageJunk, setIsImageJunk] = useState<boolean>();
96
-
97
- // keep track which numbers are already used for annotation ids - even if they are deleted
98
- const [usedInternalIds, setUsedInternalIds] = useState<number[]>([]);
99
-
100
- const deleteAnnotationByInternalId = (internalId: number) => {
101
- // get index of selected annotation
102
- const annoListIndex: number = annotations!.findIndex(
103
- (anno) => anno.internalId === internalId,
104
- );
105
-
106
- // dereference list to force state update
107
- const _annotations: Annotation[] = [...annotations];
108
-
109
- // remove annotation
110
- const removedAnno: Annotation = _annotations.splice(annoListIndex, 1)[0];
111
-
112
- setAnnotations(_annotations);
113
-
114
- // inform the outside world about our changes
115
- onAnnoDeleted(removedAnno, _annotations);
116
- };
117
-
118
- const deleteSelectedAnnotation = () => {
119
- if (selectedAnnotation === undefined) return;
120
-
121
- deleteAnnotationByInternalId(selectedAnnotation.internalId);
122
- };
123
-
124
- const createInitialAnnotations = () => {
125
- // this is only run during initialization, so internal id list is always empty at this point
126
- // fill this without the dedicated createNewInternalAnnotationId to avoid accessing old state
127
- // setState in loop thats depending on its value => you are in react hell
128
- let internalAnnoId: number = 0;
129
-
130
- // create internal annotation object from external annotations
131
- // assign internal id, add default data if not set from the outside
132
- const _annotations: Annotation[] = initialAnnotations.map(
133
- (externalAnno: ExternalAnnotation) => {
134
- const _anno: Annotation = {
135
- ...externalAnno,
136
- internalId: internalAnnoId++,
137
- mode: AnnotationMode.VIEW,
138
- selectedNode: 1,
139
- status: externalAnno.status,
140
- annoTime:
141
- externalAnno.annoTime !== undefined ? externalAnno.annoTime : 0.0,
142
- timestamp:
143
- externalAnno.timestamp !== undefined
144
- ? externalAnno.timestamp
145
- : performance.now(),
146
- };
147
-
148
- return _anno;
149
- },
150
- );
151
-
152
- // list all used internal ids (from 0 to internalAnnoId)
153
- setUsedInternalIds([...Array(internalAnnoId).keys()]);
154
-
155
- setAnnotations(_annotations);
156
- };
157
-
158
- const createNewInternalAnnotationId = (): number => {
159
- // find the next free number
160
- let newInternalId: number = 0;
161
- while (usedInternalIds.includes(newInternalId)) newInternalId++;
162
-
163
- // add it to the used numbers (dereference list to trigger react state change)
164
- const _usedInternalIds = [...usedInternalIds];
165
- _usedInternalIds.push(newInternalId);
166
- setUsedInternalIds(_usedInternalIds);
167
-
168
- return newInternalId;
169
- };
170
-
171
- useEffect(() => {
172
- // update the initial annotations only when the image is not set
173
- // (the annotations are always loaded before the image)
174
- if (image !== undefined) return;
175
-
176
- createInitialAnnotations();
177
- setIsImageJunk(initialIsImageJunk);
178
- }, [initialAnnotations]);
179
-
180
- // update annotation settings if changed in the parent
181
- useEffect(() => {
182
- const defaultAnnotationSettigs: AnnotationSettings = {
183
- canCreate: true,
184
- canEdit: true,
185
- canHaveMultipleLabels: false,
186
- canLabel: true,
187
- minimalArea: 250,
188
- };
189
-
190
- // use default values if a key is not set
191
- const newAnnotationSettings = {
192
- ...defaultAnnotationSettigs,
193
- ...propAnnotationSettings,
194
- };
195
-
196
- setAnnotationSettings(newAnnotationSettings);
197
- }, [propAnnotationSettings]);
198
-
199
- useEffect(() => {
200
- const defaultUiConfig: UiConfig = {
201
- nodeRadius: 4,
202
- strokeWidth: 4,
203
- };
204
-
205
- // use default values if a key is not set
206
- const newUiConfig = {
207
- ...defaultUiConfig,
208
- ...propUiConfig,
209
- };
210
-
211
- setUiConfig(newUiConfig);
212
- }, [propUiConfig]);
213
-
214
- // set default allowed tools if user has not specified them
215
- useEffect(() => {
216
- const defaultAllowedTools: AllowedTools = {
217
- bbox: true,
218
- point: true,
219
- line: true,
220
- junk: true,
221
- polygon: true,
222
- };
223
-
224
- if (propAllowedTools === undefined)
225
- return setAllowedTools(defaultAllowedTools);
226
-
227
- setAllowedTools(propAllowedTools);
228
- }, [propAllowedTools]);
229
-
230
- // useEffect(() => {
231
- // if (toolbarHeight < 0) return;
232
-
233
- // setOuterContainerStyle({
234
- // height: `calc(100% - ${toolbarHeight}px)`,
235
- // });
236
- // }, [toolbarHeight]);
237
-
238
- // useEffect(() => {
239
- // if (toolbarContainerRef.current === null) return;
240
- // const { width, height } =
241
- // toolbarContainerRef.current.getBoundingClientRect();
242
-
243
- // setToolbarHeight(height + marginBetweenToolbarAndContainerPixels);
244
- // }, [toolbarContainerRef]);
245
-
246
- if (allowedTools === undefined)
247
- return (
248
- <div className="d-flex justify-content-center">
249
- <CSpinner color="primary" style={{ width: "5rem", height: "5rem" }} />
250
- </div>
251
- );
252
-
253
- return (
254
- <>
255
- <div
256
- ref={toolbarContainerRef}
257
- style={{
258
- marginBottom: marginBetweenToolbarAndContainerPixels,
259
- }}
260
- >
261
- <Toolbar
262
- annotationSettings={annotationSettings}
263
- allowedTools={allowedTools}
264
- additionalButtons={additionalButtons}
265
- isDisabled={isLoading}
266
- isImageJunk={isImageJunk}
267
- imageLabelIds={imageLabelIds}
268
- possibleLabels={possibleLabels}
269
- selectedTool={selectedAnnoTool}
270
- onImageLabelsChanged={(newImageLabelIds: number[]) => {
271
- setImageLabelIds(newImageLabelIds);
272
- onImageLabelsChanged(newImageLabelIds);
273
- }}
274
- onSetSelectedTool={setSelectedAnnoTool}
275
- onSetIsImageJunk={(newJunkState: boolean) => {
276
- setIsImageJunk(newJunkState);
277
- onIsImageJunk(newJunkState);
278
- }}
279
- onShouldDeleteSelectedAnnotation={deleteSelectedAnnotation}
280
- />
281
- </div>
282
- <div style={outerContainerStyle}>
283
- {isLoading && (
284
- <div className="d-flex justify-content-center">
285
- <CSpinner
286
- color="primary"
287
- style={{ width: "5rem", height: "5rem", marginTop: 200 }}
288
- />
289
- </div>
290
- )}
291
-
292
- {image && annotations && (
293
- <Canvas
294
- annotations={annotations}
295
- annotationSettings={annotationSettings}
296
- image={image}
297
- isImageJunk={isImageJunk}
298
- isPolygonSelectionMode={isPolygonSelectionMode}
299
- selectedAnnotation={selectedAnnotation}
300
- selectedAnnoTool={selectedAnnoTool}
301
- polygonOperationResult={polygonOperationResult}
302
- possibleLabels={possibleLabels}
303
- uiConfig={uiConfig}
304
- onAnnoCreated={(annotation: Annotation) => {
305
- const _annotations: Annotation[] = [...annotations];
306
- _annotations.push(annotation);
307
- setAnnotations(_annotations);
308
- setSelectedAnnotation(annotation);
309
- onAnnoCreated(annotation, _annotations);
310
- }}
311
- onAnnoChanged={(changedAnno: Annotation) => {
312
- // update annotation list
313
- const annoListIndex: number = annotations.findIndex(
314
- (anno) => anno.internalId === changedAnno.internalId,
315
- );
316
- const _annotations: Annotation[] = [...annotations];
317
- _annotations[annoListIndex] = changedAnno;
318
- setAnnotations(_annotations);
319
-
320
- // inform the outside world about our change
321
- onAnnoChanged(changedAnno, _annotations);
322
- }}
323
- onAnnoCreationFinished={(changedAnno: Annotation) => {
324
- // update annotation list
325
- const _annotations: Annotation[] = [...annotations];
326
-
327
- // remove the previous annotations we used to do the operation with
328
- if (isPolygonSelectionMode) {
329
- if (polygonOperationResult?.annotationsToDelete !== undefined) {
330
- // we also want to remove the current selected annotation
331
- polygonOperationResult.annotationsToDelete.push(
332
- selectedAnnotation!,
333
- );
334
-
335
- polygonOperationResult.annotationsToDelete.forEach(
336
- (annotation) => {
337
- // remove annotations "the official way" (inform the server what we did)
338
- deleteAnnotationByInternalId(annotation.internalId);
339
-
340
- // since we are updating the annotations list after all the deletions again, their disappearance wouldn't be noticed
341
- // therefore also manually remove the annotations here
342
-
343
- // get index of selected annotation
344
- const annoListIndex: number = _annotations!.findIndex(
345
- (anno) => anno.internalId === annotation.internalId,
346
- );
347
-
348
- // remove annotation from object
349
- _annotations.splice(annoListIndex, 1);
350
- },
351
- );
352
- }
353
-
354
- // the polygon selection mode hands annotations to SIA in one single frame
355
- // add the new annotation here
356
- _annotations.push(changedAnno);
357
- }
358
-
359
- // point annotations are created in one frame
360
- // they dont exist in the annotations list yet, so just append them
361
- if (changedAnno.type === AnnotationTool.Point)
362
- _annotations.push(changedAnno);
363
- else {
364
- // all other annotation types
365
- const annoListIndex: number = annotations.findIndex(
366
- (anno) => anno.internalId === changedAnno.internalId,
367
- );
368
- _annotations[annoListIndex] = changedAnno;
369
- }
370
-
371
- setAnnotations(_annotations);
372
-
373
- // mark annotation as fully created
374
- changedAnno.status = AnnotationStatus.CREATED;
375
-
376
- // inform the outer world about our changes
377
- onAnnoCreationFinished(changedAnno, _annotations);
378
- }}
379
- onRequestNewAnnoId={createNewInternalAnnotationId}
380
- onSelectAnnotation={(annotation) => {
381
- setSelectedAnnotation(annotation);
382
- onSelectAnnotation(annotation);
383
- }}
384
- // eventDeleteSelectedAnnotation={deleteSelectedAnnotation}
385
- />
386
- )}
387
- </div>
388
- </>
389
- );
390
- };
391
-
392
- export default Sia2;
package/src/SiaPopup.jsx DELETED
@@ -1,15 +0,0 @@
1
- import React from "react";
2
- import { Popup } from "semantic-ui-react";
3
-
4
- const SiaPopup = ({ content, trigger }) => {
5
- return (
6
- <Popup
7
- inverted
8
- style={{ opacity: 0.9 }}
9
- content={content}
10
- trigger={trigger}
11
- />
12
- );
13
- };
14
-
15
- export default SiaPopup;