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/ImgBar.jsx DELETED
@@ -1,131 +0,0 @@
1
- import React, { useState, useEffect } from "react";
2
- import { Menu } from "semantic-ui-react";
3
-
4
- const ImgBar = ({
5
- svg,
6
- imgLabelIds,
7
- possibleLabels,
8
- imageMeta,
9
- annos,
10
- annoTaskId,
11
- visible,
12
- onLabelUpdate,
13
- onMouseEnter,
14
- onClose,
15
- }) => {
16
- const [position, setPosition] = useState({ top: 0, left: 0 });
17
-
18
- useEffect(() => {
19
- if (svg) {
20
- setPosition({
21
- ...position,
22
- left: svg.left,
23
- top: svg.top,
24
- });
25
- }
26
- }, [svg]);
27
-
28
- // const handleLabelUpdate = (label) => {
29
- // if (onLabelUpdate) {
30
- // onLabelUpdate(label)
31
- // }
32
- // }
33
-
34
- // const handleClose = () => {
35
- // if (onClose) {
36
- // onClose()
37
- // }
38
- // }
39
-
40
- const handleMouseEnter = (e) => {
41
- if (onMouseEnter) {
42
- onMouseEnter(e);
43
- }
44
- };
45
-
46
- // renderImgLabelInput(){
47
- // if (this.props.allowedActions.label){
48
- // return <Menu.Item style={{padding: "5px"}}>
49
- // <LabelInput
50
- // // multilabels={true}
51
- // multilabels={this.props.multilabels}
52
- // relatedId={this.props.annos.image.id}
53
- // visible={this.props.visible}
54
- // onLabelUpdate={label => this.handleLabelUpdate(label)}
55
- // possibleLabels={this.props.possibleLabels}
56
- // initLabelIds={this.props.imgLabelIds}
57
- // relatedId={this.props.annos.image.id}
58
- // disabled={!this.props.allowedActions.label}
59
- // />
60
- // </Menu.Item>
61
- // } else {
62
- // return null
63
- // }
64
- // }
65
-
66
- const renderImgLabels = () => {
67
- let label = "";
68
- if (imgLabelIds && imgLabelIds.length > 0) {
69
- let labelObject;
70
- imgLabelIds.forEach((lbl, idx) => {
71
- labelObject = possibleLabels.find((el) => {
72
- return el.id === lbl;
73
- });
74
- if (idx > 0) label += ", ";
75
- label += labelObject.label;
76
- });
77
- return <Menu.Item>{label}</Menu.Item>;
78
- } else {
79
- return null;
80
- }
81
- };
82
-
83
- const renderImgDescription = () => {
84
- if (imageMeta.description) {
85
- return <Menu.Item>{imageMeta.description}</Menu.Item>;
86
- } else {
87
- return null;
88
- }
89
- };
90
-
91
- const renderAnnoTaskId = () => {
92
- if (!annoTaskId) return null;
93
-
94
- return <Menu.Item>Annotask ID: {annoTaskId}</Menu.Item>;
95
- };
96
-
97
- if (!visible) return null;
98
- if (!imageMeta) return null;
99
-
100
- return (
101
- <div
102
- style={{
103
- position: "fixed",
104
- top: position.top,
105
- left: position.left,
106
- width: svg.width,
107
- minWidth: "300px",
108
- }}
109
- onMouseEnter={(e) => {
110
- handleMouseEnter(e);
111
- }}
112
- >
113
- <Menu
114
- inverted
115
- style={{ opacity: 0.9, justifyContent: "center", alignItems: "center" }}
116
- >
117
- {/* { renderImgLabelInput() } */}
118
- {renderImgDescription()}
119
- {renderAnnoTaskId()}
120
- <Menu.Item>
121
- {/* { annos.image.url.split('/').pop() +" (ID: " + annos.image.id + ")" } */}
122
- {"ID: " + imageMeta.id}
123
- </Menu.Item>
124
- <Menu.Item>{imageMeta.number + " / " + imageMeta.amount}</Menu.Item>
125
- {renderImgLabels()}
126
- </Menu>
127
- </div>
128
- );
129
- };
130
-
131
- export default ImgBar;
@@ -1,238 +0,0 @@
1
- import React, { useState, useEffect, useRef } from "react";
2
- import { Dropdown, Ref, Popup, Header } from "semantic-ui-react";
3
-
4
- const LabelInput = ({
5
- defaultLabel,
6
- disabled,
7
- focusOnRender,
8
- initLabelIds,
9
- multilabels,
10
- possibleLabelsProp,
11
- relatedId,
12
- renderPopup,
13
- visible,
14
- open,
15
- onClose,
16
- onLabelConfirmed,
17
- onLabelUpdate,
18
- }) => {
19
- const [label, setLabel] = useState([]);
20
- const [possibleLabels, setPossibleLabels] = useState([]);
21
- const [performInit, setPerformInit] = useState(true);
22
- const [confirmLabel, setConfirmLabel] = useState(0);
23
-
24
- const inputRef = useRef(null);
25
-
26
- useEffect(() => {
27
- updatePossibleLabels();
28
- }, []);
29
-
30
- useEffect(() => {
31
- if (initLabelIds) {
32
- setPerformInit(true);
33
- }
34
- }, [initLabelIds]);
35
-
36
- useEffect(() => {
37
- if (visible) {
38
- if (focusOnRender) {
39
- if (inputRef.current) {
40
- inputRef.current.click();
41
- }
42
- }
43
- }
44
-
45
- if (confirmLabel !== 0) {
46
- annoLabelUpdate(label);
47
- closeLabelInput();
48
- }
49
-
50
- if (initLabelIds) {
51
- if (performInit) {
52
- setPerformInit(false);
53
-
54
- if (initLabelIds.length > 0) {
55
- setLabel(initLabelIds);
56
- } else {
57
- setLabel([]);
58
- }
59
- }
60
- }
61
- }, [
62
- visible,
63
- focusOnRender,
64
- label,
65
- confirmLabel,
66
- possibleLabelsProp,
67
- initLabelIds,
68
- relatedId,
69
- ]);
70
-
71
- const onKeyDown = (e) => {
72
- e.stopPropagation();
73
- performKeyAction(e.key);
74
- };
75
-
76
- const onChange = (e, item) => {
77
- let lbl;
78
-
79
- if (multilabels) {
80
- lbl = item.value !== -1 ? item.value : [];
81
- } else {
82
- lbl = item.value !== -1 ? [item.value] : [];
83
- }
84
-
85
- setLabel(lbl);
86
- annoLabelUpdate(lbl);
87
- };
88
-
89
- const onItemClick = (e, item) => {
90
- incrementConfirmLabel();
91
- };
92
-
93
- const updatePossibleLabels = () => {
94
- let _possibleLabels = [];
95
- let _defaultLabel;
96
-
97
- if (defaultLabel) {
98
- if (Number.isInteger(defaultLabel)) {
99
- _defaultLabel = undefined;
100
- } else {
101
- _defaultLabel = defaultLabel;
102
- }
103
- } else {
104
- _defaultLabel = "no label";
105
- }
106
-
107
- if (possibleLabelsProp.length > 0) {
108
- _possibleLabels = possibleLabelsProp.map((e) => {
109
- return {
110
- key: e.id,
111
- value: e.id,
112
- text: e.label,
113
- content: (
114
- <div onClick={(event) => onItemClick(event, e.id)}>{e.label}</div>
115
- ),
116
- };
117
- });
118
- }
119
-
120
- if (_defaultLabel) {
121
- _possibleLabels.unshift({
122
- key: -1,
123
- value: -1,
124
- text: _defaultLabel,
125
- content: (
126
- <div onClick={(event) => onItemClick(event, -1)}>{_defaultLabel}</div>
127
- ),
128
- });
129
- }
130
-
131
- setPossibleLabels(_possibleLabels);
132
- };
133
-
134
- const performKeyAction = (key) => {
135
- switch (key) {
136
- case "Enter":
137
- if (!multilabels) {
138
- if (visible) incrementConfirmLabel();
139
- }
140
- break;
141
- case "Escape":
142
- closeLabelInput();
143
- break;
144
- default:
145
- break;
146
- }
147
- };
148
-
149
- const annoLabelUpdate = (label) => {
150
- // console.log("LabelInput -> annoLabelUpdate ", label);
151
-
152
- if (onLabelUpdate) {
153
- onLabelUpdate(label.filter((val) => val !== -1));
154
- }
155
- };
156
-
157
- const incrementConfirmLabel = () => {
158
- setConfirmLabel(confirmLabel + 1);
159
- };
160
-
161
- const closeLabelInput = () => {
162
- // console.log("LabelInput -> closeLabelInput");
163
-
164
- if (onLabelConfirmed) onLabelConfirmed(label.filter((val) => val !== -1));
165
- if (onClose) onClose();
166
- };
167
-
168
- const renderLabelInput = () => {
169
- let lbl;
170
-
171
- if (multilabels) lbl = label;
172
- else {
173
- lbl = label.length > 0 ? label[0] : -1;
174
- }
175
-
176
- return (
177
- <Ref innerRef={inputRef}>
178
- <Dropdown
179
- multiple={multilabels}
180
- search
181
- selection
182
- closeOnChange
183
- icon="search"
184
- options={possibleLabels}
185
- placeholder="Enter label"
186
- tabIndex={0}
187
- onKeyDown={(e) => onKeyDown(e)}
188
- value={lbl}
189
- onChange={(e, item) => onChange(e, item)}
190
- style={{ opacity: 0.8 }}
191
- disabled={disabled}
192
- open={open}
193
- />
194
- </Ref>
195
- );
196
- };
197
-
198
- const renderLabelInfo = () => {
199
- if (!label) return null;
200
-
201
- let lbl = undefined;
202
-
203
- if (label.length > 0) {
204
- lbl = possibleLabels.find((e) => label[label.length - 1] === e.id);
205
- }
206
-
207
- if (!lbl) return "No label";
208
-
209
- return (
210
- <div>
211
- <Header>{lbl.label}</Header>
212
- <div dangerouslySetInnerHTML={{ __html: lbl.description }} />
213
- </div>
214
- );
215
- };
216
-
217
- const renderPopupContent = () => {
218
- return <div>{renderLabelInfo()}</div>;
219
- };
220
-
221
- if (!visible) return null;
222
-
223
- if (renderPopup) {
224
- return (
225
- <Popup
226
- trigger={renderLabelInput()}
227
- content={renderPopupContent()}
228
- open
229
- position="right center"
230
- style={{ opacity: 0.9 }}
231
- />
232
- );
233
- } else {
234
- return renderLabelInput();
235
- }
236
- };
237
-
238
- export default LabelInput;
package/src/Prompt.jsx DELETED
@@ -1,45 +0,0 @@
1
- import React, { Component } from "react";
2
- import { Dimmer, Header } from "semantic-ui-react";
3
-
4
- class Prompt extends Component {
5
- constructor(props) {
6
- super(props);
7
- this.state = {
8
- active: false,
9
- };
10
- }
11
-
12
- handleClick(e) {
13
- if (this.props.onClick) {
14
- this.props.onClick(e);
15
- }
16
- }
17
-
18
- componentDidMount() {
19
- this.setState({ active: this.props.active });
20
- }
21
-
22
- componentDidUpdate(prevProps) {
23
- if (this.props.active !== prevProps.active) {
24
- this.setState({ active: this.props.active });
25
- }
26
- }
27
-
28
- render() {
29
- return (
30
- <Dimmer
31
- page
32
- active={this.state.active}
33
- style={{ zIndex: 7000 }}
34
- onClick={(e) => this.handleClick(e)}
35
- >
36
- <Header as="h3" inverted style={{ background: "rgba(0,0,0,0)" }}>
37
- {this.props.header}
38
- </Header>
39
- {this.props.content}
40
- </Dimmer>
41
- );
42
- }
43
- }
44
-
45
- export default Prompt;
@@ -1,186 +0,0 @@
1
- import React, { Component } from "react";
2
- // import * as filterTools from "./filterTools";
3
- import * as tbe from "./types/toolbarEvents";
4
- import { faFilter } from "@fortawesome/free-solid-svg-icons";
5
- import { CFormSwitch, CPopover } from "@coreui/react";
6
- import ToolbarItem from "./ToolbarItem";
7
- class SIAFilterButton extends Component {
8
- constructor(props) {
9
- super(props);
10
- this.state = {
11
- clipLimit: 3,
12
- active: false,
13
- color: undefined,
14
- };
15
- }
16
-
17
- componentDidUpdate(prevProps) {
18
- if (
19
- prevProps.filter.clahe.clipLimit !== this.props.filter.clahe.clipLimit
20
- ) {
21
- this.setState({ clipLimit: this.props.filter.clahe.clipLimit });
22
- }
23
- if (this.props.filter !== prevProps.filter) {
24
- if (filterTools.active(this.props.filter)) {
25
- this.setState({ color: "red", active: true });
26
- } else {
27
- this.setState({ color: "white", active: false });
28
- }
29
- }
30
- }
31
-
32
- triggerEvent(e, data) {
33
- if (this.props.onFilterEvent) {
34
- this.props.onFilterEvent(e, data);
35
- }
36
- }
37
-
38
- handleClipLimitChange(e) {
39
- const cl = parseInt(e.target.value);
40
- this.setState({ clipLimit: cl });
41
- // this.claheFilter(cl)
42
- }
43
-
44
- rotateImg(angle) {
45
- const active = !(
46
- this.props.filter.rotate.active &&
47
- this.props.filter.rotate.angle === angle
48
- );
49
- const myAngle = active ? angle : 0;
50
- this.triggerEvent(tbe.APPLY_FILTER, {
51
- ...this.props.filter,
52
- rotate: { angle: myAngle, active: active },
53
- });
54
-
55
- // this.props.siaApplyFilter({
56
- // ...this.props.filter,
57
- // rotate: {angle:myAngle, active:active}
58
- // })
59
- }
60
-
61
- claheFilter(clipLimit) {
62
- const filter = {
63
- clahe: {
64
- clipLimit: clipLimit,
65
- active: !this.props.filter.clahe.active,
66
- },
67
- };
68
- this.triggerEvent(tbe.APPLY_FILTER, {
69
- ...this.props.filter,
70
- clahe: filter.clahe,
71
- });
72
- // this.props.siaApplyFilter({
73
- // ...this.props.filter,
74
- // clahe: filter.clahe
75
- // })
76
- }
77
-
78
- releaseCLAHESlider(e) {
79
- const filter = {
80
- clahe: {
81
- clipLimit: parseInt(e.target.value),
82
- active: true,
83
- },
84
- };
85
- this.triggerEvent(tbe.APPLY_FILTER, {
86
- ...this.props.filter,
87
- clahe: filter.clahe,
88
- });
89
- // this.props.siaApplyFilter({
90
- // ...this.props.filter,
91
- // clahe: filter.clahe
92
- // })
93
- }
94
-
95
- renderRotateContent() {
96
- const filter = this.props.filter;
97
- return (
98
- <div>
99
- <h4>Rotate</h4>
100
- <CFormSwitch
101
- checked={filter.rotate.active && filter.rotate.angle === 90}
102
- label="Rotate 90"
103
- size="xl"
104
- onClick={() => this.rotateImg(90)}
105
- />
106
- <CFormSwitch
107
- checked={filter.rotate.active && filter.rotate.angle === -90}
108
- label="Rotate -90"
109
- size="xl"
110
- onClick={() => this.rotateImg(-90)}
111
- />
112
- <CFormSwitch
113
- checked={filter.rotate.active && filter.rotate.angle === 180}
114
- label="Rotate 180"
115
- size="xl"
116
- onClick={() => this.rotateImg(180)}
117
- />
118
- </div>
119
- );
120
- }
121
-
122
- renderRotate() {
123
- if (!this.props.enabled) return null;
124
- if (this.props.enabled === true) {
125
- return this.renderRotateContent();
126
- } else {
127
- if (this.props.enabled.rotate) {
128
- return this.renderRotateContent();
129
- }
130
- }
131
- }
132
-
133
- renderClaheContent() {
134
- const filter = this.props.filter;
135
- return (
136
- <div>
137
- <h4>Histogram equalization</h4>
138
- <CFormSwitch
139
- checked={filter.clahe.active}
140
- label="Histogram equalization"
141
- size="xl"
142
- onClick={() => this.claheFilter(this.state.clipLimit)}
143
- />
144
- <div>Cliplimit: {this.state.clipLimit}</div>
145
- <input
146
- type="range"
147
- min={0}
148
- max={40}
149
- value={this.state.clipLimit}
150
- onChange={(e) => this.handleClipLimitChange(e)}
151
- onMouseUp={(e) => this.releaseCLAHESlider(e)}
152
- />
153
- </div>
154
- );
155
- }
156
-
157
- renderClahe() {
158
- if (!this.props.enabled) return null;
159
- if (this.props.enabled === true) {
160
- return this.renderClaheContent();
161
- } else {
162
- if (this.props.enabled.clahe) {
163
- return this.renderClaheContent();
164
- }
165
- }
166
- }
167
-
168
- render() {
169
- if (!this.props.imageMeta) return null;
170
- const popupContent = (
171
- <div>
172
- {this.renderRotate()}
173
- {this.renderClahe()}
174
- </div>
175
- );
176
- return (
177
- <CPopover content={popupContent} placement="right">
178
- <span>
179
- <ToolbarItem faIcon={faFilter} />
180
- </span>
181
- </CPopover>
182
- );
183
- }
184
- }
185
-
186
- export default SIAFilterButton;