lost-sia 2.0.0-alpha0 → 2.0.0-alpha2

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 (87) hide show
  1. package/package.json +20 -3
  2. package/src/AnnoExampleViewer.jsx +61 -48
  3. package/src/AnnoLabelInput.jsx +94 -84
  4. package/src/AnnoToolBar.jsx +118 -97
  5. package/src/Annotation/AnnoBar.jsx +137 -131
  6. package/src/Annotation/Annotation.jsx +364 -328
  7. package/src/Annotation/Annotation.scss +24 -24
  8. package/src/Annotation/BBox.jsx +259 -251
  9. package/src/Annotation/Edge.jsx +79 -69
  10. package/src/Annotation/InfSelectionArea.jsx +56 -55
  11. package/src/Annotation/Line.jsx +60 -52
  12. package/src/Annotation/Node.jsx +242 -238
  13. package/src/Annotation/Point.jsx +175 -171
  14. package/src/Annotation/Polygon.jsx +337 -310
  15. package/src/Canvas.jsx +1910 -1720
  16. package/src/ImgBar.jsx +115 -107
  17. package/src/InfoBoxes/AnnoDetails.jsx +141 -141
  18. package/src/InfoBoxes/AnnoStats.jsx +90 -87
  19. package/src/InfoBoxes/InfoBox.jsx +63 -65
  20. package/src/InfoBoxes/InfoBoxArea.jsx +132 -130
  21. package/src/InfoBoxes/LabelInfo.jsx +103 -83
  22. package/src/LabelInput.jsx +204 -190
  23. package/src/Prompt.jsx +37 -38
  24. package/src/SIA.scss +8 -9
  25. package/src/SIAFilterButton.jsx +178 -169
  26. package/src/SIASettingButton.jsx +112 -107
  27. package/src/Sia.jsx +272 -285
  28. package/src/SiaPopup.jsx +13 -8
  29. package/src/ToolBar.jsx +394 -375
  30. package/src/Toolbar.css +8 -8
  31. package/src/ToolbarItem.jsx +28 -22
  32. package/src/filterTools.js +3 -3
  33. package/src/index.js +9 -11
  34. package/src/scss/_custom.scss +3 -0
  35. package/src/scss/_fixes.scss +6 -0
  36. package/src/scss/_layout.scss +6 -0
  37. package/src/scss/_variables.scss +4 -0
  38. package/src/scss/style-wrapper.scss +4 -0
  39. package/src/scss/style.scss +13 -0
  40. package/src/siaDummyData.js +241 -243
  41. package/src/stories/Button.jsx +54 -0
  42. package/src/stories/Button.stories.js +48 -0
  43. package/src/stories/Configure.mdx +369 -0
  44. package/src/stories/Header.jsx +69 -0
  45. package/src/stories/Header.stories.js +28 -0
  46. package/src/stories/Page.jsx +87 -0
  47. package/src/stories/Page.stories.js +28 -0
  48. package/src/stories/Sia.stories.jsx +61 -0
  49. package/src/stories/assets/accessibility.png +0 -0
  50. package/src/stories/assets/accessibility.svg +5 -0
  51. package/src/stories/assets/addon-library.png +0 -0
  52. package/src/stories/assets/assets.png +0 -0
  53. package/src/stories/assets/avif-test-image.avif +0 -0
  54. package/src/stories/assets/context.png +0 -0
  55. package/src/stories/assets/discord.svg +15 -0
  56. package/src/stories/assets/docs.png +0 -0
  57. package/src/stories/assets/figma-plugin.png +0 -0
  58. package/src/stories/assets/github.svg +3 -0
  59. package/src/stories/assets/share.png +0 -0
  60. package/src/stories/assets/styling.png +0 -0
  61. package/src/stories/assets/testing.png +0 -0
  62. package/src/stories/assets/theming.png +0 -0
  63. package/src/stories/assets/tutorials.svg +12 -0
  64. package/src/stories/assets/youtube.svg +4 -0
  65. package/src/stories/button.css +30 -0
  66. package/src/stories/header.css +32 -0
  67. package/src/stories/lost.js +54 -0
  68. package/src/stories/page.css +69 -0
  69. package/src/stories/siaDummyData.js +263 -0
  70. package/src/stories/store.js +18 -0
  71. package/src/types/annoStatus.js +4 -4
  72. package/src/types/canvasActions.js +51 -51
  73. package/src/types/cursorstyles.js +3 -3
  74. package/src/types/modes.js +8 -8
  75. package/src/types/notificationType.js +4 -4
  76. package/src/types/toolbarEvents.js +31 -31
  77. package/src/types/tools.js +9 -9
  78. package/src/utils/annoConversion.js +129 -99
  79. package/src/utils/colorlut.js +33 -32
  80. package/src/utils/constraints.js +76 -70
  81. package/src/utils/hist.js +52 -53
  82. package/src/utils/keyActions.js +96 -97
  83. package/src/utils/mouse.js +10 -10
  84. package/src/utils/siaIcons.jsx +106 -67
  85. package/src/utils/transform.js +259 -241
  86. package/src/utils/uiConfig.js +45 -45
  87. package/src/utils/windowViewport.js +26 -27
@@ -1,82 +1,92 @@
1
- import React, {Component} from 'react'
2
- import './Annotation.scss'
1
+ import React, { Component } from "react";
2
+ import "./Annotation.scss";
3
3
 
4
+ class Edge extends Component {
5
+ constructor(props) {
6
+ super(props);
7
+ this.state = {
8
+ haloCss: "node-halo-off",
9
+ };
10
+ }
4
11
 
12
+ componentDidUpdate() {}
5
13
 
6
- class Edge extends Component{
7
-
8
- constructor(props){
9
- super(props)
10
- this.state = {
11
- haloCss: 'node-halo-off'
12
- }
14
+ onMouseOver(e) {
15
+ if (this.props.isSelected) {
16
+ this.setState({ haloCss: "node-halo-on" });
13
17
  }
18
+ }
14
19
 
15
- componentDidUpdate(){
16
- }
17
-
18
- onMouseOver(e){
19
- if (this.props.isSelected){
20
- this.setState({haloCss: 'node-halo-on'})
21
- }
20
+ onMouseLeave(e) {
21
+ if (this.props.isSelected) {
22
+ this.setState({ haloCss: "node-halo-off" });
22
23
  }
24
+ }
23
25
 
24
- onMouseLeave(e){
25
- if (this.props.isSelected){
26
- this.setState({haloCss: 'node-halo-off'})
27
- }
26
+ onMouseDown(e) {
27
+ if (this.props.onMouseDown) {
28
+ this.props.onMouseDown(e, this.props.idx);
28
29
  }
30
+ }
29
31
 
30
- onMouseDown(e){
31
- if (this.props.onMouseDown){
32
- this.props.onMouseDown(e, this.props.idx)
33
- }
34
- }
35
-
36
- onMouseUp(e){
37
- e.stopPropagation()
38
- }
32
+ onMouseUp(e) {
33
+ e.stopPropagation();
34
+ }
39
35
 
40
- render(){
41
- let p1, p2
42
- if (!this.props.closingEdge){
43
- if (this.props.idx - 1 < 0 ){
44
- return null
45
- }
46
- if (this.props.idx > this.props.anno.length - 1){
47
- return null
48
- }
49
- p1 = this.props.anno[this.props.idx - 1 ]
50
- p2 = this.props.anno[this.props.idx]
51
- } else {
52
- if (this.props.idx === 0 && this.props.anno.length === 1) return null
53
- p1 = this.props.anno[this.props.anno.length-1]
54
- p2 = this.props.anno[0]
55
- }
56
- return(<g
57
- onMouseOver={(e) => {this.onMouseOver(e)}}
58
- onMouseLeave={e => {this.onMouseLeave(e)}}
59
-
60
- >
61
- <line x1={p1.x} y1={p1.y}
62
- x2={p2.x} y2={p2.y} stroke="black"
63
- // style={this.props.style}
64
- strokeWidth={this.props.style.strokeWidth*3}
65
- className={this.state.haloCss}
66
- onMouseOver={(e) => {this.onMouseOver(e)}}
67
- onMouseDown={e => this.onMouseDown(e)}
68
- onMouseUp={e => this.onMouseUp(e)}
69
- />
70
- <line x1={p1.x} y1={p1.y}
71
- x2={p2.x} y2={p2.y} stroke="black"
72
- style={this.props.style}
73
- className={this.props.className}
74
- onMouseDown={e => this.onMouseDown(e)}
75
- onMouseUp={e => this.onMouseUp(e)}
76
- />
77
- </g>
78
- )
36
+ render() {
37
+ let p1, p2;
38
+ if (!this.props.closingEdge) {
39
+ if (this.props.idx - 1 < 0) {
40
+ return null;
41
+ }
42
+ if (this.props.idx > this.props.anno.length - 1) {
43
+ return null;
44
+ }
45
+ p1 = this.props.anno[this.props.idx - 1];
46
+ p2 = this.props.anno[this.props.idx];
47
+ } else {
48
+ if (this.props.idx === 0 && this.props.anno.length === 1) return null;
49
+ p1 = this.props.anno[this.props.anno.length - 1];
50
+ p2 = this.props.anno[0];
79
51
  }
52
+ return (
53
+ <g
54
+ onMouseOver={(e) => {
55
+ this.onMouseOver(e);
56
+ }}
57
+ onMouseLeave={(e) => {
58
+ this.onMouseLeave(e);
59
+ }}
60
+ >
61
+ <line
62
+ x1={p1.x}
63
+ y1={p1.y}
64
+ x2={p2.x}
65
+ y2={p2.y}
66
+ stroke="black"
67
+ // style={this.props.style}
68
+ strokeWidth={this.props.style.strokeWidth * 3}
69
+ className={this.state.haloCss}
70
+ onMouseOver={(e) => {
71
+ this.onMouseOver(e);
72
+ }}
73
+ onMouseDown={(e) => this.onMouseDown(e)}
74
+ onMouseUp={(e) => this.onMouseUp(e)}
75
+ />
76
+ <line
77
+ x1={p1.x}
78
+ y1={p1.y}
79
+ x2={p2.x}
80
+ y2={p2.y}
81
+ stroke="black"
82
+ style={this.props.style}
83
+ className={this.props.className}
84
+ onMouseDown={(e) => this.onMouseDown(e)}
85
+ onMouseUp={(e) => this.onMouseUp(e)}
86
+ />
87
+ </g>
88
+ );
89
+ }
80
90
  }
81
91
 
82
- export default Edge;
92
+ export default Edge;
@@ -1,71 +1,72 @@
1
- import React, {Component} from 'react'
1
+ import React, { Component } from "react";
2
2
 
3
- class InfSelectionArea extends Component{
3
+ class InfSelectionArea extends Component {
4
+ constructor(props) {
5
+ super(props);
6
+ this.state = {
7
+ selAreaCss: "sel-area-off",
8
+ };
9
+ }
4
10
 
5
- constructor(props){
6
- super(props)
7
- this.state = {
8
- selAreaCss: 'sel-area-off',
9
- }
11
+ componentDidMount() {
12
+ if (this.props.enable) {
13
+ this.enableSelArea();
14
+ } else {
15
+ this.disableSelArea();
10
16
  }
17
+ }
11
18
 
12
- componentDidMount(){
13
- if (this.props.enable){
14
- this.enableSelArea()
15
- } else {
16
- this.disableSelArea()
17
- }
19
+ componentDidUpdate() {
20
+ if (this.props.enable) {
21
+ this.enableSelArea();
22
+ } else {
23
+ this.disableSelArea();
18
24
  }
25
+ }
19
26
 
20
- componentDidUpdate(){
21
- if (this.props.enable){
22
- this.enableSelArea()
23
- } else {
24
- this.disableSelArea()
25
- }
27
+ onMouseMove(e) {
28
+ if (this.props.onMouseMove) {
29
+ this.props.onMouseMove(e);
26
30
  }
31
+ }
27
32
 
28
- onMouseMove(e){
29
- if (this.props.onMouseMove){
30
- this.props.onMouseMove(e)
31
- }
33
+ onMouseUp(e) {
34
+ if (this.props.onMouseUp) {
35
+ this.props.onMouseUp(e);
32
36
  }
37
+ }
33
38
 
34
- onMouseUp(e){
35
- if (this.props.onMouseUp){
36
- this.props.onMouseUp(e)
37
- }
39
+ enableSelArea() {
40
+ if (this.state.selAreaCss !== "sel-area-on") {
41
+ this.setState({ selAreaCss: "sel-area-on" });
38
42
  }
43
+ }
39
44
 
40
- enableSelArea(){
41
- if (this.state.selAreaCss !== 'sel-area-on'){
42
- this.setState({selAreaCss: 'sel-area-on'})
43
- }
45
+ disableSelArea() {
46
+ if (this.state.selAreaCss !== "sel-area-off") {
47
+ this.setState({ selAreaCss: "sel-area-off" });
44
48
  }
49
+ }
45
50
 
46
- disableSelArea(){
47
- if (this.state.selAreaCss !== 'sel-area-off'){
48
- this.setState({selAreaCss: 'sel-area-off'})
49
- }
50
- }
51
-
52
-
53
- /*************
54
- * RENDERING *
55
- **************/
56
- render(){
57
- return(
58
- <circle
59
- cx={this.props.svg.width/2}
60
- cy={this.props.svg.height/2}
61
- r={'100%'}
62
- className={this.state.selAreaCss}
63
- onMouseMove={e => {this.onMouseMove(e)}}
64
- onMouseUp={e => {this.onMouseUp(e)}}
65
- />
66
- )
67
-
68
- }
51
+ /*************
52
+ * RENDERING *
53
+ **************/
54
+ render() {
55
+ return (
56
+ <circle
57
+ cx={this.props.svg.width / 2}
58
+ cy={this.props.svg.height / 2}
59
+ r={"100%"}
60
+ className={this.state.selAreaCss}
61
+ onMouseMove={(e) => {
62
+ this.onMouseMove(e);
63
+ }}
64
+ onMouseUp={(e) => {
65
+ this.onMouseUp(e);
66
+ }}
67
+ />
68
+ );
69
+ }
69
70
  }
70
71
 
71
- export default InfSelectionArea
72
+ export default InfSelectionArea;
@@ -1,60 +1,68 @@
1
- import React from 'react'
2
- import Polygon from './Polygon'
3
- import Edge from './Edge'
1
+ import React from "react";
2
+ import Polygon from "./Polygon";
3
+ import Edge from "./Edge";
4
4
 
5
- import * as modes from '../types/modes'
5
+ import * as modes from "../types/modes";
6
6
 
7
+ class Line extends Polygon {
8
+ /*************
9
+ * RENDERING *
10
+ **************/
7
11
 
8
-
9
- class Line extends Polygon{
10
-
11
- /*************
12
- * RENDERING *
13
- **************/
14
-
15
- renderEdges(){
16
- if (!this.props.isSelected) return null
17
- switch (this.state.anno.mode){
18
- case modes.VIEW:
19
- case modes.ADD:
20
- return this.state.anno.data.map((e, idx) => {
21
- return <Edge anno={this.state.anno.data}
22
- idx={idx} key={idx} style={this.props.style}
23
- className={this.props.className}
24
- isSelected={this.props.isSelected}
25
- onMouseDown={(e, idx) => {this.onEdgeMouseDown(e, idx)}}
26
- />
27
- })
28
- default:
29
- return null
30
- }
12
+ renderEdges() {
13
+ if (!this.props.isSelected) return null;
14
+ switch (this.state.anno.mode) {
15
+ case modes.VIEW:
16
+ case modes.ADD:
17
+ return this.state.anno.data.map((e, idx) => {
18
+ return (
19
+ <Edge
20
+ anno={this.state.anno.data}
21
+ idx={idx}
22
+ key={idx}
23
+ style={this.props.style}
24
+ className={this.props.className}
25
+ isSelected={this.props.isSelected}
26
+ onMouseDown={(e, idx) => {
27
+ this.onEdgeMouseDown(e, idx);
28
+ }}
29
+ />
30
+ );
31
+ });
32
+ default:
33
+ return null;
31
34
  }
35
+ }
32
36
 
33
- renderPolyline(){
34
- return <polyline points={this.toPolygonStr(this.state.anno.data)}
35
- fill='none' stroke="purple"
36
- style={{...this.props.style, fill:'none'}}
37
- className={this.props.className}
38
- />
39
- }
40
- render(){
41
- if (this.state.anno){
42
- return (
43
- <g
44
- onMouseMove={e => this.onMouseMove(e)}
45
- onMouseUp={e => this.onMouseUp(e)}
46
- onMouseDown={e => this.onMouseDown(e)}
47
- >
48
- {this.renderPolyline()}
49
- {this.renderEdges()}
50
- {this.renderNodes()}
51
- {this.renderInfSelectionArea()}
52
- </g>
53
- )
54
- } else {
55
- return <g></g>
56
- }
37
+ renderPolyline() {
38
+ return (
39
+ <polyline
40
+ points={this.toPolygonStr(this.state.anno.data)}
41
+ fill="none"
42
+ stroke="purple"
43
+ style={{ ...this.props.style, fill: "none" }}
44
+ className={this.props.className}
45
+ />
46
+ );
47
+ }
48
+ render() {
49
+ if (this.state.anno) {
50
+ return (
51
+ <g
52
+ onMouseMove={(e) => this.onMouseMove(e)}
53
+ onMouseUp={(e) => this.onMouseUp(e)}
54
+ onMouseDown={(e) => this.onMouseDown(e)}
55
+ >
56
+ {this.renderPolyline()}
57
+ {this.renderEdges()}
58
+ {this.renderNodes()}
59
+ {this.renderInfSelectionArea()}
60
+ </g>
61
+ );
62
+ } else {
63
+ return <g></g>;
57
64
  }
65
+ }
58
66
  }
59
67
 
60
- export default Line;
68
+ export default Line;