lost-sia 1.1.3 → 1.2.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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/utils/transform.js","../src/types/modes.js","../src/Annotation/AnnoBar.js","../src/Annotation/InfSelectionArea.js","../src/types/cursorstyles.js","../src/Annotation/Node.js","../src/types/canvasActions.js","../src/Annotation/Point.js","../src/utils/mouse.js","../src/Annotation/BBox.js","../src/Annotation/Edge.js","../src/Annotation/Polygon.js","../src/Annotation/Line.js","../src/types/annoStatus.js","../src/utils/colorlut.js","../src/utils/constraints.js","../src/types/notificationType.js","../src/Annotation/Annotation.js","../src/LabelInput.js","../src/AnnoLabelInput.js","../src/ImgBar.js","../src/Prompt.js","../src/AnnoToolBar.js","../src/utils/annoConversion.js","../src/utils/keyActions.js","../src/types/tools.js","../src/utils/hist.js","../src/utils/windowViewport.js","../../../../../../node_modules/react-draggable/dist/react-draggable.js","../src/InfoBoxes/InfoBox.js","../src/SiaPopup.js","../src/InfoBoxes/AnnoDetails.js","../src/InfoBoxes/AnnoStats.js","../src/AnnoExampleViewer.js","../src/InfoBoxes/LabelInfo.js","../src/InfoBoxes/InfoBoxArea.js","../src/Canvas.js","../src/types/toolbarEvents.js","../src/SIASettingButton.js","../src/filterTools.js","../src/SIAFilterButton.js","../src/utils/siaIcons.js","../src/ToolBar.js","../src/Sia.js","../src/siaDummyData.js"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","export function toSia(data, image, type, imgOffset){\n switch(type) {\n case 'bBox':\n const w = image.width * data.w\n const h = image.height * data.h\n const x0 = imgOffset.x + image.width * data.x - w/2.0\n const y0 = imgOffset.y + image.height * data.y - h/2.0\n return [\n {\n x: x0,\n y: y0\n },\n {\n x: x0 + w,\n y: y0\n },\n {\n x: x0 + w,\n y: y0 + h\n },\n {\n x: x0,\n y: y0 + h\n }\n ]\n case 'point':\n return [{\n x: imgOffset.x + image.width * data.x,\n y: imgOffset.y + image.height * data.y\n }]\n case 'line':\n case 'polygon':\n return data.map((e) => {\n return {\n x: imgOffset.x + image.width * e.x,\n y: imgOffset.y + image.height * e.y\n }\n })\n default:\n \n }\n}\n\n/**\n * Transform a sia annotation to backend format.\n * \n * @param {Array} data Annotation data\n * @param {*} svg Image object {width, height}\n * @param {String} type Type of the annotation bBox, point, line, polygon\n * @returns Annotation data in backend style (relative, centered)\n */\nexport function toBackend(data, svg, type, imgOffset={x:0,y:0}){\n const imgWidth = svg.width - 2*imgOffset.x\n const imgHeight = svg.height - 2*imgOffset.y\n switch(type) {\n case 'bBox':\n // const w = svg.width * data.w\n // const h = svg.height * data.h\n // const x0 = svg.width * data.x - w/2.0\n // const y0 = svg.height * data.y - h/2.0\n\n // console.error('GO On Here! w = max_x - min_x; h = max_y - min_y')\n const xList = data.map(e => {return e.x})\n const yList = data.map(e => {return e.y})\n const minX = Math.min(...xList) - imgOffset.x\n const maxX = Math.max(...xList) - imgOffset.x\n const minY = Math.min(...yList) - imgOffset.y\n const maxY = Math.max(...yList) - imgOffset.y\n const w = maxX - minX\n const h = maxY - minY\n const x = minX + w/2.0\n const y = minY + h/2.0\n return {\n x:x/imgWidth,\n y:y/imgHeight,\n w:w/imgWidth,\n h:h/imgHeight}\n case 'point':\n return {\n x: (data[0].x - imgOffset.x)/imgWidth,\n y: (data[0].y - imgOffset.y)/imgHeight\n }\n case 'line':\n case 'polygon':\n return data.map((e) => {\n return {\n x: (e.x - imgOffset.x)/ imgWidth,\n y: (e.y - imgOffset.y)/ imgHeight\n }\n })\n default:\n console.warn(\"Wrong annotation type!\")\n \n }\n}\n\nexport function getMinMaxPoints(data){\n const xList = data.map(e => {return e.x})\n const yList = data.map(e => {return e.y})\n const minPoint = {x:Math.min(...xList), y:Math.min(...yList)}\n const maxPoint = {x:Math.max(...xList), y:Math.max(...yList)}\n return [minPoint, maxPoint]\n}\n\n/**\n * Get area relative to the image \n * \n * @param {Array} data Annotation data\n * @param {*} scaledImg The scaled image object {width, height}\n * @param {String} type Type of the annotation bBox, point, line, polygon\n * @param {object} originalImg The original image\n * @returns Area relative\n */\nexport function getArea(data, scaledImg, type, originalImg){\n const relData = toBackend(data, scaledImg, type)\n switch(type) {\n case 'bBox':\n return Math.abs(relData.w*relData.h)* originalImg.width*originalImg.height\n // return relData.w*relData.h\n case 'line': \n case 'point':\n return undefined\n case 'polygon':\n let area = 0.0; // Accumulates area in the loop\n if (relData.length >2){\n let j = relData.length-1; // The last vertex is the 'previous' one to the first\n \n for (let i=0; i<relData.length; i++)\n { \n area = area + (relData[j].x+relData[i].x) * (relData[j].y-relData[i].y); \n j = i; //j is previous vertex to i\n }\n }\n return Math.abs(area/2) * originalImg.width*originalImg.height\n default:\n console.warn(\"Wrong annotation type!\")\n return undefined\n }\n}\n\nexport function move(data, movementX, movementY){\n return data.map(e => {\n return {\n x: e.x + movementX,\n y: e.y + movementY\n }\n })\n}\n\n\nexport function getBox(data, type){\n \n switch(type) {\n case 'bBox':\n return data\n case 'point':\n case 'line': \n case 'polygon':\n let maxX = 0\n let maxY = 0\n let minX = Infinity\n let minY = Infinity\n data.forEach(el => {\n if (el.x > maxX) maxX = el.x\n if (el.y > maxY) maxY = el.y\n if (el.x < minX) minX = el.x\n if (el.y < minY) minY = el.y\n })\n return [\n {x:minX, y:minY}, {x:maxX, y:minY},\n {x:minX, y:maxY}, {x:maxX, y:maxY}\n ]\n default:\n break\n \n }\n}\n\nexport function getCenter(data, type){\n let box = undefined\n switch(type) {\n case 'point':\n return data[0]\n case 'line':\n case 'polygon':\n case 'bBox':\n box = getBox(data, type)\n const w = box[1].x - box[0].x\n const h = box[3].y - box[0].y\n return {\n x: box[0].x + w/2.0,\n y: box[0].y + h/2.0\n } \n default:\n \n }\n}\n\n/**\n * Get point that is closest to the left browser side.\n * \n * @param {object} data list of points {x,y} \n * @returns {object} A list of point [{x,y}...]. Multiple points are\n * returned when multiple points have the same distance to the left side.\n */\nexport function getMostLeftPoint(data){\n let minX = Infinity\n let minXList = [] \n data.forEach(el => {\n if (el.x < minX){\n minX = el.x\n minXList = []\n minXList.push(el)\n } else if (el.x === minX) {\n minXList.push(el)\n }\n })\n return minXList\n}\n\n/**\n * Get point that is closest to the top of the browser.\n * \n * @param {object} data list of points {x,y} \n * @returns {object} A list of point [{x,y}...]. Multiple points are\n * returned when multiple points have the same distance to the top.\n */\nexport function getTopPoint(data){\n let minY = Infinity\n let minYList = [] \n data.forEach(el => {\n if (el.y < minY){\n minY = el.y\n minYList = []\n minYList.push(el)\n } else if (el.y === minY) {\n minYList.push(el)\n }\n })\n return minYList\n}\n\n/**\n * Check if all nodes of an annotation are within the image. If not,\n * correct the annotation\n * @param {object} data \n * @param {object} image \n * @param {object} imageOffset \n */\nexport function correctAnnotation(data, image, imageOffset){\n const imgWidth = image.width - 2*imageOffset.x\n const imgHeight = image.height - 2*imageOffset.y\n const corrected = data.map(el => {\n let x = el.x\n let y = el.y\n if (el.x <= imageOffset.x ){\n x = imageOffset.x\n } else if (el.x > (imgWidth + imageOffset.x)){\n x = imgWidth + imageOffset.x\n }\n if (el.y < imageOffset.y){\n y = imageOffset.y\n } else if (el.y > (imgHeight + imageOffset.y)){\n y = imgHeight + imageOffset.y\n }\n return {x:x,y:y}\n })\n return corrected\n}\n\n/**\n * Rotate annotation around center.\n * @param {*} data list of points {x:int,y:int} \n * @param {*} center Center to rotate point \n * @param {*} angle Rotation angle\n */\nexport function rotateAnnotation(data, center, angle){\n angle = (angle ) * (Math.PI/180); // Convert to radians\n const rotated = data.map(point => {\n return {\n x: Math.round(Math.cos(angle) * (point.x - center.x) - Math.sin(angle) * (point.y-center.y) + center.x),\n y: Math.round(Math.sin(angle) * (point.x - center.x) + Math.cos(angle) * (point.y - center.y) + center.y)\n }\n })\n return rotated;\n}\n\n/**\n * Resize annotation data in canvas format to new image size\n * @param {*} data Annotation data in canvas format [{x:int, y:int},...]\n * @param {*} sizeOld Size of old image {width:int, height:int}\n * @param {*} sizeNew Size of new image {width:int, height:int}\n */\nexport function resizeAnnoData(data, sizeOld, sizeNew){\n const xRatio = sizeNew.width / sizeOld.width\n const yRatio = sizeNew.height / sizeOld.height\n return data.map(e => {\n return {\n x: parseInt(e.x*xRatio),\n y: parseInt(e.y*yRatio)\n }\n })\n}","export const VIEW='view'\nexport const EDIT='edit'\nexport const CREATE='create'\nexport const MOVE='move'\nexport const ADD = 'add'\nexport const CAMERA_MOVE = 'cameraMove'\nexport const EDIT_LABEL = 'editLabel'\nexport const DELETED = 'deleted'","import React, {Component} from 'react'\nimport * as transform from '../utils/transform'\nimport * as modes from '../types/modes'\n\nconst defaultFontSize = 10\nconst defaultRectHeight = 15\n\nclass AnnoBar extends Component{\n\n constructor(props){\n super(props)\n this.state = {\n top: 0,\n left: 0,\n width: 50,\n height: defaultRectHeight,\n fontSize:defaultFontSize,\n }\n this.textRef = React.createRef()\n }\n \n /*************\n * EVENTS *\n **************/\n componentWillMount(){\n if (this.props.mode !== modes.CREATE) this.setPosition()\n }\n\n componentDidUpdate(){\n if (this.props.mode !== modes.CREATE){\n this.setPosition()\n } \n }\n\n handleClick(e: Event){\n e.preventDefault()\n if (this.props.onClick){\n this.props.onClick(e)\n }\n }\n /*************\n * LOGIC *\n *************/\n setPosition(){\n // const center = transform.getCenter(this.props.anno.data, this.props.anno.type)\n // const top = center.y\n // const left = center.x \n // if (this.state.top !== top || this.state.left !== left){ \n // this.setState({\n // top,\n // left\n // })\n // }\n let topPoint = transform.getTopPoint(this.props.anno.data)\n topPoint = transform.getMostLeftPoint(topPoint)[0]\n if (this.textRef.current){\n const text = this.textRef.current.getBoundingClientRect()\n const textPadding = 2\n let rectWidth = (text.width + textPadding)/this.props.svg.scale\n if (rectWidth !== this.state.width){\n this.setState({\n width: rectWidth,\n fontSize: Math.ceil(defaultFontSize/this.props.svg.scale),\n // height: Math.ceil(defaultFontSize/this.props.svg.scale)\n })\n }\n }\n let top = topPoint.y - 10 \n let left = topPoint.x + 7\n if (top < 0) top = topPoint.y + 10\n if (this.state.top !== top || this.state.left !== left){ \n this.setState({\n top,\n left,\n // width: annoBox[1].x - annoBox[0].x\n })\n }\n }\n\n /*************\n * RENDERING *\n **************/\n\n\n render(){\n let label = ''\n if (!this.props.possibleLabels) return null\n let labelObject \n if (this.props.anno.labelIds && this.props.anno.labelIds.length > 0){\n this.props.anno.labelIds.forEach((lbl, idx) => {\n labelObject = this.props.possibleLabels.find(el => {\n return el.id === lbl\n })\n if (idx > 0) label += ', '\n label += labelObject.label\n })\n } else {\n if (this.props.defaultLabel){\n if (Number.isInteger(this.props.defaultLabel)){\n labelObject = this.props.possibleLabels.find(el => {\n return el.id === this.props.defaultLabel\n })\n label = labelObject.label\n } else {\n label = this.props.defaultLabel\n }\n } else {\n label = 'no label'\n }\n }\n switch(this.props.mode){\n case modes.VIEW:\n return (<g>\n <rect x={this.state.left} y={this.state.top - 6} \n width={this.state.width} height={this.state.height} rx=\"5\" \n opacity='0.5'\n style={this.props.style}\n />\n <text x={this.state.left} y={this.state.top} \n fill=\"white\"\n onClick={e => this.handleClick(e)}\n textAnchor=\"start\"\n alignmentBaseline=\"central\"\n ref={this.textRef} \n fontSize={this.state.fontSize+\"pt\"}\n // textLength=\"50\"\n // style={{...this.props.style, strokeWidth:1}}\n > \n {label}\n </text>\n {/* This second rect is to prevent text from getting marked */}\n <rect x={this.state.left} y={this.state.top - 6} \n width={this.state.width} \n height={this.state.height} rx=\"5\" \n opacity='0.01'\n style={this.props.style}\n />\n </g>\n )\n default:\n return null\n }\n \n }\n \n}\n\nexport default AnnoBar","import React, {Component} from 'react'\n\nclass InfSelectionArea extends Component{\n\n constructor(props){\n super(props)\n this.state = {\n selAreaCss: 'sel-area-off',\n } \n }\n\n componentDidMount(){\n if (this.props.enable){\n this.enableSelArea()\n } else {\n this.disableSelArea()\n }\n }\n\n componentDidUpdate(){\n if (this.props.enable){\n this.enableSelArea()\n } else {\n this.disableSelArea()\n }\n }\n\n onMouseMove(e){\n if (this.props.onMouseMove){\n this.props.onMouseMove(e)\n }\n }\n\n onMouseUp(e){\n if (this.props.onMouseUp){\n this.props.onMouseUp(e)\n }\n }\n\n enableSelArea(){\n if (this.state.selAreaCss !== 'sel-area-on'){\n this.setState({selAreaCss: 'sel-area-on'})\n }\n }\n\n disableSelArea(){\n if (this.state.selAreaCss !== 'sel-area-off'){\n this.setState({selAreaCss: 'sel-area-off'})\n }\n }\n\n\n /*************\n * RENDERING *\n **************/\n render(){\n return(\n <circle \n cx={this.props.svg.width/2} \n cy={this.props.svg.height/2} \n r={'100%'}\n className={this.state.selAreaCss}\n onMouseMove={e => {this.onMouseMove(e)}}\n onMouseUp={e => {this.onMouseUp(e)}}\n />\n )\n \n }\n}\n\nexport default InfSelectionArea","export const CREATE_NODE = \"crosshair\"\nexport const EDIT_NODE = \"crosshair\"\nexport const NORMAL_NODE = \"default\"","import React, {Component} from 'react'\nimport './Annotation.scss'\nimport * as modes from '../types/modes'\nimport * as cursorstyles from '../types/cursorstyles'\n\n\nclass Node extends Component{\n\n /*************\n * LIFECYCLE *\n **************/\n constructor(props){\n super(props)\n this.state = {\n haloCss: 'node-halo-off',\n selAreaCss: 'sel-area-off',\n // anno: undefined,\n nodeSelected: false,\n style: {}\n }\n }\n\n componentDidMount(){\n this.setState({\n // anno: this.props.anno,\n style: {\n ...this.props.style,\n cursor: this.getCursorStyle(this.props.mode)\n }\n })\n // switch (this.props.mode){\n // case modes.CREATE:\n // if (this.props.idx !== 0){\n // this.turnSelAreaOn()\n // }\n // default:\n // break\n // }\n }\n\n componentDidUpdate(prevProps){\n switch (this.props.mode){\n case modes.CREATE:\n if (this.props.idx !== 0 || this.props.isPoint){\n this.turnSelAreaOn()\n }\n break\n case modes.EDIT:\n this.turnSelAreaOn()\n break\n default:\n break\n }\n //on mode change\n if (prevProps.mode !== this.props.mode){\n this.setState({\n style: {...this.state.style,\n cursor: this.getCursorStyle(this.props.mode)\n }\n })\n }\n if (prevProps.style !== this.props.style){\n this.setState({style: \n {...this.state.style,\n ...this.props.style,\n cursor: this.getCursorStyle(this.props.mode)}\n })\n }\n }\n\n /*************\n * EVENTS *\n **************/\n\n onClick(e){\n this.turnHaloOn()\n if (this.props.onClick){\n this.props.onClick(e, this.props.idx)\n }\n }\n\n onMouseMove(e){\n if (this.props.onMouseMove){\n this.props.onMouseMove(e, this.props.idx)\n }\n // switch (this.props.mode){\n // case modes.CREATE:\n // let newAnno = [...this.state.anno]\n // const mousePos = mouse.getMousePosition(e, this.props.svg)\n // newAnno[this.props.idx].x = mousePos.x\n // newAnno[this.props.idx].y = mousePos.y\n // this.setState({\n // anno: newAnno\n // })\n // if (this.props.onAnnoUpdate){\n // this.props.onAnnoUpdate(e, this.props.idx, newAnno)\n // }\n // default:\n // break\n // }\n }\n\n onContextMenu(e: Event){\n e.preventDefault()\n }\n\n onMouseUp(e: Event){\n switch (this.props.mode){\n case modes.EDIT:\n switch (e.button){\n case 0:\n this.turnSelAreaOff()\n break\n default:\n break\n }\n break\n default:\n break\n }\n if (this.props.onMouseUp){\n this.props.onMouseUp(e, this.props.idx)\n }\n }\n\n onMouseDown(e: Event){\n e.stopPropagation()\n if (this.props.onMouseDown){\n this.props.onMouseDown(e, this.props.idx)\n }\n switch (this.props.mode){\n case modes.CREATE:\n switch (e.button){\n case 0:\n this.turnSelAreaOff()\n break\n case 2:\n this.turnSelAreaOff()\n break\n default:\n break\n }\n // case modes.EDIT:\n // switch (e.button){\n // case 0:\n // this.turnSelAreaOn()\n // break\n // default:\n // break\n // }\n break\n default:\n break\n }\n }\n \n onMouseOver(e: Event){\n if (this.props.isSelected){\n this.turnHaloOn()\n }\n }\n\n onMouseLeave(e){\n if (this.props.isSelected){\n this.turnHaloOff()\n }\n }\n\n onDoubleClick(e){\n if (this.props.onDoubleClick){\n this.props.onDoubleClick(e, this.props.idx)\n }\n }\n\n handleMouseLeave(e){\n if (this.props.onMouseLeave){\n this.props.onMouseLeave(e, this.props.idx)\n }\n }\n\n\n /*************\n * LOGIC *\n **************/\n getCursorStyle(mode){\n switch(mode){\n case modes.CREATE:\n return cursorstyles.CREATE_NODE\n case modes.EDIT:\n return cursorstyles.EDIT_NODE\n case modes.VIEW:\n return cursorstyles.NORMAL_NODE\n default:\n break\n }\n }\n\n turnSelAreaOn(){\n if (this.state.selAreaCss !== 'sel-area-on'){\n this.setState({\n selAreaCss: 'sel-area-on'\n })\n }\n }\n\n turnSelAreaOff(){\n if (this.state.selAreaCss !== 'sel-area-off'){\n this.setState({\n selAreaCss: 'sel-area-off'\n })\n }\n }\n\n turnHaloOn(){\n this.setState({\n haloCss: 'node-halo-on'\n })\n }\n\n turnHaloOff(){\n this.setState({\n haloCss: 'node-halo-off'\n })\n }\n\n /*************\n * RENDERING *\n **************/\n renderHalo(){\n if (this.state.haloCss === 'node-halo-off') return null\n const data = this.props.anno[this.props.idx]\n\n return <circle cx={data.x} cy={data.y} r={this.props.style.r * 3}\n className={this.state.haloCss}\n onMouseLeave={e => this.onMouseLeave(e)}\n />\n }\n renderNodes(){\n const data = this.props.anno[this.props.idx]\n if (data === undefined) {return}\n return (\n <g\n onClick={(e) => this.onClick(e)}\n onMouseMove={e => this.onMouseMove(e)}\n onContextMenu={e => this.onContextMenu(e)}\n onMouseUp={e => this.onMouseUp(e)}\n onMouseDown={e => this.onMouseDown(e)}\n onDoubleClick={e => this.onDoubleClick(e)}\n onMouseLeave={e => this.handleMouseLeave(e)}\n >\n <circle cx={data.x} cy={data.y} r={'100%'}\n className={this.state.selAreaCss}\n />\n {this.renderHalo()}\n <circle cx={data.x} \n cy={data.y} \n r={3} fill=\"red\"\n style={this.state.style}\n className={this.props.className}\n onMouseOver={e => this.onMouseOver(e)}\n />\n </g>\n )\n }\n render(){\n return(\n <g>\n {this.renderNodes()}\n </g>\n )\n }\n}\n\nexport default Node;","//Anno actions\nexport const ANNO_DELETED='annoDeleted'\nexport const ANNO_SELECTED='annoSselected'\nexport const ANNO_CREATED='annoCreated'\nexport const ANNO_MOVED='annoMoved'\nexport const ANNO_ENTER_MOVE_MODE='annoEnterMoveMode'\nexport const ANNO_EDITED='annoEdited'\nexport const ANNO_ENTER_EDIT_MODE='annoEnterEditMode'\nexport const ANNO_ADDED_NODE='annoAddedNode'\nexport const ANNO_REMOVED_NODE='annoRemovedNode'\nexport const ANNO_LABEL_UPDATE='annoLabelUpdate'\nexport const ANNO_CREATED_NODE='annoCreatedNode'\nexport const ANNO_CREATED_FINAL_NODE='annoCreatedFinalNode'\nexport const ANNO_START_CREATING='annoStartCreating'\nexport const ANNO_COMMENT_UPDATE='annoCommentUpdate'\nexport const ANNO_MARK_EXAMPLE='annoMarkExample'\n\nexport const CANVAS_SVG_UPDATE='canvasSvgUpdate'\nexport const CANVAS_UI_CONFIG_UPDATE='canvasUiConfigUpdate'\nexport const CANVAS_AUTO_SAVE='canvasAutoSave'\nexport const CANVAS_LABEL_INPUT_CLOSE='canvasLabelInputClose'\nexport const CANVAS_IMG_LOADED='canvasImgLoaded'\nexport const CANVAS_IMGBAR_CLOSE='canvasImgbarClose'\n\n//Image actions\nexport const IMG_LABEL_UPDATE='imgLabelUpdate'\n","import React, {Component} from 'react'\nimport InfSelectionArea from './InfSelectionArea'\nimport Node from './Node'\nimport * as modes from '../types/modes'\nimport * as transform from '../utils/transform'\nimport * as canvasActions from '../types/canvasActions'\n\nclass Point extends Component{\n\n /*************\n * LIFECYCLE *\n **************/\n constructor(props){\n super(props)\n this.state = {\n anno: undefined,\n }\n }\n\n componentDidMount(prevProps){\n if (this.props.anno.mode === modes.CREATE){\n const data = this.props.anno.data[0]\n const newAnno = {\n ...this.props.anno,\n data: [\n {x: data.x, y: data.y}\n ],\n selectedNode: 0\n }\n this.setState({\n anno: newAnno\n })\n } else {\n this.setState({anno: {...this.props.anno}})\n }\n }\n\n componentDidUpdate(prevProps){\n if (prevProps.anno !== this.props.anno){\n this.setState({anno: {...this.props.anno}})\n }\n }\n \n /**************\n * ANNO EVENTS *\n ***************/\n onMouseMove(e){\n switch (this.state.anno.mode){\n case modes.MOVE:\n this.move(\n e.movementX/this.props.svg.scale, \n e.movementY/this.props.svg.scale\n )\n break\n default:\n break\n }\n }\n\n onMouseUp(e){\n switch (this.state.anno.mode){\n case modes.MOVE:\n if (e.button === 0){\n this.requestModeChange(this.state.anno, modes.VIEW)\n this.performedAction(this.state.anno, canvasActions.ANNO_MOVED)\n }\n break\n case modes.CREATE:\n this.requestModeChange(this.state.anno, modes.VIEW)\n\n this.performedAction(this.state.anno, canvasActions.ANNO_CREATED)\n break\n default:\n break\n }\n }\n\n onNodeMouseDown(e, idx){\n switch (this.state.anno.mode){\n case modes.VIEW:\n if (e.button === 0){\n if (this.props.isSelected){\n this.requestModeChange(this.state.anno, modes.MOVE)\n }\n }\n break\n default:\n break\n }\n }\n\n /*************\n * LOGIC *\n **************/\n getResult(){\n return this.state.anno\n }\n \n performedAction(anno, pAction){\n if (this.props.onAction){\n this.props.onAction(anno, pAction)\n }\n }\n\n requestModeChange(anno, mode){\n this.props.onModeChangeRequest(anno, mode)\n }\n\n move(movementX, movementY){\n this.setState({\n anno : {\n ...this.state.anno,\n data: transform.move(this.state.anno.data, movementX, movementY)\n }\n })\n }\n\n renderInfSelectionArea(){\n switch (this.state.anno.mode){\n case modes.MOVE:\n return <InfSelectionArea enable={true} \n svg={this.props.svg}\n />\n default:\n return null\n }\n }\n\n renderNode(){\n if (!this.props.isSelected) return null \n switch(this.state.anno.mode){\n case modes.EDIT_LABEL:\n case modes.MOVE:\n return null\n case modes.EDIT:\n case modes.CREATE:\n return <Node anno={this.state.anno.data}\n key={this.state.selectedNode}\n idx={this.state.anno.selectedNode} \n style={this.props.style}\n className={this.props.className} \n isSelected={this.props.isSelected}\n mode={this.state.anno.mode}\n svg={this.props.svg}\n onMouseDown={(e, idx) => this.onNodeMouseDown(e,idx)}\n isPoint={true}\n />\n default:\n return this.state.anno.data.map((e, idx) => {\n return <Node anno={this.state.anno.data} idx={idx} \n key={idx} style={this.props.style}\n className={this.props.className} \n isSelected={this.props.isSelected}\n mode={this.state.anno.mode}\n svg={this.props.svg}\n onMouseDown={(e, idx) => this.onNodeMouseDown(e,idx)}\n isPoint={true}\n />\n })\n }\n }\n\n renderPoint(){\n return this.state.anno.data.map((e, idx) => {\n return (\n <circle key={idx} \n cx={e.x} \n cy={e.y} \n r={10} fill=\"red\" \n style={this.props.style}\n className={this.props.className}\n />\n )\n })\n \n }\n\n render(){\n if (this.state.anno){\n return(\n <g\n onMouseMove={e => this.onMouseMove(e)}\n onMouseUp={e => this.onMouseUp(e)}\n >\n {this.renderPoint()}\n {this.renderNode()}\n {this.renderInfSelectionArea()}\n </g>\n )\n } else {\n return null\n }\n }\n}\n\nexport default Point;","export function getMousePosition(e, svg){\n const absPos = getMousePositionAbs(e, svg)\n return {\n x: (absPos.x )/svg.scale - svg.translateX,\n y: (absPos.y )/svg.scale - svg.translateY\n }\n}\n\nexport function getMousePositionAbs(e, svg){\n return {\n x: (e.pageX - svg.left),\n y: (e.pageY - svg.top)\n }\n}","import React, {Component} from 'react'\nimport './Annotation.scss';\nimport * as modes from '../types/modes'\nimport * as transform from '../utils/transform'\nimport * as canvasActions from '../types/canvasActions'\nimport * as mouse from '../utils/mouse'\nimport InfSelectionArea from './InfSelectionArea'\nimport Node from './Node'\n\nclass BBox extends Component{\n\n /*************\n * LIFECYCLE *\n **************/\n constructor(props){\n super(props)\n this.state = {\n anno: undefined,\n }\n }\n\n componentDidMount(prevProps){\n if (this.props.anno.mode === modes.CREATE){\n const data = this.props.anno.data[0]\n const newAnno = {\n ...this.props.anno,\n data: [\n {x: data.x, y: data.y},\n {x: data.x+1, y: data.y},\n {x: data.x+1, y: data.y+1},\n {x: data.x, y: data.y+1}\n ],\n selectedNode: 2\n }\n this.setState({\n anno: newAnno\n })\n // this.performedAction(newAnno, canvasActions.ANNO_START_CREATING)\n \n } else {\n this.setState({anno: {...this.props.anno}})\n }\n }\n\n componentDidUpdate(prevProps){\n if (prevProps.anno !== this.props.anno){\n this.setState({anno: {...this.props.anno}})\n }\n }\n\n /*************\n * EVENTS *\n **************/\n onNodeMouseMove(e, idx){\n switch (this.state.anno.mode){\n case modes.CREATE:\n case modes.EDIT:\n const mousePos = mouse.getMousePosition(e, this.props.svg)\n const idxMinus = idx - 1 < 0 ? 3 : idx -1\n const idxPlus = idx + 1 > 3 ? 0 : idx +1\n let newAnnoData = [...this.state.anno.data]\n if (idx % 2 === 0){\n newAnnoData[idxMinus].x = mousePos.x\n newAnnoData[idx].x = mousePos.x\n newAnnoData[idx].y = mousePos.y\n newAnnoData[idxPlus].y = mousePos.y\n } else {\n newAnnoData[idxMinus].y = mousePos.y\n newAnnoData[idx].x = mousePos.x\n newAnnoData[idx].y = mousePos.y\n newAnnoData[idxPlus].x = mousePos.x\n }\n this.setState({\n anno: {\n ...this.state.anno,\n data: newAnnoData\n }\n })\n break\n default:\n break\n }\n }\n\n onNodeMouseDown(e,idx){\n switch(this.state.anno.mode){\n case modes.VIEW:\n if (e.button === 0){\n this.requestModeChange(\n {...this.state.anno, selectedNode:idx}, \n modes.EDIT\n )\n }\n break\n default:\n break\n }\n }\n\n onNodeMouseUp(e, idx){\n switch(this.state.anno.mode){\n case modes.EDIT:\n if (e.button === 0){\n this.requestModeChange(this.state.anno, modes.VIEW)\n this.performedAction(this.state.anno, canvasActions.ANNO_EDITED)\n }\n break\n case modes.CREATE:\n if (e.button === 2){\n this.requestModeChange(this.state.anno, modes.VIEW)\n this.performedAction(this.state.anno, canvasActions.ANNO_CREATED)\n }\n break\n default:\n break\n }\n }\n\n handleNodeMouseLeave(e, idx){\n switch(this.state.anno.mode){\n //if mouse left Canvas in create mode, transit to VIEW mode\n case modes.CREATE:\n this.requestModeChange(this.state.anno, modes.VIEW)\n this.performedAction(this.state.anno, canvasActions.ANNO_CREATED)\n break\n default:\n break\n }\n }\n\n /**************\n * ANNO EVENTS *\n ***************/\n onMouseMove(e){\n switch (this.state.anno.mode){\n case modes.MOVE:\n this.move(\n e.movementX/this.props.svg.scale, \n e.movementY/this.props.svg.scale\n )\n break\n default:\n break\n }\n }\n\n onMouseUp(e){\n switch (this.state.anno.mode){\n case modes.MOVE:\n if (e.button === 0){\n this.requestModeChange(this.state.anno, modes.VIEW)\n this.performedAction(this.state.anno, canvasActions.ANNO_MOVED)\n }\n break\n default:\n break\n }\n }\n\n onMouseDown(e){\n switch (this.state.anno.mode){\n case modes.VIEW:\n if (e.button === 0){\n if (this.props.isSelected){\n this.requestModeChange(this.state.anno, modes.MOVE)\n }\n }\n break\n default:\n break\n }\n }\n /*************\n * LOGIC *\n **************/\n getResult(){\n return this.state.anno\n }\n \n requestModeChange(anno, mode){\n this.props.onModeChangeRequest(anno, mode)\n }\n\n performedAction(anno, pAction){\n if (this.props.onAction){\n this.props.onAction(anno, pAction)\n }\n }\n\n toPolygonStr(data){\n return data.map( (e => {\n return `${e.x},${e.y}`\n })).join(' ')\n \n }\n\n move(movementX, movementY){\n this.setState({\n anno : {\n ...this.state.anno,\n data: transform.move(this.state.anno.data, movementX, movementY)\n }\n })\n }\n\n /*************\n * RENDERING *\n **************/\n\n renderPolygon(){\n switch(this.state.anno.mode){\n default:\n return <polygon \n points={this.toPolygonStr(this.state.anno.data)}\n fill='none' stroke=\"purple\" \n style={this.props.style}\n className={this.props.className}\n onMouseDown={e => this.onMouseDown(e)}\n onMouseUp={e => this.onMouseUp(e)}\n /> \n }\n }\n\n renderNodes(){\n if (!this.props.isSelected) return null \n switch(this.state.anno.mode){\n case modes.MOVE:\n case modes.EDIT_LABEL:\n return null\n case modes.EDIT:\n case modes.CREATE:\n return <Node anno={this.state.anno.data}\n key={this.state.anno.selectedNode}\n idx={this.state.anno.selectedNode} \n style={this.props.style}\n className={this.props.className} \n isSelected={this.props.isSelected}\n mode={this.state.anno.mode}\n svg={this.props.svg}\n onMouseDown={(e, idx) => this.onNodeMouseDown(e,idx)}\n onMouseUp={(e, idx) => this.onNodeMouseUp(e, idx)}\n onMouseMove={(e, idx) => this.onNodeMouseMove(e, idx)}\n onMouseLeave={(e, idx) => this.handleNodeMouseLeave(e, idx)}\n />\n default:\n return this.state.anno.data.map((e, idx) => {\n return <Node anno={this.state.anno.data} idx={idx} \n key={idx} style={this.props.style}\n className={this.props.className} \n isSelected={this.props.isSelected}\n mode={this.state.anno.mode}\n svg={this.props.svg}\n onMouseDown={(e, idx) => this.onNodeMouseDown(e,idx)}\n onMouseUp={(e, idx) => this.onNodeMouseUp(e, idx)}\n onMouseLeave={(e, idx) => this.handleNodeMouseLeave(e, idx)}\n />\n })\n }\n }\n\n renderInfSelectionArea(){\n switch (this.state.anno.mode){\n case modes.MOVE:\n return <InfSelectionArea enable={true} \n svg={this.props.svg}\n />\n default:\n return null\n }\n }\n\n render(){\n if (this.state.anno){\n return (\n <g\n onMouseMove={e => this.onMouseMove(e)}\n onMouseUp={e => this.onMouseUp(e)}\n onMouseDown={e => this.onMouseDown(e)}\n >\n {this.renderPolygon()}\n {this.renderNodes()}\n {this.renderInfSelectionArea()}\n </g>)\n } else {\n return null\n }\n }\n\n}\n\nexport default BBox;","import React, {Component} from 'react'\nimport './Annotation.scss'\n\n\n\nclass Edge extends Component{\n\n constructor(props){\n super(props)\n this.state = {\n haloCss: 'node-halo-off'\n }\n }\n\n componentDidUpdate(){\n }\n \n onMouseOver(e){\n if (this.props.isSelected){\n this.setState({haloCss: 'node-halo-on'})\n }\n }\n\n onMouseLeave(e){\n if (this.props.isSelected){\n this.setState({haloCss: 'node-halo-off'})\n }\n }\n\n onMouseDown(e){\n if (this.props.onMouseDown){\n this.props.onMouseDown(e, this.props.idx)\n }\n }\n\n onMouseUp(e){\n e.stopPropagation()\n }\n\n render(){\n let p1, p2\n if (!this.props.closingEdge){\n if (this.props.idx - 1 < 0 ){\n return null\n }\n if (this.props.idx > this.props.anno.length - 1){\n return null\n }\n p1 = this.props.anno[this.props.idx - 1 ]\n p2 = this.props.anno[this.props.idx]\n } else {\n if (this.props.idx === 0 && this.props.anno.length === 1) return null\n p1 = this.props.anno[this.props.anno.length-1]\n p2 = this.props.anno[0]\n }\n return(<g\n onMouseOver={(e) => {this.onMouseOver(e)}}\n onMouseLeave={e => {this.onMouseLeave(e)}}\n \n >\n <line x1={p1.x} y1={p1.y} \n x2={p2.x} y2={p2.y} stroke=\"black\"\n // style={this.props.style} \n strokeWidth={this.props.style.strokeWidth*3}\n className={this.state.haloCss}\n onMouseOver={(e) => {this.onMouseOver(e)}}\n onMouseDown={e => this.onMouseDown(e)}\n onMouseUp={e => this.onMouseUp(e)}\n />\n <line x1={p1.x} y1={p1.y} \n x2={p2.x} y2={p2.y} stroke=\"black\"\n style={this.props.style} \n className={this.props.className}\n onMouseDown={e => this.onMouseDown(e)}\n onMouseUp={e => this.onMouseUp(e)}\n />\n </g>\n )\n }\n}\n\nexport default Edge;","import React, {Component} from 'react'\n\nimport Edge from './Edge'\nimport Node from './Node'\nimport InfSelectionArea from './InfSelectionArea'\n\nimport * as transform from '../utils/transform'\nimport * as canvasActions from '../types/canvasActions'\n\nimport './Annotation.scss'\nimport * as modes from '../types/modes'\nimport * as mouse from '../utils/mouse'\n\n\nclass Polygon extends Component{\n\n /*************\n * LIFECYCLE *\n **************/\n constructor(props){\n super(props)\n this.state = {\n anno: undefined,\n }\n }\n\n componentDidMount(){\n if (this.props.anno.mode === modes.CREATE){\n const data = this.props.anno.data[0]\n const newAnno = {\n ...this.props.anno,\n data: [\n {x: data.x, y: data.y},\n {x: data.x+1, y: data.y},\n ],\n selectedNode: 1\n }\n this.setState({\n anno: newAnno\n })\n } else {\n this.setState({anno: {...this.props.anno}})\n }\n }\n\n componentDidUpdate(prevProps){\n if (prevProps.anno !== this.props.anno){\n this.setState({anno: {...this.props.anno}})\n }\n }\n\n\n /**************\n * ANNO EVENTS *\n ***************/\n onMouseMove(e){\n switch (this.state.anno.mode){\n case modes.MOVE:\n this.move(\n e.movementX/this.props.svg.scale, \n e.movementY/this.props.svg.scale\n )\n break\n default:\n break\n }\n }\n\n onMouseUp(e){\n switch (this.state.anno.mode){\n case modes.MOVE:\n if (e.button === 0){\n this.performedAction(this.state.anno, canvasActions.ANNO_MOVED)\n this.requestModeChange(this.state.anno, modes.VIEW)\n }\n break\n default:\n break\n }\n }\n\n onMouseDown(e){\n switch (this.state.anno.mode){\n case modes.VIEW:\n if (e.button === 0){\n if (this.props.isSelected){\n this.requestModeChange(this.state.anno, modes.MOVE)\n }\n }\n break\n default:\n break\n }\n }\n /**************\n * NODE EVENTS *\n ***************/\n\n onNodeMouseUp(e, idx){\n switch (this.state.anno.mode){\n case modes.EDIT:\n this.performedAction(this.state.anno, canvasActions.ANNO_EDITED)\n this.requestModeChange(this.state.anno, modes.VIEW)\n break\n default:\n break\n }\n }\n\n onNodeMouseDown(e,idx){\n switch (this.state.anno.mode){\n case modes.CREATE:\n if (e.button === 2){\n let newAnnoData = [...this.state.anno.data]\n newAnnoData.push({\n x: newAnnoData[idx].x,\n y: newAnnoData[idx].y\n })\n const newAnno = {\n ...this.state.anno,\n data: newAnnoData,\n selectedNode: this.state.anno.selectedNode + 1\n }\n this.setState({\n anno: newAnno\n })\n this.performedAction(newAnno, \n canvasActions.ANNO_CREATED_NODE)\n }\n break\n case modes.VIEW:\n if (e.button === 0){\n this.requestModeChange({\n ...this.state.anno,\n selectedNode: idx\n }, modes.EDIT)\n }\n break\n default:\n break\n }\n }\n\n onNodeMouseMove(e, idx){\n switch (this.state.anno.mode){\n case modes.CREATE:\n this.updateAnnoByMousePos(e, idx)\n break\n case modes.EDIT:\n e.stopPropagation()\n this.updateAnnoByMousePos(e, idx)\n break\n default:\n break\n }\n }\n\n onNodeDoubleClick(e, idx){\n switch (this.state.anno.mode){\n case modes.CREATE:\n this.performedAction(this.state.anno, canvasActions.ANNO_CREATED_FINAL_NODE)\n break\n default:\n break\n }\n }\n \n /**************\n * EDGE EVENTS *\n ***************/\n onEdgeMouseDown(e, idx){\n switch (this.state.anno.mode){\n case modes.ADD:\n this.addNode(e, idx)\n break\n case modes.VIEW:\n if (e.button === 0){\n this.requestModeChange(this.state.anno, modes.MOVE)\n }\n break\n default:\n break\n }\n }\n\n /*************\n * LOGIC *\n *************/\n performedAction(anno, pAction){\n if (this.props.onAction){\n this.props.onAction(anno, pAction)\n }\n }\n\n toPolygonStr(data){\n return data.map( (e => {\n return `${e.x},${e.y}`\n })).join(' ')\n \n }\n\n requestModeChange(anno, mode){\n this.props.onModeChangeRequest(anno, mode)\n }\n\n move(movementX, movementY){\n this.setState({\n anno : {...this.state.anno,\n data: transform.move(this.state.anno.data, movementX, movementY)\n }\n })\n }\n\n addNode(e, idx){\n const mPos = mouse.getMousePosition(e, this.props.svg)\n let newAnnoData = this.state.anno.data.slice(0,idx)\n newAnnoData.push(mPos)\n const oldRest = this.state.anno.data.slice(idx)\n const newAnno = {\n ...this.state.anno,\n data: newAnnoData.concat(oldRest)\n }\n this.setState({anno: newAnno\n })\n this.performedAction(newAnno, canvasActions.ANNO_ADDED_NODE)\n }\n\n removeLastNode(){\n const newAnno = {\n ...this.state.anno,\n data: [...this.state.anno.data.slice(0, this.state.anno.data.length-1)],\n selectedNode: this.state.anno.selectedNode - 1\n }\n this.setState({anno: newAnno\n })\n this.performedAction(newAnno, canvasActions.ANNO_REMOVED_NODE)\n }\n\n updateAnnoByMousePos(e, idx){\n const mousePos = mouse.getMousePosition(e, this.props.svg)\n let newAnnoData = [...this.state.anno.data]\n newAnnoData[idx].x = mousePos.x\n newAnnoData[idx].y = mousePos.y\n this.setState({\n anno: {\n ...this.state.anno,\n data: newAnnoData\n }\n })\n }\n\n getResult(){\n return this.state.anno\n }\n\n /*************\n * RENDERING *\n **************/\n\n renderNodes(){\n if (!this.props.isSelected) return null\n switch (this.state.anno.mode){\n case modes.MOVE:\n return null\n case modes.EDIT:\n case modes.CREATE:\n return <Node anno={this.state.anno.data} idx={this.state.anno.selectedNode} \n key={this.state.anno.selectedNode} style={this.props.style}\n className={this.props.className} \n isSelected={this.props.isSelected}\n mode={this.state.anno.mode}\n svg={this.props.svg}\n onMouseDown={(e, idx) => this.onNodeMouseDown(e,idx)}\n onMouseUp={(e, idx) => this.onNodeMouseUp(e, idx)}\n onDoubleClick={(e, idx) => this.onNodeDoubleClick(e, idx)}\n onMouseMove={(e, idx) => this.onNodeMouseMove(e, idx)}\n />\n default:\n return this.state.anno.data.map((e, idx) => {\n return <Node anno={this.state.anno.data} idx={idx} \n key={idx} style={this.props.style}\n className={this.props.className} \n isSelected={this.props.isSelected}\n mode={this.state.anno.mode}\n svg={this.props.svg}\n onMouseDown={(e, idx) => this.onNodeMouseDown(e,idx)}\n onMouseUp={(e, idx) => this.onNodeMouseUp(e, idx)}\n onDoubleClick={(e, idx) => this.onNodeDoubleClick(e, idx)}\n onMouseMove={(e, idx) => this.onNodeMouseMove(e, idx)}\n />\n })\n }\n }\n\n renderEdges(){\n if (!this.props.isSelected) return null\n switch (this.state.anno.mode){\n case modes.VIEW:\n case modes.ADD:\n let edges = this.state.anno.data.map((e, idx) => {\n return <Edge anno={this.state.anno.data} \n idx={idx} key={idx} style={this.props.style}\n className={this.props.className}\n isSelected={this.props.isSelected}\n onMouseDown={(e, idx) => {this.onEdgeMouseDown(e, idx)}} \n />\n })\n edges.push(<Edge anno={this.state.anno.data} \n closingEdge={true} key={edges.length}\n idx={0}\n style={this.props.style}\n className={this.props.className}\n isSelected={this.props.isSelected}\n onMouseDown={(e, idx) => {this.onEdgeMouseDown(e, idx)}} \n />)\n return edges\n default:\n return null\n }\n }\n\n renderPolygon(){\n return <polygon points={this.toPolygonStr(this.state.anno.data)}\n fill='none' stroke=\"purple\" \n style={this.props.style}\n className={this.props.className}\n />\n }\n\n renderInfSelectionArea(){\n switch (this.state.anno.mode){\n case modes.MOVE:\n return <InfSelectionArea enable={true} \n svg={this.props.svg}\n />\n default:\n return null\n }\n }\n\n render(){\n if (this.state.anno){\n return (\n <g\n onMouseMove={e => this.onMouseMove(e)}\n onMouseUp={e => this.onMouseUp(e)}\n onMouseDown={e => this.onMouseDown(e)}\n >\n {this.renderPolygon()}\n {this.renderEdges()}\n {this.renderNodes()}\n {this.renderInfSelectionArea()}\n </g>\n )\n } else {\n return <g></g>\n }\n }\n}\n\nexport default Polygon;","import React from 'react'\nimport Polygon from './Polygon'\nimport Edge from './Edge'\n\nimport * as modes from '../types/modes'\n\n\n\nclass Line extends Polygon{\n\n /*************\n * RENDERING *\n **************/\n\n renderEdges(){\n if (!this.props.isSelected) return null\n switch (this.state.anno.mode){\n case modes.VIEW:\n case modes.ADD:\n return this.state.anno.data.map((e, idx) => {\n return <Edge anno={this.state.anno.data} \n idx={idx} key={idx} style={this.props.style}\n className={this.props.className}\n isSelected={this.props.isSelected}\n onMouseDown={(e, idx) => {this.onEdgeMouseDown(e, idx)}} \n />\n })\n default:\n return null\n }\n }\n\n renderPolyline(){\n return <polyline points={this.toPolygonStr(this.state.anno.data)}\n fill='none' stroke=\"purple\" \n style={{...this.props.style, fill:'none'}}\n className={this.props.className}\n />\n }\n render(){\n if (this.state.anno){\n return (\n <g\n onMouseMove={e => this.onMouseMove(e)}\n onMouseUp={e => this.onMouseUp(e)}\n onMouseDown={e => this.onMouseDown(e)}\n >\n {this.renderPolyline()}\n {this.renderEdges()}\n {this.renderNodes()}\n {this.renderInfSelectionArea()}\n </g>\n )\n } else {\n return <g></g>\n }\n }\n}\n\nexport default Line;","export const NEW='new'\nexport const DELETED='deleted'\nexport const DATABASE='database'\nexport const CHANGED='changed'","// const colors30 = [\"#dc9769\",\n// \"#5c69d6\",\n// \"#51a630\",\n// \"#9a59cc\",\n// \"#a1bb37\",\n// \"#c043a6\",\n// \"#5fc666\",\n// \"#de4282\",\n// \"#58c699\",\n// \"#d2404e\",\n// \"#42c0c7\",\n// \"#d95130\",\n// \"#598cdd\",\n// \"#df8830\",\n// \"#50a2d1\",\n// \"#c8a73f\",\n// \"#d87ed5\",\n// \"#3e7f38\",\n// \"#af94d8\",\n// \"#7b8b2d\",\n// \"#635ea2\",\n// \"#a1b56d\",\n// \"#a93e62\",\n// \"#3e8d68\",\n// \"#df82ab\",\n// \"#616c2c\",\n// \"#955282\",\n// \"#91692d\",\n// \"#d47776\",\n// \"#a94e2c\"]\n\nconst colors20 = [\"#46aed7\",\n\"#e28f81\",\n\"#50b897\",\n\"#88712f\",\n\"#9cb067\",\n\"#a4527d\",\n\"#a55046\",\n\"#6e90da\",\n\"#487b3b\",\n\"#6360a7\",\n\"#cd8fd3\",\n\"#d5a442\",\n\"#cf7635\",\n\"#da4971\",\n\"#a4b137\",\n\"#d44da4\",\n\"#aa54be\",\n\"#5ab74d\",\n\"#7166d9\",\n\"#d14734\"]\n\nconst colors = colors20\nconst nColors = 20\n\nexport function getColor(n){\n if (n){\n return colors[n%nColors]\n }\n else{\n return getDefaultColor() \n }\n}\n\nexport function getDefaultColor(){\n return colors[0]\n}","import * as annoStatus from '../types/annoStatus'\n\n /**\n * Check if labels can be changed for a specific annotation\n * \n * @param allowedActions Actions that are allowed, read from config\n * @param anno Annotation that should be checked\n * @returns {Boolean}\n */\n export function allowedToLabel(allowedActions, anno){\n if (allowedActions.label){\n return true\n // const status = anno.status\n // if (!status) return true\n // if (status !== annoStatus.NEW){\n // if (allowedActions.edit.label){\n // return true\n // } else {\n // console.warn('You may not edit the label of this annotation as defined by config!', anno)\n // return false\n // }\n // } else {\n // // Return always true if labeling is allowed in general\n // // and annotation was not edited (it was NEW)\n // return true\n // }\n } else {\n console.warn('You may not edit the label of this annotation as defined by config!', anno)\n return false\n }\n }\n\n // /**\n // * Check if config allows to delete a specific annotation.\n // * \n // * @param allowedActions Actions that are allowed, read from config\n // * @param anno Annotation that should be checked\n // * @returns {Boolean}\n // */\n // export function allowedToDelete(allowedActions, anno){\n // const status = anno.status\n // if (!status) return true\n // if (status !== annoStatus.NEW){\n // if(allowedActions.edit.delete){\n // return true\n // } else {\n // console.warn('You may not delete this annotation as defined by config!', anno)\n // return false\n // }\n // } else {\n // return true\n // }\n // }\n\n /**\n * Check if config allows to edit a specific annotation.\n * \n * @param allowedActions Actions that are allowed, read from config\n * @param anno Annotation that should be checked\n * @returns {Boolean}\n */\n export function allowedToEdit(allowedActions, anno){\n const status = anno.status\n if (!status) return true\n if (status !== annoStatus.NEW){\n if(allowedActions.edit){\n return true\n } else {\n console.warn('You may not edit bounds of this annotation as defined by config!', anno)\n return false\n }\n } else {\n return true\n }\n }","export const INFO='info'\nexport const SUCCESS='success'\nexport const WARNING='warning'\nexport const ERROR='error'","import React, {Component} from 'react'\n\nimport AnnoBar from './AnnoBar'\nimport Point from './Point'\nimport BBox from './BBox'\nimport Line from './Line'\nimport Polygon from './Polygon'\nimport * as modes from '../types/modes'\nimport * as canvasActions from '../types/canvasActions'\nimport * as annoStatus from '../types/annoStatus'\nimport * as colorlut from '../utils/colorlut'\nimport * as constraints from '../utils/constraints'\nimport * as transform from '../utils/transform'\nimport * as notificationType from '../types/notificationType'\n\nclass Annotation extends Component{\n\n constructor(props){\n super(props)\n this.state = {\n // mode: modes.VIEW,\n selAreaCss: 'sel-area-off',\n visibility: 'visible',\n anno: undefined\n }\n this.myAnno = React.createRef()\n \n }\n\n componentWillMount(){\n this.setState({anno: {...this.props.data}})\n }\n\n componentDidUpdate(prevProps){\n if (prevProps.data !== this.props.data){\n this.setState({anno: {...this.props.data}})\n }\n if (prevProps.showSingleAnno !== this.props.showSingleAnno){\n if (this.props.showSingleAnno === undefined){\n this.setVisible(true)\n } else {\n if (this.props.showSingleAnno !== this.props.data.id){\n this.setVisible(false)\n } else {\n this.setVisible(true)\n }\n }\n }\n if (this.props.showSingleAnno === undefined){\n if (this.state.anno.visible !== undefined){\n if (this.state.anno.visible){\n this.setVisible(true)\n } else {\n this.setVisible(false)\n }\n }\n } \n \n }\n \n /*************\n * EVENTS *\n **************/\n onClick(e: Event){\n e.stopPropagation()\n this.performedAction(this.state.anno, canvasActions.ANNO_SELECTED)\n }\n\n onMouseDown(e: Event){\n e.preventDefault()\n if (this.props.onMouseDown){\n this.props.onMouseDown(e)\n }\n }\n\n onContextMenu(e: Event){\n e.preventDefault()\n }\n\n handleModeChangeRequest(anno, mode){\n this.setMode(anno, mode)\n }\n\n /*************\n * LOGIC *\n *************/\n \n /**\n * Trigger callback when this annotation performed an action\n * \n * @param {String} pAction \n */\n performedAction(anno, pAction){\n\n if (this.props.onAction){\n this.props.onAction(anno, pAction)\n }\n }\n\n\n notify(messageObj){\n if (this.props.onNotification){\n this.props.onNotification(messageObj)\n }\n }\n\n /**\n * Handle a performed action from a specific annotation\n * \n * @param {list} annoData - Annotation data that define a box, line, \n * polygon, point\n * @param {string} pAction - The performed action\n * @param {int} selectedNode - The node of the annotation that \n * was selected\n */\n performedAnnoAction(anno, pAction){\n\n switch(pAction){\n case canvasActions.ANNO_CREATED_FINAL_NODE:\n case canvasActions.ANNO_EDITED:\n case canvasActions.ANNO_MOVED:\n case canvasActions.ANNO_CREATED:\n // Check if annoation is within image bounds\n const corrected = transform.correctAnnotation(anno.data, this.props.svg, this.props.imageOffset)\n let newAnno = {...anno, data: corrected}\n const area = transform.getArea(corrected, this.props.svg, anno.type, this.props.image)\n if (area!==undefined){\n if(area < this.props.canvasConfig.annos.minArea){\n this.notify({\n title: \"Annotation to small\",\n message: 'Annotation area was '+Math.round(area)+'px but needs to be bigger than '+ this.props.canvasConfig.annos.minArea+' px',\n type: notificationType.WARNING\n })\n // newAnno = {...newAnno, mode: modes.DELETED}\n this.setMode(newAnno, modes.DELETED)\n } else {\n this.performedAction(newAnno, pAction)\n }\n } else {\n this.performedAction(newAnno, pAction)\n }\n break\n default:\n this.performedAction(anno, pAction)\n break\n }\n }\n\n setAnnoMode(anno, mode){\n this.setState({\n anno: {\n ...anno,\n mode: mode\n }\n })\n }\n\n setMode(anno, mode){\n if (anno.mode !== mode){\n switch (mode){\n case modes.EDIT_LABEL:\n if (constraints.allowedToLabel(\n this.props.allowedActions,\n anno\n )){\n this.setAnnoMode(anno, mode)\n }\n break\n case modes.DELETED:\n // if(constraints.allowedToDelete(\n // this.props.allowedActions,\n // anno\n // )){\n this.setAnnoMode(anno, mode)\n const newAnno = {\n ...anno, \n // status: annoStatus.DELETED\n mode: mode.DELETED\n }\n // this.setState({\n // anno: newAnno\n // })\n this.performedAction(newAnno, canvasActions.ANNO_DELETED)\n // }\n break\n case modes.MOVE:\n this.setAnnoMode(anno, mode)\n this.performedAction(anno, canvasActions.ANNO_ENTER_MOVE_MODE)\n break\n case modes.EDIT:\n this.setAnnoMode(anno, mode)\n this.performedAction(anno, canvasActions.ANNO_ENTER_EDIT_MODE)\n break\n default:\n this.setAnnoMode(anno, mode)\n break\n }\n }\n }\n\n setVisible(visible){\n if (visible){\n if (this.state.visibility !== 'visible'){\n this.setState({visibility: 'visible'})\n }\n } else {\n if (this.state.visibility !== 'hidden'){\n this.setState({visibility: 'hidden'})\n }\n }\n }\n\n isSelected(){\n if (constraints.allowedToEdit(this.props.allowedActions, this.state.anno)){\n return this.props.selectedAnno === this.props.data.id\n } else {\n return false\n }\n }\n\n getResult(){\n return {\n ...this.state.anno,\n data: this.myAnno.current.state.anno,\n createMode: this.myAnno.current.state.mode === modes.CREATE\n }\n }\n\n getLabel(lblId){\n return this.props.possibleLabels.find( e => {\n return e.id === lblId\n })\n }\n \n getColor(){\n if (this.state.anno.labelIds && this.state.anno.labelIds.length > 0){\n return this.getLabel(this.state.anno.labelIds[0]).color\n }\n else {\n return colorlut.getDefaultColor()\n }\n }\n\n getStyle(){\n const color = this.getColor()\n if (this.isSelected()){\n return {\n stroke: color,\n fill: color,\n strokeWidth: this.props.uiConfig.strokeWidth/this.props.svg.scale,\n r:this.props.uiConfig.nodeRadius/this.props.svg.scale\n\n }\n } else {\n return {\n stroke: color,\n fill: color,\n strokeWidth: this.props.uiConfig.strokeWidth/this.props.svg.scale,\n r:this.props.uiConfig.nodeRadius/this.props.svg.scale\n }\n }\n }\n\n getCssClass(){\n if (this.isSelected()){\n return 'selected'\n } else {\n return 'not-selected'\n }\n }\n\n /*************\n * RENDERING *\n **************/\n renderAnno(){\n const type = this.props.type\n // const allowedToEdit = constraints.allowedToEditBounds(\n // this.props.allowedActions,\n // this.state.anno\n // )\n switch(type) {\n case 'point':\n return <Point ref={this.myAnno} anno={this.state.anno} \n style={this.getStyle()}\n className={this.getCssClass()}\n isSelected={this.isSelected()}\n svg={this.props.svg}\n onModeChangeRequest={(anno, mode) => this.handleModeChangeRequest(anno, mode)}\n onAction={(anno, pAction) => this.performedAnnoAction(anno, pAction)}\n />\n case 'bBox':\n return <BBox ref={this.myAnno} anno={this.state.anno} \n style={this.getStyle()}\n className={this.getCssClass()}\n onNodeClick={(e, idx) => this.onNodeClick(e, idx)}\n onNodeMouseDown={(e, idx) => this.onNodeMouseDown(e, idx)}\n isSelected={this.isSelected()}\n svg={this.props.svg}\n onModeChangeRequest={(anno, mode) => this.handleModeChangeRequest(anno, mode)}\n onAction={(anno, pAction) => this.performedAnnoAction(anno, pAction)}\n />\n case 'polygon':\n return <Polygon ref={this.myAnno} anno={this.state.anno} \n style={this.getStyle()}\n className={this.getCssClass()}\n onNodeClick={(e, idx) => this.onNodeClick(e, idx)}\n isSelected={this.isSelected()}\n svg={this.props.svg}\n onModeChangeRequest={(anno, mode) => this.handleModeChangeRequest(anno, mode)}\n onAction={(anno, pAction) => this.performedAnnoAction(anno, pAction)}\n />\n case 'line':\n return <Line ref={this.myAnno} anno={this.state.anno}\n style={this.getStyle()}\n className={this.getCssClass()}\n isSelected={this.isSelected()}\n svg={this.props.svg}\n onAction={(anno, pAction) => this.performedAnnoAction(anno, pAction)}\n onModeChangeRequest={(anno, mode) => this.handleModeChangeRequest(anno, mode)}\n />\n default:\n console.error(\"Wrong annoType for annotations: \",\n this.props.annoType)\n } \n }\n \n renderAnnoBar(){\n return <AnnoBar \n anno={this.state.anno} \n mode={this.state.anno.mode}\n possibleLabels={this.props.possibleLabels}\n onClick={e => this.onClick(e)}\n style={this.getStyle()}\n svg={this.props.svg}\n defaultLabel={this.props.defaultLabel}\n />\n }\n render(){\n if(!this.state.anno.data) return null\n if(!this.props.possibleLabels) return null\n if(this.state.anno.status === annoStatus.DELETED) return null\n return (\n <g>\n <g visibility={this.state.visibility}\n onClick={e => this.onClick(e)}\n onMouseDown={e => this.onMouseDown(e)}\n onContextMenu={e => this.onContextMenu(e)}\n >\n {this.renderAnnoBar()}\n {this.renderAnno()}\n\n </g>\n </g>\n )\n }\n}\n\nexport default Annotation","import React, {Component} from 'react'\nimport { Dropdown, Ref, Popup, Header} from 'semantic-ui-react'\n\nclass LabelInput extends Component{\n\n constructor(props){\n super(props)\n this.state = {\n label: [],\n possibleLabels: [],\n performInit: true,\n enterHits: 0,\n confirmLabel: 0\n }\n this.inputRef = React.createRef()\n }\n\n componentWillMount(){\n this.updatePossibleLabels()\n }\n\n componentDidMount(){\n if(this.props.initLabelIds){\n this.setState({performInit:true})\n }\n }\n\n componentDidUpdate(prevProps, prevState){\n if (this.props.visible){\n if (this.props.focusOnRender){\n if (this.inputRef.current){\n this.inputRef.current.click()\n }\n }\n\n }\n if (prevState.confirmLabel !== this.state.confirmLabel){\n this.annoLabelUpdate(this.state.label)\n this.closeLabelInput()\n }\n if (prevProps.possibleLabels !== this.props.possibleLabels){\n this.updatePossibleLabels()\n }\n if (this.props.initLabelIds){\n if (this.state.performInit){\n this.setState({performInit: false})\n if(this.props.initLabelIds.length > 0){\n this.setState({label: this.props.initLabelIds})\n // const lbl = this.state.possibleLabels.find(e => {\n // return e.value === this.props.initLabelIds[0]\n // })\n // if (lbl){\n // this.setState({label:lbl.value})\n // }\n } else {\n this.setState({label:[]})\n }\n }\n if (prevProps.initLabelIds !== this.props.initLabelIds){\n this.setState({performInit:true})\n }\n }\n if(prevProps.relatedId !== this.props.relatedId){\n this.setState({performInit:true})\n }\n }\n /*************\n * EVENTS *\n **************/\n onKeyDown(e: Event){\n e.stopPropagation()\n this.performKeyAction(e.key)\n\n }\n\n onChange(e, item ){\n let lbl \n if (this.props.multilabels){\n lbl = item.value !== -1 ? item.value : []\n } else {\n lbl = item.value !== -1 ? [item.value] : []\n }\n this.setState({ label: lbl})\n this.annoLabelUpdate(lbl)\n // this.inputRef.current.click()\n }\n\n onItemClick(e, item){\n this.confirmLabel()\n }\n\n\n /*************\n * LOGIC *\n *************/\n updatePossibleLabels(){\n let possibleLabels = []\n let defaultLabel\n if (this.props.defaultLabel){\n if (Number.isInteger(this.props.defaultLabel)){\n defaultLabel = undefined\n } else {\n defaultLabel = this.props.defaultLabel\n }\n } else {\n defaultLabel = 'no label'\n }\n \n if (this.props.possibleLabels.length > 0){\n possibleLabels = this.props.possibleLabels.map(e => {\n return {\n key: e.id, value: e.id, text: e.label,\n content: (<div onClick={(event) => this.onItemClick(event, e.id)}>\n {e.label}</div>)\n }\n })\n }\n if (defaultLabel){\n possibleLabels.unshift({\n key: -1, value: -1, text: defaultLabel,\n content: (<div onClick={(event) => this.onItemClick(event, -1)}>\n {defaultLabel}</div>)\n })\n }\n this.setState({possibleLabels})\n\n }\n\n performKeyAction(key){\n switch(key){\n case 'Enter':\n if (!this.props.multilabels){\n if (this.props.visible) this.confirmLabel()\n }\n break\n case 'Escape':\n this.closeLabelInput()\n break\n default:\n break\n }\n }\n\n annoLabelUpdate(label){\n if (this.props.onLabelUpdate){\n this.props.onLabelUpdate(label.filter(val=>{\n return val !== -1\n }))\n }\n }\n\n\n confirmLabel(){\n //If not allowed to label -> return\n this.setState({confirmLabel: this.state.confirmLabel+1})\n }\n\n closeLabelInput(){\n if (this.props.onClose){\n this.props.onClose()\n }\n }\n\n // triggerPopup(visible=true){\n // this.setState({\n // popupOpen: visible\n // })\n // }\n\n /*************\n * RENDERING *\n **************/\n renderLabelInput(){\n let lbl\n if (this.props.multilabels){\n lbl = this.state.label\n } else {\n if (this.state.label.length > 0){\n lbl = this.state.label[0]\n } else {\n lbl = -1\n }\n }\n\n return (\n <Ref innerRef={this.inputRef}>\n <Dropdown\n multiple={this.props.multilabels}\n search\n selection\n closeOnChange\n icon=\"search\"\n options={this.state.possibleLabels}\n placeholder='Enter label'\n tabIndex={0}\n onKeyDown= {e => this.onKeyDown(e)}\n value={lbl}\n onChange={(e, item) => this.onChange(e, item)}\n style={{opacity:0.8}}\n disabled={this.props.disabled}\n open={this.props.open}\n />\n </Ref>\n )\n }\n renderLabelInfo(){\n if (!this.state.label) return null\n let lbl = undefined\n if (this.state.label.length > 0){\n lbl = this.props.possibleLabels.find(e => {\n return this.state.label[this.state.label.length-1] === e.id\n })\n }\n if (!lbl) return \"No label\"\n return <div>\n <Header>{\n lbl.label\n }</Header>\n <div dangerouslySetInnerHTML={{__html: lbl.description}} />\n </div>\n }\n\n renderPopupContent(){\n return <div>\n {this.renderLabelInfo()}\n {/* {this.renderAnnoDetails()} */}\n </div>\n }\n\n\n render(){\n if (!this.props.visible) return null\n if (this.props.renderPopup){\n return (\n <Popup trigger={this.renderLabelInput()}\n content={this.renderPopupContent()}\n open\n position=\"right center\"\n style={{opacity:0.9}}\n />\n )\n } else {\n return this.renderLabelInput()\n }\n\n }\n\n}\n\nexport default LabelInput\n","import React, {Component} from 'react'\nimport LabelInput from './LabelInput'\nimport * as constraints from './utils/constraints'\nimport * as annoStatus from './types/annoStatus'\n\nclass AnnoLabelInput extends Component{\n\n constructor(props){\n super(props)\n this.state = {\n top: 400,\n left: 100,\n label: undefined,\n visibility: 'hidden',\n possibleLabels: []\n }\n this.inputGroupRef = React.createRef()\n }\n\n componentWillMount(){\n this.setPosition()\n }\n \n componentDidUpdate(prevProps){\n if (this.props.visible){\n this.setPosition()\n } \n\n \n }\n\n /*************\n * LOGIC *\n *************/\n setPosition(){\n\n if (this.props.mousePos){\n const top = this.props.mousePos.y + this.props.svg.top - 10\n const left = this.props.mousePos.x + this.props.svg.left - 10\n if (this.state.top !== top|| this.state.left !== left){ \n this.setState({\n top: top,\n left: left,\n })\n }\n }\n }\n\n onClose(){\n if (this.props.onClose){\n this.props.onClose()\n }\n }\n \n annoLabelUpdate(anno){\n if (this.props.onLabelUpdate){\n this.props.onLabelUpdate(anno)\n }\n }\n\n updateAnnoLabel(label){\n if (!constraints.allowedToLabel(\n this.props.allowedActions, this.props.selectedAnno)) return\n this.annoLabelUpdate({\n ...this.props.selectedAnno,\n labelIds: label,\n status: this.props.selectedAnno.status !== annoStatus.NEW ? annoStatus.CHANGED : annoStatus.NEW\n })\n }\n\n\n /*************\n * RENDERING *\n **************/\n render(){\n if (!this.props.visible) return null\n return (\n <div ref={this.inputGroupRef} style={{position:'fixed', top:this.state.top, left:this.state.left}}>\n <LabelInput svg={this.props.svg}\n onClose={() => this.onClose()}\n initLabelIds={this.props.selectedAnno.labelIds}\n relatedId={this.props.selectedAnno.id}\n visible={this.props.visible}\n onLabelUpdate={label => this.updateAnnoLabel(label)}\n possibleLabels={this.props.possibleLabels}\n multilabels={this.props.multilabels}\n disabled={!this.props.allowedActions.label}\n renderPopup\n focusOnRender\n open={true}\n defaultLabel={this.props.defaultLabel}\n />\n </div>\n )\n }\n \n}\n\nexport default AnnoLabelInput","import React, {Component} from 'react'\nimport { Menu } from 'semantic-ui-react'\n\nclass ImgBar extends Component{\n\n constructor(props) {\n super(props)\n this.state = {\n position: {\n top: 0,\n left: 0,\n },\n }\n }\n\n componentDidMount(){\n \n }\n componentDidUpdate(prevProps){\n\n if (this.props.svg !== prevProps.svg){\n this.setState({\n position: {...this.state.position,\n left: this.props.svg.left,\n top: this.props.svg.top,\n }\n })\n }\n }\n\n /*********\n * Events\n *********/\n handleLabelUpdate(label){\n if (this.props.onLabelUpdate){\n this.props.onLabelUpdate(label)\n }\n }\n \n handleClose(){\n if (this.props.onClose){\n this.props.onClose()\n }\n }\n\n handleMouseEnter(e){\n if (this.props.onMouseEnter){\n this.props.onMouseEnter(e)\n }\n }\n\n // renderImgLabelInput(){\n // if (this.props.allowedActions.label){\n // return <Menu.Item style={{padding: \"5px\"}}>\n // <LabelInput\n // // multilabels={true}\n // multilabels={this.props.multilabels}\n // relatedId={this.props.annos.image.id}\n // visible={this.props.visible}\n // onLabelUpdate={label => this.handleLabelUpdate(label)}\n // possibleLabels={this.props.possibleLabels}\n // initLabelIds={this.props.imgLabelIds}\n // relatedId={this.props.annos.image.id}\n // disabled={!this.props.allowedActions.label}\n // />\n // </Menu.Item>\n // } else {\n // return null\n // }\n // }\n\n renderImgLabels(){\n let label = ''\n if (this.props.imgLabelIds && this.props.imgLabelIds.length > 0){\n let labelObject \n this.props.imgLabelIds.forEach((lbl, idx) => {\n labelObject = this.props.possibleLabels.find(el => {\n return el.id === lbl\n })\n if (idx > 0) label += ', '\n label += labelObject.label\n })\n return <Menu.Item >\n {label}\n </Menu.Item>\n } else {\n return null\n }\n }\n\n renderImgDescription(){\n if(this.props.imageMeta.description){\n return <Menu.Item>\n {this.props.imageMeta.description}\n </Menu.Item>\n } else {\n return null\n }\n }\n render(){\n if (!this.props.visible) return null\n if (!this.props.imageMeta) return null\n // if (!this.props.annos.image.url) return null\n return(\n <div style={{\n position:'fixed', \n top: this.state.position.top, \n left:this.state.position.left,\n width: this.props.svg.width,\n minWidth: '300px'\n }}\n onMouseEnter={e => {this.handleMouseEnter(e)}} \n >\n <Menu inverted style={{opacity:0.9, justifyContent:'center', alignItems:'center'}}>\n {/* {this.renderImgLabelInput()} */}\n {this.renderImgDescription()}\n <Menu.Item>\n {/* {this.props.annos.image.url.split('/').pop() +\" (ID: \"+this.props.annos.image.id+\")\"} */}\n {\"ID: \"+this.props.imageMeta.id}\n </Menu.Item>\n <Menu.Item \n >\n {this.props.imageMeta.number +\" / \"+ this.props.imageMeta.amount}\n </Menu.Item>\n {this.renderImgLabels()}\n </Menu>\n </div>\n )\n }\n}\n\nexport default ImgBar","import React, {Component} from 'react'\nimport { Dimmer, Header } from 'semantic-ui-react'\n\nclass Prompt extends Component{\n\n constructor(props) {\n super(props)\n this.state = {\n active: false\n }\n }\n\n handleClick(e){\n if (this.props.onClick){\n this.props.onClick(e)\n }\n }\n \n componentDidMount(){\n this.setState({active: this.props.active})\n }\n\n componentDidUpdate(prevProps){\n if (this.props.active !== prevProps.active){\n this.setState({active: this.props.active})\n }\n }\n\n \n render(){\n return (\n <Dimmer page \n active={this.state.active} \n style={{zIndex:7000}}\n onClick={e => this.handleClick(e)}\n >\n <Header as=\"h3\" inverted>\n {this.props.header}\n </Header>\n {this.props.content}\n </Dimmer>\n )\n }\n}\n\nexport default Prompt","import React, {Component} from 'react'\n\nimport * as transform from './utils/transform'\n\nclass AnnoToolBar extends Component{\n\n constructor(props){\n super(props)\n this.state = {\n top: 400,\n left: 100,\n width: 50,\n label: undefined,\n visibility: 'hidden',\n possibleLabels: []\n }\n this.inputGroupRef = React.createRef()\n }\n\n componentWillMount(){\n this.setPosition()\n }\n \n componentDidUpdate(prevProps){\n if (this.props.visible){\n this.setPosition()\n } \n\n \n }\n\n /*************\n * LOGIC *\n *************/\n setPosition(){\n if (this.props.selectedAnno){\n // const center = transform.getCenter(this.props.selectedAnno.data, this.props.selectedAnno.type)\n // const annoBox = transform.getBox(this.props.selectedAnno.data, this.props.selectedAnno.type)\n let topPoint = transform.getTopPoint(this.props.selectedAnno.data)\n topPoint = transform.getMostLeftPoint(topPoint)[0]\n const inputRect = this.inputGroupRef.current.getBoundingClientRect()\n let top = this.props.svg.top + (topPoint.y + this.props.svg.translateY) *this.props.svg.scale - 44\n let left = this.props.svg.left + (topPoint.x + this.props.svg.translateX) *this.props.svg.scale - inputRect.width /2.0 - 1\n // if (left < this.props.svg.left) left = this.props.svg.left\n // if (left+inputRect.width > this.props.svg.left+this.props.svg.width){\n // left = this.props.svg.left+this.props.svg.width - inputRect.width\n // }\n if (top < 0) top = this.props.svg.top + (topPoint.y + this.props.svg.translateY + 10) *this.props.svg.scale \n if (this.state.top !== top || this.state.left !== left){ \n this.setState({\n top,\n left,\n // width: annoBox[1].x - annoBox[0].x\n })\n }\n }\n }\n\n onClose(){\n if (this.props.onClose){\n this.props.onClose()\n }\n }\n\n handleClick(e){\n if (this.props.onClick){\n this.props.onClick(e)\n }\n }\n \n renderDaviIcon(){\n return <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" \n // x=\"0px\" y=\"0px\"\n // width=\"1190.549px\" height=\"841.891px\" \n viewBox=\"0 0 1190.549 841.891\" \n width=\"60px\"\n onClick={e => this.handleClick(e)}\n >\n <g id=\"Info\">\n <path id=\"Maps\" fill={this.props.color} d=\"M620.561,817.217c-1.568-3.62-3.771-7.101-4.611-10.885\n c-24.452-109.811-74.341-207.569-139.215-298.675c-27.507-38.628-55.814-77.404-77.438-119.371\n C324.363,242.85,402.696,58.71,574.209,26.508c145.509-27.32,282.953,75.871,296.543,222.773\n c4.659,50.356-7.471,97.96-32.152,141.022c-27.812,48.526-58.75,95.364-90.073,141.758\n c-50.917,75.411-91.062,155.558-113.421,244.091c-2.438,9.652-3.936,19.543-6.271,29.227c-0.992,4.104-3.023,7.961-4.584,11.93\n C623.021,817.277,621.789,817.247,620.561,817.217z\"/>\n <path id=\"Text\" fillRule=\"evenodd\" clipRule=\"evenodd\" fill=\"#FFFFFF\" d=\"M724.709,250.898\n c-0.055-3.974,0.047-7.949,0.033-11.923c-0.007-1.228-1.54-2.767-2.76-2.777c-2.428-0.021-4.862-0.015-7.29-0.015\n c-22.466,0.001-44.934,0.005-67.404,0.009c-2.475,0.001-3.658,1.154-3.658,3.588c-0.001,47.365-0.001,94.73-0.001,142.096\n c0,13.526,0,27.05,0.001,40.577c0,2.305,1.274,3.584,3.562,3.59c6.623,0.004,9.256-0.07,19.873,0.004\n c10.618,0.072,14.146,8.543,14.146,14.189c-0.002,5.645-4.233,13.055-14.299,13.367c-13.135,0.061-26.277-0.02-39.414-0.014\n c-14.575,0.004-29.146,0.004-43.722,0.02c-4.191-0.084-13.717-2.789-13.717-13.492s6.233-13.643,13.132-14.117\n c4.979,0.037,13.802,0.057,20.701,0.049c1.695,0,3.11-1.537,3.11-3.361c0.003-13.912-0.004-27.823-0.004-41.736\n c0-30.252,0-60.503,0.002-90.754c0.002-17.03,0.005-33.649,0.002-50.678c0-1.991-1.38-3.336-3.396-3.336\n c-24.79,0-49.577,0-74.362,0c-2.133,0-3.38,1.22-3.383,3.308c-0.006,3.754-0.011,7.509,0.005,11.262\n c-0.023,6.339-3.067,13.143-12.456,13.143c-9.389,0-14.337-4.647-14.915-13.23c-0.128-4.305,0.004-8.612,0.004-12.918\n c0-8.392,0-16.781,0-25.173c0-0.321,0.228-5.156,4.091-9.277c3.864-4.122,8.014-3.822,8.445-3.822\n c25.835,0.003,51.672,0.002,77.507,0.002c46.813,0.001,140.443,0.001,140.443,0.001s6.153-0.088,10.926-0.052\n c0.3-0.008,5.713,0.363,9.178,3.994c3.46,3.631,3.046,8.407,3.046,8.635c-0.007,12.862,0.079,25.725-0.003,38.587\n c-0.074,8.051-6.938,12.819-13.703,12.847C731.482,263.519,724.956,259.059,724.709,250.898z\"/>\n </g>\n </svg>\n }\n\n /*************\n * RENDERING *\n **************/\n render(){\n if (!this.props.visible) return null\n return (\n <div ref={this.inputGroupRef} \n style={{\n position:'fixed', \n top:this.state.top, \n left:this.state.left,\n cursor: 'pointer',\n }}\n >\n {/* <Button icon circular basic\n onClick={e => this.handleClick(e)}\n > */}\n {/* <Icon name=\"pencil\"\n onClick={e => this.handleClick(e)}\n /> */}\n {/* </Button> */}\n {this.renderDaviIcon()}\n </div>\n )\n }\n \n}\n\nexport default AnnoToolBar","import * as transform from './transform'\nimport * as annoStatus from '../types/annoStatus'\nimport * as modes from '../types/modes'\nimport _ from 'lodash'\n\nfunction _fixBackendAnnoElement(element){\n return {...element, \n id : element.id ? element.id : _.uniqueId('new'),\n annoTime: element.annoTime ? element.annoTime : 0.0,\n mode: element.mode ? element.mode : modes.VIEW, \n status: element.status ? element.status : annoStatus.DATABASE,\n labelIds: element.labelIds ? element.labelIds : []\n }\n}\n\nexport function fixBackendAnnos(backendAnnos){\n let annos = { \n bBoxes: [...backendAnnos.bBoxes.map((element) => {\n return _fixBackendAnnoElement(element)\n })],\n lines: [...backendAnnos.lines.map((element) => {\n return _fixBackendAnnoElement(element)\n })],\n polygons: [...backendAnnos.polygons.map((element) => {\n return _fixBackendAnnoElement(element)\n })],\n points: [...backendAnnos.points.map((element) => {\n return _fixBackendAnnoElement(element)\n })],\n }\n console.log('fixBackendAnnos', annos)\n return annos\n}\n\nexport function backendAnnosToCanvas(backendAnnos, imgSize, imgOffset){\n let annos = [\n ...backendAnnos.bBoxes.map((element) => {\n return {...element, type:'bBox', \n mode: element.mode ? element.mode : modes.VIEW, \n status: element.status ? element.status : annoStatus.DATABASE}\n }),\n ...backendAnnos.lines.map((element) => {\n return {...element, type:'line', \n mode: element.mode ? element.mode : modes.VIEW, \n status: element.status ? element.status : annoStatus.DATABASE}\n }),\n ...backendAnnos.polygons.map((element) => {\n return {...element, type:'polygon', \n mode: element.mode ? element.mode : modes.VIEW, \n status: element.status ? element.status : annoStatus.DATABASE}\n }),\n ...backendAnnos.points.map((element) => {\n return {...element, type:'point', \n mode: element.mode ? element.mode : modes.VIEW, \n status: element.status ? element.status : annoStatus.DATABASE\n }\n })\n ]\n annos = annos.map((el) => {\n return {...el, \n data: transform.toSia(el.data, imgSize, el.type, imgOffset)}\n })\n // this.setState({annos: [...annos]})\n return annos\n}\n\nexport function canvasToBackendAnnos(annos, imgSize, forBackendPost=false, imgOffset={x:0,y:0}){\n let myAnnos = annos\n const bAnnos = myAnnos.map( el => {\n var annoId \n if (forBackendPost){\n // If an annotation will be send to backend,\n // ids of new created annoations need to be set to \n // undefined.\n annoId = (typeof el.id) === \"string\" ? undefined : el.id\n } else {\n annoId = el.id\n }\n return {\n ...el,\n id: annoId,\n mode: modes.VIEW,\n data: transform.toBackend(el.data, imgSize, el.type, imgOffset)\n }\n })\n\n const backendFormat = {\n bBoxes: bAnnos.filter((el) => {return el.type === 'bBox'}),\n lines: bAnnos.filter((el) => {return el.type === 'line'}),\n points: bAnnos.filter((el) => {return el.type === 'point'}),\n polygons: bAnnos.filter((el) => {return el.type === 'polygon'}),\n }\n return backendFormat\n}","export const EDIT_LABEL='editLabel'\nexport const DELETE_ANNO='deleteAnno'\nexport const ENTER_ANNO_ADD_MODE='enterAnnoAddMode'\nexport const LEAVE_ANNO_ADD_MODE='leaveAnnoAddMode'\nexport const UNDO='undo'\nexport const REDO='redo'\nexport const TRAVERSE_ANNOS='traverseAnnos'\nexport const CAM_MOVE_UP='camMoveUp'\nexport const CAM_MOVE_DOWN='camMoveDown'\nexport const CAM_MOVE_LEFT='camMoveLeft'\nexport const CAM_MOVE_RIGHT='camMoveRight'\nexport const CAM_MOVE_STOP='camMoveStop'\nexport const COPY_ANNOTATION='copyAnnotation'\nexport const PASTE_ANNOTATION='pasteAnnotation'\nexport const RECREATE_ANNO='recreateAnnotation'\nexport const DELETE_ANNO_IN_CREATION='deleteAnnoInCreation'\nexport const TOGGLE_ANNO_COMMENT_INPUT='toggleAnnoCommentInput'\n\nclass KeyMapper{\n constructor(keyActionHandler=undefined){\n this.controlDown = false\n this.keyActionHandler = keyActionHandler\n }\n\n keyDown(key){\n switch (key){\n case 'Enter':\n this.triggerKeyAction(EDIT_LABEL)\n break\n case 'Delete':\n this.triggerKeyAction(DELETE_ANNO)\n break\n case 'Backspace':\n this.triggerKeyAction(DELETE_ANNO)\n break\n case 'Control':\n this.controlDown = true\n this.triggerKeyAction(ENTER_ANNO_ADD_MODE)\n break\n case 'z':\n if (this.controlDown){\n this.triggerKeyAction(UNDO)\n }\n break\n case 'r':\n if (this.controlDown){\n this.triggerKeyAction(REDO)\n }\n break\n case 'Tab':\n this.triggerKeyAction(TRAVERSE_ANNOS)\n break\n case 'w':\n this.triggerKeyAction(CAM_MOVE_UP)\n break\n case 's':\n this.triggerKeyAction(CAM_MOVE_DOWN)\n break\n case 'a':\n this.triggerKeyAction(CAM_MOVE_LEFT)\n break\n case 'd':\n this.triggerKeyAction(CAM_MOVE_RIGHT)\n break\n case 'e':\n this.triggerKeyAction(RECREATE_ANNO)\n break\n case 'c':\n if (this.controlDown){\n this.triggerKeyAction(COPY_ANNOTATION)\n } else {\n this.triggerKeyAction(TOGGLE_ANNO_COMMENT_INPUT)\n }\n break\n case 'v':\n if (this.controlDown){\n this.triggerKeyAction(PASTE_ANNOTATION)\n }\n break\n case 'Escape':\n this.triggerKeyAction(DELETE_ANNO_IN_CREATION)\n break\n default:\n break\n }\n }\n\n keyUp(key){\n switch (key){\n case 'Control':\n this.controlDown = false\n this.triggerKeyAction(LEAVE_ANNO_ADD_MODE)\n break\n default:\n break\n }\n }\n\n triggerKeyAction(keyAction){\n if (this.keyActionHandler){\n this.keyActionHandler(keyAction)\n }\n }\n\n}\n\nexport default KeyMapper","export const POINT = 'point'\nexport const BBOX = 'bBox'\nexport const LINE = 'line'\nexport const POLYGON = 'polygon'","class UndoRedo{\n constructor(maxElements=100){\n this.hist = []\n this.pointer = 0\n this.maxElements = maxElements\n }\n\n push(entry, description='No description'){\n const histEl = {\n entry,\n description\n }\n if (this.pointer !== 0){\n while (this.pointer !== 0){\n this.pointer--\n this.hist.shift()\n }\n }\n this.hist.unshift(histEl)\n if (this.hist.length > this.maxElements){\n this.hist.pop()\n }\n }\n\n undo(){\n if (this.pointer+1 < this.hist.length){\n // const element = \n this.pointer++\n return this.hist[this.pointer]\n } else {\n return this.hist[this.hist.length-1]\n }\n }\n\n undoMia(){\n if (this.pointer+1 < this.hist.length){\n this.pointer++\n return this.hist[this.pointer-1] \n } else {\n return this.hist[this.hist.length-1]\n }\n }\n\n redo(){\n if (this.pointer-1 >= 0){\n this.pointer--\n return this.hist[this.pointer]\n } else {\n return this.hist[0]\n }\n }\n\n getHist(){\n return this.hist\n }\n\n clearHist(){\n this.hist = []\n }\n\n isEmpty(){\n return this.hist.length === 0\n }\n\n}\n\nexport default UndoRedo","export function getViewportCoordinates(w, svg){\n const window = {\n xMin:-1*svg.translateX,\n xMax: -1*svg.translateX + (svg.width)/svg.scale,\n yMin: -1*svg.translateY,\n yMax: -1*svg.translateY + (svg.height)/svg.scale\n\n }\n const viewport = {\n xMin: 0,\n xMax: svg.width,\n yMin: 0,\n yMax: svg.height\n }\n const scaleX = (viewport.xMax - viewport.xMin)/ (window.xMax - window.xMin)\n const scaleY = (viewport.yMax - viewport.yMin)/ (window.yMax - window.yMin)\n\n const vX = viewport.xMin + (w.x - window.xMin) * scaleX\n const vY = viewport.yMin + (w.y - window.yMin) * scaleY\n return {window, viewport, vX, vY, scaleX, scaleY}\n}\n\n/**\n * \n * @param {*} w0 Point in image coordinate system\n * @param {*} svg Svg with old translation values and old scales\n * @param {*} s1 New scale/zoom\n */\nexport function getZoomTranslation(w0, svg, s1){\n const s0 = svg.scale\n let translation = {x:0,y:0}\n translation.x = (s0/s1) * (w0.x + svg.translateX) - w0.x \n translation.y = (s0/s1) * (w0.y + svg.translateY) - w0.y \n return translation\n}","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('react-dom'), require('react')) :\n\ttypeof define === 'function' && define.amd ? define(['react-dom', 'react'], factory) :\n\t(global.ReactDraggable = factory(global.ReactDOM,global.React));\n}(this, (function (ReactDOM,React) { 'use strict';\n\n\tReactDOM = ReactDOM && ReactDOM.hasOwnProperty('default') ? ReactDOM['default'] : ReactDOM;\n\tReact = React && React.hasOwnProperty('default') ? React['default'] : React;\n\n\tfunction createCommonjsModule(fn, module) {\n\t\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n\t}\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t * \n\t */\n\n\tfunction makeEmptyFunction(arg) {\n\t return function () {\n\t return arg;\n\t };\n\t}\n\n\t/**\n\t * This function accepts and discards inputs; it has no side effects. This is\n\t * primarily useful idiomatically for overridable function endpoints which\n\t * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n\t */\n\tvar emptyFunction = function emptyFunction() {};\n\n\temptyFunction.thatReturns = makeEmptyFunction;\n\temptyFunction.thatReturnsFalse = makeEmptyFunction(false);\n\temptyFunction.thatReturnsTrue = makeEmptyFunction(true);\n\temptyFunction.thatReturnsNull = makeEmptyFunction(null);\n\temptyFunction.thatReturnsThis = function () {\n\t return this;\n\t};\n\temptyFunction.thatReturnsArgument = function (arg) {\n\t return arg;\n\t};\n\n\tvar emptyFunction_1 = emptyFunction;\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t */\n\n\t/**\n\t * Use invariant() to assert state which your program assumes to be true.\n\t *\n\t * Provide sprintf-style format (only %s is supported) and arguments\n\t * to provide information about what broke and what you were\n\t * expecting.\n\t *\n\t * The invariant message will be stripped in production, but the invariant\n\t * will remain to ensure logic does not differ in production.\n\t */\n\n\tvar validateFormat = function validateFormat(format) {};\n\n\t{\n\t validateFormat = function validateFormat(format) {\n\t if (format === undefined) {\n\t throw new Error('invariant requires an error message argument');\n\t }\n\t };\n\t}\n\n\tfunction invariant(condition, format, a, b, c, d, e, f) {\n\t validateFormat(format);\n\n\t if (!condition) {\n\t var error;\n\t if (format === undefined) {\n\t error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n\t } else {\n\t var args = [a, b, c, d, e, f];\n\t var argIndex = 0;\n\t error = new Error(format.replace(/%s/g, function () {\n\t return args[argIndex++];\n\t }));\n\t error.name = 'Invariant Violation';\n\t }\n\n\t error.framesToPop = 1; // we don't care about invariant's own frame\n\t throw error;\n\t }\n\t}\n\n\tvar invariant_1 = invariant;\n\n\t/**\n\t * Similar to invariant but only logs a warning if the condition is not met.\n\t * This can be used to log issues in development environments in critical\n\t * paths. Removing the logging code for production environments will keep the\n\t * same logic and follow the same code paths.\n\t */\n\n\tvar warning = emptyFunction_1;\n\n\t{\n\t var printWarning = function printWarning(format) {\n\t for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t args[_key - 1] = arguments[_key];\n\t }\n\n\t var argIndex = 0;\n\t var message = 'Warning: ' + format.replace(/%s/g, function () {\n\t return args[argIndex++];\n\t });\n\t if (typeof console !== 'undefined') {\n\t console.error(message);\n\t }\n\t try {\n\t // --- Welcome to debugging React ---\n\t // This error was thrown as a convenience so that you can use this stack\n\t // to find the callsite that caused this warning to fire.\n\t throw new Error(message);\n\t } catch (x) {}\n\t };\n\n\t warning = function warning(condition, format) {\n\t if (format === undefined) {\n\t throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n\t }\n\n\t if (format.indexOf('Failed Composite propType: ') === 0) {\n\t return; // Ignore CompositeComponent proptype check.\n\t }\n\n\t if (!condition) {\n\t for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n\t args[_key2 - 2] = arguments[_key2];\n\t }\n\n\t printWarning.apply(undefined, [format].concat(args));\n\t }\n\t };\n\t}\n\n\tvar warning_1 = warning;\n\n\t/*\n\tobject-assign\n\t(c) Sindre Sorhus\n\t@license MIT\n\t*/\n\t/* eslint-disable no-unused-vars */\n\tvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\tvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\n\tfunction toObject(val) {\n\t\tif (val === null || val === undefined) {\n\t\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t\t}\n\n\t\treturn Object(val);\n\t}\n\n\tfunction shouldUseNative() {\n\t\ttry {\n\t\t\tif (!Object.assign) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\t\ttest1[5] = 'de';\n\t\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\t\tvar test2 = {};\n\t\t\tfor (var i = 0; i < 10; i++) {\n\t\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t\t}\n\t\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\t\treturn test2[n];\n\t\t\t});\n\t\t\tif (order2.join('') !== '0123456789') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\t\tvar test3 = {};\n\t\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\t\ttest3[letter] = letter;\n\t\t\t});\n\t\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} catch (err) {\n\t\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tvar objectAssign = shouldUseNative() ? Object.assign : function (target, source) {\n\t\tvar from;\n\t\tvar to = toObject(target);\n\t\tvar symbols;\n\n\t\tfor (var s = 1; s < arguments.length; s++) {\n\t\t\tfrom = Object(arguments[s]);\n\n\t\t\tfor (var key in from) {\n\t\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\t\tto[key] = from[key];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (getOwnPropertySymbols) {\n\t\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn to;\n\t};\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t */\n\n\tvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\n\tvar ReactPropTypesSecret_1 = ReactPropTypesSecret;\n\n\t{\n\t var invariant$1 = invariant_1;\n\t var warning$1 = warning_1;\n\t var ReactPropTypesSecret$1 = ReactPropTypesSecret_1;\n\t var loggedTypeFailures = {};\n\t}\n\n\t/**\n\t * Assert that the values match with the type specs.\n\t * Error messages are memorized and will only be shown once.\n\t *\n\t * @param {object} typeSpecs Map of name to a ReactPropType\n\t * @param {object} values Runtime values that need to be type-checked\n\t * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n\t * @param {string} componentName Name of the component for error messages.\n\t * @param {?Function} getStack Returns the component stack.\n\t * @private\n\t */\n\tfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n\t {\n\t for (var typeSpecName in typeSpecs) {\n\t if (typeSpecs.hasOwnProperty(typeSpecName)) {\n\t var error;\n\t // Prop type validation may throw. In case they do, we don't want to\n\t // fail the render phase where it didn't fail before. So we log it.\n\t // After these have been cleaned up, we'll let them throw.\n\t try {\n\t // This is intentionally an invariant that gets caught. It's the same\n\t // behavior as without this statement except with a better message.\n\t invariant$1(typeof typeSpecs[typeSpecName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'the `prop-types` package, but received `%s`.', componentName || 'React class', location, typeSpecName, typeof typeSpecs[typeSpecName]);\n\t error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret$1);\n\t } catch (ex) {\n\t error = ex;\n\t }\n\t warning$1(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error);\n\t if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n\t // Only monitor this failure once because there tends to be a lot of the\n\t // same error.\n\t loggedTypeFailures[error.message] = true;\n\n\t var stack = getStack ? getStack() : '';\n\n\t warning$1(false, 'Failed %s type: %s%s', location, error.message, stack != null ? stack : '');\n\t }\n\t }\n\t }\n\t }\n\t}\n\n\tvar checkPropTypes_1 = checkPropTypes;\n\n\tvar factoryWithTypeCheckers = function(isValidElement, throwOnDirectAccess) {\n\t /* global Symbol */\n\t var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n\t var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n\t /**\n\t * Returns the iterator method function contained on the iterable object.\n\t *\n\t * Be sure to invoke the function with the iterable as context:\n\t *\n\t * var iteratorFn = getIteratorFn(myIterable);\n\t * if (iteratorFn) {\n\t * var iterator = iteratorFn.call(myIterable);\n\t * ...\n\t * }\n\t *\n\t * @param {?object} maybeIterable\n\t * @return {?function}\n\t */\n\t function getIteratorFn(maybeIterable) {\n\t var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n\t if (typeof iteratorFn === 'function') {\n\t return iteratorFn;\n\t }\n\t }\n\n\t /**\n\t * Collection of methods that allow declaration and validation of props that are\n\t * supplied to React components. Example usage:\n\t *\n\t * var Props = require('ReactPropTypes');\n\t * var MyArticle = React.createClass({\n\t * propTypes: {\n\t * // An optional string prop named \"description\".\n\t * description: Props.string,\n\t *\n\t * // A required enum prop named \"category\".\n\t * category: Props.oneOf(['News','Photos']).isRequired,\n\t *\n\t * // A prop named \"dialog\" that requires an instance of Dialog.\n\t * dialog: Props.instanceOf(Dialog).isRequired\n\t * },\n\t * render: function() { ... }\n\t * });\n\t *\n\t * A more formal specification of how these methods are used:\n\t *\n\t * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n\t * decl := ReactPropTypes.{type}(.isRequired)?\n\t *\n\t * Each and every declaration produces a function with the same signature. This\n\t * allows the creation of custom validation functions. For example:\n\t *\n\t * var MyLink = React.createClass({\n\t * propTypes: {\n\t * // An optional string or URI prop named \"href\".\n\t * href: function(props, propName, componentName) {\n\t * var propValue = props[propName];\n\t * if (propValue != null && typeof propValue !== 'string' &&\n\t * !(propValue instanceof URI)) {\n\t * return new Error(\n\t * 'Expected a string or an URI for ' + propName + ' in ' +\n\t * componentName\n\t * );\n\t * }\n\t * }\n\t * },\n\t * render: function() {...}\n\t * });\n\t *\n\t * @internal\n\t */\n\n\t var ANONYMOUS = '<<anonymous>>';\n\n\t // Important!\n\t // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n\t var ReactPropTypes = {\n\t array: createPrimitiveTypeChecker('array'),\n\t bool: createPrimitiveTypeChecker('boolean'),\n\t func: createPrimitiveTypeChecker('function'),\n\t number: createPrimitiveTypeChecker('number'),\n\t object: createPrimitiveTypeChecker('object'),\n\t string: createPrimitiveTypeChecker('string'),\n\t symbol: createPrimitiveTypeChecker('symbol'),\n\n\t any: createAnyTypeChecker(),\n\t arrayOf: createArrayOfTypeChecker,\n\t element: createElementTypeChecker(),\n\t instanceOf: createInstanceTypeChecker,\n\t node: createNodeChecker(),\n\t objectOf: createObjectOfTypeChecker,\n\t oneOf: createEnumTypeChecker,\n\t oneOfType: createUnionTypeChecker,\n\t shape: createShapeTypeChecker,\n\t exact: createStrictShapeTypeChecker,\n\t };\n\n\t /**\n\t * inlined Object.is polyfill to avoid requiring consumers ship their own\n\t * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n\t */\n\t /*eslint-disable no-self-compare*/\n\t function is(x, y) {\n\t // SameValue algorithm\n\t if (x === y) {\n\t // Steps 1-5, 7-10\n\t // Steps 6.b-6.e: +0 != -0\n\t return x !== 0 || 1 / x === 1 / y;\n\t } else {\n\t // Step 6.a: NaN == NaN\n\t return x !== x && y !== y;\n\t }\n\t }\n\t /*eslint-enable no-self-compare*/\n\n\t /**\n\t * We use an Error-like object for backward compatibility as people may call\n\t * PropTypes directly and inspect their output. However, we don't use real\n\t * Errors anymore. We don't inspect their stack anyway, and creating them\n\t * is prohibitively expensive if they are created too often, such as what\n\t * happens in oneOfType() for any type before the one that matched.\n\t */\n\t function PropTypeError(message) {\n\t this.message = message;\n\t this.stack = '';\n\t }\n\t // Make `instanceof Error` still work for returned errors.\n\t PropTypeError.prototype = Error.prototype;\n\n\t function createChainableTypeChecker(validate) {\n\t {\n\t var manualPropTypeCallCache = {};\n\t var manualPropTypeWarningCount = 0;\n\t }\n\t function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n\t componentName = componentName || ANONYMOUS;\n\t propFullName = propFullName || propName;\n\n\t if (secret !== ReactPropTypesSecret_1) {\n\t if (throwOnDirectAccess) {\n\t // New behavior only for users of `prop-types` package\n\t invariant_1(\n\t false,\n\t 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n\t 'Use `PropTypes.checkPropTypes()` to call them. ' +\n\t 'Read more at http://fb.me/use-check-prop-types'\n\t );\n\t } else if (\"development\" !== 'production' && typeof console !== 'undefined') {\n\t // Old behavior for people using React.PropTypes\n\t var cacheKey = componentName + ':' + propName;\n\t if (\n\t !manualPropTypeCallCache[cacheKey] &&\n\t // Avoid spamming the console because they are often not actionable except for lib authors\n\t manualPropTypeWarningCount < 3\n\t ) {\n\t warning_1(\n\t false,\n\t 'You are manually calling a React.PropTypes validation ' +\n\t 'function for the `%s` prop on `%s`. This is deprecated ' +\n\t 'and will throw in the standalone `prop-types` package. ' +\n\t 'You may be seeing this warning due to a third-party PropTypes ' +\n\t 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.',\n\t propFullName,\n\t componentName\n\t );\n\t manualPropTypeCallCache[cacheKey] = true;\n\t manualPropTypeWarningCount++;\n\t }\n\t }\n\t }\n\t if (props[propName] == null) {\n\t if (isRequired) {\n\t if (props[propName] === null) {\n\t return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n\t }\n\t return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n\t }\n\t return null;\n\t } else {\n\t return validate(props, propName, componentName, location, propFullName);\n\t }\n\t }\n\n\t var chainedCheckType = checkType.bind(null, false);\n\t chainedCheckType.isRequired = checkType.bind(null, true);\n\n\t return chainedCheckType;\n\t }\n\n\t function createPrimitiveTypeChecker(expectedType) {\n\t function validate(props, propName, componentName, location, propFullName, secret) {\n\t var propValue = props[propName];\n\t var propType = getPropType(propValue);\n\t if (propType !== expectedType) {\n\t // `propValue` being instance of, say, date/regexp, pass the 'object'\n\t // check, but we can offer a more precise error message here rather than\n\t // 'of type `object`'.\n\t var preciseType = getPreciseType(propValue);\n\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createAnyTypeChecker() {\n\t return createChainableTypeChecker(emptyFunction_1.thatReturnsNull);\n\t }\n\n\t function createArrayOfTypeChecker(typeChecker) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (typeof typeChecker !== 'function') {\n\t return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n\t }\n\t var propValue = props[propName];\n\t if (!Array.isArray(propValue)) {\n\t var propType = getPropType(propValue);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n\t }\n\t for (var i = 0; i < propValue.length; i++) {\n\t var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret_1);\n\t if (error instanceof Error) {\n\t return error;\n\t }\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createElementTypeChecker() {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t if (!isValidElement(propValue)) {\n\t var propType = getPropType(propValue);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createInstanceTypeChecker(expectedClass) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (!(props[propName] instanceof expectedClass)) {\n\t var expectedClassName = expectedClass.name || ANONYMOUS;\n\t var actualClassName = getClassName(props[propName]);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createEnumTypeChecker(expectedValues) {\n\t if (!Array.isArray(expectedValues)) {\n\t warning_1(false, 'Invalid argument supplied to oneOf, expected an instance of array.');\n\t return emptyFunction_1.thatReturnsNull;\n\t }\n\n\t function validate(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t for (var i = 0; i < expectedValues.length; i++) {\n\t if (is(propValue, expectedValues[i])) {\n\t return null;\n\t }\n\t }\n\n\t var valuesString = JSON.stringify(expectedValues);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createObjectOfTypeChecker(typeChecker) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (typeof typeChecker !== 'function') {\n\t return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n\t }\n\t var propValue = props[propName];\n\t var propType = getPropType(propValue);\n\t if (propType !== 'object') {\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n\t }\n\t for (var key in propValue) {\n\t if (propValue.hasOwnProperty(key)) {\n\t var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);\n\t if (error instanceof Error) {\n\t return error;\n\t }\n\t }\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createUnionTypeChecker(arrayOfTypeCheckers) {\n\t if (!Array.isArray(arrayOfTypeCheckers)) {\n\t warning_1(false, 'Invalid argument supplied to oneOfType, expected an instance of array.');\n\t return emptyFunction_1.thatReturnsNull;\n\t }\n\n\t for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n\t var checker = arrayOfTypeCheckers[i];\n\t if (typeof checker !== 'function') {\n\t warning_1(\n\t false,\n\t 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n\t 'received %s at index %s.',\n\t getPostfixForTypeWarning(checker),\n\t i\n\t );\n\t return emptyFunction_1.thatReturnsNull;\n\t }\n\t }\n\n\t function validate(props, propName, componentName, location, propFullName) {\n\t for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n\t var checker = arrayOfTypeCheckers[i];\n\t if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret_1) == null) {\n\t return null;\n\t }\n\t }\n\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createNodeChecker() {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (!isNode(props[propName])) {\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createShapeTypeChecker(shapeTypes) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t var propType = getPropType(propValue);\n\t if (propType !== 'object') {\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n\t }\n\t for (var key in shapeTypes) {\n\t var checker = shapeTypes[key];\n\t if (!checker) {\n\t continue;\n\t }\n\t var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);\n\t if (error) {\n\t return error;\n\t }\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createStrictShapeTypeChecker(shapeTypes) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t var propType = getPropType(propValue);\n\t if (propType !== 'object') {\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n\t }\n\t // We need to check all keys in case some are required but missing from\n\t // props.\n\t var allKeys = objectAssign({}, props[propName], shapeTypes);\n\t for (var key in allKeys) {\n\t var checker = shapeTypes[key];\n\t if (!checker) {\n\t return new PropTypeError(\n\t 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n\t '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\n\t '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\n\t );\n\t }\n\t var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);\n\t if (error) {\n\t return error;\n\t }\n\t }\n\t return null;\n\t }\n\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function isNode(propValue) {\n\t switch (typeof propValue) {\n\t case 'number':\n\t case 'string':\n\t case 'undefined':\n\t return true;\n\t case 'boolean':\n\t return !propValue;\n\t case 'object':\n\t if (Array.isArray(propValue)) {\n\t return propValue.every(isNode);\n\t }\n\t if (propValue === null || isValidElement(propValue)) {\n\t return true;\n\t }\n\n\t var iteratorFn = getIteratorFn(propValue);\n\t if (iteratorFn) {\n\t var iterator = iteratorFn.call(propValue);\n\t var step;\n\t if (iteratorFn !== propValue.entries) {\n\t while (!(step = iterator.next()).done) {\n\t if (!isNode(step.value)) {\n\t return false;\n\t }\n\t }\n\t } else {\n\t // Iterator will provide entry [k,v] tuples rather than values.\n\t while (!(step = iterator.next()).done) {\n\t var entry = step.value;\n\t if (entry) {\n\t if (!isNode(entry[1])) {\n\t return false;\n\t }\n\t }\n\t }\n\t }\n\t } else {\n\t return false;\n\t }\n\n\t return true;\n\t default:\n\t return false;\n\t }\n\t }\n\n\t function isSymbol(propType, propValue) {\n\t // Native Symbol.\n\t if (propType === 'symbol') {\n\t return true;\n\t }\n\n\t // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n\t if (propValue['@@toStringTag'] === 'Symbol') {\n\t return true;\n\t }\n\n\t // Fallback for non-spec compliant Symbols which are polyfilled.\n\t if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n\t return true;\n\t }\n\n\t return false;\n\t }\n\n\t // Equivalent of `typeof` but with special handling for array and regexp.\n\t function getPropType(propValue) {\n\t var propType = typeof propValue;\n\t if (Array.isArray(propValue)) {\n\t return 'array';\n\t }\n\t if (propValue instanceof RegExp) {\n\t // Old webkits (at least until Android 4.0) return 'function' rather than\n\t // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n\t // passes PropTypes.object.\n\t return 'object';\n\t }\n\t if (isSymbol(propType, propValue)) {\n\t return 'symbol';\n\t }\n\t return propType;\n\t }\n\n\t // This handles more types than `getPropType`. Only used for error messages.\n\t // See `createPrimitiveTypeChecker`.\n\t function getPreciseType(propValue) {\n\t if (typeof propValue === 'undefined' || propValue === null) {\n\t return '' + propValue;\n\t }\n\t var propType = getPropType(propValue);\n\t if (propType === 'object') {\n\t if (propValue instanceof Date) {\n\t return 'date';\n\t } else if (propValue instanceof RegExp) {\n\t return 'regexp';\n\t }\n\t }\n\t return propType;\n\t }\n\n\t // Returns a string that is postfixed to a warning about an invalid type.\n\t // For example, \"undefined\" or \"of type array\"\n\t function getPostfixForTypeWarning(value) {\n\t var type = getPreciseType(value);\n\t switch (type) {\n\t case 'array':\n\t case 'object':\n\t return 'an ' + type;\n\t case 'boolean':\n\t case 'date':\n\t case 'regexp':\n\t return 'a ' + type;\n\t default:\n\t return type;\n\t }\n\t }\n\n\t // Returns class name of the object, if any.\n\t function getClassName(propValue) {\n\t if (!propValue.constructor || !propValue.constructor.name) {\n\t return ANONYMOUS;\n\t }\n\t return propValue.constructor.name;\n\t }\n\n\t ReactPropTypes.checkPropTypes = checkPropTypes_1;\n\t ReactPropTypes.PropTypes = ReactPropTypes;\n\n\t return ReactPropTypes;\n\t};\n\n\tvar propTypes = createCommonjsModule(function (module) {\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t */\n\n\t{\n\t var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n\t Symbol.for &&\n\t Symbol.for('react.element')) ||\n\t 0xeac7;\n\n\t var isValidElement = function(object) {\n\t return typeof object === 'object' &&\n\t object !== null &&\n\t object.$$typeof === REACT_ELEMENT_TYPE;\n\t };\n\n\t // By explicitly using `prop-types` you are opting into new development behavior.\n\t // http://fb.me/prop-types-in-prod\n\t var throwOnDirectAccess = true;\n\t module.exports = factoryWithTypeCheckers(isValidElement, throwOnDirectAccess);\n\t}\n\t});\n\n\tvar classnames = createCommonjsModule(function (module) {\n\t/*!\n\t Copyright (c) 2016 Jed Watson.\n\t Licensed under the MIT License (MIT), see\n\t http://jedwatson.github.io/classnames\n\t*/\n\t/* global define */\n\n\t(function () {\n\n\t\tvar hasOwn = {}.hasOwnProperty;\n\n\t\tfunction classNames () {\n\t\t\tvar classes = [];\n\n\t\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\t\tvar arg = arguments[i];\n\t\t\t\tif (!arg) continue;\n\n\t\t\t\tvar argType = typeof arg;\n\n\t\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\t\tclasses.push(arg);\n\t\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\t\tclasses.push(classNames.apply(null, arg));\n\t\t\t\t} else if (argType === 'object') {\n\t\t\t\t\tfor (var key in arg) {\n\t\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn classes.join(' ');\n\t\t}\n\n\t\tif ('object' !== 'undefined' && module.exports) {\n\t\t\tmodule.exports = classNames;\n\t\t} else if (typeof undefined === 'function' && typeof undefined.amd === 'object' && undefined.amd) {\n\t\t\t// register as 'classnames', consistent with npm package name\n\t\t\tundefined('classnames', [], function () {\n\t\t\t\treturn classNames;\n\t\t\t});\n\t\t} else {\n\t\t\twindow.classNames = classNames;\n\t\t}\n\t}());\n\t});\n\n\t// @credits https://gist.github.com/rogozhnikoff/a43cfed27c41e4e68cdc\n\tfunction findInArray(array /*: Array<any> | TouchList*/, callback /*: Function*/) /*: any*/ {\n\t for (var i = 0, length = array.length; i < length; i++) {\n\t if (callback.apply(callback, [array[i], i, array])) return array[i];\n\t }\n\t}\n\n\tfunction isFunction(func /*: any*/) /*: boolean*/ {\n\t return typeof func === 'function' || Object.prototype.toString.call(func) === '[object Function]';\n\t}\n\n\tfunction isNum(num /*: any*/) /*: boolean*/ {\n\t return typeof num === 'number' && !isNaN(num);\n\t}\n\n\tfunction int(a /*: string*/) /*: number*/ {\n\t return parseInt(a, 10);\n\t}\n\n\tfunction dontSetMe(props /*: Object*/, propName /*: string*/, componentName /*: string*/) {\n\t if (props[propName]) {\n\t return new Error('Invalid prop ' + propName + ' passed to ' + componentName + ' - do not set this, set it on the child.');\n\t }\n\t}\n\n\tvar prefixes = ['Moz', 'Webkit', 'O', 'ms'];\n\tfunction getPrefix() /*: string*/ {\n\t var prop /*: string*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n\n\t // Checking specifically for 'window.document' is for pseudo-browser server-side\n\t // environments that define 'window' as the global context.\n\t // E.g. React-rails (see https://github.com/reactjs/react-rails/pull/84)\n\t if (typeof window === 'undefined' || typeof window.document === 'undefined') return '';\n\n\t var style = window.document.documentElement.style;\n\n\t if (prop in style) return '';\n\n\t for (var i = 0; i < prefixes.length; i++) {\n\t if (browserPrefixToKey(prop, prefixes[i]) in style) return prefixes[i];\n\t }\n\n\t return '';\n\t}\n\n\tfunction browserPrefixToKey(prop /*: string*/, prefix /*: string*/) /*: string*/ {\n\t return prefix ? '' + prefix + kebabToTitleCase(prop) : prop;\n\t}\n\n\tfunction kebabToTitleCase(str /*: string*/) /*: string*/ {\n\t var out = '';\n\t var shouldCapitalize = true;\n\t for (var i = 0; i < str.length; i++) {\n\t if (shouldCapitalize) {\n\t out += str[i].toUpperCase();\n\t shouldCapitalize = false;\n\t } else if (str[i] === '-') {\n\t shouldCapitalize = true;\n\t } else {\n\t out += str[i];\n\t }\n\t }\n\t return out;\n\t}\n\n\t// Default export is the prefix itself, like 'Moz', 'Webkit', etc\n\t// Note that you may have to re-test for certain things; for instance, Chrome 50\n\t// can handle unprefixed `transform`, but not unprefixed `user-select`\n\tvar browserPrefix = getPrefix();\n\n\tvar classCallCheck = function (instance, Constructor) {\n\t if (!(instance instanceof Constructor)) {\n\t throw new TypeError(\"Cannot call a class as a function\");\n\t }\n\t};\n\n\tvar createClass = function () {\n\t function defineProperties(target, props) {\n\t for (var i = 0; i < props.length; i++) {\n\t var descriptor = props[i];\n\t descriptor.enumerable = descriptor.enumerable || false;\n\t descriptor.configurable = true;\n\t if (\"value\" in descriptor) descriptor.writable = true;\n\t Object.defineProperty(target, descriptor.key, descriptor);\n\t }\n\t }\n\n\t return function (Constructor, protoProps, staticProps) {\n\t if (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t if (staticProps) defineProperties(Constructor, staticProps);\n\t return Constructor;\n\t };\n\t}();\n\n\tvar defineProperty = function (obj, key, value) {\n\t if (key in obj) {\n\t Object.defineProperty(obj, key, {\n\t value: value,\n\t enumerable: true,\n\t configurable: true,\n\t writable: true\n\t });\n\t } else {\n\t obj[key] = value;\n\t }\n\n\t return obj;\n\t};\n\n\tvar _extends = Object.assign || function (target) {\n\t for (var i = 1; i < arguments.length; i++) {\n\t var source = arguments[i];\n\n\t for (var key in source) {\n\t if (Object.prototype.hasOwnProperty.call(source, key)) {\n\t target[key] = source[key];\n\t }\n\t }\n\t }\n\n\t return target;\n\t};\n\n\tvar inherits = function (subClass, superClass) {\n\t if (typeof superClass !== \"function\" && superClass !== null) {\n\t throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n\t }\n\n\t subClass.prototype = Object.create(superClass && superClass.prototype, {\n\t constructor: {\n\t value: subClass,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n\t};\n\n\tvar possibleConstructorReturn = function (self, call) {\n\t if (!self) {\n\t throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\t }\n\n\t return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n\t};\n\n\tvar slicedToArray = function () {\n\t function sliceIterator(arr, i) {\n\t var _arr = [];\n\t var _n = true;\n\t var _d = false;\n\t var _e = undefined;\n\n\t try {\n\t for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n\t _arr.push(_s.value);\n\n\t if (i && _arr.length === i) break;\n\t }\n\t } catch (err) {\n\t _d = true;\n\t _e = err;\n\t } finally {\n\t try {\n\t if (!_n && _i[\"return\"]) _i[\"return\"]();\n\t } finally {\n\t if (_d) throw _e;\n\t }\n\t }\n\n\t return _arr;\n\t }\n\n\t return function (arr, i) {\n\t if (Array.isArray(arr)) {\n\t return arr;\n\t } else if (Symbol.iterator in Object(arr)) {\n\t return sliceIterator(arr, i);\n\t } else {\n\t throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n\t }\n\t };\n\t}();\n\n\t/*:: import type {ControlPosition, PositionOffsetControlPosition, MouseTouchEvent} from './types';*/\n\n\n\tvar matchesSelectorFunc = '';\n\tfunction matchesSelector(el /*: Node*/, selector /*: string*/) /*: boolean*/ {\n\t if (!matchesSelectorFunc) {\n\t matchesSelectorFunc = findInArray(['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector'], function (method) {\n\t // $FlowIgnore: Doesn't think elements are indexable\n\t return isFunction(el[method]);\n\t });\n\t }\n\n\t // Might not be found entirely (not an Element?) - in that case, bail\n\t // $FlowIgnore: Doesn't think elements are indexable\n\t if (!isFunction(el[matchesSelectorFunc])) return false;\n\n\t // $FlowIgnore: Doesn't think elements are indexable\n\t return el[matchesSelectorFunc](selector);\n\t}\n\n\t// Works up the tree to the draggable itself attempting to match selector.\n\tfunction matchesSelectorAndParentsTo(el /*: Node*/, selector /*: string*/, baseNode /*: Node*/) /*: boolean*/ {\n\t var node = el;\n\t do {\n\t if (matchesSelector(node, selector)) return true;\n\t if (node === baseNode) return false;\n\t node = node.parentNode;\n\t } while (node);\n\n\t return false;\n\t}\n\n\tfunction addEvent(el /*: ?Node*/, event /*: string*/, handler /*: Function*/) /*: void*/ {\n\t if (!el) {\n\t return;\n\t }\n\t if (el.attachEvent) {\n\t el.attachEvent('on' + event, handler);\n\t } else if (el.addEventListener) {\n\t el.addEventListener(event, handler, true);\n\t } else {\n\t // $FlowIgnore: Doesn't think elements are indexable\n\t el['on' + event] = handler;\n\t }\n\t}\n\n\tfunction removeEvent(el /*: ?Node*/, event /*: string*/, handler /*: Function*/) /*: void*/ {\n\t if (!el) {\n\t return;\n\t }\n\t if (el.detachEvent) {\n\t el.detachEvent('on' + event, handler);\n\t } else if (el.removeEventListener) {\n\t el.removeEventListener(event, handler, true);\n\t } else {\n\t // $FlowIgnore: Doesn't think elements are indexable\n\t el['on' + event] = null;\n\t }\n\t}\n\n\tfunction outerHeight(node /*: HTMLElement*/) /*: number*/ {\n\t // This is deliberately excluding margin for our calculations, since we are using\n\t // offsetTop which is including margin. See getBoundPosition\n\t var height = node.clientHeight;\n\t var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n\t height += int(computedStyle.borderTopWidth);\n\t height += int(computedStyle.borderBottomWidth);\n\t return height;\n\t}\n\n\tfunction outerWidth(node /*: HTMLElement*/) /*: number*/ {\n\t // This is deliberately excluding margin for our calculations, since we are using\n\t // offsetLeft which is including margin. See getBoundPosition\n\t var width = node.clientWidth;\n\t var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n\t width += int(computedStyle.borderLeftWidth);\n\t width += int(computedStyle.borderRightWidth);\n\t return width;\n\t}\n\tfunction innerHeight(node /*: HTMLElement*/) /*: number*/ {\n\t var height = node.clientHeight;\n\t var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n\t height -= int(computedStyle.paddingTop);\n\t height -= int(computedStyle.paddingBottom);\n\t return height;\n\t}\n\n\tfunction innerWidth(node /*: HTMLElement*/) /*: number*/ {\n\t var width = node.clientWidth;\n\t var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n\t width -= int(computedStyle.paddingLeft);\n\t width -= int(computedStyle.paddingRight);\n\t return width;\n\t}\n\n\t// Get from offsetParent\n\tfunction offsetXYFromParent(evt /*: {clientX: number, clientY: number}*/, offsetParent /*: HTMLElement*/) /*: ControlPosition*/ {\n\t var isBody = offsetParent === offsetParent.ownerDocument.body;\n\t var offsetParentRect = isBody ? { left: 0, top: 0 } : offsetParent.getBoundingClientRect();\n\n\t var x = evt.clientX + offsetParent.scrollLeft - offsetParentRect.left;\n\t var y = evt.clientY + offsetParent.scrollTop - offsetParentRect.top;\n\n\t return { x: x, y: y };\n\t}\n\n\tfunction createCSSTransform(controlPos /*: ControlPosition*/, positionOffset /*: PositionOffsetControlPosition*/) /*: Object*/ {\n\t var translation = getTranslation(controlPos, positionOffset, 'px');\n\t return defineProperty({}, browserPrefixToKey('transform', browserPrefix), translation);\n\t}\n\n\tfunction createSVGTransform(controlPos /*: ControlPosition*/, positionOffset /*: PositionOffsetControlPosition*/) /*: string*/ {\n\t var translation = getTranslation(controlPos, positionOffset, '');\n\t return translation;\n\t}\n\tfunction getTranslation(_ref2, positionOffset /*: PositionOffsetControlPosition*/, unitSuffix /*: string*/) /*: string*/ {\n\t var x = _ref2.x,\n\t y = _ref2.y;\n\n\t var translation = 'translate(' + x + unitSuffix + ',' + y + unitSuffix + ')';\n\t if (positionOffset) {\n\t var defaultX = '' + (typeof positionOffset.x === 'string' ? positionOffset.x : positionOffset.x + unitSuffix);\n\t var defaultY = '' + (typeof positionOffset.y === 'string' ? positionOffset.y : positionOffset.y + unitSuffix);\n\t translation = 'translate(' + defaultX + ', ' + defaultY + ')' + translation;\n\t }\n\t return translation;\n\t}\n\n\tfunction getTouch(e /*: MouseTouchEvent*/, identifier /*: number*/) /*: ?{clientX: number, clientY: number}*/ {\n\t return e.targetTouches && findInArray(e.targetTouches, function (t) {\n\t return identifier === t.identifier;\n\t }) || e.changedTouches && findInArray(e.changedTouches, function (t) {\n\t return identifier === t.identifier;\n\t });\n\t}\n\n\tfunction getTouchIdentifier(e /*: MouseTouchEvent*/) /*: ?number*/ {\n\t if (e.targetTouches && e.targetTouches[0]) return e.targetTouches[0].identifier;\n\t if (e.changedTouches && e.changedTouches[0]) return e.changedTouches[0].identifier;\n\t}\n\n\t// User-select Hacks:\n\t//\n\t// Useful for preventing blue highlights all over everything when dragging.\n\n\t// Note we're passing `document` b/c we could be iframed\n\tfunction addUserSelectStyles(doc /*: ?Document*/) {\n\t if (!doc) return;\n\t var styleEl = doc.getElementById('react-draggable-style-el');\n\t if (!styleEl) {\n\t styleEl = doc.createElement('style');\n\t styleEl.type = 'text/css';\n\t styleEl.id = 'react-draggable-style-el';\n\t styleEl.innerHTML = '.react-draggable-transparent-selection *::-moz-selection {all: inherit;}\\n';\n\t styleEl.innerHTML += '.react-draggable-transparent-selection *::selection {all: inherit;}\\n';\n\t doc.getElementsByTagName('head')[0].appendChild(styleEl);\n\t }\n\t if (doc.body) addClassName(doc.body, 'react-draggable-transparent-selection');\n\t}\n\n\tfunction removeUserSelectStyles(doc /*: ?Document*/) {\n\t try {\n\t if (doc && doc.body) removeClassName(doc.body, 'react-draggable-transparent-selection');\n\t // $FlowIgnore: IE\n\t if (doc.selection) {\n\t // $FlowIgnore: IE\n\t doc.selection.empty();\n\t } else {\n\t window.getSelection().removeAllRanges(); // remove selection caused by scroll\n\t }\n\t } catch (e) {\n\t // probably IE\n\t }\n\t}\n\n\tfunction styleHacks() /*: Object*/ {\n\t var childStyle /*: Object*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t // Workaround IE pointer events; see #51\n\t // https://github.com/mzabriskie/react-draggable/issues/51#issuecomment-103488278\n\t return _extends({\n\t touchAction: 'none'\n\t }, childStyle);\n\t}\n\n\tfunction addClassName(el /*: HTMLElement*/, className /*: string*/) {\n\t if (el.classList) {\n\t el.classList.add(className);\n\t } else {\n\t if (!el.className.match(new RegExp('(?:^|\\\\s)' + className + '(?!\\\\S)'))) {\n\t el.className += ' ' + className;\n\t }\n\t }\n\t}\n\n\tfunction removeClassName(el /*: HTMLElement*/, className /*: string*/) {\n\t if (el.classList) {\n\t el.classList.remove(className);\n\t } else {\n\t el.className = el.className.replace(new RegExp('(?:^|\\\\s)' + className + '(?!\\\\S)', 'g'), '');\n\t }\n\t}\n\n\t/*:: import type Draggable from '../Draggable';*/\n\t/*:: import type {Bounds, ControlPosition, DraggableData, MouseTouchEvent} from './types';*/\n\t/*:: import type DraggableCore from '../DraggableCore';*/\n\n\n\tfunction getBoundPosition(draggable /*: Draggable*/, x /*: number*/, y /*: number*/) /*: [number, number]*/ {\n\t // If no bounds, short-circuit and move on\n\t if (!draggable.props.bounds) return [x, y];\n\n\t // Clone new bounds\n\t var bounds = draggable.props.bounds;\n\n\t bounds = typeof bounds === 'string' ? bounds : cloneBounds(bounds);\n\t var node = findDOMNode(draggable);\n\n\t if (typeof bounds === 'string') {\n\t var ownerDocument = node.ownerDocument;\n\n\t var ownerWindow = ownerDocument.defaultView;\n\t var boundNode = void 0;\n\t if (bounds === 'parent') {\n\t boundNode = node.parentNode;\n\t } else {\n\t boundNode = ownerDocument.querySelector(bounds);\n\t }\n\t if (!(boundNode instanceof ownerWindow.HTMLElement)) {\n\t throw new Error('Bounds selector \"' + bounds + '\" could not find an element.');\n\t }\n\t var nodeStyle = ownerWindow.getComputedStyle(node);\n\t var boundNodeStyle = ownerWindow.getComputedStyle(boundNode);\n\t // Compute bounds. This is a pain with padding and offsets but this gets it exactly right.\n\t bounds = {\n\t left: -node.offsetLeft + int(boundNodeStyle.paddingLeft) + int(nodeStyle.marginLeft),\n\t top: -node.offsetTop + int(boundNodeStyle.paddingTop) + int(nodeStyle.marginTop),\n\t right: innerWidth(boundNode) - outerWidth(node) - node.offsetLeft + int(boundNodeStyle.paddingRight) - int(nodeStyle.marginRight),\n\t bottom: innerHeight(boundNode) - outerHeight(node) - node.offsetTop + int(boundNodeStyle.paddingBottom) - int(nodeStyle.marginBottom)\n\t };\n\t }\n\n\t // Keep x and y below right and bottom limits...\n\t if (isNum(bounds.right)) x = Math.min(x, bounds.right);\n\t if (isNum(bounds.bottom)) y = Math.min(y, bounds.bottom);\n\n\t // But above left and top limits.\n\t if (isNum(bounds.left)) x = Math.max(x, bounds.left);\n\t if (isNum(bounds.top)) y = Math.max(y, bounds.top);\n\n\t return [x, y];\n\t}\n\n\tfunction snapToGrid(grid /*: [number, number]*/, pendingX /*: number*/, pendingY /*: number*/) /*: [number, number]*/ {\n\t var x = Math.round(pendingX / grid[0]) * grid[0];\n\t var y = Math.round(pendingY / grid[1]) * grid[1];\n\t return [x, y];\n\t}\n\n\tfunction canDragX(draggable /*: Draggable*/) /*: boolean*/ {\n\t return draggable.props.axis === 'both' || draggable.props.axis === 'x';\n\t}\n\n\tfunction canDragY(draggable /*: Draggable*/) /*: boolean*/ {\n\t return draggable.props.axis === 'both' || draggable.props.axis === 'y';\n\t}\n\n\t// Get {x, y} positions from event.\n\tfunction getControlPosition(e /*: MouseTouchEvent*/, touchIdentifier /*: ?number*/, draggableCore /*: DraggableCore*/) /*: ?ControlPosition*/ {\n\t var touchObj = typeof touchIdentifier === 'number' ? getTouch(e, touchIdentifier) : null;\n\t if (typeof touchIdentifier === 'number' && !touchObj) return null; // not the right touch\n\t var node = findDOMNode(draggableCore);\n\t // User can provide an offsetParent if desired.\n\t var offsetParent = draggableCore.props.offsetParent || node.offsetParent || node.ownerDocument.body;\n\t return offsetXYFromParent(touchObj || e, offsetParent);\n\t}\n\n\t// Create an data object exposed by <DraggableCore>'s events\n\tfunction createCoreData(draggable /*: DraggableCore*/, x /*: number*/, y /*: number*/) /*: DraggableData*/ {\n\t var state = draggable.state;\n\t var isStart = !isNum(state.lastX);\n\t var node = findDOMNode(draggable);\n\n\t if (isStart) {\n\t // If this is our first move, use the x and y as last coords.\n\t return {\n\t node: node,\n\t deltaX: 0, deltaY: 0,\n\t lastX: x, lastY: y,\n\t x: x, y: y\n\t };\n\t } else {\n\t // Otherwise calculate proper values.\n\t return {\n\t node: node,\n\t deltaX: x - state.lastX, deltaY: y - state.lastY,\n\t lastX: state.lastX, lastY: state.lastY,\n\t x: x, y: y\n\t };\n\t }\n\t}\n\n\t// Create an data exposed by <Draggable>'s events\n\tfunction createDraggableData(draggable /*: Draggable*/, coreData /*: DraggableData*/) /*: DraggableData*/ {\n\t var scale = draggable.props.scale;\n\t return {\n\t node: coreData.node,\n\t x: draggable.state.x + coreData.deltaX / scale,\n\t y: draggable.state.y + coreData.deltaY / scale,\n\t deltaX: coreData.deltaX / scale,\n\t deltaY: coreData.deltaY / scale,\n\t lastX: draggable.state.x,\n\t lastY: draggable.state.y\n\t };\n\t}\n\n\t// A lot faster than stringify/parse\n\tfunction cloneBounds(bounds /*: Bounds*/) /*: Bounds*/ {\n\t return {\n\t left: bounds.left,\n\t top: bounds.top,\n\t right: bounds.right,\n\t bottom: bounds.bottom\n\t };\n\t}\n\n\tfunction findDOMNode(draggable /*: Draggable | DraggableCore*/) /*: HTMLElement*/ {\n\t var node = ReactDOM.findDOMNode(draggable);\n\t if (!node) {\n\t throw new Error('<DraggableCore>: Unmounted during event!');\n\t }\n\t // $FlowIgnore we can't assert on HTMLElement due to tests... FIXME\n\t return node;\n\t}\n\n\t/*eslint no-console:0*/\n\tfunction log() {\n\t}\n\n\t/*:: import type {EventHandler, MouseTouchEvent} from './utils/types';*/\n\n\n\t// Simple abstraction for dragging events names.\n\t/*:: import type {Element as ReactElement} from 'react';*/\n\tvar eventsFor = {\n\t touch: {\n\t start: 'touchstart',\n\t move: 'touchmove',\n\t stop: 'touchend'\n\t },\n\t mouse: {\n\t start: 'mousedown',\n\t move: 'mousemove',\n\t stop: 'mouseup'\n\t }\n\t};\n\n\t// Default to mouse events.\n\tvar dragEventFor = eventsFor.mouse;\n\n\t/*:: type DraggableCoreState = {\n\t dragging: boolean,\n\t lastX: number,\n\t lastY: number,\n\t touchIdentifier: ?number\n\t};*/\n\t/*:: export type DraggableBounds = {\n\t left: number,\n\t right: number,\n\t top: number,\n\t bottom: number,\n\t};*/\n\t/*:: export type DraggableData = {\n\t node: HTMLElement,\n\t x: number, y: number,\n\t deltaX: number, deltaY: number,\n\t lastX: number, lastY: number,\n\t};*/\n\t/*:: export type DraggableEventHandler = (e: MouseEvent, data: DraggableData) => void;*/\n\t/*:: export type ControlPosition = {x: number, y: number};*/\n\t/*:: export type PositionOffsetControlPosition = {x: number|string, y: number|string};*/\n\n\n\t//\n\t// Define <DraggableCore>.\n\t//\n\t// <DraggableCore> is for advanced usage of <Draggable>. It maintains minimal internal state so it can\n\t// work well with libraries that require more control over the element.\n\t//\n\n\t/*:: export type DraggableCoreProps = {\n\t allowAnyClick: boolean,\n\t cancel: string,\n\t children: ReactElement<any>,\n\t disabled: boolean,\n\t enableUserSelectHack: boolean,\n\t offsetParent: HTMLElement,\n\t grid: [number, number],\n\t handle: string,\n\t onStart: DraggableEventHandler,\n\t onDrag: DraggableEventHandler,\n\t onStop: DraggableEventHandler,\n\t onMouseDown: (e: MouseEvent) => void,\n\t};*/\n\n\tvar DraggableCore = function (_React$Component) {\n\t inherits(DraggableCore, _React$Component);\n\n\t function DraggableCore() {\n\t var _ref;\n\n\t var _temp, _this, _ret;\n\n\t classCallCheck(this, DraggableCore);\n\n\t for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t args[_key] = arguments[_key];\n\t }\n\n\t return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = DraggableCore.__proto__ || Object.getPrototypeOf(DraggableCore)).call.apply(_ref, [this].concat(args))), _this), _this.state = {\n\t dragging: false,\n\t // Used while dragging to determine deltas.\n\t lastX: NaN, lastY: NaN,\n\t touchIdentifier: null\n\t }, _this.handleDragStart = function (e) {\n\t // Make it possible to attach event handlers on top of this one.\n\t _this.props.onMouseDown(e);\n\n\t // Only accept left-clicks.\n\t if (!_this.props.allowAnyClick && typeof e.button === 'number' && e.button !== 0) return false;\n\n\t // Get nodes. Be sure to grab relative document (could be iframed)\n\t var thisNode = ReactDOM.findDOMNode(_this);\n\t if (!thisNode || !thisNode.ownerDocument || !thisNode.ownerDocument.body) {\n\t throw new Error('<DraggableCore> not mounted on DragStart!');\n\t }\n\t var ownerDocument = thisNode.ownerDocument;\n\n\t // Short circuit if handle or cancel prop was provided and selector doesn't match.\n\n\t if (_this.props.disabled || !(e.target instanceof ownerDocument.defaultView.Node) || _this.props.handle && !matchesSelectorAndParentsTo(e.target, _this.props.handle, thisNode) || _this.props.cancel && matchesSelectorAndParentsTo(e.target, _this.props.cancel, thisNode)) {\n\t return;\n\t }\n\n\t // Set touch identifier in component state if this is a touch event. This allows us to\n\t // distinguish between individual touches on multitouch screens by identifying which\n\t // touchpoint was set to this element.\n\t var touchIdentifier = getTouchIdentifier(e);\n\t _this.setState({ touchIdentifier: touchIdentifier });\n\n\t // Get the current drag point from the event. This is used as the offset.\n\t var position = getControlPosition(e, touchIdentifier, _this);\n\t if (position == null) return; // not possible but satisfies flow\n\t var x = position.x,\n\t y = position.y;\n\n\t // Create an event object with all the data parents need to make a decision here.\n\n\t var coreEvent = createCoreData(_this, x, y);\n\n\t // Call event handler. If it returns explicit false, cancel.\n\t log('calling', _this.props.onStart);\n\t var shouldUpdate = _this.props.onStart(e, coreEvent);\n\t if (shouldUpdate === false) return;\n\n\t // Add a style to the body to disable user-select. This prevents text from\n\t // being selected all over the page.\n\t if (_this.props.enableUserSelectHack) addUserSelectStyles(ownerDocument);\n\n\t // Initiate dragging. Set the current x and y as offsets\n\t // so we know how much we've moved during the drag. This allows us\n\t // to drag elements around even if they have been moved, without issue.\n\t _this.setState({\n\t dragging: true,\n\n\t lastX: x,\n\t lastY: y\n\t });\n\n\t // Add events to the document directly so we catch when the user's mouse/touch moves outside of\n\t // this element. We use different events depending on whether or not we have detected that this\n\t // is a touch-capable device.\n\t addEvent(ownerDocument, dragEventFor.move, _this.handleDrag);\n\t addEvent(ownerDocument, dragEventFor.stop, _this.handleDragStop);\n\t }, _this.handleDrag = function (e) {\n\n\t // Prevent scrolling on mobile devices, like ipad/iphone.\n\t if (e.type === 'touchmove') e.preventDefault();\n\n\t // Get the current drag point from the event. This is used as the offset.\n\t var position = getControlPosition(e, _this.state.touchIdentifier, _this);\n\t if (position == null) return;\n\t var x = position.x,\n\t y = position.y;\n\n\t // Snap to grid if prop has been provided\n\n\t if (Array.isArray(_this.props.grid)) {\n\t var _deltaX = x - _this.state.lastX,\n\t _deltaY = y - _this.state.lastY;\n\n\t var _snapToGrid = snapToGrid(_this.props.grid, _deltaX, _deltaY);\n\n\t var _snapToGrid2 = slicedToArray(_snapToGrid, 2);\n\n\t _deltaX = _snapToGrid2[0];\n\t _deltaY = _snapToGrid2[1];\n\n\t if (!_deltaX && !_deltaY) return; // skip useless drag\n\t x = _this.state.lastX + _deltaX, y = _this.state.lastY + _deltaY;\n\t }\n\n\t var coreEvent = createCoreData(_this, x, y);\n\n\t // Call event handler. If it returns explicit false, trigger end.\n\t var shouldUpdate = _this.props.onDrag(e, coreEvent);\n\t if (shouldUpdate === false) {\n\t try {\n\t // $FlowIgnore\n\t _this.handleDragStop(new MouseEvent('mouseup'));\n\t } catch (err) {\n\t // Old browsers\n\t var event = ((document.createEvent('MouseEvents') /*: any*/) /*: MouseTouchEvent*/);\n\t // I see why this insanity was deprecated\n\t // $FlowIgnore\n\t event.initMouseEvent('mouseup', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n\t _this.handleDragStop(event);\n\t }\n\t return;\n\t }\n\n\t _this.setState({\n\t lastX: x,\n\t lastY: y\n\t });\n\t }, _this.handleDragStop = function (e) {\n\t if (!_this.state.dragging) return;\n\n\t var position = getControlPosition(e, _this.state.touchIdentifier, _this);\n\t if (position == null) return;\n\t var x = position.x,\n\t y = position.y;\n\n\t var coreEvent = createCoreData(_this, x, y);\n\n\t var thisNode = ReactDOM.findDOMNode(_this);\n\t if (thisNode) {\n\t // Remove user-select hack\n\t if (_this.props.enableUserSelectHack) removeUserSelectStyles(thisNode.ownerDocument);\n\t }\n\n\t // Reset the el.\n\t _this.setState({\n\t dragging: false,\n\t lastX: NaN,\n\t lastY: NaN\n\t });\n\n\t // Call event handler\n\t _this.props.onStop(e, coreEvent);\n\n\t if (thisNode) {\n\t removeEvent(thisNode.ownerDocument, dragEventFor.move, _this.handleDrag);\n\t removeEvent(thisNode.ownerDocument, dragEventFor.stop, _this.handleDragStop);\n\t }\n\t }, _this.onMouseDown = function (e) {\n\t dragEventFor = eventsFor.mouse; // on touchscreen laptops we could switch back to mouse\n\n\t return _this.handleDragStart(e);\n\t }, _this.onMouseUp = function (e) {\n\t dragEventFor = eventsFor.mouse;\n\n\t return _this.handleDragStop(e);\n\t }, _this.onTouchStart = function (e) {\n\t // We're on a touch device now, so change the event handlers\n\t dragEventFor = eventsFor.touch;\n\n\t return _this.handleDragStart(e);\n\t }, _this.onTouchEnd = function (e) {\n\t // We're on a touch device now, so change the event handlers\n\t dragEventFor = eventsFor.touch;\n\n\t return _this.handleDragStop(e);\n\t }, _temp), possibleConstructorReturn(_this, _ret);\n\t }\n\n\t createClass(DraggableCore, [{\n\t key: 'componentWillUnmount',\n\t value: function componentWillUnmount() {\n\t // Remove any leftover event handlers. Remove both touch and mouse handlers in case\n\t // some browser quirk caused a touch event to fire during a mouse move, or vice versa.\n\t var thisNode = ReactDOM.findDOMNode(this);\n\t if (thisNode) {\n\t var ownerDocument = thisNode.ownerDocument;\n\n\t removeEvent(ownerDocument, eventsFor.mouse.move, this.handleDrag);\n\t removeEvent(ownerDocument, eventsFor.touch.move, this.handleDrag);\n\t removeEvent(ownerDocument, eventsFor.mouse.stop, this.handleDragStop);\n\t removeEvent(ownerDocument, eventsFor.touch.stop, this.handleDragStop);\n\t if (this.props.enableUserSelectHack) removeUserSelectStyles(ownerDocument);\n\t }\n\t }\n\n\t // Same as onMouseDown (start drag), but now consider this a touch device.\n\n\t }, {\n\t key: 'render',\n\t value: function render() {\n\t // Reuse the child provided\n\t // This makes it flexible to use whatever element is wanted (div, ul, etc)\n\t return React.cloneElement(React.Children.only(this.props.children), {\n\t style: styleHacks(this.props.children.props.style),\n\n\t // Note: mouseMove handler is attached to document so it will still function\n\t // when the user drags quickly and leaves the bounds of the element.\n\t onMouseDown: this.onMouseDown,\n\t onTouchStart: this.onTouchStart,\n\t onMouseUp: this.onMouseUp,\n\t onTouchEnd: this.onTouchEnd\n\t });\n\t }\n\t }]);\n\t return DraggableCore;\n\t}(React.Component);\n\n\tDraggableCore.displayName = 'DraggableCore';\n\tDraggableCore.propTypes = {\n\t /**\n\t * `allowAnyClick` allows dragging using any mouse button.\n\t * By default, we only accept the left button.\n\t *\n\t * Defaults to `false`.\n\t */\n\t allowAnyClick: propTypes.bool,\n\n\t /**\n\t * `disabled`, if true, stops the <Draggable> from dragging. All handlers,\n\t * with the exception of `onMouseDown`, will not fire.\n\t */\n\t disabled: propTypes.bool,\n\n\t /**\n\t * By default, we add 'user-select:none' attributes to the document body\n\t * to prevent ugly text selection during drag. If this is causing problems\n\t * for your app, set this to `false`.\n\t */\n\t enableUserSelectHack: propTypes.bool,\n\n\t /**\n\t * `offsetParent`, if set, uses the passed DOM node to compute drag offsets\n\t * instead of using the parent node.\n\t */\n\t offsetParent: function offsetParent(props /*: DraggableCoreProps*/, propName /*: $Keys<DraggableCoreProps>*/) {\n\t if (props[propName] && props[propName].nodeType !== 1) {\n\t throw new Error('Draggable\\'s offsetParent must be a DOM Node.');\n\t }\n\t },\n\n\t /**\n\t * `grid` specifies the x and y that dragging should snap to.\n\t */\n\t grid: propTypes.arrayOf(propTypes.number),\n\n\t /**\n\t * `scale` specifies the scale of the area you are dragging inside of. It allows\n\t * the drag deltas to scale correctly with how far zoomed in/out you are.\n\t */\n\t scale: propTypes.number,\n\n\t /**\n\t * `handle` specifies a selector to be used as the handle that initiates drag.\n\t *\n\t * Example:\n\t *\n\t * ```jsx\n\t * let App = React.createClass({\n\t * render: function () {\n\t * return (\n\t * <Draggable handle=\".handle\">\n\t * <div>\n\t * <div className=\"handle\">Click me to drag</div>\n\t * <div>This is some other content</div>\n\t * </div>\n\t * </Draggable>\n\t * );\n\t * }\n\t * });\n\t * ```\n\t */\n\t handle: propTypes.string,\n\n\t /**\n\t * `cancel` specifies a selector to be used to prevent drag initialization.\n\t *\n\t * Example:\n\t *\n\t * ```jsx\n\t * let App = React.createClass({\n\t * render: function () {\n\t * return(\n\t * <Draggable cancel=\".cancel\">\n\t * <div>\n\t * <div className=\"cancel\">You can't drag from here</div>\n\t * <div>Dragging here works fine</div>\n\t * </div>\n\t * </Draggable>\n\t * );\n\t * }\n\t * });\n\t * ```\n\t */\n\t cancel: propTypes.string,\n\n\t /**\n\t * Called when dragging starts.\n\t * If this function returns the boolean false, dragging will be canceled.\n\t */\n\t onStart: propTypes.func,\n\n\t /**\n\t * Called while dragging.\n\t * If this function returns the boolean false, dragging will be canceled.\n\t */\n\t onDrag: propTypes.func,\n\n\t /**\n\t * Called when dragging stops.\n\t * If this function returns the boolean false, the drag will remain active.\n\t */\n\t onStop: propTypes.func,\n\n\t /**\n\t * A workaround option which can be passed if onMouseDown needs to be accessed,\n\t * since it'll always be blocked (as there is internal use of onMouseDown)\n\t */\n\t onMouseDown: propTypes.func,\n\n\t /**\n\t * These properties should be defined on the child, not here.\n\t */\n\t className: dontSetMe,\n\t style: dontSetMe,\n\t transform: dontSetMe\n\t};\n\tDraggableCore.defaultProps = {\n\t allowAnyClick: false, // by default only accept left click\n\t cancel: null,\n\t disabled: false,\n\t enableUserSelectHack: true,\n\t offsetParent: null,\n\t handle: null,\n\t grid: null,\n\t transform: null,\n\t onStart: function onStart() {},\n\t onDrag: function onDrag() {},\n\t onStop: function onStop() {},\n\t onMouseDown: function onMouseDown() {}\n\t};\n\n\t/*:: import type {DraggableEventHandler} from './utils/types';*/\n\t/*:: import type {Element as ReactElement} from 'react';*/\n\t/*:: type DraggableState = {\n\t dragging: boolean,\n\t dragged: boolean,\n\t x: number, y: number,\n\t slackX: number, slackY: number,\n\t isElementSVG: boolean\n\t};*/\n\n\n\t//\n\t// Define <Draggable>\n\t//\n\n\t/*:: export type DraggableProps = {\n\t ...$Exact<DraggableCoreProps>,\n\t axis: 'both' | 'x' | 'y' | 'none',\n\t bounds: DraggableBounds | string | false,\n\t defaultClassName: string,\n\t defaultClassNameDragging: string,\n\t defaultClassNameDragged: string,\n\t defaultPosition: ControlPosition,\n\t positionOffset: PositionOffsetControlPosition,\n\t position: ControlPosition,\n\t scale: number\n\t};*/\n\n\tvar Draggable = function (_React$Component) {\n\t inherits(Draggable, _React$Component);\n\n\t function Draggable(props /*: DraggableProps*/) {\n\t classCallCheck(this, Draggable);\n\n\t var _this = possibleConstructorReturn(this, (Draggable.__proto__ || Object.getPrototypeOf(Draggable)).call(this, props));\n\n\t _this.onDragStart = function (e, coreData) {\n\n\t // Short-circuit if user's callback killed it.\n\t var shouldStart = _this.props.onStart(e, createDraggableData(_this, coreData));\n\t // Kills start event on core as well, so move handlers are never bound.\n\t if (shouldStart === false) return false;\n\n\t _this.setState({ dragging: true, dragged: true });\n\t };\n\n\t _this.onDrag = function (e, coreData) {\n\t if (!_this.state.dragging) return false;\n\n\t var uiData = createDraggableData(_this, coreData);\n\n\t var newState /*: $Shape<DraggableState>*/ = {\n\t x: uiData.x,\n\t y: uiData.y\n\t };\n\n\t // Keep within bounds.\n\t if (_this.props.bounds) {\n\t // Save original x and y.\n\t var _x = newState.x,\n\t _y = newState.y;\n\n\t // Add slack to the values used to calculate bound position. This will ensure that if\n\t // we start removing slack, the element won't react to it right away until it's been\n\t // completely removed.\n\n\t newState.x += _this.state.slackX;\n\t newState.y += _this.state.slackY;\n\n\t // Get bound position. This will ceil/floor the x and y within the boundaries.\n\n\t var _getBoundPosition = getBoundPosition(_this, newState.x, newState.y),\n\t _getBoundPosition2 = slicedToArray(_getBoundPosition, 2),\n\t newStateX = _getBoundPosition2[0],\n\t newStateY = _getBoundPosition2[1];\n\n\t newState.x = newStateX;\n\t newState.y = newStateY;\n\n\t // Recalculate slack by noting how much was shaved by the boundPosition handler.\n\t newState.slackX = _this.state.slackX + (_x - newState.x);\n\t newState.slackY = _this.state.slackY + (_y - newState.y);\n\n\t // Update the event we fire to reflect what really happened after bounds took effect.\n\t uiData.x = newState.x;\n\t uiData.y = newState.y;\n\t uiData.deltaX = newState.x - _this.state.x;\n\t uiData.deltaY = newState.y - _this.state.y;\n\t }\n\n\t // Short-circuit if user's callback killed it.\n\t var shouldUpdate = _this.props.onDrag(e, uiData);\n\t if (shouldUpdate === false) return false;\n\n\t _this.setState(newState);\n\t };\n\n\t _this.onDragStop = function (e, coreData) {\n\t if (!_this.state.dragging) return false;\n\n\t // Short-circuit if user's callback killed it.\n\t var shouldStop = _this.props.onStop(e, createDraggableData(_this, coreData));\n\t if (shouldStop === false) return false;\n\n\t var newState /*: $Shape<DraggableState>*/ = {\n\t dragging: false,\n\t slackX: 0,\n\t slackY: 0\n\t };\n\n\t // If this is a controlled component, the result of this operation will be to\n\t // revert back to the old position. We expect a handler on `onDragStop`, at the least.\n\t var controlled = Boolean(_this.props.position);\n\t if (controlled) {\n\t var _this$props$position = _this.props.position,\n\t _x2 = _this$props$position.x,\n\t _y2 = _this$props$position.y;\n\n\t newState.x = _x2;\n\t newState.y = _y2;\n\t }\n\n\t _this.setState(newState);\n\t };\n\n\t _this.state = {\n\t // Whether or not we are currently dragging.\n\t dragging: false,\n\n\t // Whether or not we have been dragged before.\n\t dragged: false,\n\n\t // Current transform x and y.\n\t x: props.position ? props.position.x : props.defaultPosition.x,\n\t y: props.position ? props.position.y : props.defaultPosition.y,\n\n\t // Used for compensating for out-of-bounds drags\n\t slackX: 0, slackY: 0,\n\n\t // Can only determine if SVG after mounting\n\t isElementSVG: false\n\t };\n\n\t if (props.position && !(props.onDrag || props.onStop)) {\n\t // eslint-disable-next-line no-console\n\t console.warn('A `position` was applied to this <Draggable>, without drag handlers. This will make this ' + 'component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the ' + '`position` of this element.');\n\t }\n\t return _this;\n\t }\n\n\t createClass(Draggable, [{\n\t key: 'componentDidMount',\n\t value: function componentDidMount() {\n\t // Check to see if the element passed is an instanceof SVGElement\n\t if (typeof window.SVGElement !== 'undefined' && ReactDOM.findDOMNode(this) instanceof window.SVGElement) {\n\t this.setState({ isElementSVG: true });\n\t }\n\t }\n\t }, {\n\t key: 'componentWillReceiveProps',\n\t value: function componentWillReceiveProps(nextProps /*: Object*/) {\n\t // Set x/y if position has changed\n\t if (nextProps.position && (!this.props.position || nextProps.position.x !== this.props.position.x || nextProps.position.y !== this.props.position.y)) {\n\t this.setState({ x: nextProps.position.x, y: nextProps.position.y });\n\t }\n\t }\n\t }, {\n\t key: 'componentWillUnmount',\n\t value: function componentWillUnmount() {\n\t this.setState({ dragging: false }); // prevents invariant if unmounted while dragging\n\t }\n\t }, {\n\t key: 'render',\n\t value: function render() /*: ReactElement<any>*/ {\n\t var _classNames;\n\n\t var style = {},\n\t svgTransform = null;\n\n\t // If this is controlled, we don't want to move it - unless it's dragging.\n\t var controlled = Boolean(this.props.position);\n\t var draggable = !controlled || this.state.dragging;\n\n\t var position = this.props.position || this.props.defaultPosition;\n\t var transformOpts = {\n\t // Set left if horizontal drag is enabled\n\t x: canDragX(this) && draggable ? this.state.x : position.x,\n\n\t // Set top if vertical drag is enabled\n\t y: canDragY(this) && draggable ? this.state.y : position.y\n\t };\n\n\t // If this element was SVG, we use the `transform` attribute.\n\t if (this.state.isElementSVG) {\n\t svgTransform = createSVGTransform(transformOpts, this.props.positionOffset);\n\t } else {\n\t // Add a CSS transform to move the element around. This allows us to move the element around\n\t // without worrying about whether or not it is relatively or absolutely positioned.\n\t // If the item you are dragging already has a transform set, wrap it in a <span> so <Draggable>\n\t // has a clean slate.\n\t style = createCSSTransform(transformOpts, this.props.positionOffset);\n\t }\n\n\t var _props = this.props,\n\t defaultClassName = _props.defaultClassName,\n\t defaultClassNameDragging = _props.defaultClassNameDragging,\n\t defaultClassNameDragged = _props.defaultClassNameDragged;\n\n\n\t var children = React.Children.only(this.props.children);\n\n\t // Mark with class while dragging\n\t var className = classnames(children.props.className || '', defaultClassName, (_classNames = {}, defineProperty(_classNames, defaultClassNameDragging, this.state.dragging), defineProperty(_classNames, defaultClassNameDragged, this.state.dragged), _classNames));\n\n\t // Reuse the child provided\n\t // This makes it flexible to use whatever element is wanted (div, ul, etc)\n\t return React.createElement(\n\t DraggableCore,\n\t _extends({}, this.props, { onStart: this.onDragStart, onDrag: this.onDrag, onStop: this.onDragStop }),\n\t React.cloneElement(children, {\n\t className: className,\n\t style: _extends({}, children.props.style, style),\n\t transform: svgTransform\n\t })\n\t );\n\t }\n\t }]);\n\t return Draggable;\n\t}(React.Component);\n\n\tDraggable.displayName = 'Draggable';\n\tDraggable.propTypes = _extends({}, DraggableCore.propTypes, {\n\n\t /**\n\t * `axis` determines which axis the draggable can move.\n\t *\n\t * Note that all callbacks will still return data as normal. This only\n\t * controls flushing to the DOM.\n\t *\n\t * 'both' allows movement horizontally and vertically.\n\t * 'x' limits movement to horizontal axis.\n\t * 'y' limits movement to vertical axis.\n\t * 'none' limits all movement.\n\t *\n\t * Defaults to 'both'.\n\t */\n\t axis: propTypes.oneOf(['both', 'x', 'y', 'none']),\n\n\t /**\n\t * `bounds` determines the range of movement available to the element.\n\t * Available values are:\n\t *\n\t * 'parent' restricts movement within the Draggable's parent node.\n\t *\n\t * Alternatively, pass an object with the following properties, all of which are optional:\n\t *\n\t * {left: LEFT_BOUND, right: RIGHT_BOUND, bottom: BOTTOM_BOUND, top: TOP_BOUND}\n\t *\n\t * All values are in px.\n\t *\n\t * Example:\n\t *\n\t * ```jsx\n\t * let App = React.createClass({\n\t * render: function () {\n\t * return (\n\t * <Draggable bounds={{right: 300, bottom: 300}}>\n\t * <div>Content</div>\n\t * </Draggable>\n\t * );\n\t * }\n\t * });\n\t * ```\n\t */\n\t bounds: propTypes.oneOfType([propTypes.shape({\n\t left: propTypes.number,\n\t right: propTypes.number,\n\t top: propTypes.number,\n\t bottom: propTypes.number\n\t }), propTypes.string, propTypes.oneOf([false])]),\n\n\t defaultClassName: propTypes.string,\n\t defaultClassNameDragging: propTypes.string,\n\t defaultClassNameDragged: propTypes.string,\n\n\t /**\n\t * `defaultPosition` specifies the x and y that the dragged item should start at\n\t *\n\t * Example:\n\t *\n\t * ```jsx\n\t * let App = React.createClass({\n\t * render: function () {\n\t * return (\n\t * <Draggable defaultPosition={{x: 25, y: 25}}>\n\t * <div>I start with transformX: 25px and transformY: 25px;</div>\n\t * </Draggable>\n\t * );\n\t * }\n\t * });\n\t * ```\n\t */\n\t defaultPosition: propTypes.shape({\n\t x: propTypes.number,\n\t y: propTypes.number\n\t }),\n\t positionOffset: propTypes.shape({\n\t x: propTypes.oneOfType([propTypes.number, propTypes.string]),\n\t y: propTypes.oneOfType([propTypes.number, propTypes.string])\n\t }),\n\n\t /**\n\t * `position`, if present, defines the current position of the element.\n\t *\n\t * This is similar to how form elements in React work - if no `position` is supplied, the component\n\t * is uncontrolled.\n\t *\n\t * Example:\n\t *\n\t * ```jsx\n\t * let App = React.createClass({\n\t * render: function () {\n\t * return (\n\t * <Draggable position={{x: 25, y: 25}}>\n\t * <div>I start with transformX: 25px and transformY: 25px;</div>\n\t * </Draggable>\n\t * );\n\t * }\n\t * });\n\t * ```\n\t */\n\t position: propTypes.shape({\n\t x: propTypes.number,\n\t y: propTypes.number\n\t }),\n\n\t /**\n\t * These properties should be defined on the child, not here.\n\t */\n\t className: dontSetMe,\n\t style: dontSetMe,\n\t transform: dontSetMe\n\t});\n\tDraggable.defaultProps = _extends({}, DraggableCore.defaultProps, {\n\t axis: 'both',\n\t bounds: false,\n\t defaultClassName: 'react-draggable',\n\t defaultClassNameDragging: 'react-draggable-dragging',\n\t defaultClassNameDragged: 'react-draggable-dragged',\n\t defaultPosition: { x: 0, y: 0 },\n\t position: null,\n\t scale: 1\n\t});\n\n\t// Previous versions of this lib exported <Draggable> as the root export. As to not break\n\t// them, or TypeScript, we export *both* as the root and as 'default'.\n\t// See https://github.com/mzabriskie/react-draggable/pull/254\n\t// and https://github.com/mzabriskie/react-draggable/issues/266\n\tDraggable.default = Draggable;\n\tDraggable.DraggableCore = DraggableCore;\n\n\treturn Draggable;\n\n})));\n//# sourceMappingURL=react-draggable.js.map\n","import React, {Component} from 'react'\nimport { Header, Message, Divider } from 'semantic-ui-react'\nimport Draggable from 'react-draggable';\n\nclass InfoBox extends Component{\n\n constructor(props) {\n super(props)\n this.state = {\n style: {\n position:'fixed', \n top: 200, \n left: 200, \n width: 250\n }\n }\n }\n\n componentDidMount(){\n this.updateStyle()\n }\n\n componentDidUpdate(prevProps){\n if (this.props.defaultPos !== prevProps.defaultPos){\n this.updateStyle()\n }\n }\n\n handleOnStop(e){\n if (this.props.onStop){\n this.props.onStop(e)\n }\n }\n\n updateStyle(){\n this.setState({\n style: {...this.state.style,\n ...this.props.defaultPos}\n })\n }\n\n onDismiss(e){\n if (this.props.onDismiss){\n this.props.onDismiss(e)\n }\n }\n\n \n render(){\n if (!this.props.visible) return null\n return(\n <Draggable handle=\".handle\" onStop={e => this.handleOnStop(e)}\n >\n <div \n style={this.state.style}>\n \n <Message \n style={{opacity:0.98}}\n onDismiss={e => {this.onDismiss(e)}}\n size=\"small\"\n >\n <Header textAlign='center' as='h5' className=\"handle\" style={{cursor: 'grab'}}>{this.props.header}</Header>\n {/* <Message.Header textAlign='center' className=\"handle\" style={{cursor: 'grab'}}>{this.props.header}</Message.Header> */}\n <Divider></Divider>\n <Message.Content>\n {this.props.content}\n </Message.Content>\n </Message>\n\n </div> \n \n \n </Draggable>\n )\n }\n}\n\nexport default InfoBox","import React, { useEffect, useState, useRef } from 'react';\nimport {Popup} from 'semantic-ui-react'\n\nconst SiaPopup = ({content, trigger}) => {\n\n return <Popup inverted style={{opacity:0.9}} content={content} trigger={trigger}/>\n\n}\n\nexport default SiaPopup","import React, { useState, useEffect, useRef } from 'react'\nimport { List, Divider, Button, TextArea, Form, Label, Icon } from 'semantic-ui-react'\nimport InfoBox from './InfoBox'\nimport PopUp from '../SiaPopup'\n\nconst AnnoDetails = (props) => {\n const [comment, setComment] = useState('')\n const [example, setExample] = useState(false)\n const [showSaveBtn, setShowSaveBtn] = useState(false)\n const tARef = useRef()\n useEffect(() => {\n if (props.anno) {\n if (props.anno.comment) {\n setComment(props.anno.comment)\n } else {\n setComment('')\n }\n }\n }, [props.anno])\n\n useEffect(() => {\n if (tARef.current) {\n tARef.current.focus()\n }\n }, [props.commentInputTrigger])\n\n const onDismiss = () => {\n if (props.onDismiss) {\n props.onDismiss()\n }\n }\n\n const onCommentUpdate = () => {\n if (props.onCommentUpdate) {\n props.onCommentUpdate(comment)\n }\n setShowSaveBtn(false)\n }\n\n const onMarkExampleClick = () => {\n // setExample(!example)\n if (props.onMarkExample) {\n props.onMarkExample(props.anno)\n }\n }\n\n const renderSaveBtn = () => {\n if (showSaveBtn) {\n return <Label as=\"a\" corner=\"right\" icon=\"save\" color=\"red\"></Label>\n }\n }\n\n const renderComment = () => {\n return (\n <div>\n <Form onClick={() => {}}>\n {renderSaveBtn()}\n <TextArea\n placeholder=\"Write a comment\"\n ref={tARef}\n value={comment}\n rows={2}\n onBlur={() => onCommentUpdate()}\n onFocus={() => setShowSaveBtn(true)}\n onChange={(e) => setComment(e.target.value)}\n ></TextArea>\n </Form>\n </div>\n )\n }\n const renderLabels = () => {\n if (props.anno) {\n const selectedLabelIds = props.anno.labelIds\n if (!selectedLabelIds) return 'No Label'\n\n let lbls = ''\n props.anno.labelIds.forEach((lbl, idx) => {\n const labelObject = props.possibleLabels.find((el) => {\n return el.id === lbl\n })\n if (idx > 0) lbls += ', '\n lbls += labelObject.label\n })\n if (!lbls) return 'No Label'\n return lbls\n } else {\n return 'No Label'\n }\n }\n\n const renderExampleMark = () => {\n if (!props.allowedToMarkExample) return null\n let color = 'grey'\n let iconName = 'bookmark outline'\n if (props.anno) {\n if (props.anno.isExample) {\n color = 'yellow'\n iconName = 'bookmark'\n }\n }\n const mark = (\n <Label\n as=\"a\"\n color={color}\n style={{ opacity: 0.8 }}\n size=\"medium\"\n corner=\"left\"\n onClick={() => {\n onMarkExampleClick()\n }}\n >\n <Icon name={iconName} />\n </Label>\n )\n return (\n <PopUp\n content=\"Mark this annotation as example for other annotators\"\n trigger={mark}\n />\n )\n }\n\n const renderDescription = () => {\n if (props.anno) {\n return (\n <div>\n {renderExampleMark()}\n {/* <Header> \n Labels\n </Header>\n <div>\n {renderLabels()}\n </div> */}\n <List>\n <List.Item icon=\"at\" content={props.anno.id} />\n <List.Item icon=\"tag\" content={renderLabels()} />\n <List.Item\n icon=\"time\"\n content={`${props.anno.annoTime.toLocaleString('us', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })} seconds`}\n />\n {/* <List.Item icon='time' content={props.anno.annoTime} /> */}\n </List>\n {/* <Divider horizontal> Comment </Divider> */}\n {renderComment()}\n </div>\n )\n } else {\n return 'No annotation selected!'\n }\n }\n\n return (\n <InfoBox\n header={'Annotation Details'}\n content={renderDescription()}\n visible={props.visible}\n defaultPos={props.defaultPos}\n onDismiss={(e) => onDismiss()}\n />\n )\n}\n\nexport default AnnoDetails\n","import React, {useState, useEffect, useRef} from 'react'\n// import {connect} from 'react-redux'\nimport { List, Table, Button, Icon, Divider, Header, TextArea, Form, Label} from 'semantic-ui-react'\nimport InfoBox from './InfoBox'\nimport * as colorlut from '../utils/colorlut'\n// import actions from '../../../../actions'\n// import * as transform from '../utils/transform'\n// const { siaShowImgBar } = actions\n\nconst AnnoStats = (props) => {\n\n const [hideList, setHideList] = useState([])\n\n useEffect(() => {\n setHideList([])\n }, [props.imgLoadCount])\n\n const onDismiss = () => {\n if (props.onDismiss){\n props.onDismiss()\n }\n }\n\n const onLblClick = (lbl) => {\n let hideLbl = false\n if (hideList.includes(lbl.id)){\n setHideList(hideList.filter(e => e !== lbl.id))\n hideLbl = false\n } else {\n // hideList.push(lbl.id)\n setHideList([...hideList, lbl.id])\n hideLbl = true\n }\n if (props.onHideLbl){\n props.onHideLbl(lbl, hideLbl)\n }\n }\n\n const renderRow = (s) => {\n\n const opacity = hideList.includes(s.id) ? 0.5 : 1.0\n return <List.Item key={s.id}>\n <List.Content>\n <Label as='a' tag style={{background:s.color, opacity:opacity}}\n onClick={() => onLblClick(s)}\n >\n {s.label}\n <Label.Detail>{s.amount}</Label.Detail>\n </Label>\n </List.Content>\n </List.Item>\n }\n\n const renderRows = () => {\n let stats = {}\n props.annos.forEach(a => {\n // console.log('render rows', a)\n if (a.status !== 'deleted'){\n a.labelIds.forEach(lblId => {\n if (lblId in stats){\n stats[lblId] += 1\n } else {\n stats[lblId] = 1\n } \n })\n if (a.labelIds.length === 0) {\n if (-1 in stats){\n stats[-1] += 1\n } else {\n stats[-1] = 1\n } \n }\n }\n\n })\n const res = Object.entries(stats).map(([key, value]) => {\n let lbl = props.possibleLabels.find(e => {\n return e.id === parseInt(key)})\n if (!lbl){\n lbl = {'id':-1, 'label': 'No Label', 'color':colorlut.getDefaultColor()}\n }\n\n lbl.amount = value\n // return renderRow({class:idToLbl[key], amount:value, color:idToColor[key]})\n return renderRow(lbl)\n })\n return res\n }\n const renderDescription = () => {\n return <List>\n {renderRows()}\n </List>\n }\n \n return <InfoBox\n header={'Annotations per Label'}\n content={renderDescription()}\n visible={props.visible}\n defaultPos={props.defaultPos}\n onDismiss={e => onDismiss()}\n />\n}\n\nexport default AnnoStats","import Prompt from './Prompt'\nimport React, {useState} from 'react'\nimport { Card, Divider, Dimmer, Header, Image } from 'semantic-ui-react'\n\nconst LabelExampleViewer = (props) => {\n\n const requestExample = (e) => {\n e.stopPropagation()\n if (props.onRequestExample){\n props.onRequestExample()\n }\n }\n const renderContent = () => {\n if (!props.lbl) return null\n if (!props.exampleImg) return null\n const description = <div>\n {/* <Divider horizontal> Description </Divider> */}\n {props.lbl.description}\n <Divider horizontal> comment </Divider>\n { props.exampleImg.anno ? props.exampleImg.anno.comment : \"no comment\" }\n </div>\n return <div>\n <Card \n \n // image={props.exampleImg.img}\n // description={props.lbl.description}\n // header={props.lbl.label}\n // // description={props.exampleImg.anno.comment}\n // extra={props.exampleImg.anno.comment}\n >\n <Image onClick={(e) => requestExample(e)} src={props.exampleImg.img} wrapped ui={false} />\n <Card.Content>\n <Card.Header >{props.lbl.label}</Card.Header>\n {/* <Card.Description>{props.lbl.description}</Card.Description> */}\n <Card.Description>{description}</Card.Description>\n {/* <Card.Description>{props.exampleImg.anno.comment}</Card.Description> */}\n </Card.Content>\n </Card>\n {/* <Header inverted>{props.lbl.label}</Header>\n {props.lbl.description}\n <Image src={props.exampleImg.img} centered size='medium'></Image> */}\n </div>\n }\n\n const handlePromptClick = () => {\n if (props.onClose){\n props.onClose()\n }\n }\n\n return <Prompt onClick={() => {handlePromptClick()}}\n active={props.active} content={renderContent()} \n />\n\n}\n\nexport default LabelExampleViewer","import React, {useEffect, useState} from 'react'\nimport { Divider, Image, Card, Header } from 'semantic-ui-react'\nimport InfoBox from './InfoBox'\nimport SiaPopup from '../SiaPopup'\nimport AnnoExampleViewer from '../AnnoExampleViewer'\nconst LabelInfo = (props) => {\n\n const [showExampleViewer, setShowExampleViewer] = useState(false)\n const [myLbl, setMyLbl] = useState(undefined)\n // const { data: exampleImg, mutate: getAnnoExample } = exampleApi.useGetAnnoExampleImg({})\n useEffect(() => {\n if (props.selectedAnno){\n const selectedLabelIds = props.selectedAnno.labelIds\n if (selectedLabelIds) {\n const lbl = props.possibleLabels.find( e => {\n return selectedLabelIds[0] === e.id\n })\n if (lbl){\n if (lbl !== myLbl){\n setMyLbl(lbl)\n if (props.visible)\n // getAnnoExample({llId:lbl.id, type:'annoBased', drawAnno: true, addContext:0.05})\n requestImg(lbl, props.selectedAnno)\n }\n }\n }\n }\n }, [props.selectedAnno])\n const onDismiss = () => {\n if (props.onDismiss){\n props.onDismiss()\n }\n }\n\n const requestImg = (lbl, anno) => {\n if (props.onGetAnnoExample){\n props.onGetAnnoExample({lbl:lbl, anno:anno})\n }\n }\n\n const handleImgClick = () => {\n console.log('clicked img')\n // setShowExampleViewer(true)\n // requestImg(myLbl, props.selectedAnno)\n\n setShowExampleViewer(true)\n // getAnnoExample({llId:myLbl.id, type:'annoBased', drawAnno: true, addContext:0.05})\n }\n\n const renderExampleImg = () => {\n if (!props.exampleImg) return null\n return <div>\n <Divider onClick={() => handleImgClick()} horizontal> Example </Divider>\n <SiaPopup trigger={<Image src={props.exampleImg.img} rounded centered size='medium'\n onClick={() => handleImgClick()}\n />}\n content={'Click on image to view more examples'} />\n {/* <Image src='https://www.gstatic.com/webp/gallery3/1.png'/> */}\n </div>\n }\n\n const renderDescription = () => {\n // if (props.selectedAnno){\n // if (myLbl){\n // const selectedLabelIds = props.selectedAnno.labelIds\n // if (!selectedLabelIds) return 'No Label'\n // const lbl = props.possibleLabels.find( e => {\n // return selectedLabelIds[0] === e.id\n // })\n if (!myLbl) return \"No Label\"\n return <div>\n <Header>{\n myLbl.label\n }</Header>\n <div dangerouslySetInnerHTML={{__html: myLbl.description}} />\n {renderExampleImg()}\n <AnnoExampleViewer onRequestExample={() => requestImg(myLbl, props.selectedAnno)} onClose={() => {setShowExampleViewer(false)}} active={showExampleViewer} lbl={myLbl} exampleImg={props.exampleImg} />\n </div>\n // } else {\n // return 'No Label'\n // }\n }\n\n\n return <InfoBox\n header=\"Label Info\"\n content={renderDescription()}\n visible={props.visible}\n defaultPos={props.defaultPos}\n onDismiss={() => onDismiss()}\n />\n}\n\n\nexport default LabelInfo\n","import React, {Component} from 'react'\n// import {connect} from 'react-redux'\nimport AnnoDetails from './AnnoDetails'\nimport AnnoStats from './AnnoStats'\nimport LabelInfo from './LabelInfo'\n// import actions from '../../../../actions'\n// const { siaShowImgBar, siaSetUIConfig } = actions\n\nclass InfoBoxes extends Component{\n\n constructor(props) {\n super(props)\n this.state = {\n position: {\n top: 0,\n left: 0,\n }\n }\n }\n\n componentDidMount(){\n this.updateLayout()\n \n }\n\n componentDidUpdate(prevProps){\n\n if (this.props.layoutUpdate !== prevProps.layoutUpdate){\n this.updateLayout()\n }\n if (this.props.commentInputTrigger !== prevProps.commentInputTrigger){\n if (!this.props.uiConfig.annoDetails.visible){\n this.showAnnoDetails(true)\n }\n }\n }\n\n updateLayout(){\n if (this.props.container.current){\n const container = this.props.container.current.getBoundingClientRect()\n this.setState({\n position: {...this.state.position,\n left: container.right - 250,\n top: container.top,\n }\n })\n }\n }\n\n showAnnoDetails(show=true){\n this.props.onUiConfigUpdate(\n {...this.props.uiConfig,\n annoDetails: {\n ...this.props.uiConfig.annoDetails,\n visible: show\n }\n }\n )\n }\n\n onDismiss(type){\n if (this.props.onUiConfigUpdate){\n switch (type){\n case 'AnnoDetails':\n this.showAnnoDetails(false)\n break\n case 'LabelInfo':\n this.props.onUiConfigUpdate(\n {...this.props.uiConfig,\n labelInfo: {\n ...this.props.uiConfig.labelInfo,\n visible: false\n }\n }\n )\n break\n case 'AnnoStats':\n this.props.onUiConfigUpdate(\n {...this.props.uiConfig,\n annoStats: {\n ...this.props.uiConfig.annoStats,\n visible: false\n }\n }\n )\n break\n default:\n break\n }\n }\n }\n\n onCommentUpdate(comment){\n if (this.props.onCommentUpdate){\n this.props.onCommentUpdate(comment)\n }\n }\n\n onMarkExample(anno){\n if (this.props.onMarkExample){\n this.props.onMarkExample(anno)\n }\n }\n\n onHideLbl(lbl, hide){\n if(this.props.onHideLbl){\n this.props.onHideLbl(lbl, hide)\n }\n }\n\n render(){\n if (!this.props.annos) return null\n // if (!this.props.selectedAnno) return null\n return(\n <div >\n <LabelInfo selectedAnno={this.props.selectedAnno}\n possibleLabels={this.props.possibleLabels}\n defaultPos={this.state.position}\n onDismiss={() => this.onDismiss('LabelInfo')}\n visible={this.props.uiConfig.labelInfo.visible}\n onGetAnnoExample={(exampleArgs) => this.props.onGetAnnoExample ? this.props.onGetAnnoExample(exampleArgs):{} }\n exampleImg={this.props.exampleImg}\n />\n <AnnoDetails anno={this.props.selectedAnno} \n possibleLabels={this.props.possibleLabels}\n defaultPos={{\n left: this.state.position.left - 300,\n top: this.state.position.top\n }}\n onDismiss={() => this.onDismiss('AnnoDetails')}\n onCommentUpdate={(comment) => this.onCommentUpdate(comment)}\n onMarkExample={(anno) => this.onMarkExample(anno)}\n allowedToMarkExample={this.props.allowedToMarkExample}\n commentInputTrigger={this.props.commentInputTrigger}\n visible={this.props.uiConfig.annoDetails.visible}\n />\n <AnnoStats selectedAnno={this.props.selectedAnno}\n annos={this.props.annos}\n possibleLabels={this.props.possibleLabels}\n defaultPos={{\n left: this.state.position.left,\n top: this.state.position.top + 400\n }}\n // defaultPos={this.state.position}\n onDismiss={() => this.onDismiss('AnnoStats')}\n onHideLbl={(lbl, hide) => this.onHideLbl(lbl, hide)}\n visible={this.props.uiConfig.annoStats.visible}\n imgLoadCount={this.props.imgLoadCount}\n />\n </div>\n )\n }\n}\n\nexport default InfoBoxes","import React, {Component} from 'react'\nimport _ from 'lodash'\nimport Annotation from './Annotation/Annotation'\nimport AnnoLabelInput from './AnnoLabelInput'\nimport ImgBar from './ImgBar'\nimport Prompt from './Prompt'\nimport LabelInput from './LabelInput'\nimport AnnoToolBar from './AnnoToolBar'\n\nimport * as annoConversion from './utils/annoConversion'\nimport * as keyActions from './utils/keyActions'\nimport KeyMapper from './utils/keyActions'\nimport * as TOOLS from './types/tools'\nimport * as modes from './types/modes'\nimport UndoRedo from './utils/hist'\nimport * as annoStatus from './types/annoStatus'\nimport * as canvasActions from './types/canvasActions'\nimport { Loader, Dimmer, Icon, Header, Button, Form, TextArea} from 'semantic-ui-react';\nimport * as mouse from './utils/mouse';\nimport * as colorlut from './utils/colorlut'\nimport * as notificationType from './types/notificationType'\nimport * as wv from './utils/windowViewport'\n\nimport './SIA.scss'\nimport InfoBoxes from './InfoBoxes/InfoBoxArea'\n\n\n/**\n * SIA Canvas element that handles annotations within an image\n * \n * @param {React.Ref} container - A react ref to a div that defines the\n * space where this Canvas lives in.\n * @param {object} annos - A json object containing all annotation \n * information for an image\n * {\n * image : {\n * id: int, \n * number: int, \n * amount: int, \n * isFirst: bool, \n * isLast: bool,\n * description: string, // -> optional\n * },\n * annotations: {\n * bBoxes: [{\n * id: int, // -> Not required if status === annoStatus.NEW\n * data: {},\n * labelIds: list of int, // -> optional\n * status: see annoStatus, // -> optional\n * annoTime: float, // -> optional\n * },...],\n * points: []\n * lines: []\n * polygons: []\n * }\n * }\n * @param {object} possibleLabels - Possible labels that can be assigned to \n * an annotation.\n * { \n * id: int, \n * description: str, \n * label: str, (name of the label) \n * color: str (color is optional)\n * }\n * @param {blob} imageBlob - The actual image blob that will be displayed\n * @param {object} uiConfig - User interface configs \n * {\n * nodesRadius: int, strokeWidth: int,\n * layoutOffset: {left:int, top:int, right:int, bottom:int}, -> Offset of the canvas inside the container\n * imgBarVisible: bool,\n * imgLabelInputVisible: bool,\n * centerCanvasInContainer: bool, -> Center the canvas in the middle of the container.\n * maxCanvas: bool -> Maximize Canvas Size. Do not fit canvas to image size.\n * }\n * @param {int} layoutUpdate - A counter that triggers a layout update\n * everytime it is incremented.\n * @param {string} selectedTool - The tool that is selected to draw an \n * annotation. Possible choices are: 'bBox', 'point', 'line', 'polygon'\n * @param {object} canvasConfig - Configuration for this canvas\n * {\n * annos:{\n * tools: {\n * point: bool,\n * line: bool,\n * polygon: bool,\n * bbox: bool\n * },\n * multilabels: bool,\n * actions: {\n * draw: bool,\n * label: bool,\n * edit: bool,\n * },\n * maxAnnos: null or int,\n * minArea: int\n * },\n * img: {\n * multilabels: bool,\n * actions: {\n * label: bool,\n * }\n * },\n * allowedToMarkExample: bool, -> Indicates wether the current user is allowed to mark an annotation as example.\n * autoSaveInterval: int -> Interval in seconds when an autosave will be requested by canvas\n * }\n * @param {str or int} defaultLabel (optional) - Name or ID of the default label that is used\n * when no label was selected by the annotator. If not set \"no label\" will be used.\n * If ID is used, it needs to be one of the possible label ids.\n * @param {bool} blocked Block canvas view with loading dimmer.\n * @param {int} nextAnnoId Id that will be used for the next annotation that \n * will be created. If undefined, the canvas will create its own ids.\n * @param {bool} lockedAnnos A list of AnnoIds of annos that should only be displayed.\n * Such annos can not be edited in any way.\n * @event onNotification - Callback for Notification messages\n * args: {title: str, message: str, type: str}\n * @event onKeyDown - Fires for keyDown on canvas \n * @event onKeyUp - Fires for keyUp on canvas \n * @event onAnnoEvent - Fires when an anno performed an action\n * args: {anno: annoObject, newAnnos: list of annoObjects, pAction: str}\n * @event onCanvasEvent - Fires on canvas event\n * args: {action: action, data: dataObject}\n * action -> CANVAS_SVG_UPDATE \n * data: {width: int, height: int, scale: float, translateX: float,\n * translateY:float}\n * action -> CANVAS_UI_CONFIG_UPDATE\n * action -> CANVAS_LABEL_INPUT_CLOSE \n * action -> CANVAS_IMG_LOADED\n * action -> CANVAS_IMGBAR_CLOSE\n * @event onImgBarClose - Fires when close button on ImgBar was hit.\n * @event onGetFunction - Get special canvas functions for manipulation from outside canvas\n * deleteAllAnnos()\n * unloadImage()\n * resetZoom()\n * getAnnos(annos,removeFrontendIds)\n */\nclass Canvas extends Component{\n\n constructor(props){\n super(props)\n this.state = {\n \n svg: {\n width: '100%',\n height: '100%',\n scale:1.0,\n translateX:0,\n translateY:0\n },\n image: {\n width: undefined,\n height: undefined\n },\n imageOffset: {\n x: 0,\n y: 0\n },\n annos: [],\n mode: modes.VIEW,\n // selectedAnnoId: {id:undefined},\n selectedAnnoId: undefined,\n showSingleAnno: undefined,\n showLabelInput: false,\n imageLoaded: false,\n imgLoadCount: 0,\n imgLabelIds: [],\n imgLabelChanged: false,\n imgAnnoTime: 0,\n imgLoadTimestamp: 0,\n performedImageInit: false,\n prevLabel: [],\n imageBlob: undefined,\n isJunk: false,\n imgBarVisible:false,\n annoToolBarVisible: false,\n possibleLabels: undefined,\n annoCommentInputTrigger: 0,\n // showAnnoCommentInput: false\n }\n this.img = React.createRef()\n this.svg = React.createRef()\n this.container = React.createRef()\n this.hist = new UndoRedo()\n this.keyMapper = new KeyMapper((keyAction) => this.handleKeyAction(keyAction))\n this.mousePosAbs = undefined\n this.clipboard = undefined\n this.autoSaveI = undefined\n }\n\n componentDidMount(){\n this.updatePossibleLabels()\n if (Number.isInteger(this.props.defaultLabel)){\n\n this.setState({prevLabel:[this.props.defaultLabel]})\n }\n if (this.props.canvasConfig.autoSaveInterval){\n this.autoSaveI = setInterval(() => {\n // console.log('AutoSave')\n // this.props.onAutoSave()\n this.triggerCanvasEvent(canvasActions.CANVAS_AUTO_SAVE)\n }, this.props.canvasConfig.autoSaveInterval*1000)\n }\n if (this.props.onGetFunction){\n this.props.onGetFunction({\n 'deleteAllAnnos':() => this.deleteAllAnnos(),\n 'unloadImage': () => this.unloadImage(),\n 'resetZoom': () => this.resetZoom(),\n 'getAnnos': (annos,removeFrontendIds) => this.getAnnos(annos, removeFrontendIds)\n })\n // this.props.onGetFunction(\n // () => this.deleteAllAnnos()\n // )\n }\n }\n\n componentWillUnmount(){\n clearInterval(this.autoSaveI)\n console.log('Cleard auto save interval!')\n }\n\n componentDidUpdate(prevProps, prevState){\n // if (this.props.image.id !== prevProps.image.id){\n \n // }\n if (prevProps.imageMeta !== this.props.imageMeta){\n this.setState({\n imgLabelIds: this.props.imageMeta.labelIds,\n imgAnnoTime: this.props.imageMeta.annoTime,\n imgLoadTimestamp: performance.now()\n // isJunk: this.props.annos.image.isJunk\n })\n }\n if (prevProps.annos !== this.props.annos){\n if (this.state.imageBlob) { \n this.updateCanvasView(\n annoConversion.fixBackendAnnos(this.props.annos) \n ) \n }\n // this.setState({\n // imageLoaded: false,\n // // imageBlob: undefined\n // })\n }\n if (prevProps.isJunk !== this.props.isJunk){\n if (this.state.isJunk !== this.props.isJunk){\n this.setState({\n isJunk: this.props.isJunk\n })\n }\n }\n if (this.state.imageBlob !== this.props.imageBlob){\n this.setState({imageBlob: this.props.imageBlob})\n }\n // if (!this.state.imageLoaded){\n // if(this.props.annos.image.id === this.props.image.id){\n // this.setState({\n // imageLoaded: true\n // })\n // if (this.props.onImageLoaded){\n // this.props.onImageLoaded()\n // }\n // }\n // }\n if (this.props.possibleLabels !== prevProps.possibleLabels){\n this.updatePossibleLabels()\n }\n if (this.state.performedImageInit){\n // Initialize canvas history\n this.setState({\n performedImageInit:false,\n annoToolBarVisible:false\n })\n if (this.props.uiConfig.imgBarVisible){\n this.setState({imgBarVisible:true})\n }\n this.hist.clearHist()\n this.hist.push({\n ...this.getAnnos(),\n selectedAnnoId: undefined\n }, 'init')\n }\n if (this.state.imageLoaded){\n // Selected annotation should be on top\n this.putSelectedOnTop(prevState)\n if (prevState.imgLoadCount !== this.state.imgLoadCount){\n this.updateCanvasView(\n annoConversion.fixBackendAnnos(this.props.annos)\n )\n if (this.props.imageMeta){\n this.setImageLabels(this.props.imageMeta.labelIds)\n this.setState({\n performedImageInit:true\n })\n }\n } \n if(prevProps.layoutUpdate !== this.props.layoutUpdate){\n this.selectAnnotation(undefined)\n // this.updateCanvasView(this.getAnnoBackendFormat())\n // const {imageOffset} = this.updateImageSize()\n this.updateCanvasView(annoConversion.canvasToBackendAnnos(\n this.state.annos, this.state.svg, false, this.state.imageOffset\n ))\n }\n \n }\n }\n\n onImageLoad(){\n this.setState({\n imageLoaded: true,\n imgLoadCount: this.state.imgLoadCount + 1,\n showLabelInput: false,\n showSingleAnno: undefined,\n selectedAnnoId: undefined\n })\n this.triggerCanvasEvent(canvasActions.CANVAS_IMG_LOADED)\n // if (this.props.onImageLoaded){\n // this.props.onImageLoaded()\n // }\n }\n\n onMouseOver(){\n //Prevent scrolling on svg\n this.svg.current.focus()\n }\n\n onWheel(e){\n // Zoom implementation. Note that svg is first scaled and \n // second translated!\n const up = e.deltaY < 0\n const mousePos = this.getMousePosition(e)\n const zoomFactor=1.25\n let nextScale\n if (up) {\n nextScale = this.state.svg.scale * zoomFactor\n \n } else {\n nextScale = this.state.svg.scale / zoomFactor\n }\n let newTranslation\n //Constrain zoom\n if (nextScale < 1.0){\n nextScale = 1.0\n newTranslation = {x:0, y:0}\n } else if (nextScale > 200.0){\n nextScale = 200.0\n newTranslation = wv.getZoomTranslation(mousePos, this.state.svg, nextScale)\n } else {\n newTranslation = wv.getZoomTranslation(mousePos, this.state.svg, nextScale)\n }\n this.setState({svg: {\n ...this.state.svg,\n scale: nextScale,\n // translateX: -1*(mousePos.x * nextScale - mousePos.x)/nextScale,\n // translateY: -1*(mousePos.y * nextScale - mousePos.y)/nextScale\n translateX: newTranslation.x,\n translateY: newTranslation.y\n }})\n return false\n }\n\n onRightClick(e){\n e.preventDefault()\n }\n\n onMouseDown(e){\n if (e.button === 0){\n this.selectAnnotation(undefined)\n }\n else if (e.button === 1){\n this.setMode(modes.CAMERA_MOVE)\n }\n else if (e.button === 2){\n //Create annotation on right click\n this.createNewAnnotation(e)\n }\n }\n\n onAnnoMouseDown(e){\n if (e.button === 1){\n // this.collectAnnos()\n this.setMode(modes.CAMERA_MOVE)\n }\n else if (e.button === 2){\n //Create annotation on right click\n this.createNewAnnotation(e)\n }\n else if (e.button === 0){\n if (this.state.showLabelInput){\n const anno = this.findAnno(this.state.selectedAnnoId)\n this.updateSelectedAnno(anno, modes.VIEW)\n this.showSingleAnno(undefined)\n this.showLabelInput(false)\n }\n }\n }\n\n onMouseUp(e){\n switch (e.button){\n case 1:\n this.setMode(modes.VIEW)\n break\n default:\n break\n }\n }\n\n // handleAnnoCommentInputClose(comment){\n // const anno = this.findAnno(this.state.selectedAnnoId)\n // anno.comment = comment\n // this.stopAnnotimeMeasure(anno)\n // this.updateSelectedAnno(anno, modes.VIEW)\n // console.log('handleAnnoCommentInputClose', comment)\n // }\n \n updateAnnoComment(comment){\n const anno = this.findAnno(this.state.selectedAnnoId)\n anno.comment = comment\n this.handleAnnoEvent(anno, canvasActions.ANNO_COMMENT_UPDATE)\n // this.stopAnnotimeMeasure(anno)\n // console.log('updateAnnoComment', comment)\n }\n\n handleKeyAction(action){\n const anno = this.findAnno(this.state.selectedAnnoId)\n const camKeyStepSize = 20 * this.state.svg.scale\n\n switch(action){\n case keyActions.EDIT_LABEL:\n // Need to get the newest version of annotation data directly \n // from annotation object, when editing label/ hitting enter\n // in create mode, since annotation data in canvas are not updated\n // to this point in time. \n const ar = this.findAnnoRef(this.state.selectedAnnoId)\n let myAnno = undefined\n if (ar !== undefined){\n myAnno = ar.current.myAnno.current.getResult()\n }\n this.editAnnoLabel(myAnno)\n break\n case keyActions.DELETE_ANNO:\n this.deleteAnnotation(anno)\n break\n case keyActions.TOGGLE_ANNO_COMMENT_INPUT:\n if (this.state.selectedAnnoId) {\n this.setState({annoCommentInputTrigger: this.state.annoCommentInputTrigger+1})\n // this.startAnnotimeMeasure(anno)\n // this.showSingleAnno(this.state.selectedAnnoId)\n }\n break\n case keyActions.DELETE_ANNO_IN_CREATION:\n this.deleteAnnoInCreationMode(anno)\n break\n case keyActions.ENTER_ANNO_ADD_MODE:\n if (anno){\n this.updateSelectedAnno(\n anno, modes.ADD\n )\n // this.showSingleAnno(anno.id)\n }\n break\n case keyActions.LEAVE_ANNO_ADD_MODE:\n if (anno){\n this.updateSelectedAnno(\n anno, modes.VIEW\n )\n // this.showSingleAnno(undefined)\n }\n break\n case keyActions.UNDO:\n this.undo()\n break\n case keyActions.REDO:\n this.redo()\n break\n case keyActions.TRAVERSE_ANNOS:\n this.traverseAnnos()\n break\n case keyActions.CAM_MOVE_LEFT:\n // this.setMode(modes.CAMERA_MOVE)\n this.moveCamera(camKeyStepSize, 0)\n break\n case keyActions.CAM_MOVE_RIGHT:\n this.moveCamera(-camKeyStepSize, 0)\n break\n case keyActions.CAM_MOVE_UP:\n this.moveCamera(0, camKeyStepSize)\n break\n case keyActions.CAM_MOVE_DOWN:\n this.moveCamera(0, -camKeyStepSize)\n break\n case keyActions.CAM_MOVE_STOP:\n // this.setMode(modes.VIEW)\n break\n case keyActions.COPY_ANNOTATION:\n this.copyAnnotation()\n break\n case keyActions.PASTE_ANNOTATION:\n this.pasteAnnotation(0)\n break\n case keyActions.RECREATE_ANNO:\n // recreate selected annotation using the anno id\n if(this.state.selectedAnnoId) this.recreateAnnotation(this.state.selectedAnnoId)\n break\n default:\n console.warn('Unknown key action', action)\n }\n\n }\n\n onKeyDown(e){\n e.preventDefault()\n this.keyMapper.keyDown(e.key)\n // this.findAnno(this.state.selectedAnnoId)\n if (this.props.onKeyDown){\n this.props.onKeyDown(e)\n }\n }\n\n onKeyUp(e){\n e.preventDefault()\n this.keyMapper.keyUp(e.key)\n if (this.props.onKeyUp){\n this.props.onKeyUp(e)\n }\n }\n\n onMouseMove(e){\n if (this.state.mode === modes.CAMERA_MOVE){\n this.moveCamera(e.movementX, e.movementY)\n }\n }\n\n onLabelInputDeleteClick(annoId){\n this.removeSelectedAnno()\n }\n \n \n /**\n * Trigger canvas event\n * @param {String} action Action that was performed\n * @param {Object} data Data object of the action\n */\n triggerCanvasEvent(action, data){\n if (this.props.onCanvasEvent){\n this.props.onCanvasEvent(action, data)\n }\n }\n\n /**\n * Handle actions that have been performed by an annotation \n * @param {Number} anno Id of the annotation\n * @param {String} pAction Action that was performed\n */\n handleAnnoEvent(anno, pAction){\n let newAnnos = undefined\n switch(pAction){\n case canvasActions.ANNO_MARK_EXAMPLE:\n newAnnos = this.updateSelectedAnno(anno, modes.VIEW)\n this.pushHist(\n newAnnos, anno.id,\n pAction, this.state.showSingleAnno\n )\n break\n case canvasActions.ANNO_SELECTED:\n this.selectAnnotation(anno.id)\n // this.pushHist(\n // this.state.annos, anno.id,\n // pAction, this.state.showSingleAnno\n // )\n break\n case canvasActions.ANNO_START_CREATING:\n newAnnos = this.updateSelectedAnno(anno)\n this.pushHist(\n newAnnos, anno.id,\n pAction, this.state.showSingleAnno\n )\n break\n case canvasActions.ANNO_CREATED:\n anno = this.stopAnnotimeMeasure(anno)\n newAnnos = this.updateSelectedAnno(anno, modes.VIEW)\n this.pushHist(\n newAnnos, anno.id,\n pAction, undefined\n )\n this.showSingleAnno(undefined)\n this.setState({annoToolBarVisible:true})\n break\n case canvasActions.ANNO_MOVED:\n anno = this.stopAnnotimeMeasure(anno)\n newAnnos = this.updateSelectedAnno(anno, modes.VIEW)\n this.showSingleAnno(undefined)\n this.pushHist(\n newAnnos, anno.id,\n pAction, undefined\n )\n this.setState({annoToolBarVisible:true})\n break\n case canvasActions.ANNO_ENTER_MOVE_MODE:\n anno = this.startAnnotimeMeasure(anno)\n this.updateSelectedAnno(anno, modes.MOVE)\n this.showSingleAnno(anno.id)\n this.setState({annoToolBarVisible:false})\n break\n case canvasActions.ANNO_ENTER_EDIT_MODE:\n anno = this.startAnnotimeMeasure(anno)\n this.updateSelectedAnno(anno, modes.EDIT)\n // this.showSingleAnno(anno.id)\n this.setState({annoToolBarVisible:false})\n break\n case canvasActions.ANNO_ADDED_NODE:\n newAnnos = this.updateSelectedAnno(anno, modes.VIEW)\n this.pushHist(\n newAnnos, anno.id,\n pAction, this.state.showSingleAnno\n )\n break\n case canvasActions.ANNO_REMOVED_NODE:\n if (!this.checkAnnoLength(anno)){\n newAnnos = this.updateSelectedAnno(anno, modes.DELETED)\n this.showSingleAnno(undefined)\n } else {\n newAnnos = this.updateSelectedAnno(anno, modes.CREATE)\n }\n this.pushHist(\n newAnnos, anno.id,\n pAction, this.state.showSingleAnno\n )\n break\n case canvasActions.ANNO_EDITED:\n anno = this.stopAnnotimeMeasure(anno)\n newAnnos = this.updateSelectedAnno(anno, modes.VIEW)\n this.pushHist(\n newAnnos, anno.id,\n pAction, this.state.showSingleAnno\n )\n this.setState({annoToolBarVisible:true})\n break\n case canvasActions.ANNO_DELETED:\n newAnnos = this.updateSelectedAnno(anno, modes.DELETED)\n this.selectAnnotation(undefined)\n this.showSingleAnno(undefined)\n this.pushHist(\n newAnnos, undefined,\n pAction, this.state.showSingleAnno\n )\n break\n case canvasActions.ANNO_COMMENT_UPDATE:\n newAnnos = this.updateSelectedAnno(anno, modes.VIEW)\n // newAnnos = this.updateSelectedAnno(anno, modes.DELETED) \n // this.selectAnnotation(undefined)\n // this.showSingleAnno(undefined)\n this.pushHist(\n newAnnos, anno.id,\n pAction, this.state.showSingleAnno\n )\n this.handleNotification({\n title: \"Saved comment\",\n message: `Saved comment: ${anno.comment}`,\n type: notificationType.SUCCESS\n })\n break\n case canvasActions.ANNO_LABEL_UPDATE:\n anno = this.stopAnnotimeMeasure(anno)\n if (!this.checkAnnoLength(anno)){\n newAnnos = this.updateSelectedAnno(anno, modes.DELETED)\n } else {\n newAnnos = this.updateSelectedAnno(anno, modes.VIEW)\n }\n this.pushHist(\n newAnnos, anno.id,\n pAction, undefined\n )\n this.setState({annoToolBarVisible:true})\n break\n case canvasActions.ANNO_CREATED_NODE:\n anno = this.stopAnnotimeMeasure(anno)\n newAnnos = this.updateSelectedAnno(anno, modes.CREATE)\n this.pushHist(\n newAnnos, anno.id,\n pAction, this.state.showSingleAnno\n )\n break\n case canvasActions.ANNO_CREATED_FINAL_NODE:\n anno = this.stopAnnotimeMeasure(anno)\n newAnnos = this.updateSelectedAnno(anno, modes.VIEW)\n this.pushHist(\n newAnnos, anno.id,\n pAction, undefined\n )\n this.showSingleAnno(undefined)\n this.setState({annoToolBarVisible:true})\n break\n default:\n console.warn('Action not handeled', pAction)\n break\n }\n if (this.props.onAnnoEvent){\n this.props.onAnnoEvent(anno, newAnnos, pAction)\n }\n }\n\n onAnnoLabelInputUpdate(anno){\n this.updateSelectedAnno(anno)\n }\n\n onAnnoLabelInputClose(){\n this.svg.current.focus()\n this.showLabelInput(false)\n this.showSingleAnno(undefined)\n const anno = this.findAnno(this.state.selectedAnnoId)\n this.handleAnnoEvent(anno, canvasActions.ANNO_LABEL_UPDATE)\n }\n\n handleImgBarClose(){\n this.triggerCanvasEvent(canvasActions.CANVAS_IMGBAR_CLOSE)\n // if (this.props.onImgBarClose){\n // this.props.onImgBarClose()\n // }\n }\n\n handleImgLabelUpdate(label){\n this.setState({\n imgLabelIds: label,\n imgLabelChanged: true,\n })\n this.pushHist(this.state.annos,\n this.state.selectedAnnoId,\n canvasActions.IMG_LABEL_UPDATE,\n this.state.showSingleAnno,\n label\n )\n }\n\n handleCanvasClick(e){\n if (this.props.uiConfig.imgBarVisible){\n this.setState({imgBarVisible:true})\n }\n }\n\n handleImgBarMouseEnter(e){\n this.setState({imgBarVisible:false})\n }\n\n handleImgLabelInputClose(){\n this.triggerCanvasEvent(canvasActions.CANVAS_LABEL_INPUT_CLOSE)\n // if (this.props.onImgLabelInputClose){\n // this.props.onImgLabelInputClose()\n // }\n }\n\n // handleAnnoCommentInputClose(e){\n // this.showAnnoCommentInputField(false)\n // }\n\n handleSvgMouseMove(e){\n this.mousePosAbs = mouse.getMousePositionAbs(e, this.state.svg)\n }\n\n handleNotification(messageObj){\n if (this.props.onNotification){\n this.props.onNotification(messageObj)\n }\n }\n\n handleHideLbl(lbl, hide){\n // console.log('hide lbl', lbl, hide)\n let hiddenSelected = false\n const newAnnos = this.state.annos.map(anno => {\n // console.log('map annos', anno)\n const newAnno = {...anno}\n if (anno.labelIds.includes(lbl.id)){\n newAnno.visible = !hide\n if (anno.id === this.state.selectedAnnoId) hiddenSelected=true\n } else if (anno.labelIds.length === 0){ // no label case\n if (lbl.id === -1){ // -1 indicates no label\n newAnno.visible = !hide\n if (anno.id === this.state.selectedAnnoId) hiddenSelected=true\n }\n }\n return newAnno\n })\n // console.log('newAnnos', newAnnos)\n this.setState({annos: newAnnos})\n if (hiddenSelected){\n this.selectAnnotation(undefined)\n }\n }\n\n handleMarkExample(anno){\n const newAnno = {...anno}\n if (newAnno.isExample == undefined){\n newAnno.isExample = true \n } else if (newAnno.isExample){\n newAnno.isExample = false\n } else {\n newAnno.isExample = true\n }\n this.handleAnnoEvent(newAnno, canvasActions.ANNO_MARK_EXAMPLE)\n\n }\n\n /*************\n * LOGIC *\n **************/\n copyAnnotation(){\n this.clipboard = this.findAnno(this.state.selectedAnnoId)\n this.handleNotification({\n title: \"Copyed annotation to clipboard\",\n message: 'Copyed '+this.clipboard.type,\n type: notificationType.SUCCESS\n })\n }\n\n pasteAnnotation(offset=0){\n if (this.clipboard){\n let annos = [...this.state.annos]\n const uid = _.uniqueId('new')\n annos.push({\n ...this.clipboard,\n id: uid,\n annoTime: 0,\n status: annoStatus.NEW,\n data: this.clipboard.data.map(e => {\n return {x: e.x+offset, y: e.y+offset}\n })\n })\n this.setState({annos: annos, selectedAnnoId: uid})\n this.handleNotification({\n title: \"Pasted annotation to canvas\",\n message: 'Pasted and selected '+this.clipboard.type,\n type: notificationType.SUCCESS\n })\n }\n }\n\n\n checkAnnoLength(anno){\n if (anno.type === 'polygon' && anno.data.length < 3){\n this.handleNotification({\n title: \"Invalid polygon!\",\n message: 'A vaild polygon needs at least 3 points!',\n type: notificationType.WARNING\n })\n return false\n } \n // if (anno.type === 'line' && anno.data.length < 2){\n // this.handleNotification({\n // title: \"Invalid line!\",\n // message: 'A vaild line needs at least 2 points!',\n // type: notificationType.WARNING\n // })\n // return false\n // } \n return true\n }\n\n startAnnotimeMeasure(anno){\n anno.timestamp = performance.now()\n return anno\n }\n \n stopAnnotimeMeasure(anno){\n if (anno.timestamp === undefined){\n console.error('No timestamp for annotime measurement. Check if you started measurement', anno)\n return undefined\n } else {\n let now = performance.now()\n anno.annoTime += (now - anno.timestamp) / 1000\n anno.timestamp = now\n return anno\n }\n }\n\n updatePossibleLabels(){\n if (!this.props.possibleLabels) return\n if (this.props.possibleLabels.length <= 0) return\n let lbls = this.props.possibleLabels\n lbls = lbls.map(e => {\n if (!('color' in e)){\n return {\n ...e, color: colorlut.getColor(e.id)}\n } else {\n return {...e}\n }\n })\n this.setState({\n possibleLabels: [...lbls]\n })\n }\n\n editAnnoLabel(anno){\n if (this.state.selectedAnnoId){\n let myAnno\n if (anno === undefined){\n myAnno = this.findAnno(this.state.selectedAnnoId)\n } else {\n myAnno = {...anno}\n }\n myAnno = this.startAnnotimeMeasure(myAnno)\n this.showLabelInput()\n this.updateSelectedAnno(myAnno, modes.EDIT_LABEL)\n }\n }\n unloadImage(){\n if(this.state.imageLoaded){\n this.setState({imageLoaded:false})\n }\n }\n /**\n * Find a annotation by id in current state\n * \n * @param {int} annoId - Id of the annotation to find\n */\n findAnno(annoId){\n return this.state.annos.find(e => {\n return e.id === annoId\n })\n }\n\n findAnnoRef(annoId){\n if (this.state.selectedAnnoId === undefined) return undefined\n return this.annoRefs.find(e => {\n if (e.current){\n return e.current.isSelected()\n } else {\n return false\n }\n })\n }\n\n pushHist(annos, selectedAnnoId, pAction, showSingleAnno, imgLabelIds=this.state.imgLabelIds){\n this.hist.push({\n ...this.getAnnos(annos, false),\n selectedAnnoId: selectedAnnoId,\n showSingleAnno: showSingleAnno,\n imgLabelIds: imgLabelIds\n }, pAction)\n }\n\n undo(){\n if (!this.hist.isEmpty()){\n const cState = this.hist.undo()\n this.setCanvasState(\n cState.entry.annotations,\n cState.entry.imgLabelIds, \n cState.entry.selectedAnnoId,\n cState.entry.showSingleAnno)\n }\n }\n\n redo(){\n if (!this.hist.isEmpty()){\n const cState = this.hist.redo()\n this.setCanvasState(\n cState.entry.annotations,\n cState.entry.imgLabelIds, \n cState.entry.selectedAnnoId,\n cState.entry.showSingleAnno)\n }\n }\n\n deleteAnnotation(anno) {\n if (anno){\n if (anno.mode === modes.CREATE){\n const ar = this.findAnnoRef(this.state.selectedAnnoId)\n if (ar !== undefined) ar.current.myAnno.current.removeLastNode()\n \n } else {\n this.handleAnnoEvent(anno, canvasActions.ANNO_DELETED)\n }\n }\n }\n\n deleteAnnoInCreationMode(anno) {\n if (anno){\n if (anno.mode === modes.CREATE){\n // const ar = this.findAnnoRef(this.state.selectedAnnoId)\n // if (ar !== undefined) ar.current.myAnno.current.removeLastNode()\n this.handleAnnoEvent(anno, canvasActions.ANNO_DELETED)\n \n } else {\n }\n }\n }\n\n deleteAllAnnos(){\n let newAnnos = []\n this.state.annos.forEach( e => {\n if ((typeof e.id) !== \"string\"){\n newAnnos.push(\n {...e, status: annoStatus.DELETED}\n )\n }\n })\n this.pushHist(newAnnos, undefined, 'deletedAllAnnos', this.state.showSingleAnno, this.state.imgLabelIds)\n this.setState({annos: newAnnos})\n this.selectAnnotation(undefined)\n this.showSingleAnno(undefined)\n }\n\n /**\n * Set state of Canvas annotations and imageLabels.\n * \n * @param {list} annotations - Annotations in backend format\n * @param {list} imgLabelIds - IDs of the image labels\n * @param {object} selectedAnno - The selected annotation\n * @param {int} showSingleAnno - The id of the single annotation\n * that should be visible\n */\n setCanvasState(annotations, imgLabelIds, selectedAnnoId, showSingleAnno){\n this.updateCanvasView({...annotations})\n this.setImageLabels([...imgLabelIds])\n this.selectAnnotation(selectedAnnoId)\n this.setState({showSingleAnno: showSingleAnno})\n }\n\n isLocked(annoId){\n if (this.props.lockedAnnos){\n if (this.props.lockedAnnos.includes(annoId)){\n return true\n }\n }\n return false\n }\n\n selectAnnotation(annoId){\n if (this.isLocked(annoId)) {\n this.handleNotification({\n title: \"Annotation locked\",\n message: `Annotation with id ${annoId} is locked and can not be edited`,\n type: notificationType.WARNING\n })\n return\n } \n if (annoId){\n const anno = this.findAnno(annoId)\n this.setState({\n selectedAnnoId: annoId\n })\n if (anno){\n if (anno.mode !== modes.CREATE){\n this.setState({\n annoToolBarVisible: true\n })\n }\n }\n } else {\n this.setState({\n selectedAnnoId: undefined,\n annoToolBarVisible: false\n })\n if (this.state.showLabelInput){\n this.onAnnoLabelInputClose()\n }\n }\n // if(this.props.onAnnoSelect){\n // const anno = this.findAnno(annoId)\n // this.props.onAnnoSelect(anno)\n // }\n }\n\n /**\n * Traverse annotations by key hit\n */\n traverseAnnos(){\n if (this.state.annos.length > 0){\n const myAnnos = this.state.annos.filter(e => {\n return e.status !== annoStatus.DELETED && !this.isLocked(e.id) && !(e.visible === false)\n })\n if (myAnnos.length > 0){\n if (!this.state.selectedAnnoId){\n this.selectAnnotation(myAnnos[0].id)\n } else {\n let currentIdx = myAnnos.findIndex( e => {\n return e.id === this.state.selectedAnnoId\n })\n if (currentIdx+1 < myAnnos.length){\n this.selectAnnotation(myAnnos[currentIdx+1].id)\n } else {\n this.selectAnnotation(myAnnos[0].id)\n }\n }\n }\n }\n } \n\n getAnnos(annos=undefined, removeFrontedIds=true){\n const myAnnos = annos ? annos : this.state.annos\n // const backendFormat = this.getAnnoBackendFormat(removeFrontedIds, myAnnos)\n const backendFormat = annoConversion.canvasToBackendAnnos(myAnnos, \n this.state.svg, removeFrontedIds, this.state.imageOffset)\n const finalData = {\n imgId: this.props.imageMeta.id,\n imgLabelIds: this.state.imgLabelIds,\n imgLabelChanged: this.state.imgLabelChanged,\n annotations: backendFormat,\n isJunk: this.state.isJunk,\n annoTime: this.props.imageMeta.annoTime + (performance.now() - this.state.imgLoadTimestamp)/1000\n }\n return finalData\n }\n\n /**\n * Reset zoom level on Canvas\n */\n resetZoom(){\n this.setState({svg: {\n ...this.state.svg,\n translateX: 0,\n translateY: 0,\n scale: 1.0\n }})\n }\n\n moveCamera(movementX, movementY){\n let trans_x = this.state.svg.translateX + movementX / this.state.svg.scale\n let trans_y = this.state.svg.translateY + movementY / this.state.svg.scale\n const vXMin = this.state.svg.width * 0.25\n const vXMax = this.state.svg.width * 0.75\n const yXMin = this.state.svg.height * 0.25\n const yXMax = this.state.svg.height * 0.75\n const vLeft = wv.getViewportCoordinates({x:0, y:0}, this.state.svg)\n const vRight = wv.getViewportCoordinates({x:this.state.svg.width, y:this.state.svg.height}, this.state.svg)\n if (vLeft.vX >= vXMin){\n trans_x = this.state.svg.translateX - 5\n } else if (vRight.vX <= vXMax){\n trans_x = this.state.svg.translateX +5\n } \n if (vLeft.vY >= yXMin){\n trans_y = this.state.svg.translateY - 5\n } else if (vRight.vY <= yXMax){\n trans_y= this.state.svg.translateY +5\n } \n this.setState({svg: {\n ...this.state.svg,\n translateX: trans_x,\n translateY: trans_y\n }})\n }\n\n setMode(mode){\n if (this.state.mode !== mode){\n this.setState({mode: mode})\n }\n }\n \n getMousePosition(e){\n const absPos = this.getMousePositionAbs(e)\n return {\n x: (absPos.x )/this.state.svg.scale - this.state.svg.translateX,\n y: (absPos.y )/this.state.svg.scale - this.state.svg.translateY\n }\n }\n\n getMousePositionAbs(e){\n return {\n x: (e.pageX - this.svg.current.getBoundingClientRect().left),\n y: (e.pageY - this.svg.current.getBoundingClientRect().top)\n }\n }\n\n showLabelInput(visible=true){\n this.setState({\n showLabelInput: visible\n })\n if (visible){\n this.showSingleAnno(this.state.selectedAnnoId)\n }\n }\n\n createNewAnnotation(e){\n //Do not create new Annotation if controlKey was pressed!\n let allowed = false\n if (this.keyMapper.controlDown) return\n if (this.props.selectedTool){\n const maxAnnos = this.props.canvasConfig.annos.maxAnnos\n if (maxAnnos){\n if (this.state.annos.length < maxAnnos){\n allowed = true\n } else {\n console.warn('Maximum number of annotations reached! MaxAnnos:', maxAnnos)\n this.handleNotification({\n title: 'Maximum number of annotations reached!',\n message: `Only ${maxAnnos} annotations per image are allowed by config` ,\n type: notificationType.WARNING\n })\n }\n } else {\n allowed = true\n }\n } else {\n console.warn('No annotation tool selected!')\n this.handleNotification({\n title: 'No tool selected!',\n message: 'Please select an annotation tool in the toolbar.',\n type: notificationType.INFO\n })\n }\n if (allowed){\n const mousePos = this.getMousePosition(e)\n // const selAnno = this.findAnno(this.state.selectedAnnoId)\n let newAnno = {\n id: this.props.nextAnnoId ? this.props.nextAnnoId : _.uniqueId('new'),\n type: this.props.selectedTool,\n data: [{\n x: mousePos.x, \n y: mousePos.y\n },{\n x: mousePos.x,\n y: mousePos.y\n }],\n mode: modes.CREATE,\n status: annoStatus.NEW,\n labelIds: this.state.prevLabel,\n selectedNode: 1,\n annoTime: 0.0\n }\n newAnno = this.startAnnotimeMeasure(newAnno)\n this.setState({\n annos: [...this.state.annos, newAnno],\n selectedAnnoId: newAnno.id,\n showSingleAnno: newAnno.id,\n annoToolBarVisible: false\n })\n if (this.props.selectedTool !== TOOLS.BBOX && \n this.props.selectedTool !== TOOLS.POINT){ \n const merged = this.mergeSelectedAnno(newAnno)\n this.pushHist(\n merged.newAnnos,\n newAnno.id, \n canvasActions.ANNO_CREATED_NODE,\n newAnno.id\n )\n }\n }\n }\n\n /**\n * recreate an existing annotation in case the creation process was not finished\n * @param {string} id of annotation\n */\n recreateAnnotation(annoID) {\n\n let annos = this.state.annos\n\n // search for id of selected anno in all annos (should normally be last item in list, but to be sure)\n let annoIndex\n let anno\n \n for(var k in annos) if(annos[k].id == annoID) {\n annoIndex = k\n anno = annos[k]\n break\n }\n\n // editing is only allowed on line and polygon\n if(!['line', 'polygon'].includes(anno.type)) return console.log(\"Cant recreate annotation: Type \" + anno.type + \" is forbidden\")\n\n // remove the old annotation\n this.state.annos.splice(annoIndex, 1)\n\n // create a new annotation based on the datapoints of the old annotation\n let newAnno = {\n id: anno.id,\n type: anno.type,\n data: anno.data,\n mode: modes.CREATE,\n status: (anno.status == 'database' ? annoStatus.CHANGED : annoStatus.NEW),\n labelIds: anno.labelIds,\n selectedNode: anno.data.length - 1,\n annoTime: anno.annoTime\n }\n\n newAnno = this.startAnnotimeMeasure(newAnno)\n this.setState({\n annos: [...this.state.annos, newAnno],\n selectedAnnoId: newAnno.id,\n showSingleAnno: newAnno.id,\n annoToolBarVisible: false\n })\n\n console.log(\"Annotation recreated\")\n }\n\n putSelectedOnTop(prevState){\n // The selected annotation need to be rendered as last one in \n // oder to be above all other annotations.\n if (this.state.selectedAnnoId){\n if (prevState.selectedAnnoId !== this.state.selectedAnnoId){\n const annos = this.state.annos.filter( (el) => {\n return el.id !== this.state.selectedAnnoId\n })\n const lastAnno = this.state.annos.find( el => {\n return el.id === this.state.selectedAnnoId\n })\n annos.push(lastAnno)\n this.setState({annos: [\n ...annos\n ]})\n }\n }\n }\n\n getLabel(lblId){\n return this.state.possibleLabels.find( e => {\n return e.id === lblId\n })\n }\n\n getAnnoColor(){\n if (this.state.selectedAnnoId){\n const anno = this.findAnno(this.state.selectedAnnoId)\n if (anno){\n if (anno.labelIds.length > 0){\n return this.getLabel(anno.labelIds[0]).color\n }\n } \n }\n return colorlut.getDefaultColor()\n }\n\n /**\n * Update selected anno and override mode if desired\n * \n * @param {object} anno - The new annotation the becomes the selected anno\n * @param {string} mode - The new mode for the selected anno\n * @returns The new anno that was set as selectedAnno in state and \n * the new annos list that was set in state\n */\n updateSelectedAnno(anno, mode=undefined){\n if (!anno) return\n const {newAnnos, newAnno} = this.mergeSelectedAnno(anno, mode)\n this.setState({\n annos: newAnnos,\n selectedAnnoId: anno.id,\n prevLabel: anno.labelIds, \n })\n // if(this.props.onAnnoSelect){\n // if (newAnno !== null){\n // this.props.onAnnoSelect(newAnno)\n // }\n // }\n return newAnnos\n }\n\n mergeSelectedAnno(anno, mode=undefined){\n const filtered = this.state.annos.filter( (el) => {\n return el.id !== anno.id\n }) \n let newAnno\n if (mode){\n newAnno = {...anno, mode:mode}\n if (mode === modes.DELETED){\n if (anno.status !== annoStatus.NEW){\n newAnno = {\n ...newAnno,\n status: annoStatus.DELETED\n }\n } else {\n newAnno = null\n }\n } else {\n newAnno = {\n ...newAnno,\n status: anno.status !== annoStatus.NEW ? annoStatus.CHANGED : annoStatus.NEW\n }\n }\n } else {\n newAnno = {...anno}\n }\n if (newAnno !== null){\n filtered.push(newAnno)\n }\n const newAnnos = [...filtered]\n return {newAnnos, newAnno}\n }\n\n showSingleAnno(annoId){\n if (this.state.showSingleAnno !== annoId){\n this.setState({showSingleAnno: annoId})\n } \n }\n\n updateImageSize(){\n \n var container = this.props.container.current.getBoundingClientRect()\n \n // if (container.left < this.props.uiConfig.toolBarWidth){\n // canvasLeft = this.props.uiConfig.toolBarWidth + 10\n // } else {\n // canvasLeft = container.left\n // }\n // var clientWidth = document.documentElement.clientWidth\n var clientHeight = document.documentElement.clientHeight\n var canvasTop\n var canvasLeft\n var maxImgHeight\n var maxImgWidth \n const layoutOffset = this.props.uiConfig.layoutOffset\n if(layoutOffset){\n canvasTop = container.top + layoutOffset.top\n canvasLeft = container.left + layoutOffset.left\n maxImgHeight = clientHeight - container.top - layoutOffset.bottom - layoutOffset.top\n maxImgWidth = container.right -canvasLeft - layoutOffset.right\n } else {\n canvasTop = container.top\n canvasLeft = container.left\n maxImgHeight = clientHeight - container.top\n maxImgWidth = container.right -canvasLeft\n }\n // if (this.props.appliedFullscreen) maxImgHeight = maxImgHeight + 10 \n var ratio = this.img.current.naturalWidth / this.img.current.naturalHeight\n var imgWidth = \"100%\"\n var imgHeight = \"100%\"\n if (maxImgHeight * ratio > maxImgWidth){\n imgWidth = maxImgWidth\n imgHeight = maxImgWidth / ratio\n } else {\n imgWidth = maxImgHeight * ratio\n imgHeight = maxImgHeight\n }\n var svg \n const imgOffset = {x: 0, y:0}\n if (this.props.uiConfig.maxCanvas){\n imgOffset.x = (maxImgWidth - imgWidth)/2\n imgOffset.y = (maxImgHeight - imgHeight)/2\n console.log(`imgOffset: `, imgOffset)\n svg = {\n ...this.state.svg, width: maxImgWidth, height: maxImgHeight,\n left: canvasLeft, top: canvasTop\n }\n } else {\n if (this.props.uiConfig.centerCanvasInContainer){\n const resSpaceX = maxImgWidth - imgWidth\n if (resSpaceX > 2){\n canvasLeft = canvasLeft + resSpaceX / 2\n }\n const resSpaceY = maxImgHeight - imgHeight\n if (resSpaceY > 2){\n canvasTop = canvasTop + resSpaceY / 2\n }\n }\n svg = {\n ...this.state.svg, width : imgWidth, height: imgHeight,\n left: canvasLeft, top: canvasTop\n }\n }\n this.setState({\n svg,\n image:{\n width: this.img.current.naturalWidth,\n height: this.img.current.naturalHeight,\n },\n imageOffset: imgOffset\n })\n this.svgUpdate(svg)\n return {imgWidth, imgHeight, imgOffset}\n }\n\n svgUpdate(svg){\n this.triggerCanvasEvent(canvasActions.CANVAS_SVG_UPDATE, svg)\n // if(this.props.onSVGUpdate){\n // this.props.onSVGUpdate(svg)\n // }\n }\n\n setImageLabels(labelIds){\n if (labelIds !== this.state.imgLabelIds){\n this.setState({\n imgLabelIds: labelIds\n })\n }\n }\n\n updateCanvasView(annotations){\n \n\n var annos = []\n //Annotation data should be present and a pixel accurate value \n //for svg should be calculated\n if(annotations){\n const imgSize = this.updateImageSize()\n this.setState({annos: [...annoConversion.backendAnnosToCanvas(annotations, {width: imgSize.imgWidth, height:imgSize.imgHeight}, imgSize.imgOffset)]})\n }\n }\n\n renderAnnotations(){\n // Do not render annotations while moving the camera!\n if (this.state.mode !== modes.CAMERA_MOVE){\n this.annoRefs = []\n const annos = this.state.annos.map((el) => {\n this.annoRefs.push(React.createRef())\n return <Annotation type={el.type} \n data={el} key={el.id} svg={{...this.state.svg}}\n imageOffset={this.state.imageOffset}\n ref={this.annoRefs[this.annoRefs.length - 1]}\n onMouseDown={e => this.onAnnoMouseDown(e)}\n onAction={(anno, pAction) => this.handleAnnoEvent(anno, pAction)}\n selectedAnno={this.state.selectedAnnoId}\n // onModeChange={(anno) => this.onAnnoModeChange(anno)}\n showSingleAnno={this.state.showSingleAnno}\n uiConfig={this.props.uiConfig}\n allowedActions={this.props.canvasConfig.annos.actions}\n possibleLabels={this.state.possibleLabels}\n image={this.state.image}\n canvasConfig={this.props.canvasConfig}\n onNotification={(messageObj) => this.handleNotification(messageObj) }\n defaultLabel={this.props.defaultLabel}\n />\n })\n return <g>{annos}</g>\n } else {\n return null\n }\n \n }\n\n renderImgLabelInput(){\n if (!this.props.imageMeta) return null\n return <Prompt \n onClick={() => this.handleImgLabelInputClose()}\n active={this.props.uiConfig.imgLabelInputVisible}\n header={<div>\n Add label for the whole image\n </div>}\n content={<div>\n <LabelInput\n // multilabels={true}\n multilabels={this.props.canvasConfig.img.multilabels}\n // relatedId={this.props.annos.image.id}\n visible={true}\n onLabelUpdate={label => this.handleImgLabelUpdate(label)}\n possibleLabels={this.state.possibleLabels}\n initLabelIds={this.state.imgLabelIds}\n relatedId={this.props.imageMeta.id}\n defaultLabel={this.props.defaultLabel}\n // disabled={!this.props.allowedActions.label}\n // renderPopup\n />\n <Button basic color=\"green\" inverted\n onClick={() => this.handleImgLabelInputClose()}\n >\n <Icon name='check'></Icon>\n OK\n </Button>\n </div>}\n />\n }\n\n renderAnnoToolBar(selectedAnno){\n let visible = this.state.annoToolBarVisible\n if (this.state.mode === modes.CAMERA_MOVE) visible = false\n return <AnnoToolBar visible={visible} \n selectedAnno={selectedAnno}\n svg={this.state.svg}\n onClick={() => this.editAnnoLabel()}\n color={this.getAnnoColor()}\n />\n }\n\n renderAnnoLabelInpput(selectedAnno){\n let visible = this.state.showLabelInput\n if (this.state.mode === modes.CAMERA_MOVE) visible = false\n return <AnnoLabelInput svg={this.state.svg} \n // svgRef={this.svg}\n onClose={() => this.onAnnoLabelInputClose()}\n onDeleteClick={annoId => this.onLabelInputDeleteClick(annoId)}\n selectedAnno={selectedAnno}\n visible={visible}\n onLabelUpdate={anno => this.onAnnoLabelInputUpdate(anno)}\n possibleLabels={this.state.possibleLabels}\n allowedActions={this.props.canvasConfig.annos.actions}\n multilabels={this.props.canvasConfig.annos.multilabels}\n mousePos={this.mousePosAbs}\n defaultLabel={this.props.defaultLabel}\n // multilabels={true}\n />\n }\n\n // renderAnnoCommentInput(selectedAnno){\n // return <AnnoCommentInput \n // triggerInput={this.state.annoCommentInputTrigger}\n // onClose={comment => this.handleAnnoCommentInputClose(comment)}\n // iniComment={selectedAnno ? selectedAnno.comment : ''}\n // />\n // }\n\n render(){\n const selectedAnno = this.findAnno(this.state.selectedAnnoId)\n return(\n <div ref={this.container} >\n <div height={this.state.svg.height} \n style={{position: 'fixed', top: this.state.svg.top, left: this.state.svg.left}}\n >\n {/* {this.renderAnnoCommentInput(selectedAnno)} */}\n {this.renderImgLabelInput()}\n <ImgBar container={this.container} \n visible={this.state.imgBarVisible}\n possibleLabels={this.state.possibleLabels}\n annos={this.props.annos}\n svg={this.state.svg}\n imageMeta={this.props.imageMeta}\n onClose={() => this.handleImgBarClose()}\n imgLabelIds={this.state.imgLabelIds}\n // onLabelUpdate={label => this.handleImgLabelUpdate(label)}\n // imgLabelIds={this.state.imgLabelIds}\n // multilabels={this.props.canvasConfig.img.multilabels}\n // allowedActions={this.props.canvasConfig.img.actions}\n onMouseEnter={e => this.handleImgBarMouseEnter(e)}\n />\n <Dimmer active={!this.state.imageLoaded||this.props.blocked}><Loader>Loading</Loader></Dimmer>\n <Dimmer active={this.state.isJunk}>\n <Header as='h2' icon inverted>\n <Icon name='ban' />\n Marked as Junk\n </Header>\n </Dimmer>\n {this.renderAnnoToolBar(selectedAnno)}\n {/* <div style={{position: 'fixed', top: this.props.container.top, left: this.props.container.left}}> */}\n {this.renderAnnoLabelInpput(selectedAnno)}\n <InfoBoxes container={this.props.container} \n layoutUpdate={this.props.layoutUpdate} \n annos={this.state.annos}\n selectedAnno={selectedAnno}\n possibleLabels={this.state.possibleLabels}\n allowedToMarkExample={this.props.canvasConfig.allowedToMarkExample}\n uiConfig={this.props.uiConfig}\n imgLoadCount={this.state.imgLoadCount}\n onCommentUpdate={comment => this.updateAnnoComment(comment)}\n onUiConfigUpdate={e => this.triggerCanvasEvent(canvasActions.CANVAS_UI_CONFIG_UPDATE, e)}\n onHideLbl={(lbl, hide) => this.handleHideLbl(lbl, hide)}\n onMarkExample={anno => this.handleMarkExample(anno)}\n commentInputTrigger={this.state.annoCommentInputTrigger}\n onGetAnnoExample={(exampleArgs) => this.props.onGetAnnoExample ? this.props.onGetAnnoExample(exampleArgs):{} }\n exampleImg={this.props.exampleImg}\n />\n <svg ref={this.svg} width={this.state.svg.width} \n height={this.state.svg.height}\n onKeyDown={e => this.onKeyDown(e)}\n onKeyUp={e => this.onKeyUp(e)}\n onClick={e => this.handleCanvasClick(e)}\n onMouseMove={e => this.handleSvgMouseMove(e)}\n tabIndex=\"0\"\n >\n <g \n transform={`scale(${this.state.svg.scale}) translate(${this.state.svg.translateX}, ${this.state.svg.translateY})`}\n onMouseOver={() => {this.onMouseOver()}}\n // onMouseEnter={() => this.svg.current.focus()}\n onMouseUp={(e) => {this.onMouseUp(e)}}\n onWheel={(e) => this.onWheel(e)}\n onMouseMove={(e) => {this.onMouseMove(e)}}\n >\n <image\n onContextMenu={(e) => this.onRightClick(e)}\n onMouseDown={(e) => this.onMouseDown(e)}\n href={this.props.imageBlob} \n width={this.state.svg.width} \n height={this.state.svg.height}\n />\n {this.renderAnnotations()}\n </g>\n </svg>\n <img \n alt='sia' style={{display:'none'}} ref={this.img} \n onLoad={() => {this.onImageLoad()}} src={this.state.imageBlob}\n width=\"100%\" height=\"100%\"\n />\n {/* </div> */}\n </div>\n {/* Placeholder for Layout*/}\n <div style={{minHeight: this.state.svg.height}}></div> \n </div>)\n }\n}\n\nexport default Canvas","export const TOOL_SELECTED='toolSelected'\nexport const GET_NEXT_IMAGE='getNextImage'\nexport const GET_PREV_IMAGE='getPrevImage'\nexport const TASK_FINISHED='taskFinished'\nexport const SHOW_IMAGE_LABEL_INPUT='showImageLabelInput'\nexport const IMG_IS_JUNK='imageIsJunk'\nexport const DELETE_ALL_ANNOS='deleteAllAnnos'\nexport const SET_FULLSCREEN='setFullscreen'\nexport const SHOW_ANNO_DETAILS='showAnnoDetails'\nexport const SHOW_LABEL_INFO='showLabelInfo'\nexport const SHOW_ANNO_STATS='showAnnoStats'\nexport const EDIT_STROKE_WIDTH='editStrokeWidth'\nexport const EDIT_NODE_RADIUS='editNodeRadius'\nexport const APPLY_FILTER='applyFilter'\nexport const SAVE='save'","import React, {Component} from 'react'\n\nimport { Popup, Icon, Menu, Divider, Checkbox } from 'semantic-ui-react'\nimport * as tbe from './types/toolbarEvents'\nclass SIASettingButton extends Component{\n\n constructor(props) {\n super(props)\n this.state = {\n\n }\n }\n\n triggerEvent(e, data){\n if (this.props.onSettingEvent){\n this.props.onSettingEvent(e, data)\n }\n }\n toggleAnnoDetails(){\n this.triggerEvent(tbe.SHOW_ANNO_DETAILS)\n }\n\n toggleLabelInfo(){\n this.triggerEvent(tbe.SHOW_LABEL_INFO)\n }\n\n toggleAnnoStats(){\n this.triggerEvent(tbe.SHOW_ANNO_STATS)\n }\n\n handleStrokeWidthChange(e){\n this.triggerEvent(tbe.EDIT_STROKE_WIDTH, parseInt(e.target.value))\n }\n\n handleNodeRadiusChange(e){\n this.triggerEvent(tbe.EDIT_NODE_RADIUS, parseInt(e.target.value))\n }\n\n renderInfoBoxContent(){\n return <div>\n <Divider horizontal>Info Boxes</Divider>\n <Checkbox \n checked={this.props.uiConfig.annoDetails.visible} \n label=\"Annotation Details\" toggle\n onClick={() => this.toggleAnnoDetails()}\n />\n <Checkbox \n checked={this.props.uiConfig.labelInfo.visible} \n label=\"Label Info\" toggle\n onClick={() => this.toggleLabelInfo()}\n />\n <Checkbox \n checked={this.props.uiConfig.annoStats.visible} \n label=\"Anno Stats\" toggle\n onClick={() => this.toggleAnnoStats()}\n />\n </div>\n }\n renderInfoBoxes(){\n if (!this.props.enabled) return null\n if (this.props.enabled == true){\n return this.renderInfoBoxContent()\n } else {\n if (this.props.enabled.infoBoxes){\n return this.renderInfoBoxContent()\n }\n }\n }\n\n renderAnnoStyle(){\n if (!this.props.enabled) return null\n if (this.props.enabled == true){\n return this.renderAnnoStyleContent()\n } else {\n if (this.props.enabled.annoStyle){\n return this.renderAnnoStyleContent()\n }\n }\n }\n renderAnnoStyleContent(){\n return <div>\n <Divider horizontal>Anno Appearance</Divider>\n <div>Stroke width: {this.props.uiConfig.strokeWidth}</div>\n <input\n type='range'\n min={1}\n max={10}\n value={this.props.uiConfig.strokeWidth}\n onChange={e => this.handleStrokeWidthChange(e)}\n />\n <div>Node radius: {this.props.uiConfig.nodeRadius}</div>\n <input\n type='range'\n min={1}\n max={10}\n value={this.props.uiConfig.nodeRadius}\n onChange={e => this.handleNodeRadiusChange(e)}\n />\n </div>\n }\n\n render(){\n\n if (!this.props.uiConfig) return null\n const popupContent = <div >\n {this.renderInfoBoxes()}\n {this.renderAnnoStyle()}\n </div>\n return(\n <Popup trigger={ \n <Menu.Item name='setting'>\n <Icon name='setting' />\n </Menu.Item>\n }\n content={popupContent}\n position={\"right center\"}\n pinned\n on=\"click\"\n style={{zIndex:7000}}\n />\n )\n }\n}\n\nexport default SIASettingButton","export function active(filter){\n return filter.clahe.active || filter.rotate.active\n}","import React, {Component} from 'react'\nimport { Popup, Icon, Menu, Divider, Checkbox } from 'semantic-ui-react'\nimport * as filterTools from './filterTools'\nimport * as tbe from './types/toolbarEvents'\nclass SIAFilterButton extends Component{\n\n constructor(props) {\n super(props)\n this.state = {\n clipLimit: 3,\n active: false,\n color: undefined\n }\n }\n\n componentDidUpdate(prevProps){\n if (prevProps.filter.clahe.clipLimit !== this.props.filter.clahe.clipLimit){\n this.setState({clipLimit:this.props.filter.clahe.clipLimit})\n }\n if (this.props.filter !== prevProps.filter){\n if (filterTools.active(this.props.filter)){\n this.setState({color:'red', active:true})\n } else {\n this.setState({color:'white', active:false})\n }\n }\n }\n\n triggerEvent(e, data){\n if (this.props.onFilterEvent){\n this.props.onFilterEvent(e, data)\n }\n }\n\n handleClipLimitChange(e){\n const cl = parseInt(e.target.value)\n this.setState({clipLimit:cl})\n // this.claheFilter(cl)\n }\n\n rotateImg(angle){\n const active = !(this.props.filter.rotate.active && this.props.filter.rotate.angle === angle)\n const myAngle = active ? angle : 0\n this.triggerEvent( tbe.APPLY_FILTER,\n {\n ...this.props.filter,\n rotate: {angle:myAngle, active:active}\n })\n\n // this.props.siaApplyFilter({\n // ...this.props.filter,\n // rotate: {angle:myAngle, active:active}\n // })\n }\n\n claheFilter(clipLimit){\n const filter = {\n 'clahe' : {\n 'clipLimit':clipLimit, \n active:!this.props.filter.clahe.active\n }\n }\n this.triggerEvent(tbe.APPLY_FILTER,\n {\n ...this.props.filter,\n clahe: filter.clahe\n })\n // this.props.siaApplyFilter({\n // ...this.props.filter,\n // clahe: filter.clahe\n // })\n }\n\n releaseCLAHESlider(e){\n const filter = {\n 'clahe' : {\n 'clipLimit':parseInt(e.target.value), \n active:true\n }\n }\n this.triggerEvent(tbe.APPLY_FILTER,\n {\n ...this.props.filter,\n clahe: filter.clahe\n })\n // this.props.siaApplyFilter({\n // ...this.props.filter,\n // clahe: filter.clahe\n // })\n }\n\n renderRotateContent(){\n const filter = this.props.filter\n return <div>\n <Divider horizontal>Rotate</Divider>\n <Checkbox \n checked={filter.rotate.active && filter.rotate.angle === 90} \n label=\"Rotate 90\" toggle\n onClick={() => this.rotateImg(90)}\n />\n <Checkbox \n checked={filter.rotate.active && filter.rotate.angle === -90} \n label=\"Rotate -90\" toggle\n onClick={() => this.rotateImg(-90)}\n />\n <Checkbox \n checked={filter.rotate.active && filter.rotate.angle === 180 } \n label=\"Rotate 180\" toggle\n onClick={() => this.rotateImg(180)}\n />\n </div>\n\n }\n\n renderRotate(){\n if (!this.props.enabled) return null\n if (this.props.enabled === true){\n return this.renderRotateContent()\n } else {\n if (this.props.enabled.rotate){\n return this.renderRotateContent()\n }\n }\n }\n\n renderClaheContent(){\n const filter = this.props.filter\n return <div>\n <Divider horizontal>Histogram equalization</Divider>\n <Checkbox \n checked={filter.clahe.active} \n label=\"Histogram equalization\" toggle\n onClick={() => this.claheFilter(this.state.clipLimit)}\n />\n <div>Cliplimit: {this.state.clipLimit}</div>\n <input\n type='range'\n min={0}\n max={40}\n value={this.state.clipLimit}\n onChange={e => this.handleClipLimitChange(e)}\n onMouseUp={e => this.releaseCLAHESlider(e)}\n />\n </div>\n\n }\n\n renderClahe(){\n if (!this.props.enabled) return null\n if (this.props.enabled === true){\n return this.renderClaheContent()\n } else {\n if (this.props.enabled.clahe){\n return this.renderClaheContent()\n }\n }\n }\n\n render(){\n if (!this.props.imageMeta) return null\n const popupContent = <div >\n {this.renderRotate()}\n {this.renderClahe()}\n </div>\n return(\n <Popup trigger={ \n <Menu.Item name='filter' active={this.state.active}>\n <Icon name='filter' color={this.state.color}/>\n </Menu.Item>\n }\n content={popupContent}\n position={\"right center\"}\n pinned\n on=\"click\"\n style={{zIndex:7000}}\n />\n )\n }\n}\n\nexport default SIAFilterButton","import React from 'react'\n\nexport function textIcon(){\n return <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" \n // x=\"0px\" y=\"0px\"\n // width=\"1190.549px\" height=\"841.891px\" \n viewBox=\"0 0 1190.549 841.891\" \n width=\"17px\"\n // onClick={e => this.handleClick(e)}\n >\n <path id=\"T\" fillRule=\"evenodd\" clipRule=\"evenodd\" fill=\"currentColor\" d=\"M925.876,172.939c-0.172-13.004,0.161-26.013,0.116-39.019\n c-0.021-4.017-5.046-9.053-9.037-9.087c-7.948-0.068-15.897-0.051-23.848-0.051c-73.526,0.006-147.051,0.02-220.578,0.032\n c-8.095,0.001-11.969,3.776-11.969,11.742c-0.009,154.998-0.009,309.997-0.009,464.998c0,44.257-0.002,88.519,0.009,132.778\n c0,7.553,4.173,11.736,11.651,11.747c21.677,0.018,30.288-0.227,65.032,0.018c34.743,0.239,46.295,27.955,46.295,46.43\n c-0.005,18.477-13.856,42.722-46.792,43.747c-42.993,0.197-85.989-0.057-128.979-0.05c-47.697,0.014-95.387,0.009-143.078,0.074\n c-13.712-0.278-44.888-9.133-44.888-44.159c0-35.025,20.399-44.646,42.975-46.192c16.293,0.115,45.164,0.179,67.743,0.16\n c5.553-0.006,10.175-5.03,10.178-11.005c0.008-45.524-0.016-91.049-0.018-136.569c0-99.001,0-197.997,0.008-296.994\n c0.001-55.278,0.018-110.559,0.007-165.837c0-6.513-4.521-10.917-11.118-10.917c-81.116-0.005-162.229-0.005-243.34-0.001\n c-6.977,0-11.061,3.995-11.069,10.825c-0.016,12.286-0.033,24.569,0.019,36.855c-0.076,20.742-10.042,43.007-40.763,43.007\n c-30.724,0-46.917-15.208-48.805-43.296c-0.419-14.084,0.01-28.181,0.01-42.272c0-27.46,0-54.917,0-82.379\n c0-1.048,0.747-16.871,13.391-30.357c12.642-13.485,26.225-12.505,27.633-12.505c84.544,0.015,169.091,0.009,253.635,0.009\n c153.191,0.001,459.578,0.004,459.578,0.004s20.149-0.287,35.766-0.17c0.983-0.023,18.696,1.188,30.027,13.07\n c11.333,11.885,9.972,27.513,9.972,28.256c-0.024,42.091,0.255,84.183-0.007,126.274c-0.247,26.341-22.705,41.944-44.85,42.037\n C948.049,214.236,926.687,199.643,925.876,172.939z\"/>\n </svg>\n}\n\nexport function lineIcon(){\n return (\n <svg version=\"1.1\" id=\"Linie\" xmlns=\"http://www.w3.org/2000/svg\"\n // xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n // width=\"1190.549px\" height=\"841.891px\" \n viewBox=\"0 0 1190.549 841.891\" \n width=\"17px\"\n // enable-background=\"new 0 0 1190.549 841.891\"\n // xml:space=\"preserve\"\n >\n <path fill=\"currentColor\" d=\"M986.331,109.582c7.141-10.669,28.926-51.179-2.968-85.299S891.011,8.972,891.011,8.972L539.125,133.474\n L63.239,302.022c-21.503,7.998-53.586,30.072-60.956,61.716s-2.116,58.538,22.414,96.79S211.33,752.213,228.564,777.28\n c26.453,36.868,62.16,58.042,105.507,57.154s365.665-7.485,365.665-7.485l331.7-8.325l89.453-2.293c0,0,70.998-7.179,69.861-60.287\n c-1.135-53.108-74.618-62.721-74.618-62.721s-733.215,15.553-749.148,15.576c-22.688,0.201-45.355-15.278-54.146-28.928\n s-175.79-272.956-175.79-272.956l600.587-212.338c0,0-73.179,67.087-99.315,100.041s-30.56,74.565-5.053,95.237\n c31.188,24.081,91.974-3.708,123.127-39.312C782.35,323.912,979.191,120.251,986.331,109.582z\"/>\n </svg>\n )\n}\n\nexport function bBoxIcon(){\n return (\n <svg version=\"1.1\" id=\"Linie\" xmlns=\"http://www.w3.org/2000/svg\"\n // xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n // width=\"1190.549px\" height=\"841.891px\" \n viewBox=\"0 0 1190.549 841.891\" \n width=\"17px\"\n // enable-background=\"new 0 0 1190.549 841.891\"\n // xml:space=\"preserve\"\n >\n <path fill=\"none\" stroke=\"currentColor\" strokeWidth=\"120\" strokeMiterlimit=\"10\" d=\"M929.775,710.655\n c0,23.386-19.134,42.52-42.52,42.52H278.991c-23.386,0-42.52-19.134-42.52-42.52V102.392c0-23.386,19.134-42.52,42.52-42.52\n h608.264c23.386,0,42.52,19.134,42.52,42.52V710.655z\"/>\n </svg>\n )\n}\n\nexport function polygonIcon(){\n return (\n <svg version=\"1.1\" id=\"Linie\" xmlns=\"http://www.w3.org/2000/svg\"\n // xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n // width=\"1190.549px\" height=\"841.891px\" \n viewBox=\"0 0 1190.549 841.891\" \n width=\"17px\"\n // enable-background=\"new 0 0 1190.549 841.891\"\n // xml:space=\"preserve\"\n >\n <path fill=\"none\" stroke=\"currentColor\" strokeWidth=\"120\" strokeMiterlimit=\"10\" d=\"M342.327,769.938\n c-23.379,0.548-52.922-15.056-65.65-34.674L65.479,409.738c-12.729-19.619-5.085-41.998,16.984-49.732L917.331,67.421\n c22.07-7.734,26.86-0.275,10.645,16.576L691.761,329.475c-16.216,16.852-14.503,42.542,3.807,57.092l425.212,337.901\n c18.31,14.549,14.16,26.901-9.219,27.449L342.327,769.938z\"/>\n </svg>\n )\n}\n\nexport function pointIcon(){\n return (\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" \n // x=\"0px\" y=\"0px\"\n // width=\"1190.549px\" height=\"841.891px\" \n viewBox=\"0 0 1190.549 841.891\" \n width=\"17px\"\n >\n <path fill=\"currentColor\" d=\"M748.197,408.286c0,151.355-122.699,274.058-274.059,274.058c-151.357,0-274.057-122.703-274.057-274.058\n c0-151.356,122.7-274.057,274.057-274.057C625.497,134.229,748.197,256.929,748.197,408.286z\"/>\n </svg>\n )\n}","import React, {Component} from 'react'\nimport { Icon, Menu, Button, Card } from 'semantic-ui-react'\nimport SIASettingButton from './SIASettingButton'\nimport SIAFilterButton from './SIAFilterButton'\nimport Prompt from './Prompt'\n\nimport * as TOOLS from './types/tools'\nimport * as siaIcons from './utils/siaIcons'\nimport * as tbe from './types/toolbarEvents'\n\nclass ToolBar extends Component{\n\n constructor(props) {\n super(props)\n this.state = {\n // fullscreenMode: false,\n position: {\n left: 0,\n top: 5,\n width: 40\n },\n showFinishPrompt: false,\n showHelp: false\n }\n this.toolBarGroup = React.createRef()\n }\n\n componentDidMount(){\n \n }\n componentDidUpdate(prevProps, prevState){\n // if (prevState.fullscreenMode !== this.state.fullscreenMode){\n // this.props.siaSetFullscreen(this.state.fullscreenMode)\n // }\n\n if (this.props.layoutUpdate !== prevProps.layoutUpdate){\n this.calcPosition()\n }\n if (this.props.svg !== prevProps.svg){\n this.calcPosition()\n }\n\n }\n\n onClick(e, tool){\n this.triggerToolBarEvent(tbe.TOOL_SELECTED, tool)\n }\n\n calcPosition(){\n if (!this.props.enabled) return\n const tb = this.toolBarGroup.current.getBoundingClientRect()\n if (tb){\n if (this.props.svg){\n let toolBarTop = undefined\n toolBarTop = this.props.svg.top + (this.props.svg.height)/6\n this.setState({\n position: {...this.state.position,\n left: this.props.svg.left - 55,\n top: toolBarTop,\n }\n })\n }\n }\n }\n getNextImg(){\n // this.props.siaGetNextImage(this.props.imageMeta.id)\n this.triggerToolBarEvent(tbe.GET_NEXT_IMAGE)\n }\n\n getPrevImg(){\n // this.props.siaGetPrevImage(this.props.imageMeta.id)\n this.triggerToolBarEvent(tbe.GET_PREV_IMAGE)\n }\n\n setFinished(){\n // this.props.siaSetTaskFinished()\n this.triggerToolBarEvent(tbe.TASK_FINISHED)\n \n }\n\n toggleFinishPrompt(){\n this.setState({\n showFinishPrompt: !this.state.showFinishPrompt\n })\n }\n\n toggleFullscreen(){\n // this.setState({\n // fullscreenMode: !this.state.fullscreenMode\n // })\n this.triggerToolBarEvent(tbe.SET_FULLSCREEN)\n }\n\n toggleImgLabelInput(){\n // this.props.siaShowImgLabelInput(!this.props.imgLabelInput.show)\n this.triggerToolBarEvent(tbe.SHOW_IMAGE_LABEL_INPUT)\n }\n\n toggleJunk(){\n // this.props.siaImgIsJunk(!this.props.isJunk)\n this.triggerToolBarEvent(tbe.IMG_IS_JUNK)\n }\n\n toggleHelp(){\n this.setState({showHelp: !this.state.showHelp})\n }\n\n handleOnDeleteAllAnnos(){\n this.triggerToolBarEvent(tbe.DELETE_ALL_ANNOS)\n }\n\n handleSave(){\n this.triggerToolBarEvent(tbe.SAVE)\n }\n\n triggerToolBarEvent(event, data){\n if (this.props.onToolBarEvent){\n this.props.onToolBarEvent(event, data)\n }\n }\n\n renderToolButtons(){\n if (!this.props.canvasConfig) return null\n if (!this.props.enabled.toolSelection) return null\n if (!this.props.canvasConfig.annos.actions.draw) return null\n let btns = []\n if (this.props.canvasConfig.tools.point){\n btns.push(\n <Menu.Item name='dot circle' key={TOOLS.POINT}\n active={this.props.active.selectedTool===TOOLS.POINT} \n onClick={e => this.onClick(e, TOOLS.POINT)}\n >\n {siaIcons.pointIcon()}\n </Menu.Item>\n )\n }\n if (this.props.canvasConfig.tools.line){\n btns.push(\n <Menu.Item name='paint brush' key={TOOLS.LINE}\n active={this.props.active.selectedTool===TOOLS.LINE} \n onClick={e => this.onClick(e, TOOLS.LINE)}\n >\n {siaIcons.lineIcon()}\n </Menu.Item>\n )\n }\n if (this.props.canvasConfig.tools.bbox){\n btns.push(\n <Menu.Item name='square outline' key={TOOLS.BBOX}\n active={this.props.active.selectedTool===TOOLS.BBOX} \n onClick={e => this.onClick(e, TOOLS.BBOX)}\n >\n {siaIcons.bBoxIcon()}\n </Menu.Item>\n )\n }\n if (this.props.canvasConfig.tools.polygon){\n btns.push(\n <Menu.Item name='pencil alternate' key={TOOLS.POLYGON}\n active={this.props.active.selectedTool===TOOLS.POLYGON} \n onClick={e => this.onClick(e, TOOLS.POLYGON)}\n >\n {siaIcons.polygonIcon()}\n </Menu.Item>\n )\n }\n return btns\n }\n\n renderFinishPrompt(){\n return (\n <Prompt active={this.state.showFinishPrompt}\n header={<div>\n <Icon name='paper plane outline'></Icon>\n Do you wish to FINISH this SIA Task?\n </div>}\n content={<div>\n <Button basic color=\"green\" inverted\n onClick={() => this.setFinished()}\n >\n <Icon name='check'></Icon>\n Yes\n </Button>\n <Button basic color=\"red\" inverted\n onClick={() => this.toggleFinishPrompt()}\n >\n <Icon name='ban'></Icon> No\n </Button>\n </div>}\n />\n )\n }\n /**\n * Render next and prev image buttons \n *\n */\n renderNavigation(){\n let btns = []\n if (!this.props.enabled.nextPrev) return null\n if (this.props.imageMeta){\n if (this.props.imageMeta.isLast){\n btns.push(\n <Menu.Item name='paper plane outline' key='finish'\n active={false} \n onClick={() => this.toggleFinishPrompt()}\n >\n <Icon name='paper plane outline' />\n {this.renderFinishPrompt()}\n </Menu.Item>\n )\n } else {\n btns.push(\n <Menu.Item name='arrow right' key='next'\n active={false} \n onClick={() => this.getNextImg()}\n >\n <Icon name='arrow right' />\n </Menu.Item>\n )\n }\n btns.push(\n <Menu.Item name='arrow left' key='prev'\n active={false} \n onClick={() => this.getPrevImg()}\n disabled={this.props.imageMeta.isFirst}\n >\n <Icon name='arrow left' />\n </Menu.Item>\n )\n }\n return btns\n }\n\n renderJunkButton(){\n if (!this.props.enabled.junk) return null\n return <Menu.Item name='ban' key='junk'\n active={this.props.active.isJunk} \n onClick={() => this.toggleJunk()}\n >\n <Icon name='ban' />\n </Menu.Item>\n }\n\n renderDeleteAllAnnosButton(){\n if (!this.props.enabled.deleteAll) return null\n return <Menu.Item name='trash alternate outline' key='deleteAllAnnos'\n onClick={() => this.handleOnDeleteAllAnnos()}\n >\n <Icon name='trash alternate outline' />\n </Menu.Item>\n }\n\n renderSaveButton(){\n if (!this.props.enabled.save) return null\n return <Menu.Item name='save' key='save'\n onClick={() => this.handleSave()}\n >\n {/* <Icon name='save' color='red'/> */}\n <Icon name='save' />\n </Menu.Item>\n }\n\n renderHelpButton(){\n if (!this.props.enabled.help) return null\n return <Menu.Item name='help' key='help'\n active={false} \n onClick={() => this.toggleHelp()}\n >\n <Icon name='help' />\n <Prompt active={this.state.showHelp}\n content={<div>\n <Card.Group>\n <Card>\n <Card.Content header='How to draw?' />\n <Card.Content description='1.) Select a Tool in the toolbar 2.) Draw with RIGHT CLICK on Canvas' />\n </Card>\n <Card>\n <Card.Content header='How to delete an annotation?' />\n <Card.Content description='1.) Select an annotation with LEFT CLICK 2.) Press DELETE or BACKSPACE' />\n </Card>\n <Card>\n <Card.Content header='How to assign a label?' />\n <Card.Content description='1.) Select an annotation with LEFT CLICK 2.) Hit ENTER 3.) Type into the input field 4.) Hit ENTER to confirm 5.) Hit ESCAPE to close the input field'/>\n </Card>\n <Card>\n <Card.Content header='Undo/ Redo' />\n <Card.Content description='Undo: Hit STRG + Z'/>\n <Card.Content description='Redo: Hit STRG + R'/>\n </Card>\n <Card>\n <Card.Content header='Add a node to Line/Polygon' />\n <Card.Content description='Hit STRG + Click left on the line'/>\n </Card>\n <Card>\n <Card.Content header='Remove a node from Line/Polygon in create mode' />\n <Card.Content description='Press DELETE or BACKSPACE'/>\n </Card>\n <Card>\n <Card.Content header='Edit Line/Polygon' />\n <Card.Content description='1.) Click on the Annotation you want to edit.'/>\n <Card.Content description='2.) Press \"e\". New nodes can now be added using right click'/>\n </Card>\n <Card>\n <Card.Content header='Zoom/ Move Canvas' />\n <Card.Content description='Zoom: Use MOUSE WHEEL to zoom in/out'/>\n <Card.Content description='Move: Hold MOUSE WHEEL and move mouse. Or Use W/A/S/D keys to move camera up/left/down/right'/>\n </Card>\n <Card>\n <Card.Content header='TAB navigation' />\n <Card.Content description='You can traverse all visible annotation by hitting TAB.'/>\n </Card>\n <Card>\n <Card.Content header='Next/Prev image navigation' />\n <Card.Content description='Get next image by hitting ARROW_RIGHT key. Get previous image by hitting ARROW_LEFT key.'/>\n </Card>\n <Card>\n <Card.Content header='Copy and Paste annotations' />\n <Card.Content description='Copy: 1.) Select annotation 2.) Hit STRG + C'/>\n <Card.Content description='Paste: STRG + V'/>\n </Card>\n <Card>\n <Card.Content header='Mark image as junk' />\n <Card.Content description='1.) Press J key'/>\n </Card>\n <Card>\n <Card.Content header='Assign a comment to a 2D annoation' />\n <Card.Content description='1.) Select annotation 2.) Hit C key'/>\n </Card>\n </Card.Group>\n </div>}\n />\n </Menu.Item>\n }\n\n \n renderImgLabelInput(){\n if (!this.props.enabled.imgLabel) return null\n if (this.props.canvasConfig.img.actions.label){\n return <Menu.Item name='img label input' \n // active={this.props.imgLabelInput.show} \n onClick={() => this.toggleImgLabelInput()}\n >\n {/* <Icon name='pencil' /> */}\n {siaIcons.textIcon()}\n \n </Menu.Item>\n }\n }\n\n renderFullscreenBtn(){\n if (!this.props.enabled.fullscreen) return null\n return <Menu.Item name='expand arrows alternate' \n active={this.props.active.fullscreen} \n onClick={() => this.toggleFullscreen()}\n >\n <Icon name='expand arrows alternate' />\n </Menu.Item>\n }\n\n renderSettingBtn(){\n if (!this.props.enabled.settings) return null\n return <SIASettingButton \n enabled= {this.props.enabled.settings}\n uiConfig={this.props.uiConfig}\n onSettingEvent={(e,data) => this.triggerToolBarEvent(e, data)}/>\n }\n\n renderFilterBtn(){\n console.log('filter', this.props.filter)\n if (!this.props.enabled.filter) return null\n if (!this.props.filter) return null\n return <SIAFilterButton \n enabled={this.props.enabled.filter}\n onFilterEvent={(e, data) => this.triggerToolBarEvent(e, data)}\n filter={this.props.filter}\n imageMeta={this.props.imageMeta}\n />\n }\n\n render(){\n if (!this.props.enabled) return null\n return(\n <div\n ref={this.toolBarGroup}\n style={{position:'fixed', top: this.state.position.top, left:this.state.position.left}}>\n <Menu icon inverted vertical>\n {this.renderSaveButton()}\n {this.renderImgLabelInput()}\n {this.renderNavigation()}\n {this.renderToolButtons()}\n {this.renderFullscreenBtn()}\n {this.renderJunkButton()}\n {this.renderDeleteAllAnnosButton()}\n {this.renderHelpButton()}\n {this.renderSettingBtn()}\n {this.renderFilterBtn()}\n </Menu>\n </div>\n )\n }\n}\n\nexport default ToolBar","import React, { useRef, useEffect, useState } from 'react'\n\nimport ToolBar from './ToolBar'\nimport Canvas from './Canvas'\nimport * as tbe from './types/toolbarEvents'\nimport * as annoActions from './types/canvasActions'\n\n/**\n * SIA element that handles annotations within an image\n * \n * @param {object} annos - A json object containing all annotation \n * information for an image\n * {\n * image : {\n * id: int, \n * number: int, \n * amount: int, \n * isFirst: bool, \n * isLast: bool,\n * description: string, // -> optional\n * },\n * annotations: {\n * bBoxes: [{\n * id: int, // -> Not required if status === annoStatus.NEW\n * data: {},\n * labelIds: list of int, // -> optional\n * status: see annoStatus, // -> optional\n * annoTime: float, // -> optional\n * },...],\n * points: []\n * lines: []\n * polygons: []\n * }\n * }\n * @param {object} possibleLabels - Possible labels that can be assigned to \n * an annotation.\n * [{ \n * id: int, \n * description: str, \n * label: str, (name of the label) \n * color: str (color is optional)\n * }, ...]\n * @param {blob} imageBlob - The actual image blob that will be displayed\n * @param {object} imageMeta - Meta information for the current image\n * {\n * \"id\": int,\n * \"number\": int, // -> number of image in current annotask\n * \"amount\": int, // -> total number of images in current annotask\n * \"isFirst\": bool, // -> True if this image is the first image\n * \"isLast\": bool, // -> True if current image is the last image in annotask\n * \"labelIds\": list of int, // -> List of label for the current image\n * \"isJunk\": bool, // -> Indicates wether current image is a junk image\n * \"annoTime\": float, // -> Total annotation time for the current image\n * \"description\": str or null // -> Description or comment for the current image\n * }\n * @param {object} exampleImg - Example for a selected label\n * {\n * \"anno\": {\n * \"id\": int, // -> ID of the example annotation\n * \"comment\": null or str // -> Comment that has been assigned to this example\n * },\n * \"img\": image blob\n * }\n * @param {bool} isJunk - Indicates wether the current image is junk or not\n * @param {object} uiConfig - User interface configs \n * {\n * nodesRadius: int, strokeWidth: int,\n * layoutOffset: {left:int, top:int, right:int, bottom:int}, -> Offset of the canvas inside the container\n * imgBarVisible: bool,\n * imgLabelInputVisible: bool,\n * centerCanvasInContainer: bool, -> Center the canvas in the middle of the container.\n * maxCanvas: bool -> Maximize Canvas Size. Do not fit canvas to image size.\n * }\n * @param {int} layoutUpdate - A counter that triggers a layout update\n * everytime it is incremented.\n * @param {string} selectedTool - The tool that is selected to draw an \n * annotation. Possible choices are: 'bBox', 'point', 'line', 'polygon'\n * @param {object} canvasConfig - Configuration for this canvas\n * {\n * annos:{\n * tools: {\n * point: bool,\n * line: bool,\n * polygon: bool,\n * bbox: bool\n * },\n * multilabels: bool,\n * actions: {\n * draw: bool,\n * label: bool,\n * edit: bool,\n * },\n * maxAnnos: null or int,\n * minArea: int\n * },\n * img: {\n * multilabels: bool,\n * actions: {\n * label: bool,\n * }\n * },\n * allowedToMarkExample: bool, -> Indicates wether the current user is allowed to mark an annotation as example.\n * autoSaveInterval: int -> Interval in seconds when an autosave will be requested by canvas\n * }\n * @param {str or int} defaultLabel (optional) - Name or ID of the default label that is used\n * when no label was selected by the annotator. If not set \"no label\" will be used.\n * If ID is used, it needs to be one of the possible label ids.\n * @param {bool} blocked Block canvas view with loading dimmer.\n * @param {int} nextAnnoId Id that will be used for the next annotation that \n * will be created. If undefined, the canvas will create its own ids.\n * @param {bool} lockedAnnos A list of AnnoIds of annos that should only be displayed.\n * Such annos can not be edited in any way.\n * @param {object} filter Information for the filter Popup\n * {\n * \"clahe\": {\n * \"clipLimit\": int,\n * \"active\": bool\n * },\n * \"rotate\": {\n * \"angle\": 90 | -90 | 180,\n * \"active\": bool\n * }\n * } \n * @param {bool | object} toolbarEnabled Defines which toolbar buttons are \n * displayed or if toolbar is shown at all. \n * false | {\n * imgLabel: bool,\n * nextPrev: bool,\n * toolSelection: bool,\n * fullscreen: bool,\n * junk: bool,\n * deleteAll: bool,\n * settings: bool | {infoBoxes: bool, annoStyle: bool},\n * filter: bool | {rotate: bool, clahe:bool},\n * help: bool\n * }\n * @event onNotification - Callback for Notification messages\n * args: {title: str, message: str, type: str}\n * @event onCanvasKeyDown - Fires for keyDown on canvas \n * @event onAnnoEvent - Fires when an anno performed an action\n * args: {anno: annoObject, newAnnos: list of annoObjects, pAction: str}\n * @event onGetAnnoExample - Fires when anno example is requested by canvas\n * {\n * id: int, // -> ID of the annotation that will be requested as example\n * comment: null or str\n * }\n * @event onCanvasEvent - Fires on canvas event\n * args: {action: action, data: dataObject}\n * action -> CANVAS_SVG_UPDATE \n * data: {width: int, height: int, scale: float, translateX: float,\n * translateY:float}\n * action -> CANVAS_UI_CONFIG_UPDATE\n * action -> CANVAS_LABEL_INPUT_CLOSE \n * action -> CANVAS_IMG_LOADED\n * action -> CANVAS_IMGBAR_CLOSE\n * @event onToolBarEvent - Fires on Toolbar event\n * args: {e: event, data: data object}\n * \n * e -> DELETE_ALL_ANNOS \n * e -> TOOL_SELECTED\n * data: 'bbox', 'point', 'line', 'polygon'\n * e -> GET_NEXT_IMAGE\n * data: int // -> Image ID\n * e -> GET_PREV_IMAGE\n * data: int // -> Image ID\n * e -> TASK_FINISHED\n * data: null\n * e -> SHOW_IMAGE_LABEL_INPUT\n * data: null\n * e -> IMG_IS_JUNK\n * data: null\n * e -> APPLY_FILTER\n * data: {\n * \"clahe\": {\n * \"clipLimit\": int,\n * \"active\": bool\n * },\n * \"rotate\": {\n * \"angle\": 90 | -90 | 180,\n * \"active\": bool\n * }\n * } \n * e -> SHOW_ANNO_DETAILS\n * data: null\n * e -> SHOW_LABEL_INFO\n * data: null\n * e -> SHOW_ANNO_STATS\n * data: null\n * e -> EDIT_STROKE_WIDTH\n * data: int // -> Stroke width\n * e -> EDIT_NODE_RADIUS\n * data: int // -> Radius\n * @event onGetFunction - Get special canvas functions for manipulation from outside canvas\n * deleteAllAnnos()\n * unloadImage()\n * resetZoom()\n * getAnnos(annos,removeFrontendIds)\n */\nconst Sia = (props) => {\n\n const [fullscreenCSS, setFullscreenCSS] = useState('')\n const [layoutUpdate, setLayoutUpdate] = useState(0)\n const [svg, setSvg] = useState()\n const [externalConfigUpdate, setExternalConfigUpdate] = useState(false)\n const [uiConfig, setUiConfig] = useState(\n {\n \"nodeRadius\": 4,\n \"strokeWidth\": 4,\n \"annoDetails\": {\n \"visible\": false\n },\n \"labelInfo\": {\n \"visible\": false\n },\n \"annoStats\": {\n \"visible\": false\n },\n \"layoutOffset\": {\n \"left\": 20,\n \"top\": 0,\n \"bottom\": 5,\n \"right\": 5\n },\n \"imgBarVisible\": true,\n \"imgLabelInputVisible\": false,\n \"centerCanvasInContainer\": true,\n \"maxCanvas\": true\n }\n )\n const containerRef = useRef()\n\n useEffect(() => {\n doLayoutUpdate()\n }, [props.layoutUpdate])\n\n useEffect(() => {\n setExternalConfigUpdate(true)\n setUiConfig({...uiConfig, ...props.uiConfig})\n }, [props.uiConfig])\n\n useEffect(() => {\n if (externalConfigUpdate){\n setExternalConfigUpdate(false)\n }else{\n if (props.onCanvasEvent){\n props.onCanvasEvent(annoActions.CANVAS_UI_CONFIG_UPDATE, uiConfig)\n }\n }\n }, [uiConfig])\n\n const doLayoutUpdate = () => {\n setLayoutUpdate(layoutUpdate + 1)\n }\n\n const handleAnnoEvent = (anno, annos, action) => {\n if (props.onAnnoEvent){\n props.onAnnoEvent(anno, annos, action)\n }\n\n }\n\n const handleNotification = (msg) => {\n if (props.onNotification){\n props.onNotification(msg)\n }\n\n }\n\n const handleCanvasKeyDown = (e) => {\n if (props.onCanvasKeyDown){\n props.onCanvasKeyDown(e)\n }\n\n }\n\n const handleCanvasEvent = (e, data) => {\n switch(e){\n case annoActions.CANVAS_SVG_UPDATE:\n setSvg(data)\n break\n case annoActions.CANVAS_UI_CONFIG_UPDATE:\n setUiConfig({...uiConfig, ...data})\n break\n default:\n break\n }\n if (props.onCanvasEvent){\n props.onCanvasEvent(e, data)\n }\n }\n\n const handleGetFunction = (deleteAll) => {\n if (props.onGetFunction){\n props.onGetFunction(deleteAll)\n }\n }\n\n const handleToolBarEvent = (e, data) => {\n switch(e){\n case tbe.SET_FULLSCREEN:\n if (fullscreenCSS === ''){\n setFullscreenCSS('sia-fullscreen')\n setUiConfig({...uiConfig,\n layoutOffset: {\n ...uiConfig.layoutOffset,\n left: 50,\n top: 5,\n } \n })\n doLayoutUpdate()\n } else {\n setFullscreenCSS('')\n setUiConfig({...uiConfig,\n layoutOffset: {\n ...uiConfig.layoutOffset,\n left: 20,\n top: 0,\n } \n })\n doLayoutUpdate()\n }\n break\n case tbe.SHOW_ANNO_DETAILS:\n setUiConfig({\n ...uiConfig,\n annoDetails: {\n ...uiConfig.annoDetails,\n visible: !uiConfig.annoDetails.visible,\n },\n })\n break\n case tbe.SHOW_LABEL_INFO:\n setUiConfig({\n ...uiConfig,\n labelInfo: {\n ...uiConfig.labelInfo,\n visible: !uiConfig.labelInfo.visible,\n },\n })\n break\n case tbe.SHOW_ANNO_STATS:\n setUiConfig({\n ...uiConfig,\n annoStats: {\n ...uiConfig.annoStats,\n visible: !uiConfig.annoStats.visible,\n },\n })\n break\n case tbe.EDIT_STROKE_WIDTH:\n setUiConfig({...uiConfig, strokeWidth: data})\n break\n case tbe.EDIT_NODE_RADIUS:\n setUiConfig({...uiConfig, nodeRadius: data})\n break\n default:\n break\n }\n if (props.onToolBarEvent){\n props.onToolBarEvent(e, data)\n }\n }\n\n return (\n <div className={fullscreenCSS} ref={containerRef}>\n <Canvas\n container={containerRef}\n\n onAnnoEvent={\n (anno, annos, action) => handleAnnoEvent(anno, annos, action)\n }\n onNotification={\n (messageObj) => handleNotification(messageObj)\n }\n onKeyDown={\n e => handleCanvasKeyDown(e)\n }\n onCanvasEvent={\n (action, data) => handleCanvasEvent(action, data)\n }\n onGetAnnoExample={\n (exampleArgs) => props.onGetAnnoExample ? props.onGetAnnoExample(exampleArgs):{} \n }\n onGetFunction={(canvasFunc) => handleGetFunction(canvasFunc)}\n\n canvasConfig={props.canvasConfig}\n uiConfig={uiConfig}\n\n nextAnnoId={props.nextAnnoId}\n annos={props.annos}\n imageMeta={props.imageMeta}\n imageBlob={props.imageBlob}\n possibleLabels={props.possibleLabels}\n exampleImg={props.exampleImg}\n lockedAnnos={props.lockedAnnos}\n layoutUpdate={layoutUpdate}\n selectedTool={props.selectedTool}\n isJunk={props.isJunk}\n blocked={props.blockCanvas}\n defaultLabel={props.defaultLabel}\n />\n <ToolBar \n onToolBarEvent={\n (e, data) => handleToolBarEvent(e, data)\n }\n imageMeta={props.imageMeta}\n layoutUpdate={layoutUpdate}\n svg={svg}\n active={{\n isJunk: props.isJunk,\n selectedTool: props.selectedTool,\n fullscreen: props.fullscreenMode\n }}\n enabled={props.toolbarEnabled}\n canvasConfig={props.canvasConfig}\n uiConfig={uiConfig}\n filter={props.filter}\n />\n </div>\n )\n\n}\n\nexport default Sia","const canvasConfig = {\n tools: {\n point: true,\n line: true,\n polygon: true,\n bbox: true,\n junk: true\n },\n annos: {\n minArea: 250,\n multilabels: false,\n actions: {\n draw: true,\n label: true,\n edit: true\n },\n maxAnnos: null\n },\n img: {\n multilabels: false,\n actions: {\n label: true\n }\n },\n autoSaveInterval: undefined,\n allowedToMarkExample: true\n}\n\nconst filter = {\n rotate: { active: false, angle: 0 },\n clahe: { active: false, clipLimit: 3 },\n}\n\nconst uiConfig = {\n nodeRadius: 4,\n strokeWidth: 4,\n annoDetails: {\n visible: false\n },\n labelInfo: {\n visible: false\n },\n annoStats: {\n visible: false\n },\n layoutOffset: {\n left: 20,\n top: 0,\n bottom: 5,\n right: 5\n },\n imgBarVisible: true,\n imgLabelInputVisible: false,\n centerCanvasInContainer: true,\n maxCanvas: true\n}\n\nconst selectedTool = 'bBox'\n\nconst imgMeta = {\n id: 58,\n number: 1,\n amount: 10,\n isFirst: true,\n isLast: false,\n labelIds: [],\n isJunk: null,\n annoTime: 23.4247,\n description: null\n}\n\nconst toolbarEnabled = {\n imgLabel: true,\n nextPrev: true,\n toolSelection: true,\n fullscreen: true,\n junk: true,\n deleteAll: true,\n settings: {\n infoBoxes: true,\n annoStyle: true\n },\n filter: {\n rotate: true,\n clahe: true\n },\n help: true\n}\n\nconst annos = {\n bBoxes: [\n {\n id: 1,\n labelIds: [2],\n data: {\n x: 0.3628092087028825,\n y: 0.4157427937915743,\n w: 0.3932840216186252,\n h: 0.2727272727272727,\n },\n },\n {\n id: 2,\n labelIds: [],\n data: {\n x: 0.7482027785476719,\n y: 0.43736141906873616,\n w: 0.044891560421285975,\n h: 0.1917960088691796,\n },\n },\n ],\n points: [],\n lines: [],\n polygons: [],\n }\n\n\nconst defaultLabel = 2\n\nconst possibleLabels = [\n {\n id: 2,\n label: 'Aeroplane',\n nameAndClass: 'Aeroplane (VOC2012)',\n description: 'Includes gliders but not hang gliders or helicopters',\n },\n {\n id: 3,\n label: 'Bicycle',\n nameAndClass: 'Bicycle (VOC2012)',\n description: 'Includes tricycles, unicycles',\n },\n {\n id: 4,\n label: 'Bird',\n nameAndClass: 'Bird (VOC2012)',\n description: 'All birds',\n },\n {\n id: 5,\n label: 'Boat',\n nameAndClass: 'Boat (VOC2012)',\n description: 'Ships, rowing boats, pedaloes but not jet skis',\n },\n {\n id: 6,\n label: 'Bottle',\n nameAndClass: 'Bottle (VOC2012)',\n description: 'Plastic, glass or feeding bottles',\n },\n {\n id: 7,\n label: 'Bus',\n nameAndClass: 'Bus (VOC2012)',\n description: 'Includes minibus but not trams',\n },\n {\n id: 8,\n label: 'Car',\n nameAndClass: 'Car (VOC2012)',\n description:\n \"Includes cars, vans, large family cars for 6-8 people etc.\\nExcludes go-carts, tractors, emergency vehicles, lorries/trucks etc.\\nDo not label where only the vehicle interior is shown.\\nInclude toys that look just like real cars, but not 'cartoony' toys.\",\n },\n {\n id: 9,\n label: 'Cat',\n nameAndClass: 'Cat (VOC2012)',\n description: 'Domestic cats (not lions etc.)',\n },\n {\n id: 10,\n label: 'Chair',\n nameAndClass: 'Chair (VOC2012)',\n description:\n 'Includes armchairs, deckchairs but not stools or benches.\\nExcludes seats in buses, cars etc.\\nExcludes wheelchairs.',\n },\n {\n id: 11,\n label: 'Cow',\n nameAndClass: 'Cow (VOC2012)',\n description: 'All cows',\n },\n {\n id: 12,\n label: 'Dining table',\n nameAndClass: 'Dining table (VOC2012)',\n description:\n 'Only tables for eating at.\\nNot coffee tables, desks, side tables or picnic benches',\n },\n {\n id: 13,\n label: 'Dog',\n nameAndClass: 'Dog (VOC2012)',\n description: 'Domestic dogs (not wolves etc.)',\n },\n {\n id: 14,\n label: 'Horse',\n nameAndClass: 'Horse (VOC2012)',\n description: 'Includes ponies, donkeys, mules etc.',\n },\n {\n id: 15,\n label: 'Motorbike',\n nameAndClass: 'Motorbike (VOC2012)',\n description: 'Includes mopeds, scooters, sidecars',\n },\n {\n id: 16,\n label: 'Person',\n nameAndClass: 'Person (VOC2012)',\n description: 'Includes babies, faces (i.e. truncated people)',\n },\n {\n id: 17,\n label: 'Potted plant',\n nameAndClass: 'Potted plant (VOC2012)',\n description:\n 'Indoor plants excluding flowers in vases, or outdoor plants clearly in a pot. ',\n },\n {\n id: 18,\n label: 'Sheep',\n nameAndClass: 'Sheep (VOC2012)',\n description: 'Sheep, not goats',\n },\n {\n id: 19,\n label: 'Sofa',\n nameAndClass: 'Sofa (VOC2012)',\n description: 'Excludes sofas made up as sofa-beds',\n },\n {\n id: 20,\n label: 'Train',\n nameAndClass: 'Train (VOC2012)',\n description: 'Includes train carriages, excludes trams',\n },\n {\n id: 21,\n label: 'TV/monitor',\n nameAndClass: 'TV/monitor (VOC2012)',\n description: 'Standalone screens (not laptops), not advertising displays',\n },\n]\n\nconst imgBlob = \n 'data:image/jpeg;base64,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'\n\n\nexport {\n defaultLabel,\n canvasConfig,\n uiConfig,\n annos,\n imgBlob,\n possibleLabels,\n filter,\n toolbarEnabled,\n imgMeta,\n selectedTool\n}\n"],"names":["toSia","data","image","type","imgOffset","w","width","h","height","x0","x","y0","y","map","e","toBackend","svg","imgWidth","imgHeight","xList","yList","minX","Math","min","maxX","max","minY","maxY","warn","getMinMaxPoints","minPoint","maxPoint","getArea","scaledImg","originalImg","relData","abs","undefined","area","length","j","i","move","movementX","movementY","getBox","Infinity","forEach","el","getCenter","box","getMostLeftPoint","minXList","push","getTopPoint","minYList","correctAnnotation","imageOffset","corrected","rotateAnnotation","center","angle","PI","rotated","round","cos","point","sin","resizeAnnoData","sizeOld","sizeNew","xRatio","yRatio","parseInt","VIEW","EDIT","CREATE","MOVE","ADD","CAMERA_MOVE","EDIT_LABEL","DELETED","defaultFontSize","defaultRectHeight","AnnoBar","props","state","textRef","React","createRef","mode","modes","setPosition","preventDefault","onClick","topPoint","transform","anno","current","text","getBoundingClientRect","textPadding","rectWidth","scale","setState","ceil","top","left","label","possibleLabels","labelObject","labelIds","lbl","idx","find","id","defaultLabel","Number","isInteger","style","handleClick","fontSize","Component","InfSelectionArea","enable","enableSelArea","disableSelArea","onMouseMove","onMouseUp","selAreaCss","CREATE_NODE","EDIT_NODE","NORMAL_NODE","Node","getCursorStyle","prevProps","isPoint","turnSelAreaOn","turnHaloOn","button","turnSelAreaOff","stopPropagation","onMouseDown","isSelected","turnHaloOff","onDoubleClick","onMouseLeave","cursorstyles","haloCss","r","onContextMenu","handleMouseLeave","renderHalo","className","onMouseOver","renderNodes","ANNO_DELETED","ANNO_SELECTED","ANNO_CREATED","ANNO_MOVED","ANNO_ENTER_MOVE_MODE","ANNO_EDITED","ANNO_ENTER_EDIT_MODE","ANNO_ADDED_NODE","ANNO_REMOVED_NODE","ANNO_LABEL_UPDATE","ANNO_CREATED_NODE","ANNO_CREATED_FINAL_NODE","ANNO_START_CREATING","ANNO_COMMENT_UPDATE","ANNO_MARK_EXAMPLE","CANVAS_SVG_UPDATE","CANVAS_UI_CONFIG_UPDATE","CANVAS_AUTO_SAVE","CANVAS_LABEL_INPUT_CLOSE","CANVAS_IMG_LOADED","CANVAS_IMGBAR_CLOSE","IMG_LABEL_UPDATE","Point","newAnno","requestModeChange","performedAction","canvasActions","pAction","onAction","onModeChangeRequest","selectedNode","onNodeMouseDown","renderPoint","renderNode","renderInfSelectionArea","getMousePosition","absPos","getMousePositionAbs","translateX","translateY","pageX","pageY","BBox","mousePos","mouse","idxMinus","idxPlus","newAnnoData","join","toPolygonStr","onNodeMouseUp","onNodeMouseMove","handleNodeMouseLeave","renderPolygon","Edge","p1","p2","closingEdge","strokeWidth","Polygon","updateAnnoByMousePos","addNode","mPos","slice","oldRest","concat","onNodeDoubleClick","edges","onEdgeMouseDown","renderEdges","Line","fill","renderPolyline","NEW","DATABASE","CHANGED","colors20","colors","nColors","getColor","n","getDefaultColor","allowedToLabel","allowedActions","allowedToEdit","status","annoStatus","edit","INFO","SUCCESS","WARNING","Annotation","myAnno","showSingleAnno","setVisible","visible","setMode","messageObj","onNotification","canvasConfig","annos","minArea","notify","notificationType","constraints","setAnnoMode","visibility","selectedAnno","lblId","getLabel","color","colorlut","uiConfig","nodeRadius","getStyle","getCssClass","handleModeChangeRequest","performedAnnoAction","onNodeClick","error","annoType","renderAnnoBar","renderAnno","LabelInput","inputRef","updatePossibleLabels","initLabelIds","performInit","prevState","focusOnRender","click","confirmLabel","annoLabelUpdate","closeLabelInput","relatedId","performKeyAction","key","item","multilabels","value","event","onItemClick","unshift","onLabelUpdate","filter","val","onClose","Dropdown","onKeyDown","onChange","opacity","disabled","open","__html","description","renderLabelInfo","renderPopup","Popup","renderLabelInput","renderPopupContent","AnnoLabelInput","inputGroupRef","position","updateAnnoLabel","ImgBar","onMouseEnter","imgLabelIds","imageMeta","handleMouseEnter","justifyContent","alignItems","renderImgDescription","number","amount","renderImgLabels","Prompt","active","zIndex","header","content","AnnoToolBar","inputRect","renderDaviIcon","_fixBackendAnnoElement","element","_","uniqueId","annoTime","fixBackendAnnos","backendAnnos","bBoxes","lines","polygons","points","log","backendAnnosToCanvas","imgSize","canvasToBackendAnnos","forBackendPost","myAnnos","bAnnos","annoId","backendFormat","DELETE_ANNO","ENTER_ANNO_ADD_MODE","LEAVE_ANNO_ADD_MODE","UNDO","REDO","TRAVERSE_ANNOS","CAM_MOVE_UP","CAM_MOVE_DOWN","CAM_MOVE_LEFT","CAM_MOVE_RIGHT","CAM_MOVE_STOP","COPY_ANNOTATION","PASTE_ANNOTATION","RECREATE_ANNO","DELETE_ANNO_IN_CREATION","TOGGLE_ANNO_COMMENT_INPUT","KeyMapper","keyActionHandler","controlDown","triggerKeyAction","keyAction","POINT","BBOX","LINE","POLYGON","UndoRedo","maxElements","hist","pointer","entry","histEl","shift","pop","getViewportCoordinates","window","viewport","scaleX","xMax","xMin","scaleY","yMax","yMin","vX","vY","getZoomTranslation","w0","s1","s0","translation","global","factory","module","require","this","ReactDOM","hasOwnProperty","createCommonjsModule","fn","exports","makeEmptyFunction","arg","emptyFunction","thatReturns","thatReturnsFalse","thatReturnsTrue","thatReturnsNull","thatReturnsThis","thatReturnsArgument","emptyFunction_1","validateFormat","format","Error","invariant","condition","a","b","c","d","f","args","argIndex","replace","name","framesToPop","invariant_1","warning","printWarning","_len","arguments","Array","_key","message","console","indexOf","_len2","_key2","apply","warning_1","getOwnPropertySymbols","Object","prototype","propIsEnumerable","propertyIsEnumerable","toObject","TypeError","shouldUseNative","assign","test1","String","getOwnPropertyNames","test2","fromCharCode","order2","test3","split","letter","keys","err","objectAssign","target","source","from","to","symbols","s","call","ReactPropTypesSecret","ReactPropTypesSecret_1","invariant$1","warning$1","ReactPropTypesSecret$1","loggedTypeFailures","checkPropTypes","typeSpecs","values","location","componentName","getStack","typeSpecName","ex","stack","checkPropTypes_1","factoryWithTypeCheckers","isValidElement","throwOnDirectAccess","ITERATOR_SYMBOL","Symbol","iterator","FAUX_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","iteratorFn","ANONYMOUS","ReactPropTypes","createPrimitiveTypeChecker","createAnyTypeChecker","createArrayOfTypeChecker","createElementTypeChecker","createInstanceTypeChecker","createNodeChecker","createObjectOfTypeChecker","createEnumTypeChecker","createUnionTypeChecker","createShapeTypeChecker","createStrictShapeTypeChecker","is","PropTypeError","createChainableTypeChecker","validate","manualPropTypeCallCache","manualPropTypeWarningCount","checkType","isRequired","propName","propFullName","secret","cacheKey","chainedCheckType","bind","expectedType","propValue","propType","getPropType","preciseType","getPreciseType","typeChecker","isArray","expectedClass","expectedClassName","actualClassName","getClassName","expectedValues","valuesString","JSON","stringify","arrayOfTypeCheckers","checker","getPostfixForTypeWarning","isNode","shapeTypes","allKeys","every","step","entries","next","done","isSymbol","RegExp","Date","constructor","PropTypes","propTypes","REACT_ELEMENT_TYPE","for","object","$$typeof","classnames","hasOwn","classNames","classes","argType","findInArray","array","callback","isFunction","func","toString","isNum","num","isNaN","int","dontSetMe","prefixes","getPrefix","prop","document","documentElement","browserPrefixToKey","prefix","kebabToTitleCase","str","out","shouldCapitalize","toUpperCase","browserPrefix","classCallCheck","instance","Constructor","createClass","defineProperties","descriptor","enumerable","configurable","writable","defineProperty","protoProps","staticProps","obj","_extends","inherits","subClass","superClass","create","setPrototypeOf","__proto__","possibleConstructorReturn","self","ReferenceError","slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","_i","_s","matchesSelectorFunc","matchesSelector","selector","method","matchesSelectorAndParentsTo","baseNode","node","parentNode","addEvent","handler","attachEvent","addEventListener","removeEvent","detachEvent","removeEventListener","outerHeight","clientHeight","computedStyle","ownerDocument","defaultView","getComputedStyle","borderTopWidth","borderBottomWidth","outerWidth","clientWidth","borderLeftWidth","borderRightWidth","innerHeight","paddingTop","paddingBottom","innerWidth","paddingLeft","paddingRight","offsetXYFromParent","evt","offsetParent","isBody","body","offsetParentRect","clientX","scrollLeft","clientY","scrollTop","createCSSTransform","controlPos","positionOffset","getTranslation","createSVGTransform","_ref2","unitSuffix","defaultX","defaultY","getTouch","identifier","targetTouches","t","changedTouches","getTouchIdentifier","addUserSelectStyles","doc","styleEl","getElementById","createElement","innerHTML","getElementsByTagName","appendChild","addClassName","removeUserSelectStyles","removeClassName","selection","empty","getSelection","removeAllRanges","styleHacks","childStyle","classList","add","match","remove","getBoundPosition","draggable","bounds","cloneBounds","findDOMNode","ownerWindow","boundNode","querySelector","HTMLElement","nodeStyle","boundNodeStyle","offsetLeft","marginLeft","offsetTop","marginTop","marginRight","marginBottom","right","bottom","snapToGrid","grid","pendingX","pendingY","canDragX","axis","canDragY","getControlPosition","touchIdentifier","draggableCore","touchObj","createCoreData","isStart","lastX","deltaY","lastY","createDraggableData","coreData","deltaX","eventsFor","dragEventFor","DraggableCore","_React$Component","_ref","_temp","_this","_ret","getPrototypeOf","NaN","handleDragStart","allowAnyClick","thisNode","handle","cancel","coreEvent","onStart","shouldUpdate","enableUserSelectHack","handleDrag","stop","handleDragStop","_deltaX","_deltaY","_snapToGrid","_snapToGrid2","onDrag","MouseEvent","createEvent","initMouseEvent","dragging","onStop","onTouchStart","touch","onTouchEnd","componentWillUnmount","render","cloneElement","Children","only","children","displayName","bool","nodeType","arrayOf","string","defaultProps","Draggable","onDragStart","shouldStart","dragged","uiData","newState","_x","_y","slackX","slackY","_getBoundPosition","_getBoundPosition2","newStateX","newStateY","onDragStop","shouldStop","controlled","Boolean","_this$props$position","_x2","_y2","defaultPosition","componentDidMount","SVGElement","isElementSVG","componentWillReceiveProps","nextProps","_classNames","svgTransform","transformOpts","_props","defaultClassName","defaultClassNameDragging","defaultClassNameDragged","oneOf","oneOfType","shape","default","InfoBox","updateStyle","defaultPos","onDismiss","handleOnStop","cursor","Divider","SiaPopup","trigger","AnnoDetails","useState","comment","setComment","example","setExample","showSaveBtn","setShowSaveBtn","tARef","useRef","focus","commentInputTrigger","onCommentUpdate","onMarkExampleClick","onMarkExample","renderSaveBtn","Label","renderComment","TextArea","renderLabels","selectedLabelIds","lbls","renderExampleMark","allowedToMarkExample","iconName","isExample","mark","Icon","PopUp","renderDescription","List","toLocaleString","AnnoStats","hideList","setHideList","imgLoadCount","onLblClick","hideLbl","includes","onHideLbl","renderRow","background","renderRows","stats","res","LabelExampleViewer","requestExample","onRequestExample","renderContent","exampleImg","Image","img","handlePromptClick","LabelInfo","showExampleViewer","setShowExampleViewer","myLbl","setMyLbl","requestImg","onGetAnnoExample","handleImgClick","renderExampleImg","AnnoExampleViewer","InfoBoxes","updateLayout","layoutUpdate","annoDetails","showAnnoDetails","container","show","onUiConfigUpdate","labelInfo","annoStats","hide","exampleArgs","Canvas","keyMapper","handleKeyAction","mousePosAbs","clipboard","autoSaveI","prevLabel","autoSaveInterval","setInterval","triggerCanvasEvent","onGetFunction","deleteAllAnnos","unloadImage","resetZoom","removeFrontendIds","getAnnos","performance","now","imageBlob","updateCanvasView","annoConversion","isJunk","performedImageInit","imgBarVisible","clearHist","imageLoaded","putSelectedOnTop","setImageLabels","selectAnnotation","up","zoomFactor","nextScale","newTranslation","wv","createNewAnnotation","showLabelInput","findAnno","selectedAnnoId","updateSelectedAnno","handleAnnoEvent","action","camKeyStepSize","keyActions","ar","findAnnoRef","getResult","editAnnoLabel","deleteAnnotation","annoCommentInputTrigger","deleteAnnoInCreationMode","undo","redo","traverseAnnos","moveCamera","copyAnnotation","pasteAnnotation","recreateAnnotation","keyDown","keyUp","onKeyUp","removeSelectedAnno","onCanvasEvent","newAnnos","pushHist","stopAnnotimeMeasure","annoToolBarVisible","startAnnotimeMeasure","checkAnnoLength","handleNotification","onAnnoEvent","hiddenSelected","offset","uid","timestamp","annoRefs","isEmpty","cState","setCanvasState","annotations","removeLastNode","lockedAnnos","isLocked","onAnnoLabelInputClose","currentIdx","findIndex","removeFrontedIds","finalData","imgLabelChanged","imgLoadTimestamp","trans_x","trans_y","vXMin","vXMax","yXMin","yXMax","vLeft","vRight","allowed","selectedTool","maxAnnos","nextAnnoId","TOOLS","merged","mergeSelectedAnno","annoID","annoIndex","k","splice","lastAnno","filtered","canvasTop","canvasLeft","maxImgHeight","maxImgWidth","layoutOffset","ratio","naturalWidth","naturalHeight","maxCanvas","centerCanvasInContainer","resSpaceX","resSpaceY","svgUpdate","updateImageSize","onAnnoMouseDown","actions","handleImgLabelInputClose","imgLabelInputVisible","handleImgLabelUpdate","getAnnoColor","onLabelInputDeleteClick","onAnnoLabelInputUpdate","renderImgLabelInput","handleImgBarClose","handleImgBarMouseEnter","blocked","renderAnnoToolBar","renderAnnoLabelInpput","updateAnnoComment","handleHideLbl","handleMarkExample","handleCanvasClick","handleSvgMouseMove","onWheel","onRightClick","renderAnnotations","display","onImageLoad","minHeight","TOOL_SELECTED","GET_NEXT_IMAGE","GET_PREV_IMAGE","TASK_FINISHED","SHOW_IMAGE_LABEL_INPUT","IMG_IS_JUNK","DELETE_ALL_ANNOS","SET_FULLSCREEN","SHOW_ANNO_DETAILS","SHOW_LABEL_INFO","SHOW_ANNO_STATS","EDIT_STROKE_WIDTH","EDIT_NODE_RADIUS","APPLY_FILTER","SAVE","SIASettingButton","onSettingEvent","triggerEvent","tbe","Checkbox","toggleAnnoDetails","toggleLabelInfo","toggleAnnoStats","enabled","renderInfoBoxContent","infoBoxes","renderAnnoStyleContent","annoStyle","handleStrokeWidthChange","handleNodeRadiusChange","popupContent","renderInfoBoxes","renderAnnoStyle","clahe","rotate","SIAFilterButton","clipLimit","filterTools","onFilterEvent","cl","myAngle","rotateImg","renderRotateContent","claheFilter","handleClipLimitChange","releaseCLAHESlider","renderClaheContent","renderRotate","renderClahe","textIcon","lineIcon","bBoxIcon","polygonIcon","pointIcon","ToolBar","toolBarGroup","calcPosition","tool","triggerToolBarEvent","tb","toolBarTop","showFinishPrompt","showHelp","onToolBarEvent","toolSelection","draw","btns","tools","line","bbox","polygon","setFinished","toggleFinishPrompt","nextPrev","isLast","renderFinishPrompt","getNextImg","getPrevImg","isFirst","junk","toggleJunk","deleteAll","handleOnDeleteAllAnnos","save","handleSave","help","toggleHelp","Card","imgLabel","toggleImgLabelInput","fullscreen","toggleFullscreen","settings","renderSaveButton","renderNavigation","renderToolButtons","renderFullscreenBtn","renderJunkButton","renderDeleteAllAnnosButton","renderHelpButton","renderSettingBtn","renderFilterBtn","Sia","fullscreenCSS","setFullscreenCSS","setLayoutUpdate","setSvg","externalConfigUpdate","setExternalConfigUpdate","setUiConfig","containerRef","annoActions","doLayoutUpdate","msg","handleCanvasKeyDown","onCanvasKeyDown","handleCanvasEvent","handleGetFunction","handleToolBarEvent","canvasFunc","blockCanvas","fullscreenMode","toolbarEnabled","imgMeta","imgBlob"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/utils/transform.js","../src/types/modes.js","../src/Annotation/AnnoBar.js","../src/Annotation/InfSelectionArea.js","../src/types/cursorstyles.js","../src/Annotation/Node.js","../src/types/canvasActions.js","../src/Annotation/Point.js","../src/utils/mouse.js","../src/Annotation/BBox.js","../src/Annotation/Edge.js","../src/Annotation/Polygon.js","../src/Annotation/Line.js","../src/types/annoStatus.js","../src/utils/colorlut.js","../src/utils/constraints.js","../src/types/notificationType.js","../src/Annotation/Annotation.js","../src/LabelInput.js","../src/AnnoLabelInput.js","../src/ImgBar.js","../src/Prompt.js","../src/AnnoToolBar.js","../src/utils/annoConversion.js","../src/utils/keyActions.js","../src/types/tools.js","../src/utils/hist.js","../src/utils/windowViewport.js","../../../../../../node_modules/react-draggable/dist/react-draggable.js","../src/InfoBoxes/InfoBox.js","../src/SiaPopup.js","../src/InfoBoxes/AnnoDetails.js","../src/InfoBoxes/AnnoStats.js","../src/AnnoExampleViewer.js","../src/InfoBoxes/LabelInfo.js","../src/InfoBoxes/InfoBoxArea.js","../src/Canvas.js","../src/types/toolbarEvents.js","../src/SIASettingButton.js","../src/filterTools.js","../src/SIAFilterButton.js","../src/utils/siaIcons.js","../src/ToolBar.js","../src/Sia.js","../src/siaDummyData.js"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","export function toSia(data, image, type, imgOffset){\n switch(type) {\n case 'bBox':\n const w = image.width * data.w\n const h = image.height * data.h\n const x0 = imgOffset.x + image.width * data.x - w/2.0\n const y0 = imgOffset.y + image.height * data.y - h/2.0\n return [\n {\n x: x0,\n y: y0\n },\n {\n x: x0 + w,\n y: y0\n },\n {\n x: x0 + w,\n y: y0 + h\n },\n {\n x: x0,\n y: y0 + h\n }\n ]\n case 'point':\n return [{\n x: imgOffset.x + image.width * data.x,\n y: imgOffset.y + image.height * data.y\n }]\n case 'line':\n case 'polygon':\n return data.map((e) => {\n return {\n x: imgOffset.x + image.width * e.x,\n y: imgOffset.y + image.height * e.y\n }\n })\n default:\n \n }\n}\n\n/**\n * Transform a sia annotation to backend format.\n * \n * @param {Array} data Annotation data\n * @param {*} svg Image object {width, height}\n * @param {String} type Type of the annotation bBox, point, line, polygon\n * @returns Annotation data in backend style (relative, centered)\n */\nexport function toBackend(data, svg, type, imgOffset={x:0,y:0}){\n const imgWidth = svg.width - 2*imgOffset.x\n const imgHeight = svg.height - 2*imgOffset.y\n switch(type) {\n case 'bBox':\n // const w = svg.width * data.w\n // const h = svg.height * data.h\n // const x0 = svg.width * data.x - w/2.0\n // const y0 = svg.height * data.y - h/2.0\n\n // console.error('GO On Here! w = max_x - min_x; h = max_y - min_y')\n const xList = data.map(e => {return e.x})\n const yList = data.map(e => {return e.y})\n const minX = Math.min(...xList) - imgOffset.x\n const maxX = Math.max(...xList) - imgOffset.x\n const minY = Math.min(...yList) - imgOffset.y\n const maxY = Math.max(...yList) - imgOffset.y\n const w = maxX - minX\n const h = maxY - minY\n const x = minX + w/2.0\n const y = minY + h/2.0\n return {\n x:x/imgWidth,\n y:y/imgHeight,\n w:w/imgWidth,\n h:h/imgHeight}\n case 'point':\n return {\n x: (data[0].x - imgOffset.x)/imgWidth,\n y: (data[0].y - imgOffset.y)/imgHeight\n }\n case 'line':\n case 'polygon':\n return data.map((e) => {\n return {\n x: (e.x - imgOffset.x)/ imgWidth,\n y: (e.y - imgOffset.y)/ imgHeight\n }\n })\n default:\n console.warn(\"Wrong annotation type!\")\n \n }\n}\n\nexport function getMinMaxPoints(data){\n const xList = data.map(e => {return e.x})\n const yList = data.map(e => {return e.y})\n const minPoint = {x:Math.min(...xList), y:Math.min(...yList)}\n const maxPoint = {x:Math.max(...xList), y:Math.max(...yList)}\n return [minPoint, maxPoint]\n}\n\n/**\n * Get area relative to the image \n * \n * @param {Array} data Annotation data\n * @param {*} scaledImg The scaled image object {width, height}\n * @param {String} type Type of the annotation bBox, point, line, polygon\n * @param {object} originalImg The original image\n * @returns Area relative\n */\nexport function getArea(data, scaledImg, type, originalImg){\n const relData = toBackend(data, scaledImg, type)\n switch(type) {\n case 'bBox':\n return Math.abs(relData.w*relData.h)* originalImg.width*originalImg.height\n // return relData.w*relData.h\n case 'line': \n case 'point':\n return undefined\n case 'polygon':\n let area = 0.0; // Accumulates area in the loop\n if (relData.length >2){\n let j = relData.length-1; // The last vertex is the 'previous' one to the first\n \n for (let i=0; i<relData.length; i++)\n { \n area = area + (relData[j].x+relData[i].x) * (relData[j].y-relData[i].y); \n j = i; //j is previous vertex to i\n }\n }\n return Math.abs(area/2) * originalImg.width*originalImg.height\n default:\n console.warn(\"Wrong annotation type!\")\n return undefined\n }\n}\n\nexport function move(data, movementX, movementY){\n return data.map(e => {\n return {\n x: e.x + movementX,\n y: e.y + movementY\n }\n })\n}\n\n\nexport function getBox(data, type){\n \n switch(type) {\n case 'bBox':\n return data\n case 'point':\n case 'line': \n case 'polygon':\n let maxX = 0\n let maxY = 0\n let minX = Infinity\n let minY = Infinity\n data.forEach(el => {\n if (el.x > maxX) maxX = el.x\n if (el.y > maxY) maxY = el.y\n if (el.x < minX) minX = el.x\n if (el.y < minY) minY = el.y\n })\n return [\n {x:minX, y:minY}, {x:maxX, y:minY},\n {x:minX, y:maxY}, {x:maxX, y:maxY}\n ]\n default:\n break\n \n }\n}\n\nexport function getCenter(data, type){\n let box = undefined\n switch(type) {\n case 'point':\n return data[0]\n case 'line':\n case 'polygon':\n case 'bBox':\n box = getBox(data, type)\n const w = box[1].x - box[0].x\n const h = box[3].y - box[0].y\n return {\n x: box[0].x + w/2.0,\n y: box[0].y + h/2.0\n } \n default:\n \n }\n}\n\n/**\n * Get point that is closest to the left browser side.\n * \n * @param {object} data list of points {x,y} \n * @returns {object} A list of point [{x,y}...]. Multiple points are\n * returned when multiple points have the same distance to the left side.\n */\nexport function getMostLeftPoint(data){\n let minX = Infinity\n let minXList = [] \n data.forEach(el => {\n if (el.x < minX){\n minX = el.x\n minXList = []\n minXList.push(el)\n } else if (el.x === minX) {\n minXList.push(el)\n }\n })\n return minXList\n}\n\n/**\n * Get point that is closest to the top of the browser.\n * \n * @param {object} data list of points {x,y} \n * @returns {object} A list of point [{x,y}...]. Multiple points are\n * returned when multiple points have the same distance to the top.\n */\nexport function getTopPoint(data){\n let minY = Infinity\n let minYList = [] \n data.forEach(el => {\n if (el.y < minY){\n minY = el.y\n minYList = []\n minYList.push(el)\n } else if (el.y === minY) {\n minYList.push(el)\n }\n })\n return minYList\n}\n\n/**\n * Check if all nodes of an annotation are within the image. If not,\n * correct the annotation\n * @param {object} data \n * @param {object} image \n * @param {object} imageOffset \n */\nexport function correctAnnotation(data, image, imageOffset){\n const imgWidth = image.width - 2*imageOffset.x\n const imgHeight = image.height - 2*imageOffset.y\n const corrected = data.map(el => {\n let x = el.x\n let y = el.y\n if (el.x <= imageOffset.x ){\n x = imageOffset.x\n } else if (el.x > (imgWidth + imageOffset.x)){\n x = imgWidth + imageOffset.x\n }\n if (el.y < imageOffset.y){\n y = imageOffset.y\n } else if (el.y > (imgHeight + imageOffset.y)){\n y = imgHeight + imageOffset.y\n }\n return {x:x,y:y}\n })\n return corrected\n}\n\n/**\n * Rotate annotation around center.\n * @param {*} data list of points {x:int,y:int} \n * @param {*} center Center to rotate point \n * @param {*} angle Rotation angle\n */\nexport function rotateAnnotation(data, center, angle){\n angle = (angle ) * (Math.PI/180); // Convert to radians\n const rotated = data.map(point => {\n return {\n x: Math.round(Math.cos(angle) * (point.x - center.x) - Math.sin(angle) * (point.y-center.y) + center.x),\n y: Math.round(Math.sin(angle) * (point.x - center.x) + Math.cos(angle) * (point.y - center.y) + center.y)\n }\n })\n return rotated;\n}\n\n/**\n * Resize annotation data in canvas format to new image size\n * @param {*} data Annotation data in canvas format [{x:int, y:int},...]\n * @param {*} sizeOld Size of old image {width:int, height:int}\n * @param {*} sizeNew Size of new image {width:int, height:int}\n */\nexport function resizeAnnoData(data, sizeOld, sizeNew){\n const xRatio = sizeNew.width / sizeOld.width\n const yRatio = sizeNew.height / sizeOld.height\n return data.map(e => {\n return {\n x: parseInt(e.x*xRatio),\n y: parseInt(e.y*yRatio)\n }\n })\n}","export const VIEW='view'\nexport const EDIT='edit'\nexport const CREATE='create'\nexport const MOVE='move'\nexport const ADD = 'add'\nexport const CAMERA_MOVE = 'cameraMove'\nexport const EDIT_LABEL = 'editLabel'\nexport const DELETED = 'deleted'","import React, {Component} from 'react'\nimport * as transform from '../utils/transform'\nimport * as modes from '../types/modes'\n\nconst defaultFontSize = 10\nconst defaultRectHeight = 15\n\nclass AnnoBar extends Component{\n\n constructor(props){\n super(props)\n this.state = {\n top: 0,\n left: 0,\n width: 50,\n height: defaultRectHeight,\n fontSize:defaultFontSize,\n }\n this.textRef = React.createRef()\n }\n \n /*************\n * EVENTS *\n **************/\n componentWillMount(){\n if (this.props.mode !== modes.CREATE) this.setPosition()\n }\n\n componentDidUpdate(){\n if (this.props.mode !== modes.CREATE){\n this.setPosition()\n } \n }\n\n handleClick(e: Event){\n e.preventDefault()\n if (this.props.onClick){\n this.props.onClick(e)\n }\n }\n /*************\n * LOGIC *\n *************/\n setPosition(){\n // const center = transform.getCenter(this.props.anno.data, this.props.anno.type)\n // const top = center.y\n // const left = center.x \n // if (this.state.top !== top || this.state.left !== left){ \n // this.setState({\n // top,\n // left\n // })\n // }\n let topPoint = transform.getTopPoint(this.props.anno.data)\n topPoint = transform.getMostLeftPoint(topPoint)[0]\n if (this.textRef.current){\n const text = this.textRef.current.getBoundingClientRect()\n const textPadding = 2\n let rectWidth = (text.width + textPadding)/this.props.svg.scale\n if (rectWidth !== this.state.width){\n this.setState({\n width: rectWidth,\n fontSize: Math.ceil(defaultFontSize/this.props.svg.scale),\n // height: Math.ceil(defaultFontSize/this.props.svg.scale)\n })\n }\n }\n let top = topPoint.y - 10 \n let left = topPoint.x + 7\n if (top < 0) top = topPoint.y + 10\n if (this.state.top !== top || this.state.left !== left){ \n this.setState({\n top,\n left,\n // width: annoBox[1].x - annoBox[0].x\n })\n }\n }\n\n /*************\n * RENDERING *\n **************/\n\n\n render(){\n let label = ''\n if (!this.props.possibleLabels) return null\n let labelObject \n if (this.props.anno.labelIds && this.props.anno.labelIds.length > 0){\n this.props.anno.labelIds.forEach((lbl, idx) => {\n labelObject = this.props.possibleLabels.find(el => {\n return el.id === lbl\n })\n if (idx > 0) label += ', '\n label += labelObject.label\n })\n } else {\n if (this.props.defaultLabel){\n if (Number.isInteger(this.props.defaultLabel)){\n labelObject = this.props.possibleLabels.find(el => {\n return el.id === this.props.defaultLabel\n })\n label = labelObject.label\n } else {\n label = this.props.defaultLabel\n }\n } else {\n label = 'no label'\n }\n }\n switch(this.props.mode){\n case modes.VIEW:\n return (<g>\n <rect x={this.state.left} y={this.state.top - 6} \n width={this.state.width} height={this.state.height} rx=\"5\" \n opacity='0.5'\n style={this.props.style}\n />\n <text x={this.state.left} y={this.state.top} \n fill=\"white\"\n onClick={e => this.handleClick(e)}\n textAnchor=\"start\"\n alignmentBaseline=\"central\"\n ref={this.textRef} \n fontSize={this.state.fontSize+\"pt\"}\n // textLength=\"50\"\n // style={{...this.props.style, strokeWidth:1}}\n > \n {label}\n </text>\n {/* This second rect is to prevent text from getting marked */}\n <rect x={this.state.left} y={this.state.top - 6} \n width={this.state.width} \n height={this.state.height} rx=\"5\" \n opacity='0.01'\n style={this.props.style}\n />\n </g>\n )\n default:\n return null\n }\n \n }\n \n}\n\nexport default AnnoBar","import React, {Component} from 'react'\n\nclass InfSelectionArea extends Component{\n\n constructor(props){\n super(props)\n this.state = {\n selAreaCss: 'sel-area-off',\n } \n }\n\n componentDidMount(){\n if (this.props.enable){\n this.enableSelArea()\n } else {\n this.disableSelArea()\n }\n }\n\n componentDidUpdate(){\n if (this.props.enable){\n this.enableSelArea()\n } else {\n this.disableSelArea()\n }\n }\n\n onMouseMove(e){\n if (this.props.onMouseMove){\n this.props.onMouseMove(e)\n }\n }\n\n onMouseUp(e){\n if (this.props.onMouseUp){\n this.props.onMouseUp(e)\n }\n }\n\n enableSelArea(){\n if (this.state.selAreaCss !== 'sel-area-on'){\n this.setState({selAreaCss: 'sel-area-on'})\n }\n }\n\n disableSelArea(){\n if (this.state.selAreaCss !== 'sel-area-off'){\n this.setState({selAreaCss: 'sel-area-off'})\n }\n }\n\n\n /*************\n * RENDERING *\n **************/\n render(){\n return(\n <circle \n cx={this.props.svg.width/2} \n cy={this.props.svg.height/2} \n r={'100%'}\n className={this.state.selAreaCss}\n onMouseMove={e => {this.onMouseMove(e)}}\n onMouseUp={e => {this.onMouseUp(e)}}\n />\n )\n \n }\n}\n\nexport default InfSelectionArea","export const CREATE_NODE = \"crosshair\"\nexport const EDIT_NODE = \"crosshair\"\nexport const NORMAL_NODE = \"default\"","import React, {Component} from 'react'\nimport './Annotation.scss'\nimport * as modes from '../types/modes'\nimport * as cursorstyles from '../types/cursorstyles'\n\n\nclass Node extends Component{\n\n /*************\n * LIFECYCLE *\n **************/\n constructor(props){\n super(props)\n this.state = {\n haloCss: 'node-halo-off',\n selAreaCss: 'sel-area-off',\n // anno: undefined,\n nodeSelected: false,\n style: {}\n }\n }\n\n componentDidMount(){\n this.setState({\n // anno: this.props.anno,\n style: {\n ...this.props.style,\n cursor: this.getCursorStyle(this.props.mode)\n }\n })\n // switch (this.props.mode){\n // case modes.CREATE:\n // if (this.props.idx !== 0){\n // this.turnSelAreaOn()\n // }\n // default:\n // break\n // }\n }\n\n componentDidUpdate(prevProps){\n switch (this.props.mode){\n case modes.CREATE:\n if (this.props.idx !== 0 || this.props.isPoint){\n this.turnSelAreaOn()\n }\n break\n case modes.EDIT:\n this.turnSelAreaOn()\n break\n default:\n break\n }\n //on mode change\n if (prevProps.mode !== this.props.mode){\n this.setState({\n style: {...this.state.style,\n cursor: this.getCursorStyle(this.props.mode)\n }\n })\n }\n if (prevProps.style !== this.props.style){\n this.setState({style: \n {...this.state.style,\n ...this.props.style,\n cursor: this.getCursorStyle(this.props.mode)}\n })\n }\n }\n\n /*************\n * EVENTS *\n **************/\n\n onClick(e){\n this.turnHaloOn()\n if (this.props.onClick){\n this.props.onClick(e, this.props.idx)\n }\n }\n\n onMouseMove(e){\n if (this.props.onMouseMove){\n this.props.onMouseMove(e, this.props.idx)\n }\n // switch (this.props.mode){\n // case modes.CREATE:\n // let newAnno = [...this.state.anno]\n // const mousePos = mouse.getMousePosition(e, this.props.svg)\n // newAnno[this.props.idx].x = mousePos.x\n // newAnno[this.props.idx].y = mousePos.y\n // this.setState({\n // anno: newAnno\n // })\n // if (this.props.onAnnoUpdate){\n // this.props.onAnnoUpdate(e, this.props.idx, newAnno)\n // }\n // default:\n // break\n // }\n }\n\n onContextMenu(e: Event){\n e.preventDefault()\n }\n\n onMouseUp(e: Event){\n switch (this.props.mode){\n case modes.EDIT:\n switch (e.button){\n case 0:\n this.turnSelAreaOff()\n break\n default:\n break\n }\n break\n default:\n break\n }\n if (this.props.onMouseUp){\n this.props.onMouseUp(e, this.props.idx)\n }\n }\n\n onMouseDown(e: Event){\n e.stopPropagation()\n if (this.props.onMouseDown){\n this.props.onMouseDown(e, this.props.idx)\n }\n switch (this.props.mode){\n case modes.CREATE:\n switch (e.button){\n case 0:\n this.turnSelAreaOff()\n break\n case 2:\n this.turnSelAreaOff()\n break\n default:\n break\n }\n // case modes.EDIT:\n // switch (e.button){\n // case 0:\n // this.turnSelAreaOn()\n // break\n // default:\n // break\n // }\n break\n default:\n break\n }\n }\n \n onMouseOver(e: Event){\n if (this.props.isSelected){\n this.turnHaloOn()\n }\n }\n\n onMouseLeave(e){\n if (this.props.isSelected){\n this.turnHaloOff()\n }\n }\n\n onDoubleClick(e){\n if (this.props.onDoubleClick){\n this.props.onDoubleClick(e, this.props.idx)\n }\n }\n\n handleMouseLeave(e){\n if (this.props.onMouseLeave){\n this.props.onMouseLeave(e, this.props.idx)\n }\n }\n\n\n /*************\n * LOGIC *\n **************/\n getCursorStyle(mode){\n switch(mode){\n case modes.CREATE:\n return cursorstyles.CREATE_NODE\n case modes.EDIT:\n return cursorstyles.EDIT_NODE\n case modes.VIEW:\n return cursorstyles.NORMAL_NODE\n default:\n break\n }\n }\n\n turnSelAreaOn(){\n if (this.state.selAreaCss !== 'sel-area-on'){\n this.setState({\n selAreaCss: 'sel-area-on'\n })\n }\n }\n\n turnSelAreaOff(){\n if (this.state.selAreaCss !== 'sel-area-off'){\n this.setState({\n selAreaCss: 'sel-area-off'\n })\n }\n }\n\n turnHaloOn(){\n this.setState({\n haloCss: 'node-halo-on'\n })\n }\n\n turnHaloOff(){\n this.setState({\n haloCss: 'node-halo-off'\n })\n }\n\n /*************\n * RENDERING *\n **************/\n renderHalo(){\n if (this.state.haloCss === 'node-halo-off') return null\n const data = this.props.anno[this.props.idx]\n\n return <circle cx={data.x} cy={data.y} r={this.props.style.r * 3}\n className={this.state.haloCss}\n onMouseLeave={e => this.onMouseLeave(e)}\n />\n }\n renderNodes(){\n const data = this.props.anno[this.props.idx]\n if (data === undefined) {return}\n return (\n <g\n onClick={(e) => this.onClick(e)}\n onMouseMove={e => this.onMouseMove(e)}\n onContextMenu={e => this.onContextMenu(e)}\n onMouseUp={e => this.onMouseUp(e)}\n onMouseDown={e => this.onMouseDown(e)}\n onDoubleClick={e => this.onDoubleClick(e)}\n onMouseLeave={e => this.handleMouseLeave(e)}\n >\n <circle cx={data.x} cy={data.y} r={'100%'}\n className={this.state.selAreaCss}\n />\n {this.renderHalo()}\n <circle cx={data.x} \n cy={data.y} \n r={3} fill=\"red\"\n style={this.state.style}\n className={this.props.className}\n onMouseOver={e => this.onMouseOver(e)}\n />\n </g>\n )\n }\n render(){\n return(\n <g>\n {this.renderNodes()}\n </g>\n )\n }\n}\n\nexport default Node;","//Anno actions\nexport const ANNO_DELETED='annoDeleted'\nexport const ANNO_SELECTED='annoSselected'\nexport const ANNO_CREATED='annoCreated'\nexport const ANNO_MOVED='annoMoved'\nexport const ANNO_ENTER_MOVE_MODE='annoEnterMoveMode'\nexport const ANNO_EDITED='annoEdited'\nexport const ANNO_ENTER_EDIT_MODE='annoEnterEditMode'\nexport const ANNO_ADDED_NODE='annoAddedNode'\nexport const ANNO_REMOVED_NODE='annoRemovedNode'\nexport const ANNO_LABEL_UPDATE='annoLabelUpdate'\nexport const ANNO_CREATED_NODE='annoCreatedNode'\nexport const ANNO_CREATED_FINAL_NODE='annoCreatedFinalNode'\nexport const ANNO_START_CREATING='annoStartCreating'\nexport const ANNO_COMMENT_UPDATE='annoCommentUpdate'\nexport const ANNO_MARK_EXAMPLE='annoMarkExample'\n\nexport const CANVAS_SVG_UPDATE='canvasSvgUpdate'\nexport const CANVAS_UI_CONFIG_UPDATE='canvasUiConfigUpdate'\nexport const CANVAS_AUTO_SAVE='canvasAutoSave'\nexport const CANVAS_LABEL_INPUT_CLOSE='canvasLabelInputClose'\nexport const CANVAS_IMG_LOADED='canvasImgLoaded'\nexport const CANVAS_IMGBAR_CLOSE='canvasImgbarClose'\n\n//Image actions\nexport const IMG_LABEL_UPDATE='imgLabelUpdate'\n","import React, {Component} from 'react'\nimport InfSelectionArea from './InfSelectionArea'\nimport Node from './Node'\nimport * as modes from '../types/modes'\nimport * as transform from '../utils/transform'\nimport * as canvasActions from '../types/canvasActions'\n\nclass Point extends Component{\n\n /*************\n * LIFECYCLE *\n **************/\n constructor(props){\n super(props)\n this.state = {\n anno: undefined,\n }\n }\n\n componentDidMount(prevProps){\n if (this.props.anno.mode === modes.CREATE){\n const data = this.props.anno.data[0]\n const newAnno = {\n ...this.props.anno,\n data: [\n {x: data.x, y: data.y}\n ],\n selectedNode: 0\n }\n this.setState({\n anno: newAnno\n })\n } else {\n this.setState({anno: {...this.props.anno}})\n }\n }\n\n componentDidUpdate(prevProps){\n if (prevProps.anno !== this.props.anno){\n this.setState({anno: {...this.props.anno}})\n }\n }\n \n /**************\n * ANNO EVENTS *\n ***************/\n onMouseMove(e){\n switch (this.state.anno.mode){\n case modes.MOVE:\n this.move(\n e.movementX/this.props.svg.scale, \n e.movementY/this.props.svg.scale\n )\n break\n default:\n break\n }\n }\n\n onMouseUp(e){\n switch (this.state.anno.mode){\n case modes.MOVE:\n if (e.button === 0){\n this.requestModeChange(this.state.anno, modes.VIEW)\n this.performedAction(this.state.anno, canvasActions.ANNO_MOVED)\n }\n break\n case modes.CREATE:\n this.requestModeChange(this.state.anno, modes.VIEW)\n\n this.performedAction(this.state.anno, canvasActions.ANNO_CREATED)\n break\n default:\n break\n }\n }\n\n onNodeMouseDown(e, idx){\n switch (this.state.anno.mode){\n case modes.VIEW:\n if (e.button === 0){\n if (this.props.isSelected){\n this.requestModeChange(this.state.anno, modes.MOVE)\n }\n }\n break\n default:\n break\n }\n }\n\n /*************\n * LOGIC *\n **************/\n getResult(){\n return this.state.anno\n }\n \n performedAction(anno, pAction){\n if (this.props.onAction){\n this.props.onAction(anno, pAction)\n }\n }\n\n requestModeChange(anno, mode){\n this.props.onModeChangeRequest(anno, mode)\n }\n\n move(movementX, movementY){\n this.setState({\n anno : {\n ...this.state.anno,\n data: transform.move(this.state.anno.data, movementX, movementY)\n }\n })\n }\n\n renderInfSelectionArea(){\n switch (this.state.anno.mode){\n case modes.MOVE:\n return <InfSelectionArea enable={true} \n svg={this.props.svg}\n />\n default:\n return null\n }\n }\n\n renderNode(){\n if (!this.props.isSelected) return null \n switch(this.state.anno.mode){\n case modes.EDIT_LABEL:\n case modes.MOVE:\n return null\n case modes.EDIT:\n case modes.CREATE:\n return <Node anno={this.state.anno.data}\n key={this.state.selectedNode}\n idx={this.state.anno.selectedNode} \n style={this.props.style}\n className={this.props.className} \n isSelected={this.props.isSelected}\n mode={this.state.anno.mode}\n svg={this.props.svg}\n onMouseDown={(e, idx) => this.onNodeMouseDown(e,idx)}\n isPoint={true}\n />\n default:\n return this.state.anno.data.map((e, idx) => {\n return <Node anno={this.state.anno.data} idx={idx} \n key={idx} style={this.props.style}\n className={this.props.className} \n isSelected={this.props.isSelected}\n mode={this.state.anno.mode}\n svg={this.props.svg}\n onMouseDown={(e, idx) => this.onNodeMouseDown(e,idx)}\n isPoint={true}\n />\n })\n }\n }\n\n renderPoint(){\n return this.state.anno.data.map((e, idx) => {\n return (\n <circle key={idx} \n cx={e.x} \n cy={e.y} \n r={10} fill=\"red\" \n style={this.props.style}\n className={this.props.className}\n />\n )\n })\n \n }\n\n render(){\n if (this.state.anno){\n return(\n <g\n onMouseMove={e => this.onMouseMove(e)}\n onMouseUp={e => this.onMouseUp(e)}\n >\n {this.renderPoint()}\n {this.renderNode()}\n {this.renderInfSelectionArea()}\n </g>\n )\n } else {\n return null\n }\n }\n}\n\nexport default Point;","export function getMousePosition(e, svg){\n const absPos = getMousePositionAbs(e, svg)\n return {\n x: (absPos.x )/svg.scale - svg.translateX,\n y: (absPos.y )/svg.scale - svg.translateY\n }\n}\n\nexport function getMousePositionAbs(e, svg){\n return {\n x: (e.pageX - svg.left),\n y: (e.pageY - svg.top)\n }\n}","import React, {Component} from 'react'\nimport './Annotation.scss';\nimport * as modes from '../types/modes'\nimport * as transform from '../utils/transform'\nimport * as canvasActions from '../types/canvasActions'\nimport * as mouse from '../utils/mouse'\nimport InfSelectionArea from './InfSelectionArea'\nimport Node from './Node'\n\nclass BBox extends Component{\n\n /*************\n * LIFECYCLE *\n **************/\n constructor(props){\n super(props)\n this.state = {\n anno: undefined,\n }\n }\n\n componentDidMount(prevProps){\n if (this.props.anno.mode === modes.CREATE){\n const data = this.props.anno.data[0]\n const newAnno = {\n ...this.props.anno,\n data: [\n {x: data.x, y: data.y},\n {x: data.x+1, y: data.y},\n {x: data.x+1, y: data.y+1},\n {x: data.x, y: data.y+1}\n ],\n selectedNode: 2\n }\n this.setState({\n anno: newAnno\n })\n // this.performedAction(newAnno, canvasActions.ANNO_START_CREATING)\n \n } else {\n this.setState({anno: {...this.props.anno}})\n }\n }\n\n componentDidUpdate(prevProps){\n if (prevProps.anno !== this.props.anno){\n this.setState({anno: {...this.props.anno}})\n }\n }\n\n /*************\n * EVENTS *\n **************/\n onNodeMouseMove(e, idx){\n switch (this.state.anno.mode){\n case modes.CREATE:\n case modes.EDIT:\n const mousePos = mouse.getMousePosition(e, this.props.svg)\n const idxMinus = idx - 1 < 0 ? 3 : idx -1\n const idxPlus = idx + 1 > 3 ? 0 : idx +1\n let newAnnoData = [...this.state.anno.data]\n if (idx % 2 === 0){\n newAnnoData[idxMinus].x = mousePos.x\n newAnnoData[idx].x = mousePos.x\n newAnnoData[idx].y = mousePos.y\n newAnnoData[idxPlus].y = mousePos.y\n } else {\n newAnnoData[idxMinus].y = mousePos.y\n newAnnoData[idx].x = mousePos.x\n newAnnoData[idx].y = mousePos.y\n newAnnoData[idxPlus].x = mousePos.x\n }\n this.setState({\n anno: {\n ...this.state.anno,\n data: newAnnoData\n }\n })\n break\n default:\n break\n }\n }\n\n onNodeMouseDown(e,idx){\n switch(this.state.anno.mode){\n case modes.VIEW:\n if (e.button === 0){\n this.requestModeChange(\n {...this.state.anno, selectedNode:idx}, \n modes.EDIT\n )\n }\n break\n default:\n break\n }\n }\n\n onNodeMouseUp(e, idx){\n switch(this.state.anno.mode){\n case modes.EDIT:\n if (e.button === 0){\n this.requestModeChange(this.state.anno, modes.VIEW)\n this.performedAction(this.state.anno, canvasActions.ANNO_EDITED)\n }\n break\n case modes.CREATE:\n if (e.button === 2){\n this.requestModeChange(this.state.anno, modes.VIEW)\n this.performedAction(this.state.anno, canvasActions.ANNO_CREATED)\n }\n break\n default:\n break\n }\n }\n\n handleNodeMouseLeave(e, idx){\n switch(this.state.anno.mode){\n //if mouse left Canvas in create mode, transit to VIEW mode\n case modes.CREATE:\n this.requestModeChange(this.state.anno, modes.VIEW)\n this.performedAction(this.state.anno, canvasActions.ANNO_CREATED)\n break\n default:\n break\n }\n }\n\n /**************\n * ANNO EVENTS *\n ***************/\n onMouseMove(e){\n switch (this.state.anno.mode){\n case modes.MOVE:\n this.move(\n e.movementX/this.props.svg.scale, \n e.movementY/this.props.svg.scale\n )\n break\n default:\n break\n }\n }\n\n onMouseUp(e){\n switch (this.state.anno.mode){\n case modes.MOVE:\n if (e.button === 0){\n this.requestModeChange(this.state.anno, modes.VIEW)\n this.performedAction(this.state.anno, canvasActions.ANNO_MOVED)\n }\n break\n default:\n break\n }\n }\n\n onMouseDown(e){\n switch (this.state.anno.mode){\n case modes.VIEW:\n if (e.button === 0){\n if (this.props.isSelected){\n this.requestModeChange(this.state.anno, modes.MOVE)\n }\n }\n break\n default:\n break\n }\n }\n /*************\n * LOGIC *\n **************/\n getResult(){\n return this.state.anno\n }\n \n requestModeChange(anno, mode){\n this.props.onModeChangeRequest(anno, mode)\n }\n\n performedAction(anno, pAction){\n if (this.props.onAction){\n this.props.onAction(anno, pAction)\n }\n }\n\n toPolygonStr(data){\n return data.map( (e => {\n return `${e.x},${e.y}`\n })).join(' ')\n \n }\n\n move(movementX, movementY){\n this.setState({\n anno : {\n ...this.state.anno,\n data: transform.move(this.state.anno.data, movementX, movementY)\n }\n })\n }\n\n /*************\n * RENDERING *\n **************/\n\n renderPolygon(){\n switch(this.state.anno.mode){\n default:\n return <polygon \n points={this.toPolygonStr(this.state.anno.data)}\n fill='none' stroke=\"purple\" \n style={this.props.style}\n className={this.props.className}\n onMouseDown={e => this.onMouseDown(e)}\n onMouseUp={e => this.onMouseUp(e)}\n /> \n }\n }\n\n renderNodes(){\n if (!this.props.isSelected) return null \n switch(this.state.anno.mode){\n case modes.MOVE:\n case modes.EDIT_LABEL:\n return null\n case modes.EDIT:\n case modes.CREATE:\n return <Node anno={this.state.anno.data}\n key={this.state.anno.selectedNode}\n idx={this.state.anno.selectedNode} \n style={this.props.style}\n className={this.props.className} \n isSelected={this.props.isSelected}\n mode={this.state.anno.mode}\n svg={this.props.svg}\n onMouseDown={(e, idx) => this.onNodeMouseDown(e,idx)}\n onMouseUp={(e, idx) => this.onNodeMouseUp(e, idx)}\n onMouseMove={(e, idx) => this.onNodeMouseMove(e, idx)}\n onMouseLeave={(e, idx) => this.handleNodeMouseLeave(e, idx)}\n />\n default:\n return this.state.anno.data.map((e, idx) => {\n return <Node anno={this.state.anno.data} idx={idx} \n key={idx} style={this.props.style}\n className={this.props.className} \n isSelected={this.props.isSelected}\n mode={this.state.anno.mode}\n svg={this.props.svg}\n onMouseDown={(e, idx) => this.onNodeMouseDown(e,idx)}\n onMouseUp={(e, idx) => this.onNodeMouseUp(e, idx)}\n onMouseLeave={(e, idx) => this.handleNodeMouseLeave(e, idx)}\n />\n })\n }\n }\n\n renderInfSelectionArea(){\n switch (this.state.anno.mode){\n case modes.MOVE:\n return <InfSelectionArea enable={true} \n svg={this.props.svg}\n />\n default:\n return null\n }\n }\n\n render(){\n if (this.state.anno){\n return (\n <g\n onMouseMove={e => this.onMouseMove(e)}\n onMouseUp={e => this.onMouseUp(e)}\n onMouseDown={e => this.onMouseDown(e)}\n >\n {this.renderPolygon()}\n {this.renderNodes()}\n {this.renderInfSelectionArea()}\n </g>)\n } else {\n return null\n }\n }\n\n}\n\nexport default BBox;","import React, {Component} from 'react'\nimport './Annotation.scss'\n\n\n\nclass Edge extends Component{\n\n constructor(props){\n super(props)\n this.state = {\n haloCss: 'node-halo-off'\n }\n }\n\n componentDidUpdate(){\n }\n \n onMouseOver(e){\n if (this.props.isSelected){\n this.setState({haloCss: 'node-halo-on'})\n }\n }\n\n onMouseLeave(e){\n if (this.props.isSelected){\n this.setState({haloCss: 'node-halo-off'})\n }\n }\n\n onMouseDown(e){\n if (this.props.onMouseDown){\n this.props.onMouseDown(e, this.props.idx)\n }\n }\n\n onMouseUp(e){\n e.stopPropagation()\n }\n\n render(){\n let p1, p2\n if (!this.props.closingEdge){\n if (this.props.idx - 1 < 0 ){\n return null\n }\n if (this.props.idx > this.props.anno.length - 1){\n return null\n }\n p1 = this.props.anno[this.props.idx - 1 ]\n p2 = this.props.anno[this.props.idx]\n } else {\n if (this.props.idx === 0 && this.props.anno.length === 1) return null\n p1 = this.props.anno[this.props.anno.length-1]\n p2 = this.props.anno[0]\n }\n return(<g\n onMouseOver={(e) => {this.onMouseOver(e)}}\n onMouseLeave={e => {this.onMouseLeave(e)}}\n \n >\n <line x1={p1.x} y1={p1.y} \n x2={p2.x} y2={p2.y} stroke=\"black\"\n // style={this.props.style} \n strokeWidth={this.props.style.strokeWidth*3}\n className={this.state.haloCss}\n onMouseOver={(e) => {this.onMouseOver(e)}}\n onMouseDown={e => this.onMouseDown(e)}\n onMouseUp={e => this.onMouseUp(e)}\n />\n <line x1={p1.x} y1={p1.y} \n x2={p2.x} y2={p2.y} stroke=\"black\"\n style={this.props.style} \n className={this.props.className}\n onMouseDown={e => this.onMouseDown(e)}\n onMouseUp={e => this.onMouseUp(e)}\n />\n </g>\n )\n }\n}\n\nexport default Edge;","import React, {Component} from 'react'\n\nimport Edge from './Edge'\nimport Node from './Node'\nimport InfSelectionArea from './InfSelectionArea'\n\nimport * as transform from '../utils/transform'\nimport * as canvasActions from '../types/canvasActions'\n\nimport './Annotation.scss'\nimport * as modes from '../types/modes'\nimport * as mouse from '../utils/mouse'\n\n\nclass Polygon extends Component{\n\n /*************\n * LIFECYCLE *\n **************/\n constructor(props){\n super(props)\n this.state = {\n anno: undefined,\n }\n }\n\n componentDidMount(){\n if (this.props.anno.mode === modes.CREATE){\n const data = this.props.anno.data[0]\n const newAnno = {\n ...this.props.anno,\n data: [\n {x: data.x, y: data.y},\n {x: data.x+1, y: data.y},\n ],\n selectedNode: 1\n }\n this.setState({\n anno: newAnno\n })\n } else {\n this.setState({anno: {...this.props.anno}})\n }\n }\n\n componentDidUpdate(prevProps){\n if (prevProps.anno !== this.props.anno){\n this.setState({anno: {...this.props.anno}})\n }\n }\n\n\n /**************\n * ANNO EVENTS *\n ***************/\n onMouseMove(e){\n switch (this.state.anno.mode){\n case modes.MOVE:\n this.move(\n e.movementX/this.props.svg.scale, \n e.movementY/this.props.svg.scale\n )\n break\n default:\n break\n }\n }\n\n onMouseUp(e){\n switch (this.state.anno.mode){\n case modes.MOVE:\n if (e.button === 0){\n this.performedAction(this.state.anno, canvasActions.ANNO_MOVED)\n this.requestModeChange(this.state.anno, modes.VIEW)\n }\n break\n default:\n break\n }\n }\n\n onMouseDown(e){\n switch (this.state.anno.mode){\n case modes.VIEW:\n if (e.button === 0){\n if (this.props.isSelected){\n this.requestModeChange(this.state.anno, modes.MOVE)\n }\n }\n break\n default:\n break\n }\n }\n /**************\n * NODE EVENTS *\n ***************/\n\n onNodeMouseUp(e, idx){\n switch (this.state.anno.mode){\n case modes.EDIT:\n this.performedAction(this.state.anno, canvasActions.ANNO_EDITED)\n this.requestModeChange(this.state.anno, modes.VIEW)\n break\n default:\n break\n }\n }\n\n onNodeMouseDown(e,idx){\n switch (this.state.anno.mode){\n case modes.CREATE:\n if (e.button === 2){\n let newAnnoData = [...this.state.anno.data]\n newAnnoData.push({\n x: newAnnoData[idx].x,\n y: newAnnoData[idx].y\n })\n const newAnno = {\n ...this.state.anno,\n data: newAnnoData,\n selectedNode: this.state.anno.selectedNode + 1\n }\n this.setState({\n anno: newAnno\n })\n this.performedAction(newAnno, \n canvasActions.ANNO_CREATED_NODE)\n }\n break\n case modes.VIEW:\n if (e.button === 0){\n this.requestModeChange({\n ...this.state.anno,\n selectedNode: idx\n }, modes.EDIT)\n }\n break\n default:\n break\n }\n }\n\n onNodeMouseMove(e, idx){\n switch (this.state.anno.mode){\n case modes.CREATE:\n this.updateAnnoByMousePos(e, idx)\n break\n case modes.EDIT:\n e.stopPropagation()\n this.updateAnnoByMousePos(e, idx)\n break\n default:\n break\n }\n }\n\n onNodeDoubleClick(e, idx){\n switch (this.state.anno.mode){\n case modes.CREATE:\n this.performedAction(this.state.anno, canvasActions.ANNO_CREATED_FINAL_NODE)\n break\n default:\n break\n }\n }\n \n /**************\n * EDGE EVENTS *\n ***************/\n onEdgeMouseDown(e, idx){\n switch (this.state.anno.mode){\n case modes.ADD:\n this.addNode(e, idx)\n break\n case modes.VIEW:\n if (e.button === 0){\n this.requestModeChange(this.state.anno, modes.MOVE)\n }\n break\n default:\n break\n }\n }\n\n /*************\n * LOGIC *\n *************/\n performedAction(anno, pAction){\n if (this.props.onAction){\n this.props.onAction(anno, pAction)\n }\n }\n\n toPolygonStr(data){\n return data.map( (e => {\n return `${e.x},${e.y}`\n })).join(' ')\n \n }\n\n requestModeChange(anno, mode){\n this.props.onModeChangeRequest(anno, mode)\n }\n\n move(movementX, movementY){\n this.setState({\n anno : {...this.state.anno,\n data: transform.move(this.state.anno.data, movementX, movementY)\n }\n })\n }\n\n addNode(e, idx){\n const mPos = mouse.getMousePosition(e, this.props.svg)\n let newAnnoData = this.state.anno.data.slice(0,idx)\n newAnnoData.push(mPos)\n const oldRest = this.state.anno.data.slice(idx)\n const newAnno = {\n ...this.state.anno,\n data: newAnnoData.concat(oldRest)\n }\n this.setState({anno: newAnno\n })\n this.performedAction(newAnno, canvasActions.ANNO_ADDED_NODE)\n }\n\n removeLastNode(){\n const newAnno = {\n ...this.state.anno,\n data: [...this.state.anno.data.slice(0, this.state.anno.data.length-1)],\n selectedNode: this.state.anno.selectedNode - 1\n }\n this.setState({anno: newAnno\n })\n this.performedAction(newAnno, canvasActions.ANNO_REMOVED_NODE)\n }\n\n updateAnnoByMousePos(e, idx){\n const mousePos = mouse.getMousePosition(e, this.props.svg)\n let newAnnoData = [...this.state.anno.data]\n newAnnoData[idx].x = mousePos.x\n newAnnoData[idx].y = mousePos.y\n this.setState({\n anno: {\n ...this.state.anno,\n data: newAnnoData\n }\n })\n }\n\n getResult(){\n return this.state.anno\n }\n\n /*************\n * RENDERING *\n **************/\n\n renderNodes(){\n if (!this.props.isSelected) return null\n switch (this.state.anno.mode){\n case modes.MOVE:\n return null\n case modes.EDIT:\n case modes.CREATE:\n return <Node anno={this.state.anno.data} idx={this.state.anno.selectedNode} \n key={this.state.anno.selectedNode} style={this.props.style}\n className={this.props.className} \n isSelected={this.props.isSelected}\n mode={this.state.anno.mode}\n svg={this.props.svg}\n onMouseDown={(e, idx) => this.onNodeMouseDown(e,idx)}\n onMouseUp={(e, idx) => this.onNodeMouseUp(e, idx)}\n onDoubleClick={(e, idx) => this.onNodeDoubleClick(e, idx)}\n onMouseMove={(e, idx) => this.onNodeMouseMove(e, idx)}\n />\n default:\n return this.state.anno.data.map((e, idx) => {\n return <Node anno={this.state.anno.data} idx={idx} \n key={idx} style={this.props.style}\n className={this.props.className} \n isSelected={this.props.isSelected}\n mode={this.state.anno.mode}\n svg={this.props.svg}\n onMouseDown={(e, idx) => this.onNodeMouseDown(e,idx)}\n onMouseUp={(e, idx) => this.onNodeMouseUp(e, idx)}\n onDoubleClick={(e, idx) => this.onNodeDoubleClick(e, idx)}\n onMouseMove={(e, idx) => this.onNodeMouseMove(e, idx)}\n />\n })\n }\n }\n\n renderEdges(){\n if (!this.props.isSelected) return null\n switch (this.state.anno.mode){\n case modes.VIEW:\n case modes.ADD:\n let edges = this.state.anno.data.map((e, idx) => {\n return <Edge anno={this.state.anno.data} \n idx={idx} key={idx} style={this.props.style}\n className={this.props.className}\n isSelected={this.props.isSelected}\n onMouseDown={(e, idx) => {this.onEdgeMouseDown(e, idx)}} \n />\n })\n edges.push(<Edge anno={this.state.anno.data} \n closingEdge={true} key={edges.length}\n idx={0}\n style={this.props.style}\n className={this.props.className}\n isSelected={this.props.isSelected}\n onMouseDown={(e, idx) => {this.onEdgeMouseDown(e, idx)}} \n />)\n return edges\n default:\n return null\n }\n }\n\n renderPolygon(){\n return <polygon points={this.toPolygonStr(this.state.anno.data)}\n fill='none' stroke=\"purple\" \n style={this.props.style}\n className={this.props.className}\n />\n }\n\n renderInfSelectionArea(){\n switch (this.state.anno.mode){\n case modes.MOVE:\n return <InfSelectionArea enable={true} \n svg={this.props.svg}\n />\n default:\n return null\n }\n }\n\n render(){\n if (this.state.anno){\n return (\n <g\n onMouseMove={e => this.onMouseMove(e)}\n onMouseUp={e => this.onMouseUp(e)}\n onMouseDown={e => this.onMouseDown(e)}\n >\n {this.renderPolygon()}\n {this.renderEdges()}\n {this.renderNodes()}\n {this.renderInfSelectionArea()}\n </g>\n )\n } else {\n return <g></g>\n }\n }\n}\n\nexport default Polygon;","import React from 'react'\nimport Polygon from './Polygon'\nimport Edge from './Edge'\n\nimport * as modes from '../types/modes'\n\n\n\nclass Line extends Polygon{\n\n /*************\n * RENDERING *\n **************/\n\n renderEdges(){\n if (!this.props.isSelected) return null\n switch (this.state.anno.mode){\n case modes.VIEW:\n case modes.ADD:\n return this.state.anno.data.map((e, idx) => {\n return <Edge anno={this.state.anno.data} \n idx={idx} key={idx} style={this.props.style}\n className={this.props.className}\n isSelected={this.props.isSelected}\n onMouseDown={(e, idx) => {this.onEdgeMouseDown(e, idx)}} \n />\n })\n default:\n return null\n }\n }\n\n renderPolyline(){\n return <polyline points={this.toPolygonStr(this.state.anno.data)}\n fill='none' stroke=\"purple\" \n style={{...this.props.style, fill:'none'}}\n className={this.props.className}\n />\n }\n render(){\n if (this.state.anno){\n return (\n <g\n onMouseMove={e => this.onMouseMove(e)}\n onMouseUp={e => this.onMouseUp(e)}\n onMouseDown={e => this.onMouseDown(e)}\n >\n {this.renderPolyline()}\n {this.renderEdges()}\n {this.renderNodes()}\n {this.renderInfSelectionArea()}\n </g>\n )\n } else {\n return <g></g>\n }\n }\n}\n\nexport default Line;","export const NEW='new'\nexport const DELETED='deleted'\nexport const DATABASE='database'\nexport const CHANGED='changed'","// const colors30 = [\"#dc9769\",\n// \"#5c69d6\",\n// \"#51a630\",\n// \"#9a59cc\",\n// \"#a1bb37\",\n// \"#c043a6\",\n// \"#5fc666\",\n// \"#de4282\",\n// \"#58c699\",\n// \"#d2404e\",\n// \"#42c0c7\",\n// \"#d95130\",\n// \"#598cdd\",\n// \"#df8830\",\n// \"#50a2d1\",\n// \"#c8a73f\",\n// \"#d87ed5\",\n// \"#3e7f38\",\n// \"#af94d8\",\n// \"#7b8b2d\",\n// \"#635ea2\",\n// \"#a1b56d\",\n// \"#a93e62\",\n// \"#3e8d68\",\n// \"#df82ab\",\n// \"#616c2c\",\n// \"#955282\",\n// \"#91692d\",\n// \"#d47776\",\n// \"#a94e2c\"]\n\nconst colors20 = [\"#46aed7\",\n\"#e28f81\",\n\"#50b897\",\n\"#88712f\",\n\"#9cb067\",\n\"#a4527d\",\n\"#a55046\",\n\"#6e90da\",\n\"#487b3b\",\n\"#6360a7\",\n\"#cd8fd3\",\n\"#d5a442\",\n\"#cf7635\",\n\"#da4971\",\n\"#a4b137\",\n\"#d44da4\",\n\"#aa54be\",\n\"#5ab74d\",\n\"#7166d9\",\n\"#d14734\"]\n\nconst colors = colors20\nconst nColors = 20\n\nexport function getColor(n){\n if (n){\n return colors[n%nColors]\n }\n else{\n return getDefaultColor() \n }\n}\n\nexport function getDefaultColor(){\n return colors[0]\n}","import * as annoStatus from '../types/annoStatus'\n\n /**\n * Check if labels can be changed for a specific annotation\n * \n * @param allowedActions Actions that are allowed, read from config\n * @param anno Annotation that should be checked\n * @returns {Boolean}\n */\n export function allowedToLabel(allowedActions, anno){\n if (allowedActions.label){\n return true\n // const status = anno.status\n // if (!status) return true\n // if (status !== annoStatus.NEW){\n // if (allowedActions.edit.label){\n // return true\n // } else {\n // console.warn('You may not edit the label of this annotation as defined by config!', anno)\n // return false\n // }\n // } else {\n // // Return always true if labeling is allowed in general\n // // and annotation was not edited (it was NEW)\n // return true\n // }\n } else {\n console.warn('You may not edit the label of this annotation as defined by config!', anno)\n return false\n }\n }\n\n // /**\n // * Check if config allows to delete a specific annotation.\n // * \n // * @param allowedActions Actions that are allowed, read from config\n // * @param anno Annotation that should be checked\n // * @returns {Boolean}\n // */\n // export function allowedToDelete(allowedActions, anno){\n // const status = anno.status\n // if (!status) return true\n // if (status !== annoStatus.NEW){\n // if(allowedActions.edit.delete){\n // return true\n // } else {\n // console.warn('You may not delete this annotation as defined by config!', anno)\n // return false\n // }\n // } else {\n // return true\n // }\n // }\n\n /**\n * Check if config allows to edit a specific annotation.\n * \n * @param allowedActions Actions that are allowed, read from config\n * @param anno Annotation that should be checked\n * @returns {Boolean}\n */\n export function allowedToEdit(allowedActions, anno){\n const status = anno.status\n if (!status) return true\n if (status !== annoStatus.NEW){\n if(allowedActions.edit){\n return true\n } else {\n console.warn('You may not edit bounds of this annotation as defined by config!', anno)\n return false\n }\n } else {\n return true\n }\n }","export const INFO='info'\nexport const SUCCESS='success'\nexport const WARNING='warning'\nexport const ERROR='error'","import React, {Component} from 'react'\n\nimport AnnoBar from './AnnoBar'\nimport Point from './Point'\nimport BBox from './BBox'\nimport Line from './Line'\nimport Polygon from './Polygon'\nimport * as modes from '../types/modes'\nimport * as canvasActions from '../types/canvasActions'\nimport * as annoStatus from '../types/annoStatus'\nimport * as colorlut from '../utils/colorlut'\nimport * as constraints from '../utils/constraints'\nimport * as transform from '../utils/transform'\nimport * as notificationType from '../types/notificationType'\n\nclass Annotation extends Component{\n\n constructor(props){\n super(props)\n this.state = {\n // mode: modes.VIEW,\n selAreaCss: 'sel-area-off',\n visibility: 'visible',\n anno: undefined\n }\n this.myAnno = React.createRef()\n \n }\n\n componentWillMount(){\n this.setState({anno: {...this.props.data}})\n }\n\n componentDidUpdate(prevProps){\n if (prevProps.data !== this.props.data){\n this.setState({anno: {...this.props.data}})\n }\n if (prevProps.showSingleAnno !== this.props.showSingleAnno){\n if (this.props.showSingleAnno === undefined){\n this.setVisible(true)\n } else {\n if (this.props.showSingleAnno !== this.props.data.id){\n this.setVisible(false)\n } else {\n this.setVisible(true)\n }\n }\n }\n if (this.props.showSingleAnno === undefined){\n if (this.state.anno.visible !== undefined){\n if (this.state.anno.visible){\n this.setVisible(true)\n } else {\n this.setVisible(false)\n }\n }\n } \n \n }\n \n /*************\n * EVENTS *\n **************/\n onClick(e: Event){\n e.stopPropagation()\n this.performedAction(this.state.anno, canvasActions.ANNO_SELECTED)\n }\n\n onMouseDown(e: Event){\n e.preventDefault()\n if (this.props.onMouseDown){\n this.props.onMouseDown(e)\n }\n }\n\n onContextMenu(e: Event){\n e.preventDefault()\n }\n\n handleModeChangeRequest(anno, mode){\n this.setMode(anno, mode)\n }\n\n /*************\n * LOGIC *\n *************/\n \n /**\n * Trigger callback when this annotation performed an action\n * \n * @param {String} pAction \n */\n performedAction(anno, pAction){\n\n if (this.props.onAction){\n this.props.onAction(anno, pAction)\n }\n }\n\n\n notify(messageObj){\n if (this.props.onNotification){\n this.props.onNotification(messageObj)\n }\n }\n\n /**\n * Handle a performed action from a specific annotation\n * \n * @param {list} annoData - Annotation data that define a box, line, \n * polygon, point\n * @param {string} pAction - The performed action\n * @param {int} selectedNode - The node of the annotation that \n * was selected\n */\n performedAnnoAction(anno, pAction){\n\n switch(pAction){\n case canvasActions.ANNO_CREATED_FINAL_NODE:\n case canvasActions.ANNO_EDITED:\n case canvasActions.ANNO_MOVED:\n case canvasActions.ANNO_CREATED:\n // Check if annoation is within image bounds\n const corrected = transform.correctAnnotation(anno.data, this.props.svg, this.props.imageOffset)\n let newAnno = {...anno, data: corrected}\n const area = transform.getArea(corrected, this.props.svg, anno.type, this.props.image)\n if (area!==undefined){\n if(area < this.props.canvasConfig.annos.minArea){\n this.notify({\n title: \"Annotation to small\",\n message: 'Annotation area was '+Math.round(area)+'px but needs to be bigger than '+ this.props.canvasConfig.annos.minArea+' px',\n type: notificationType.WARNING\n })\n // newAnno = {...newAnno, mode: modes.DELETED}\n this.setMode(newAnno, modes.DELETED)\n } else {\n this.performedAction(newAnno, pAction)\n }\n } else {\n this.performedAction(newAnno, pAction)\n }\n break\n default:\n this.performedAction(anno, pAction)\n break\n }\n }\n\n setAnnoMode(anno, mode){\n this.setState({\n anno: {\n ...anno,\n mode: mode\n }\n })\n }\n\n setMode(anno, mode){\n if (anno.mode !== mode){\n switch (mode){\n case modes.EDIT_LABEL:\n if (constraints.allowedToLabel(\n this.props.allowedActions,\n anno\n )){\n this.setAnnoMode(anno, mode)\n }\n break\n case modes.DELETED:\n // if(constraints.allowedToDelete(\n // this.props.allowedActions,\n // anno\n // )){\n this.setAnnoMode(anno, mode)\n const newAnno = {\n ...anno, \n // status: annoStatus.DELETED\n mode: mode.DELETED\n }\n // this.setState({\n // anno: newAnno\n // })\n this.performedAction(newAnno, canvasActions.ANNO_DELETED)\n // }\n break\n case modes.MOVE:\n this.setAnnoMode(anno, mode)\n this.performedAction(anno, canvasActions.ANNO_ENTER_MOVE_MODE)\n break\n case modes.EDIT:\n this.setAnnoMode(anno, mode)\n this.performedAction(anno, canvasActions.ANNO_ENTER_EDIT_MODE)\n break\n default:\n this.setAnnoMode(anno, mode)\n break\n }\n }\n }\n\n setVisible(visible){\n if (visible){\n if (this.state.visibility !== 'visible'){\n this.setState({visibility: 'visible'})\n }\n } else {\n if (this.state.visibility !== 'hidden'){\n this.setState({visibility: 'hidden'})\n }\n }\n }\n\n isSelected(){\n if (constraints.allowedToEdit(this.props.allowedActions, this.state.anno)){\n return this.props.selectedAnno === this.props.data.id\n } else {\n return false\n }\n }\n\n getResult(){\n return {\n ...this.state.anno,\n data: this.myAnno.current.state.anno,\n createMode: this.myAnno.current.state.mode === modes.CREATE\n }\n }\n\n getLabel(lblId){\n return this.props.possibleLabels.find( e => {\n return e.id === lblId\n })\n }\n \n getColor(){\n if (this.state.anno.labelIds && this.state.anno.labelIds.length > 0){\n return this.getLabel(this.state.anno.labelIds[0]).color\n }\n else {\n return colorlut.getDefaultColor()\n }\n }\n\n getStyle(){\n const color = this.getColor()\n if (this.isSelected()){\n return {\n stroke: color,\n fill: color,\n strokeWidth: this.props.uiConfig.strokeWidth/this.props.svg.scale,\n r:this.props.uiConfig.nodeRadius/this.props.svg.scale\n\n }\n } else {\n return {\n stroke: color,\n fill: color,\n strokeWidth: this.props.uiConfig.strokeWidth/this.props.svg.scale,\n r:this.props.uiConfig.nodeRadius/this.props.svg.scale\n }\n }\n }\n\n getCssClass(){\n if (this.isSelected()){\n return 'selected'\n } else {\n return 'not-selected'\n }\n }\n\n /*************\n * RENDERING *\n **************/\n renderAnno(){\n const type = this.props.type\n // const allowedToEdit = constraints.allowedToEditBounds(\n // this.props.allowedActions,\n // this.state.anno\n // )\n switch(type) {\n case 'point':\n return <Point ref={this.myAnno} anno={this.state.anno} \n style={this.getStyle()}\n className={this.getCssClass()}\n isSelected={this.isSelected()}\n svg={this.props.svg}\n onModeChangeRequest={(anno, mode) => this.handleModeChangeRequest(anno, mode)}\n onAction={(anno, pAction) => this.performedAnnoAction(anno, pAction)}\n />\n case 'bBox':\n return <BBox ref={this.myAnno} anno={this.state.anno} \n style={this.getStyle()}\n className={this.getCssClass()}\n onNodeClick={(e, idx) => this.onNodeClick(e, idx)}\n onNodeMouseDown={(e, idx) => this.onNodeMouseDown(e, idx)}\n isSelected={this.isSelected()}\n svg={this.props.svg}\n onModeChangeRequest={(anno, mode) => this.handleModeChangeRequest(anno, mode)}\n onAction={(anno, pAction) => this.performedAnnoAction(anno, pAction)}\n />\n case 'polygon':\n return <Polygon ref={this.myAnno} anno={this.state.anno} \n style={this.getStyle()}\n className={this.getCssClass()}\n onNodeClick={(e, idx) => this.onNodeClick(e, idx)}\n isSelected={this.isSelected()}\n svg={this.props.svg}\n onModeChangeRequest={(anno, mode) => this.handleModeChangeRequest(anno, mode)}\n onAction={(anno, pAction) => this.performedAnnoAction(anno, pAction)}\n />\n case 'line':\n return <Line ref={this.myAnno} anno={this.state.anno}\n style={this.getStyle()}\n className={this.getCssClass()}\n isSelected={this.isSelected()}\n svg={this.props.svg}\n onAction={(anno, pAction) => this.performedAnnoAction(anno, pAction)}\n onModeChangeRequest={(anno, mode) => this.handleModeChangeRequest(anno, mode)}\n />\n default:\n console.error(\"Wrong annoType for annotations: \",\n this.props.annoType)\n } \n }\n \n renderAnnoBar(){\n return <AnnoBar \n anno={this.state.anno} \n mode={this.state.anno.mode}\n possibleLabels={this.props.possibleLabels}\n onClick={e => this.onClick(e)}\n style={this.getStyle()}\n svg={this.props.svg}\n defaultLabel={this.props.defaultLabel}\n />\n }\n render(){\n if(!this.state.anno.data) return null\n if(!this.props.possibleLabels) return null\n if(this.state.anno.status === annoStatus.DELETED) return null\n return (\n <g>\n <g visibility={this.state.visibility}\n onClick={e => this.onClick(e)}\n onMouseDown={e => this.onMouseDown(e)}\n onContextMenu={e => this.onContextMenu(e)}\n >\n {this.renderAnnoBar()}\n {this.renderAnno()}\n\n </g>\n </g>\n )\n }\n}\n\nexport default Annotation","import React, {Component} from 'react'\nimport { Dropdown, Ref, Popup, Header} from 'semantic-ui-react'\n\nclass LabelInput extends Component{\n\n constructor(props){\n super(props)\n this.state = {\n label: [],\n possibleLabels: [],\n performInit: true,\n enterHits: 0,\n confirmLabel: 0\n }\n this.inputRef = React.createRef()\n }\n\n componentWillMount(){\n this.updatePossibleLabels()\n }\n\n componentDidMount(){\n if(this.props.initLabelIds){\n this.setState({performInit:true})\n }\n }\n\n componentDidUpdate(prevProps, prevState){\n if (this.props.visible){\n if (this.props.focusOnRender){\n if (this.inputRef.current){\n this.inputRef.current.click()\n }\n }\n\n }\n if (prevState.confirmLabel !== this.state.confirmLabel){\n this.annoLabelUpdate(this.state.label)\n this.closeLabelInput()\n }\n if (prevProps.possibleLabels !== this.props.possibleLabels){\n this.updatePossibleLabels()\n }\n if (this.props.initLabelIds){\n if (this.state.performInit){\n this.setState({performInit: false})\n if(this.props.initLabelIds.length > 0){\n this.setState({label: this.props.initLabelIds})\n // const lbl = this.state.possibleLabels.find(e => {\n // return e.value === this.props.initLabelIds[0]\n // })\n // if (lbl){\n // this.setState({label:lbl.value})\n // }\n } else {\n this.setState({label:[]})\n }\n }\n if (prevProps.initLabelIds !== this.props.initLabelIds){\n this.setState({performInit:true})\n }\n }\n if(prevProps.relatedId !== this.props.relatedId){\n this.setState({performInit:true})\n }\n }\n /*************\n * EVENTS *\n **************/\n onKeyDown(e: Event){\n e.stopPropagation()\n this.performKeyAction(e.key)\n\n }\n\n onChange(e, item ){\n let lbl \n if (this.props.multilabels){\n lbl = item.value !== -1 ? item.value : []\n } else {\n lbl = item.value !== -1 ? [item.value] : []\n }\n this.setState({ label: lbl})\n this.annoLabelUpdate(lbl)\n // this.inputRef.current.click()\n }\n\n onItemClick(e, item){\n this.confirmLabel()\n }\n\n\n /*************\n * LOGIC *\n *************/\n updatePossibleLabels(){\n let possibleLabels = []\n let defaultLabel\n if (this.props.defaultLabel){\n if (Number.isInteger(this.props.defaultLabel)){\n defaultLabel = undefined\n } else {\n defaultLabel = this.props.defaultLabel\n }\n } else {\n defaultLabel = 'no label'\n }\n \n if (this.props.possibleLabels.length > 0){\n possibleLabels = this.props.possibleLabels.map(e => {\n return {\n key: e.id, value: e.id, text: e.label,\n content: (<div onClick={(event) => this.onItemClick(event, e.id)}>\n {e.label}</div>)\n }\n })\n }\n if (defaultLabel){\n possibleLabels.unshift({\n key: -1, value: -1, text: defaultLabel,\n content: (<div onClick={(event) => this.onItemClick(event, -1)}>\n {defaultLabel}</div>)\n })\n }\n this.setState({possibleLabels})\n\n }\n\n performKeyAction(key){\n switch(key){\n case 'Enter':\n if (!this.props.multilabels){\n if (this.props.visible) this.confirmLabel()\n }\n break\n case 'Escape':\n this.closeLabelInput()\n break\n default:\n break\n }\n }\n\n annoLabelUpdate(label){\n if (this.props.onLabelUpdate){\n this.props.onLabelUpdate(label.filter(val=>{\n return val !== -1\n }))\n }\n }\n\n\n confirmLabel(){\n //If not allowed to label -> return\n this.setState({confirmLabel: this.state.confirmLabel+1})\n }\n\n closeLabelInput(){\n if (this.props.onClose){\n this.props.onClose()\n }\n }\n\n // triggerPopup(visible=true){\n // this.setState({\n // popupOpen: visible\n // })\n // }\n\n /*************\n * RENDERING *\n **************/\n renderLabelInput(){\n let lbl\n if (this.props.multilabels){\n lbl = this.state.label\n } else {\n if (this.state.label.length > 0){\n lbl = this.state.label[0]\n } else {\n lbl = -1\n }\n }\n\n return (\n <Ref innerRef={this.inputRef}>\n <Dropdown\n multiple={this.props.multilabels}\n search\n selection\n closeOnChange\n icon=\"search\"\n options={this.state.possibleLabels}\n placeholder='Enter label'\n tabIndex={0}\n onKeyDown= {e => this.onKeyDown(e)}\n value={lbl}\n onChange={(e, item) => this.onChange(e, item)}\n style={{opacity:0.8}}\n disabled={this.props.disabled}\n open={this.props.open}\n />\n </Ref>\n )\n }\n renderLabelInfo(){\n if (!this.state.label) return null\n let lbl = undefined\n if (this.state.label.length > 0){\n lbl = this.props.possibleLabels.find(e => {\n return this.state.label[this.state.label.length-1] === e.id\n })\n }\n if (!lbl) return \"No label\"\n return <div>\n <Header>{\n lbl.label\n }</Header>\n <div dangerouslySetInnerHTML={{__html: lbl.description}} />\n </div>\n }\n\n renderPopupContent(){\n return <div>\n {this.renderLabelInfo()}\n {/* {this.renderAnnoDetails()} */}\n </div>\n }\n\n\n render(){\n if (!this.props.visible) return null\n if (this.props.renderPopup){\n return (\n <Popup trigger={this.renderLabelInput()}\n content={this.renderPopupContent()}\n open\n position=\"right center\"\n style={{opacity:0.9}}\n />\n )\n } else {\n return this.renderLabelInput()\n }\n\n }\n\n}\n\nexport default LabelInput\n","import React, {Component} from 'react'\nimport LabelInput from './LabelInput'\nimport * as constraints from './utils/constraints'\nimport * as annoStatus from './types/annoStatus'\n\nclass AnnoLabelInput extends Component{\n\n constructor(props){\n super(props)\n this.state = {\n top: 400,\n left: 100,\n label: undefined,\n visibility: 'hidden',\n possibleLabels: []\n }\n this.inputGroupRef = React.createRef()\n }\n\n componentWillMount(){\n this.setPosition()\n }\n \n componentDidUpdate(prevProps){\n if (this.props.visible){\n this.setPosition()\n } \n\n \n }\n\n /*************\n * LOGIC *\n *************/\n setPosition(){\n\n if (this.props.mousePos){\n const top = this.props.mousePos.y + this.props.svg.top - 10\n const left = this.props.mousePos.x + this.props.svg.left - 10\n if (this.state.top !== top|| this.state.left !== left){ \n this.setState({\n top: top,\n left: left,\n })\n }\n }\n }\n\n onClose(){\n if (this.props.onClose){\n this.props.onClose()\n }\n }\n \n annoLabelUpdate(anno){\n if (this.props.onLabelUpdate){\n this.props.onLabelUpdate(anno)\n }\n }\n\n updateAnnoLabel(label){\n if (!constraints.allowedToLabel(\n this.props.allowedActions, this.props.selectedAnno)) return\n this.annoLabelUpdate({\n ...this.props.selectedAnno,\n labelIds: label,\n status: this.props.selectedAnno.status !== annoStatus.NEW ? annoStatus.CHANGED : annoStatus.NEW\n })\n }\n\n\n /*************\n * RENDERING *\n **************/\n render(){\n if (!this.props.visible) return null\n return (\n <div ref={this.inputGroupRef} style={{position:'fixed', top:this.state.top, left:this.state.left}}>\n <LabelInput svg={this.props.svg}\n onClose={() => this.onClose()}\n initLabelIds={this.props.selectedAnno.labelIds}\n relatedId={this.props.selectedAnno.id}\n visible={this.props.visible}\n onLabelUpdate={label => this.updateAnnoLabel(label)}\n possibleLabels={this.props.possibleLabels}\n multilabels={this.props.multilabels}\n disabled={!this.props.allowedActions.label}\n renderPopup\n focusOnRender\n open={true}\n defaultLabel={this.props.defaultLabel}\n />\n </div>\n )\n }\n \n}\n\nexport default AnnoLabelInput","import React, {Component} from 'react'\nimport { Menu } from 'semantic-ui-react'\n\nclass ImgBar extends Component{\n\n constructor(props) {\n super(props)\n this.state = {\n position: {\n top: 0,\n left: 0,\n },\n }\n }\n\n componentDidMount(){\n \n }\n componentDidUpdate(prevProps){\n\n if (this.props.svg !== prevProps.svg){\n this.setState({\n position: {...this.state.position,\n left: this.props.svg.left,\n top: this.props.svg.top,\n }\n })\n }\n }\n\n /*********\n * Events\n *********/\n handleLabelUpdate(label){\n if (this.props.onLabelUpdate){\n this.props.onLabelUpdate(label)\n }\n }\n \n handleClose(){\n if (this.props.onClose){\n this.props.onClose()\n }\n }\n\n handleMouseEnter(e){\n if (this.props.onMouseEnter){\n this.props.onMouseEnter(e)\n }\n }\n\n // renderImgLabelInput(){\n // if (this.props.allowedActions.label){\n // return <Menu.Item style={{padding: \"5px\"}}>\n // <LabelInput\n // // multilabels={true}\n // multilabels={this.props.multilabels}\n // relatedId={this.props.annos.image.id}\n // visible={this.props.visible}\n // onLabelUpdate={label => this.handleLabelUpdate(label)}\n // possibleLabels={this.props.possibleLabels}\n // initLabelIds={this.props.imgLabelIds}\n // relatedId={this.props.annos.image.id}\n // disabled={!this.props.allowedActions.label}\n // />\n // </Menu.Item>\n // } else {\n // return null\n // }\n // }\n\n renderImgLabels(){\n let label = ''\n if (this.props.imgLabelIds && this.props.imgLabelIds.length > 0){\n let labelObject \n this.props.imgLabelIds.forEach((lbl, idx) => {\n labelObject = this.props.possibleLabels.find(el => {\n return el.id === lbl\n })\n if (idx > 0) label += ', '\n label += labelObject.label\n })\n return <Menu.Item >\n {label}\n </Menu.Item>\n } else {\n return null\n }\n }\n\n renderImgDescription(){\n if(this.props.imageMeta.description){\n return <Menu.Item>\n {this.props.imageMeta.description}\n </Menu.Item>\n } else {\n return null\n }\n }\n render(){\n if (!this.props.visible) return null\n if (!this.props.imageMeta) return null\n // if (!this.props.annos.image.url) return null\n return(\n <div style={{\n position:'fixed', \n top: this.state.position.top, \n left:this.state.position.left,\n width: this.props.svg.width,\n minWidth: '300px'\n }}\n onMouseEnter={e => {this.handleMouseEnter(e)}} \n >\n <Menu inverted style={{opacity:0.9, justifyContent:'center', alignItems:'center'}}>\n {/* {this.renderImgLabelInput()} */}\n {this.renderImgDescription()}\n <Menu.Item>\n {/* {this.props.annos.image.url.split('/').pop() +\" (ID: \"+this.props.annos.image.id+\")\"} */}\n {\"ID: \"+this.props.imageMeta.id}\n </Menu.Item>\n <Menu.Item \n >\n {this.props.imageMeta.number +\" / \"+ this.props.imageMeta.amount}\n </Menu.Item>\n {this.renderImgLabels()}\n </Menu>\n </div>\n )\n }\n}\n\nexport default ImgBar","import React, {Component} from 'react'\nimport { Dimmer, Header } from 'semantic-ui-react'\n\nclass Prompt extends Component{\n\n constructor(props) {\n super(props)\n this.state = {\n active: false\n }\n }\n\n handleClick(e){\n if (this.props.onClick){\n this.props.onClick(e)\n }\n }\n \n componentDidMount(){\n this.setState({active: this.props.active})\n }\n\n componentDidUpdate(prevProps){\n if (this.props.active !== prevProps.active){\n this.setState({active: this.props.active})\n }\n }\n\n \n render(){\n return (\n <Dimmer page \n active={this.state.active} \n style={{zIndex:7000}}\n onClick={e => this.handleClick(e)}\n >\n <Header as=\"h3\" inverted>\n {this.props.header}\n </Header>\n {this.props.content}\n </Dimmer>\n )\n }\n}\n\nexport default Prompt","import React, {Component} from 'react'\n\nimport * as transform from './utils/transform'\n\nclass AnnoToolBar extends Component{\n\n constructor(props){\n super(props)\n this.state = {\n top: 400,\n left: 100,\n width: 50,\n label: undefined,\n visibility: 'hidden',\n possibleLabels: []\n }\n this.inputGroupRef = React.createRef()\n }\n\n componentWillMount(){\n this.setPosition()\n }\n \n componentDidUpdate(prevProps){\n if (this.props.visible){\n this.setPosition()\n } \n\n \n }\n\n /*************\n * LOGIC *\n *************/\n setPosition(){\n if (this.props.selectedAnno){\n // const center = transform.getCenter(this.props.selectedAnno.data, this.props.selectedAnno.type)\n // const annoBox = transform.getBox(this.props.selectedAnno.data, this.props.selectedAnno.type)\n let topPoint = transform.getTopPoint(this.props.selectedAnno.data)\n topPoint = transform.getMostLeftPoint(topPoint)[0]\n const inputRect = this.inputGroupRef.current.getBoundingClientRect()\n let top = this.props.svg.top + (topPoint.y + this.props.svg.translateY) *this.props.svg.scale - 44\n let left = this.props.svg.left + (topPoint.x + this.props.svg.translateX) *this.props.svg.scale - inputRect.width /2.0 - 1\n // if (left < this.props.svg.left) left = this.props.svg.left\n // if (left+inputRect.width > this.props.svg.left+this.props.svg.width){\n // left = this.props.svg.left+this.props.svg.width - inputRect.width\n // }\n if (top < 0) top = this.props.svg.top + (topPoint.y + this.props.svg.translateY + 10) *this.props.svg.scale \n if (this.state.top !== top || this.state.left !== left){ \n this.setState({\n top,\n left,\n // width: annoBox[1].x - annoBox[0].x\n })\n }\n }\n }\n\n onClose(){\n if (this.props.onClose){\n this.props.onClose()\n }\n }\n\n handleClick(e){\n if (this.props.onClick){\n this.props.onClick(e)\n }\n }\n \n renderDaviIcon(){\n return <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" \n // x=\"0px\" y=\"0px\"\n // width=\"1190.549px\" height=\"841.891px\" \n viewBox=\"0 0 1190.549 841.891\" \n width=\"60px\"\n onClick={e => this.handleClick(e)}\n >\n <g id=\"Info\">\n <path id=\"Maps\" fill={this.props.color} d=\"M620.561,817.217c-1.568-3.62-3.771-7.101-4.611-10.885\n c-24.452-109.811-74.341-207.569-139.215-298.675c-27.507-38.628-55.814-77.404-77.438-119.371\n C324.363,242.85,402.696,58.71,574.209,26.508c145.509-27.32,282.953,75.871,296.543,222.773\n c4.659,50.356-7.471,97.96-32.152,141.022c-27.812,48.526-58.75,95.364-90.073,141.758\n c-50.917,75.411-91.062,155.558-113.421,244.091c-2.438,9.652-3.936,19.543-6.271,29.227c-0.992,4.104-3.023,7.961-4.584,11.93\n C623.021,817.277,621.789,817.247,620.561,817.217z\"/>\n <path id=\"Text\" fillRule=\"evenodd\" clipRule=\"evenodd\" fill=\"#FFFFFF\" d=\"M724.709,250.898\n c-0.055-3.974,0.047-7.949,0.033-11.923c-0.007-1.228-1.54-2.767-2.76-2.777c-2.428-0.021-4.862-0.015-7.29-0.015\n c-22.466,0.001-44.934,0.005-67.404,0.009c-2.475,0.001-3.658,1.154-3.658,3.588c-0.001,47.365-0.001,94.73-0.001,142.096\n c0,13.526,0,27.05,0.001,40.577c0,2.305,1.274,3.584,3.562,3.59c6.623,0.004,9.256-0.07,19.873,0.004\n c10.618,0.072,14.146,8.543,14.146,14.189c-0.002,5.645-4.233,13.055-14.299,13.367c-13.135,0.061-26.277-0.02-39.414-0.014\n c-14.575,0.004-29.146,0.004-43.722,0.02c-4.191-0.084-13.717-2.789-13.717-13.492s6.233-13.643,13.132-14.117\n c4.979,0.037,13.802,0.057,20.701,0.049c1.695,0,3.11-1.537,3.11-3.361c0.003-13.912-0.004-27.823-0.004-41.736\n c0-30.252,0-60.503,0.002-90.754c0.002-17.03,0.005-33.649,0.002-50.678c0-1.991-1.38-3.336-3.396-3.336\n c-24.79,0-49.577,0-74.362,0c-2.133,0-3.38,1.22-3.383,3.308c-0.006,3.754-0.011,7.509,0.005,11.262\n c-0.023,6.339-3.067,13.143-12.456,13.143c-9.389,0-14.337-4.647-14.915-13.23c-0.128-4.305,0.004-8.612,0.004-12.918\n c0-8.392,0-16.781,0-25.173c0-0.321,0.228-5.156,4.091-9.277c3.864-4.122,8.014-3.822,8.445-3.822\n c25.835,0.003,51.672,0.002,77.507,0.002c46.813,0.001,140.443,0.001,140.443,0.001s6.153-0.088,10.926-0.052\n c0.3-0.008,5.713,0.363,9.178,3.994c3.46,3.631,3.046,8.407,3.046,8.635c-0.007,12.862,0.079,25.725-0.003,38.587\n c-0.074,8.051-6.938,12.819-13.703,12.847C731.482,263.519,724.956,259.059,724.709,250.898z\"/>\n </g>\n </svg>\n }\n\n /*************\n * RENDERING *\n **************/\n render(){\n if (!this.props.visible) return null\n return (\n <div ref={this.inputGroupRef} \n style={{\n position:'fixed', \n top:this.state.top, \n left:this.state.left,\n cursor: 'pointer',\n }}\n >\n {/* <Button icon circular basic\n onClick={e => this.handleClick(e)}\n > */}\n {/* <Icon name=\"pencil\"\n onClick={e => this.handleClick(e)}\n /> */}\n {/* </Button> */}\n {this.renderDaviIcon()}\n </div>\n )\n }\n \n}\n\nexport default AnnoToolBar","import * as transform from './transform'\nimport * as annoStatus from '../types/annoStatus'\nimport * as modes from '../types/modes'\nimport _ from 'lodash'\n\nfunction _fixBackendAnnoElement(element){\n return {...element, \n id : element.id ? element.id : _.uniqueId('new'),\n annoTime: element.annoTime ? element.annoTime : 0.0,\n mode: element.mode ? element.mode : modes.VIEW, \n status: element.status ? element.status : annoStatus.DATABASE,\n labelIds: element.labelIds ? element.labelIds : []\n }\n}\n\nexport function fixBackendAnnos(backendAnnos){\n let annos = { \n bBoxes: [...backendAnnos.bBoxes.map((element) => {\n return _fixBackendAnnoElement(element)\n })],\n lines: [...backendAnnos.lines.map((element) => {\n return _fixBackendAnnoElement(element)\n })],\n polygons: [...backendAnnos.polygons.map((element) => {\n return _fixBackendAnnoElement(element)\n })],\n points: [...backendAnnos.points.map((element) => {\n return _fixBackendAnnoElement(element)\n })],\n }\n console.log('fixBackendAnnos', annos)\n return annos\n}\n\nexport function backendAnnosToCanvas(backendAnnos, imgSize, imgOffset){\n let annos = [\n ...backendAnnos.bBoxes.map((element) => {\n return {...element, type:'bBox', \n mode: element.mode ? element.mode : modes.VIEW, \n status: element.status ? element.status : annoStatus.DATABASE}\n }),\n ...backendAnnos.lines.map((element) => {\n return {...element, type:'line', \n mode: element.mode ? element.mode : modes.VIEW, \n status: element.status ? element.status : annoStatus.DATABASE}\n }),\n ...backendAnnos.polygons.map((element) => {\n return {...element, type:'polygon', \n mode: element.mode ? element.mode : modes.VIEW, \n status: element.status ? element.status : annoStatus.DATABASE}\n }),\n ...backendAnnos.points.map((element) => {\n return {...element, type:'point', \n mode: element.mode ? element.mode : modes.VIEW, \n status: element.status ? element.status : annoStatus.DATABASE\n }\n })\n ]\n annos = annos.map((el) => {\n return {...el, \n data: transform.toSia(el.data, imgSize, el.type, imgOffset)}\n })\n // this.setState({annos: [...annos]})\n return annos\n}\n\nexport function canvasToBackendAnnos(annos, imgSize, forBackendPost=false, imgOffset={x:0,y:0}){\n let myAnnos = annos\n const bAnnos = myAnnos.map( el => {\n var annoId \n if (forBackendPost){\n // If an annotation will be send to backend,\n // ids of new created annoations need to be set to \n // undefined.\n annoId = (typeof el.id) === \"string\" ? undefined : el.id\n } else {\n annoId = el.id\n }\n return {\n ...el,\n id: annoId,\n mode: modes.VIEW,\n data: transform.toBackend(el.data, imgSize, el.type, imgOffset)\n }\n })\n\n const backendFormat = {\n bBoxes: bAnnos.filter((el) => {return el.type === 'bBox'}),\n lines: bAnnos.filter((el) => {return el.type === 'line'}),\n points: bAnnos.filter((el) => {return el.type === 'point'}),\n polygons: bAnnos.filter((el) => {return el.type === 'polygon'}),\n }\n return backendFormat\n}","export const EDIT_LABEL='editLabel'\nexport const DELETE_ANNO='deleteAnno'\nexport const ENTER_ANNO_ADD_MODE='enterAnnoAddMode'\nexport const LEAVE_ANNO_ADD_MODE='leaveAnnoAddMode'\nexport const UNDO='undo'\nexport const REDO='redo'\nexport const TRAVERSE_ANNOS='traverseAnnos'\nexport const CAM_MOVE_UP='camMoveUp'\nexport const CAM_MOVE_DOWN='camMoveDown'\nexport const CAM_MOVE_LEFT='camMoveLeft'\nexport const CAM_MOVE_RIGHT='camMoveRight'\nexport const CAM_MOVE_STOP='camMoveStop'\nexport const COPY_ANNOTATION='copyAnnotation'\nexport const PASTE_ANNOTATION='pasteAnnotation'\nexport const RECREATE_ANNO='recreateAnnotation'\nexport const DELETE_ANNO_IN_CREATION='deleteAnnoInCreation'\nexport const TOGGLE_ANNO_COMMENT_INPUT='toggleAnnoCommentInput'\n\nclass KeyMapper{\n constructor(keyActionHandler=undefined){\n this.controlDown = false\n this.keyActionHandler = keyActionHandler\n }\n\n keyDown(key){\n switch (key){\n case 'Enter':\n this.triggerKeyAction(EDIT_LABEL)\n break\n case 'Delete':\n this.triggerKeyAction(DELETE_ANNO)\n break\n case 'Backspace':\n this.triggerKeyAction(DELETE_ANNO)\n break\n case 'Control':\n this.controlDown = true\n this.triggerKeyAction(ENTER_ANNO_ADD_MODE)\n break\n case 'z':\n if (this.controlDown){\n this.triggerKeyAction(UNDO)\n }\n break\n case 'r':\n if (this.controlDown){\n this.triggerKeyAction(REDO)\n }\n break\n case 'Tab':\n this.triggerKeyAction(TRAVERSE_ANNOS)\n break\n case 'w':\n this.triggerKeyAction(CAM_MOVE_UP)\n break\n case 's':\n this.triggerKeyAction(CAM_MOVE_DOWN)\n break\n case 'a':\n this.triggerKeyAction(CAM_MOVE_LEFT)\n break\n case 'd':\n this.triggerKeyAction(CAM_MOVE_RIGHT)\n break\n case 'e':\n this.triggerKeyAction(RECREATE_ANNO)\n break\n case 'c':\n if (this.controlDown){\n this.triggerKeyAction(COPY_ANNOTATION)\n } else {\n this.triggerKeyAction(TOGGLE_ANNO_COMMENT_INPUT)\n }\n break\n case 'v':\n if (this.controlDown){\n this.triggerKeyAction(PASTE_ANNOTATION)\n }\n break\n case 'Escape':\n this.triggerKeyAction(DELETE_ANNO_IN_CREATION)\n break\n default:\n break\n }\n }\n\n keyUp(key){\n switch (key){\n case 'Control':\n this.controlDown = false\n this.triggerKeyAction(LEAVE_ANNO_ADD_MODE)\n break\n default:\n break\n }\n }\n\n triggerKeyAction(keyAction){\n if (this.keyActionHandler){\n this.keyActionHandler(keyAction)\n }\n }\n\n}\n\nexport default KeyMapper","export const POINT = 'point'\nexport const BBOX = 'bBox'\nexport const LINE = 'line'\nexport const POLYGON = 'polygon'","class UndoRedo{\n constructor(maxElements=100){\n this.hist = []\n this.pointer = 0\n this.maxElements = maxElements\n }\n\n push(entry, description='No description'){\n const histEl = {\n entry,\n description\n }\n if (this.pointer !== 0){\n while (this.pointer !== 0){\n this.pointer--\n this.hist.shift()\n }\n }\n this.hist.unshift(histEl)\n if (this.hist.length > this.maxElements){\n this.hist.pop()\n }\n }\n\n undo(){\n if (this.pointer+1 < this.hist.length){\n // const element = \n this.pointer++\n return this.hist[this.pointer]\n } else {\n return this.hist[this.hist.length-1]\n }\n }\n\n undoMia(){\n if (this.pointer+1 < this.hist.length){\n this.pointer++\n return this.hist[this.pointer-1] \n } else {\n return this.hist[this.hist.length-1]\n }\n }\n\n redo(){\n if (this.pointer-1 >= 0){\n this.pointer--\n return this.hist[this.pointer]\n } else {\n return this.hist[0]\n }\n }\n\n getHist(){\n return this.hist\n }\n\n clearHist(){\n this.hist = []\n }\n\n isEmpty(){\n return this.hist.length === 0\n }\n\n}\n\nexport default UndoRedo","export function getViewportCoordinates(w, svg){\n const window = {\n xMin:-1*svg.translateX,\n xMax: -1*svg.translateX + (svg.width)/svg.scale,\n yMin: -1*svg.translateY,\n yMax: -1*svg.translateY + (svg.height)/svg.scale\n\n }\n const viewport = {\n xMin: 0,\n xMax: svg.width,\n yMin: 0,\n yMax: svg.height\n }\n const scaleX = (viewport.xMax - viewport.xMin)/ (window.xMax - window.xMin)\n const scaleY = (viewport.yMax - viewport.yMin)/ (window.yMax - window.yMin)\n\n const vX = viewport.xMin + (w.x - window.xMin) * scaleX\n const vY = viewport.yMin + (w.y - window.yMin) * scaleY\n return {window, viewport, vX, vY, scaleX, scaleY}\n}\n\n/**\n * \n * @param {*} w0 Point in image coordinate system\n * @param {*} svg Svg with old translation values and old scales\n * @param {*} s1 New scale/zoom\n */\nexport function getZoomTranslation(w0, svg, s1){\n const s0 = svg.scale\n let translation = {x:0,y:0}\n translation.x = (s0/s1) * (w0.x + svg.translateX) - w0.x \n translation.y = (s0/s1) * (w0.y + svg.translateY) - w0.y \n return translation\n}","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('react-dom'), require('react')) :\n\ttypeof define === 'function' && define.amd ? define(['react-dom', 'react'], factory) :\n\t(global.ReactDraggable = factory(global.ReactDOM,global.React));\n}(this, (function (ReactDOM,React) { 'use strict';\n\n\tReactDOM = ReactDOM && ReactDOM.hasOwnProperty('default') ? ReactDOM['default'] : ReactDOM;\n\tReact = React && React.hasOwnProperty('default') ? React['default'] : React;\n\n\tfunction createCommonjsModule(fn, module) {\n\t\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n\t}\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t * \n\t */\n\n\tfunction makeEmptyFunction(arg) {\n\t return function () {\n\t return arg;\n\t };\n\t}\n\n\t/**\n\t * This function accepts and discards inputs; it has no side effects. This is\n\t * primarily useful idiomatically for overridable function endpoints which\n\t * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n\t */\n\tvar emptyFunction = function emptyFunction() {};\n\n\temptyFunction.thatReturns = makeEmptyFunction;\n\temptyFunction.thatReturnsFalse = makeEmptyFunction(false);\n\temptyFunction.thatReturnsTrue = makeEmptyFunction(true);\n\temptyFunction.thatReturnsNull = makeEmptyFunction(null);\n\temptyFunction.thatReturnsThis = function () {\n\t return this;\n\t};\n\temptyFunction.thatReturnsArgument = function (arg) {\n\t return arg;\n\t};\n\n\tvar emptyFunction_1 = emptyFunction;\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t */\n\n\t/**\n\t * Use invariant() to assert state which your program assumes to be true.\n\t *\n\t * Provide sprintf-style format (only %s is supported) and arguments\n\t * to provide information about what broke and what you were\n\t * expecting.\n\t *\n\t * The invariant message will be stripped in production, but the invariant\n\t * will remain to ensure logic does not differ in production.\n\t */\n\n\tvar validateFormat = function validateFormat(format) {};\n\n\t{\n\t validateFormat = function validateFormat(format) {\n\t if (format === undefined) {\n\t throw new Error('invariant requires an error message argument');\n\t }\n\t };\n\t}\n\n\tfunction invariant(condition, format, a, b, c, d, e, f) {\n\t validateFormat(format);\n\n\t if (!condition) {\n\t var error;\n\t if (format === undefined) {\n\t error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n\t } else {\n\t var args = [a, b, c, d, e, f];\n\t var argIndex = 0;\n\t error = new Error(format.replace(/%s/g, function () {\n\t return args[argIndex++];\n\t }));\n\t error.name = 'Invariant Violation';\n\t }\n\n\t error.framesToPop = 1; // we don't care about invariant's own frame\n\t throw error;\n\t }\n\t}\n\n\tvar invariant_1 = invariant;\n\n\t/**\n\t * Similar to invariant but only logs a warning if the condition is not met.\n\t * This can be used to log issues in development environments in critical\n\t * paths. Removing the logging code for production environments will keep the\n\t * same logic and follow the same code paths.\n\t */\n\n\tvar warning = emptyFunction_1;\n\n\t{\n\t var printWarning = function printWarning(format) {\n\t for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t args[_key - 1] = arguments[_key];\n\t }\n\n\t var argIndex = 0;\n\t var message = 'Warning: ' + format.replace(/%s/g, function () {\n\t return args[argIndex++];\n\t });\n\t if (typeof console !== 'undefined') {\n\t console.error(message);\n\t }\n\t try {\n\t // --- Welcome to debugging React ---\n\t // This error was thrown as a convenience so that you can use this stack\n\t // to find the callsite that caused this warning to fire.\n\t throw new Error(message);\n\t } catch (x) {}\n\t };\n\n\t warning = function warning(condition, format) {\n\t if (format === undefined) {\n\t throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n\t }\n\n\t if (format.indexOf('Failed Composite propType: ') === 0) {\n\t return; // Ignore CompositeComponent proptype check.\n\t }\n\n\t if (!condition) {\n\t for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n\t args[_key2 - 2] = arguments[_key2];\n\t }\n\n\t printWarning.apply(undefined, [format].concat(args));\n\t }\n\t };\n\t}\n\n\tvar warning_1 = warning;\n\n\t/*\n\tobject-assign\n\t(c) Sindre Sorhus\n\t@license MIT\n\t*/\n\t/* eslint-disable no-unused-vars */\n\tvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\tvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\n\tfunction toObject(val) {\n\t\tif (val === null || val === undefined) {\n\t\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t\t}\n\n\t\treturn Object(val);\n\t}\n\n\tfunction shouldUseNative() {\n\t\ttry {\n\t\t\tif (!Object.assign) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\t\ttest1[5] = 'de';\n\t\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\t\tvar test2 = {};\n\t\t\tfor (var i = 0; i < 10; i++) {\n\t\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t\t}\n\t\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\t\treturn test2[n];\n\t\t\t});\n\t\t\tif (order2.join('') !== '0123456789') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\t\tvar test3 = {};\n\t\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\t\ttest3[letter] = letter;\n\t\t\t});\n\t\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} catch (err) {\n\t\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tvar objectAssign = shouldUseNative() ? Object.assign : function (target, source) {\n\t\tvar from;\n\t\tvar to = toObject(target);\n\t\tvar symbols;\n\n\t\tfor (var s = 1; s < arguments.length; s++) {\n\t\t\tfrom = Object(arguments[s]);\n\n\t\t\tfor (var key in from) {\n\t\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\t\tto[key] = from[key];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (getOwnPropertySymbols) {\n\t\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn to;\n\t};\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t */\n\n\tvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\n\tvar ReactPropTypesSecret_1 = ReactPropTypesSecret;\n\n\t{\n\t var invariant$1 = invariant_1;\n\t var warning$1 = warning_1;\n\t var ReactPropTypesSecret$1 = ReactPropTypesSecret_1;\n\t var loggedTypeFailures = {};\n\t}\n\n\t/**\n\t * Assert that the values match with the type specs.\n\t * Error messages are memorized and will only be shown once.\n\t *\n\t * @param {object} typeSpecs Map of name to a ReactPropType\n\t * @param {object} values Runtime values that need to be type-checked\n\t * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n\t * @param {string} componentName Name of the component for error messages.\n\t * @param {?Function} getStack Returns the component stack.\n\t * @private\n\t */\n\tfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n\t {\n\t for (var typeSpecName in typeSpecs) {\n\t if (typeSpecs.hasOwnProperty(typeSpecName)) {\n\t var error;\n\t // Prop type validation may throw. In case they do, we don't want to\n\t // fail the render phase where it didn't fail before. So we log it.\n\t // After these have been cleaned up, we'll let them throw.\n\t try {\n\t // This is intentionally an invariant that gets caught. It's the same\n\t // behavior as without this statement except with a better message.\n\t invariant$1(typeof typeSpecs[typeSpecName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'the `prop-types` package, but received `%s`.', componentName || 'React class', location, typeSpecName, typeof typeSpecs[typeSpecName]);\n\t error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret$1);\n\t } catch (ex) {\n\t error = ex;\n\t }\n\t warning$1(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error);\n\t if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n\t // Only monitor this failure once because there tends to be a lot of the\n\t // same error.\n\t loggedTypeFailures[error.message] = true;\n\n\t var stack = getStack ? getStack() : '';\n\n\t warning$1(false, 'Failed %s type: %s%s', location, error.message, stack != null ? stack : '');\n\t }\n\t }\n\t }\n\t }\n\t}\n\n\tvar checkPropTypes_1 = checkPropTypes;\n\n\tvar factoryWithTypeCheckers = function(isValidElement, throwOnDirectAccess) {\n\t /* global Symbol */\n\t var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n\t var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n\t /**\n\t * Returns the iterator method function contained on the iterable object.\n\t *\n\t * Be sure to invoke the function with the iterable as context:\n\t *\n\t * var iteratorFn = getIteratorFn(myIterable);\n\t * if (iteratorFn) {\n\t * var iterator = iteratorFn.call(myIterable);\n\t * ...\n\t * }\n\t *\n\t * @param {?object} maybeIterable\n\t * @return {?function}\n\t */\n\t function getIteratorFn(maybeIterable) {\n\t var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n\t if (typeof iteratorFn === 'function') {\n\t return iteratorFn;\n\t }\n\t }\n\n\t /**\n\t * Collection of methods that allow declaration and validation of props that are\n\t * supplied to React components. Example usage:\n\t *\n\t * var Props = require('ReactPropTypes');\n\t * var MyArticle = React.createClass({\n\t * propTypes: {\n\t * // An optional string prop named \"description\".\n\t * description: Props.string,\n\t *\n\t * // A required enum prop named \"category\".\n\t * category: Props.oneOf(['News','Photos']).isRequired,\n\t *\n\t * // A prop named \"dialog\" that requires an instance of Dialog.\n\t * dialog: Props.instanceOf(Dialog).isRequired\n\t * },\n\t * render: function() { ... }\n\t * });\n\t *\n\t * A more formal specification of how these methods are used:\n\t *\n\t * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n\t * decl := ReactPropTypes.{type}(.isRequired)?\n\t *\n\t * Each and every declaration produces a function with the same signature. This\n\t * allows the creation of custom validation functions. For example:\n\t *\n\t * var MyLink = React.createClass({\n\t * propTypes: {\n\t * // An optional string or URI prop named \"href\".\n\t * href: function(props, propName, componentName) {\n\t * var propValue = props[propName];\n\t * if (propValue != null && typeof propValue !== 'string' &&\n\t * !(propValue instanceof URI)) {\n\t * return new Error(\n\t * 'Expected a string or an URI for ' + propName + ' in ' +\n\t * componentName\n\t * );\n\t * }\n\t * }\n\t * },\n\t * render: function() {...}\n\t * });\n\t *\n\t * @internal\n\t */\n\n\t var ANONYMOUS = '<<anonymous>>';\n\n\t // Important!\n\t // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n\t var ReactPropTypes = {\n\t array: createPrimitiveTypeChecker('array'),\n\t bool: createPrimitiveTypeChecker('boolean'),\n\t func: createPrimitiveTypeChecker('function'),\n\t number: createPrimitiveTypeChecker('number'),\n\t object: createPrimitiveTypeChecker('object'),\n\t string: createPrimitiveTypeChecker('string'),\n\t symbol: createPrimitiveTypeChecker('symbol'),\n\n\t any: createAnyTypeChecker(),\n\t arrayOf: createArrayOfTypeChecker,\n\t element: createElementTypeChecker(),\n\t instanceOf: createInstanceTypeChecker,\n\t node: createNodeChecker(),\n\t objectOf: createObjectOfTypeChecker,\n\t oneOf: createEnumTypeChecker,\n\t oneOfType: createUnionTypeChecker,\n\t shape: createShapeTypeChecker,\n\t exact: createStrictShapeTypeChecker,\n\t };\n\n\t /**\n\t * inlined Object.is polyfill to avoid requiring consumers ship their own\n\t * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n\t */\n\t /*eslint-disable no-self-compare*/\n\t function is(x, y) {\n\t // SameValue algorithm\n\t if (x === y) {\n\t // Steps 1-5, 7-10\n\t // Steps 6.b-6.e: +0 != -0\n\t return x !== 0 || 1 / x === 1 / y;\n\t } else {\n\t // Step 6.a: NaN == NaN\n\t return x !== x && y !== y;\n\t }\n\t }\n\t /*eslint-enable no-self-compare*/\n\n\t /**\n\t * We use an Error-like object for backward compatibility as people may call\n\t * PropTypes directly and inspect their output. However, we don't use real\n\t * Errors anymore. We don't inspect their stack anyway, and creating them\n\t * is prohibitively expensive if they are created too often, such as what\n\t * happens in oneOfType() for any type before the one that matched.\n\t */\n\t function PropTypeError(message) {\n\t this.message = message;\n\t this.stack = '';\n\t }\n\t // Make `instanceof Error` still work for returned errors.\n\t PropTypeError.prototype = Error.prototype;\n\n\t function createChainableTypeChecker(validate) {\n\t {\n\t var manualPropTypeCallCache = {};\n\t var manualPropTypeWarningCount = 0;\n\t }\n\t function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n\t componentName = componentName || ANONYMOUS;\n\t propFullName = propFullName || propName;\n\n\t if (secret !== ReactPropTypesSecret_1) {\n\t if (throwOnDirectAccess) {\n\t // New behavior only for users of `prop-types` package\n\t invariant_1(\n\t false,\n\t 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n\t 'Use `PropTypes.checkPropTypes()` to call them. ' +\n\t 'Read more at http://fb.me/use-check-prop-types'\n\t );\n\t } else if (\"development\" !== 'production' && typeof console !== 'undefined') {\n\t // Old behavior for people using React.PropTypes\n\t var cacheKey = componentName + ':' + propName;\n\t if (\n\t !manualPropTypeCallCache[cacheKey] &&\n\t // Avoid spamming the console because they are often not actionable except for lib authors\n\t manualPropTypeWarningCount < 3\n\t ) {\n\t warning_1(\n\t false,\n\t 'You are manually calling a React.PropTypes validation ' +\n\t 'function for the `%s` prop on `%s`. This is deprecated ' +\n\t 'and will throw in the standalone `prop-types` package. ' +\n\t 'You may be seeing this warning due to a third-party PropTypes ' +\n\t 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.',\n\t propFullName,\n\t componentName\n\t );\n\t manualPropTypeCallCache[cacheKey] = true;\n\t manualPropTypeWarningCount++;\n\t }\n\t }\n\t }\n\t if (props[propName] == null) {\n\t if (isRequired) {\n\t if (props[propName] === null) {\n\t return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n\t }\n\t return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n\t }\n\t return null;\n\t } else {\n\t return validate(props, propName, componentName, location, propFullName);\n\t }\n\t }\n\n\t var chainedCheckType = checkType.bind(null, false);\n\t chainedCheckType.isRequired = checkType.bind(null, true);\n\n\t return chainedCheckType;\n\t }\n\n\t function createPrimitiveTypeChecker(expectedType) {\n\t function validate(props, propName, componentName, location, propFullName, secret) {\n\t var propValue = props[propName];\n\t var propType = getPropType(propValue);\n\t if (propType !== expectedType) {\n\t // `propValue` being instance of, say, date/regexp, pass the 'object'\n\t // check, but we can offer a more precise error message here rather than\n\t // 'of type `object`'.\n\t var preciseType = getPreciseType(propValue);\n\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createAnyTypeChecker() {\n\t return createChainableTypeChecker(emptyFunction_1.thatReturnsNull);\n\t }\n\n\t function createArrayOfTypeChecker(typeChecker) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (typeof typeChecker !== 'function') {\n\t return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n\t }\n\t var propValue = props[propName];\n\t if (!Array.isArray(propValue)) {\n\t var propType = getPropType(propValue);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n\t }\n\t for (var i = 0; i < propValue.length; i++) {\n\t var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret_1);\n\t if (error instanceof Error) {\n\t return error;\n\t }\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createElementTypeChecker() {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t if (!isValidElement(propValue)) {\n\t var propType = getPropType(propValue);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createInstanceTypeChecker(expectedClass) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (!(props[propName] instanceof expectedClass)) {\n\t var expectedClassName = expectedClass.name || ANONYMOUS;\n\t var actualClassName = getClassName(props[propName]);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createEnumTypeChecker(expectedValues) {\n\t if (!Array.isArray(expectedValues)) {\n\t warning_1(false, 'Invalid argument supplied to oneOf, expected an instance of array.');\n\t return emptyFunction_1.thatReturnsNull;\n\t }\n\n\t function validate(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t for (var i = 0; i < expectedValues.length; i++) {\n\t if (is(propValue, expectedValues[i])) {\n\t return null;\n\t }\n\t }\n\n\t var valuesString = JSON.stringify(expectedValues);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createObjectOfTypeChecker(typeChecker) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (typeof typeChecker !== 'function') {\n\t return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n\t }\n\t var propValue = props[propName];\n\t var propType = getPropType(propValue);\n\t if (propType !== 'object') {\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n\t }\n\t for (var key in propValue) {\n\t if (propValue.hasOwnProperty(key)) {\n\t var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);\n\t if (error instanceof Error) {\n\t return error;\n\t }\n\t }\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createUnionTypeChecker(arrayOfTypeCheckers) {\n\t if (!Array.isArray(arrayOfTypeCheckers)) {\n\t warning_1(false, 'Invalid argument supplied to oneOfType, expected an instance of array.');\n\t return emptyFunction_1.thatReturnsNull;\n\t }\n\n\t for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n\t var checker = arrayOfTypeCheckers[i];\n\t if (typeof checker !== 'function') {\n\t warning_1(\n\t false,\n\t 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n\t 'received %s at index %s.',\n\t getPostfixForTypeWarning(checker),\n\t i\n\t );\n\t return emptyFunction_1.thatReturnsNull;\n\t }\n\t }\n\n\t function validate(props, propName, componentName, location, propFullName) {\n\t for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n\t var checker = arrayOfTypeCheckers[i];\n\t if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret_1) == null) {\n\t return null;\n\t }\n\t }\n\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createNodeChecker() {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (!isNode(props[propName])) {\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createShapeTypeChecker(shapeTypes) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t var propType = getPropType(propValue);\n\t if (propType !== 'object') {\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n\t }\n\t for (var key in shapeTypes) {\n\t var checker = shapeTypes[key];\n\t if (!checker) {\n\t continue;\n\t }\n\t var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);\n\t if (error) {\n\t return error;\n\t }\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createStrictShapeTypeChecker(shapeTypes) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t var propType = getPropType(propValue);\n\t if (propType !== 'object') {\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n\t }\n\t // We need to check all keys in case some are required but missing from\n\t // props.\n\t var allKeys = objectAssign({}, props[propName], shapeTypes);\n\t for (var key in allKeys) {\n\t var checker = shapeTypes[key];\n\t if (!checker) {\n\t return new PropTypeError(\n\t 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n\t '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\n\t '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\n\t );\n\t }\n\t var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);\n\t if (error) {\n\t return error;\n\t }\n\t }\n\t return null;\n\t }\n\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function isNode(propValue) {\n\t switch (typeof propValue) {\n\t case 'number':\n\t case 'string':\n\t case 'undefined':\n\t return true;\n\t case 'boolean':\n\t return !propValue;\n\t case 'object':\n\t if (Array.isArray(propValue)) {\n\t return propValue.every(isNode);\n\t }\n\t if (propValue === null || isValidElement(propValue)) {\n\t return true;\n\t }\n\n\t var iteratorFn = getIteratorFn(propValue);\n\t if (iteratorFn) {\n\t var iterator = iteratorFn.call(propValue);\n\t var step;\n\t if (iteratorFn !== propValue.entries) {\n\t while (!(step = iterator.next()).done) {\n\t if (!isNode(step.value)) {\n\t return false;\n\t }\n\t }\n\t } else {\n\t // Iterator will provide entry [k,v] tuples rather than values.\n\t while (!(step = iterator.next()).done) {\n\t var entry = step.value;\n\t if (entry) {\n\t if (!isNode(entry[1])) {\n\t return false;\n\t }\n\t }\n\t }\n\t }\n\t } else {\n\t return false;\n\t }\n\n\t return true;\n\t default:\n\t return false;\n\t }\n\t }\n\n\t function isSymbol(propType, propValue) {\n\t // Native Symbol.\n\t if (propType === 'symbol') {\n\t return true;\n\t }\n\n\t // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n\t if (propValue['@@toStringTag'] === 'Symbol') {\n\t return true;\n\t }\n\n\t // Fallback for non-spec compliant Symbols which are polyfilled.\n\t if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n\t return true;\n\t }\n\n\t return false;\n\t }\n\n\t // Equivalent of `typeof` but with special handling for array and regexp.\n\t function getPropType(propValue) {\n\t var propType = typeof propValue;\n\t if (Array.isArray(propValue)) {\n\t return 'array';\n\t }\n\t if (propValue instanceof RegExp) {\n\t // Old webkits (at least until Android 4.0) return 'function' rather than\n\t // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n\t // passes PropTypes.object.\n\t return 'object';\n\t }\n\t if (isSymbol(propType, propValue)) {\n\t return 'symbol';\n\t }\n\t return propType;\n\t }\n\n\t // This handles more types than `getPropType`. Only used for error messages.\n\t // See `createPrimitiveTypeChecker`.\n\t function getPreciseType(propValue) {\n\t if (typeof propValue === 'undefined' || propValue === null) {\n\t return '' + propValue;\n\t }\n\t var propType = getPropType(propValue);\n\t if (propType === 'object') {\n\t if (propValue instanceof Date) {\n\t return 'date';\n\t } else if (propValue instanceof RegExp) {\n\t return 'regexp';\n\t }\n\t }\n\t return propType;\n\t }\n\n\t // Returns a string that is postfixed to a warning about an invalid type.\n\t // For example, \"undefined\" or \"of type array\"\n\t function getPostfixForTypeWarning(value) {\n\t var type = getPreciseType(value);\n\t switch (type) {\n\t case 'array':\n\t case 'object':\n\t return 'an ' + type;\n\t case 'boolean':\n\t case 'date':\n\t case 'regexp':\n\t return 'a ' + type;\n\t default:\n\t return type;\n\t }\n\t }\n\n\t // Returns class name of the object, if any.\n\t function getClassName(propValue) {\n\t if (!propValue.constructor || !propValue.constructor.name) {\n\t return ANONYMOUS;\n\t }\n\t return propValue.constructor.name;\n\t }\n\n\t ReactPropTypes.checkPropTypes = checkPropTypes_1;\n\t ReactPropTypes.PropTypes = ReactPropTypes;\n\n\t return ReactPropTypes;\n\t};\n\n\tvar propTypes = createCommonjsModule(function (module) {\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t */\n\n\t{\n\t var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n\t Symbol.for &&\n\t Symbol.for('react.element')) ||\n\t 0xeac7;\n\n\t var isValidElement = function(object) {\n\t return typeof object === 'object' &&\n\t object !== null &&\n\t object.$$typeof === REACT_ELEMENT_TYPE;\n\t };\n\n\t // By explicitly using `prop-types` you are opting into new development behavior.\n\t // http://fb.me/prop-types-in-prod\n\t var throwOnDirectAccess = true;\n\t module.exports = factoryWithTypeCheckers(isValidElement, throwOnDirectAccess);\n\t}\n\t});\n\n\tvar classnames = createCommonjsModule(function (module) {\n\t/*!\n\t Copyright (c) 2016 Jed Watson.\n\t Licensed under the MIT License (MIT), see\n\t http://jedwatson.github.io/classnames\n\t*/\n\t/* global define */\n\n\t(function () {\n\n\t\tvar hasOwn = {}.hasOwnProperty;\n\n\t\tfunction classNames () {\n\t\t\tvar classes = [];\n\n\t\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\t\tvar arg = arguments[i];\n\t\t\t\tif (!arg) continue;\n\n\t\t\t\tvar argType = typeof arg;\n\n\t\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\t\tclasses.push(arg);\n\t\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\t\tclasses.push(classNames.apply(null, arg));\n\t\t\t\t} else if (argType === 'object') {\n\t\t\t\t\tfor (var key in arg) {\n\t\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn classes.join(' ');\n\t\t}\n\n\t\tif ('object' !== 'undefined' && module.exports) {\n\t\t\tmodule.exports = classNames;\n\t\t} else if (typeof undefined === 'function' && typeof undefined.amd === 'object' && undefined.amd) {\n\t\t\t// register as 'classnames', consistent with npm package name\n\t\t\tundefined('classnames', [], function () {\n\t\t\t\treturn classNames;\n\t\t\t});\n\t\t} else {\n\t\t\twindow.classNames = classNames;\n\t\t}\n\t}());\n\t});\n\n\t// @credits https://gist.github.com/rogozhnikoff/a43cfed27c41e4e68cdc\n\tfunction findInArray(array /*: Array<any> | TouchList*/, callback /*: Function*/) /*: any*/ {\n\t for (var i = 0, length = array.length; i < length; i++) {\n\t if (callback.apply(callback, [array[i], i, array])) return array[i];\n\t }\n\t}\n\n\tfunction isFunction(func /*: any*/) /*: boolean*/ {\n\t return typeof func === 'function' || Object.prototype.toString.call(func) === '[object Function]';\n\t}\n\n\tfunction isNum(num /*: any*/) /*: boolean*/ {\n\t return typeof num === 'number' && !isNaN(num);\n\t}\n\n\tfunction int(a /*: string*/) /*: number*/ {\n\t return parseInt(a, 10);\n\t}\n\n\tfunction dontSetMe(props /*: Object*/, propName /*: string*/, componentName /*: string*/) {\n\t if (props[propName]) {\n\t return new Error('Invalid prop ' + propName + ' passed to ' + componentName + ' - do not set this, set it on the child.');\n\t }\n\t}\n\n\tvar prefixes = ['Moz', 'Webkit', 'O', 'ms'];\n\tfunction getPrefix() /*: string*/ {\n\t var prop /*: string*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n\n\t // Checking specifically for 'window.document' is for pseudo-browser server-side\n\t // environments that define 'window' as the global context.\n\t // E.g. React-rails (see https://github.com/reactjs/react-rails/pull/84)\n\t if (typeof window === 'undefined' || typeof window.document === 'undefined') return '';\n\n\t var style = window.document.documentElement.style;\n\n\t if (prop in style) return '';\n\n\t for (var i = 0; i < prefixes.length; i++) {\n\t if (browserPrefixToKey(prop, prefixes[i]) in style) return prefixes[i];\n\t }\n\n\t return '';\n\t}\n\n\tfunction browserPrefixToKey(prop /*: string*/, prefix /*: string*/) /*: string*/ {\n\t return prefix ? '' + prefix + kebabToTitleCase(prop) : prop;\n\t}\n\n\tfunction kebabToTitleCase(str /*: string*/) /*: string*/ {\n\t var out = '';\n\t var shouldCapitalize = true;\n\t for (var i = 0; i < str.length; i++) {\n\t if (shouldCapitalize) {\n\t out += str[i].toUpperCase();\n\t shouldCapitalize = false;\n\t } else if (str[i] === '-') {\n\t shouldCapitalize = true;\n\t } else {\n\t out += str[i];\n\t }\n\t }\n\t return out;\n\t}\n\n\t// Default export is the prefix itself, like 'Moz', 'Webkit', etc\n\t// Note that you may have to re-test for certain things; for instance, Chrome 50\n\t// can handle unprefixed `transform`, but not unprefixed `user-select`\n\tvar browserPrefix = getPrefix();\n\n\tvar classCallCheck = function (instance, Constructor) {\n\t if (!(instance instanceof Constructor)) {\n\t throw new TypeError(\"Cannot call a class as a function\");\n\t }\n\t};\n\n\tvar createClass = function () {\n\t function defineProperties(target, props) {\n\t for (var i = 0; i < props.length; i++) {\n\t var descriptor = props[i];\n\t descriptor.enumerable = descriptor.enumerable || false;\n\t descriptor.configurable = true;\n\t if (\"value\" in descriptor) descriptor.writable = true;\n\t Object.defineProperty(target, descriptor.key, descriptor);\n\t }\n\t }\n\n\t return function (Constructor, protoProps, staticProps) {\n\t if (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t if (staticProps) defineProperties(Constructor, staticProps);\n\t return Constructor;\n\t };\n\t}();\n\n\tvar defineProperty = function (obj, key, value) {\n\t if (key in obj) {\n\t Object.defineProperty(obj, key, {\n\t value: value,\n\t enumerable: true,\n\t configurable: true,\n\t writable: true\n\t });\n\t } else {\n\t obj[key] = value;\n\t }\n\n\t return obj;\n\t};\n\n\tvar _extends = Object.assign || function (target) {\n\t for (var i = 1; i < arguments.length; i++) {\n\t var source = arguments[i];\n\n\t for (var key in source) {\n\t if (Object.prototype.hasOwnProperty.call(source, key)) {\n\t target[key] = source[key];\n\t }\n\t }\n\t }\n\n\t return target;\n\t};\n\n\tvar inherits = function (subClass, superClass) {\n\t if (typeof superClass !== \"function\" && superClass !== null) {\n\t throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n\t }\n\n\t subClass.prototype = Object.create(superClass && superClass.prototype, {\n\t constructor: {\n\t value: subClass,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n\t};\n\n\tvar possibleConstructorReturn = function (self, call) {\n\t if (!self) {\n\t throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\t }\n\n\t return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n\t};\n\n\tvar slicedToArray = function () {\n\t function sliceIterator(arr, i) {\n\t var _arr = [];\n\t var _n = true;\n\t var _d = false;\n\t var _e = undefined;\n\n\t try {\n\t for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n\t _arr.push(_s.value);\n\n\t if (i && _arr.length === i) break;\n\t }\n\t } catch (err) {\n\t _d = true;\n\t _e = err;\n\t } finally {\n\t try {\n\t if (!_n && _i[\"return\"]) _i[\"return\"]();\n\t } finally {\n\t if (_d) throw _e;\n\t }\n\t }\n\n\t return _arr;\n\t }\n\n\t return function (arr, i) {\n\t if (Array.isArray(arr)) {\n\t return arr;\n\t } else if (Symbol.iterator in Object(arr)) {\n\t return sliceIterator(arr, i);\n\t } else {\n\t throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n\t }\n\t };\n\t}();\n\n\t/*:: import type {ControlPosition, PositionOffsetControlPosition, MouseTouchEvent} from './types';*/\n\n\n\tvar matchesSelectorFunc = '';\n\tfunction matchesSelector(el /*: Node*/, selector /*: string*/) /*: boolean*/ {\n\t if (!matchesSelectorFunc) {\n\t matchesSelectorFunc = findInArray(['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector'], function (method) {\n\t // $FlowIgnore: Doesn't think elements are indexable\n\t return isFunction(el[method]);\n\t });\n\t }\n\n\t // Might not be found entirely (not an Element?) - in that case, bail\n\t // $FlowIgnore: Doesn't think elements are indexable\n\t if (!isFunction(el[matchesSelectorFunc])) return false;\n\n\t // $FlowIgnore: Doesn't think elements are indexable\n\t return el[matchesSelectorFunc](selector);\n\t}\n\n\t// Works up the tree to the draggable itself attempting to match selector.\n\tfunction matchesSelectorAndParentsTo(el /*: Node*/, selector /*: string*/, baseNode /*: Node*/) /*: boolean*/ {\n\t var node = el;\n\t do {\n\t if (matchesSelector(node, selector)) return true;\n\t if (node === baseNode) return false;\n\t node = node.parentNode;\n\t } while (node);\n\n\t return false;\n\t}\n\n\tfunction addEvent(el /*: ?Node*/, event /*: string*/, handler /*: Function*/) /*: void*/ {\n\t if (!el) {\n\t return;\n\t }\n\t if (el.attachEvent) {\n\t el.attachEvent('on' + event, handler);\n\t } else if (el.addEventListener) {\n\t el.addEventListener(event, handler, true);\n\t } else {\n\t // $FlowIgnore: Doesn't think elements are indexable\n\t el['on' + event] = handler;\n\t }\n\t}\n\n\tfunction removeEvent(el /*: ?Node*/, event /*: string*/, handler /*: Function*/) /*: void*/ {\n\t if (!el) {\n\t return;\n\t }\n\t if (el.detachEvent) {\n\t el.detachEvent('on' + event, handler);\n\t } else if (el.removeEventListener) {\n\t el.removeEventListener(event, handler, true);\n\t } else {\n\t // $FlowIgnore: Doesn't think elements are indexable\n\t el['on' + event] = null;\n\t }\n\t}\n\n\tfunction outerHeight(node /*: HTMLElement*/) /*: number*/ {\n\t // This is deliberately excluding margin for our calculations, since we are using\n\t // offsetTop which is including margin. See getBoundPosition\n\t var height = node.clientHeight;\n\t var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n\t height += int(computedStyle.borderTopWidth);\n\t height += int(computedStyle.borderBottomWidth);\n\t return height;\n\t}\n\n\tfunction outerWidth(node /*: HTMLElement*/) /*: number*/ {\n\t // This is deliberately excluding margin for our calculations, since we are using\n\t // offsetLeft which is including margin. See getBoundPosition\n\t var width = node.clientWidth;\n\t var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n\t width += int(computedStyle.borderLeftWidth);\n\t width += int(computedStyle.borderRightWidth);\n\t return width;\n\t}\n\tfunction innerHeight(node /*: HTMLElement*/) /*: number*/ {\n\t var height = node.clientHeight;\n\t var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n\t height -= int(computedStyle.paddingTop);\n\t height -= int(computedStyle.paddingBottom);\n\t return height;\n\t}\n\n\tfunction innerWidth(node /*: HTMLElement*/) /*: number*/ {\n\t var width = node.clientWidth;\n\t var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n\t width -= int(computedStyle.paddingLeft);\n\t width -= int(computedStyle.paddingRight);\n\t return width;\n\t}\n\n\t// Get from offsetParent\n\tfunction offsetXYFromParent(evt /*: {clientX: number, clientY: number}*/, offsetParent /*: HTMLElement*/) /*: ControlPosition*/ {\n\t var isBody = offsetParent === offsetParent.ownerDocument.body;\n\t var offsetParentRect = isBody ? { left: 0, top: 0 } : offsetParent.getBoundingClientRect();\n\n\t var x = evt.clientX + offsetParent.scrollLeft - offsetParentRect.left;\n\t var y = evt.clientY + offsetParent.scrollTop - offsetParentRect.top;\n\n\t return { x: x, y: y };\n\t}\n\n\tfunction createCSSTransform(controlPos /*: ControlPosition*/, positionOffset /*: PositionOffsetControlPosition*/) /*: Object*/ {\n\t var translation = getTranslation(controlPos, positionOffset, 'px');\n\t return defineProperty({}, browserPrefixToKey('transform', browserPrefix), translation);\n\t}\n\n\tfunction createSVGTransform(controlPos /*: ControlPosition*/, positionOffset /*: PositionOffsetControlPosition*/) /*: string*/ {\n\t var translation = getTranslation(controlPos, positionOffset, '');\n\t return translation;\n\t}\n\tfunction getTranslation(_ref2, positionOffset /*: PositionOffsetControlPosition*/, unitSuffix /*: string*/) /*: string*/ {\n\t var x = _ref2.x,\n\t y = _ref2.y;\n\n\t var translation = 'translate(' + x + unitSuffix + ',' + y + unitSuffix + ')';\n\t if (positionOffset) {\n\t var defaultX = '' + (typeof positionOffset.x === 'string' ? positionOffset.x : positionOffset.x + unitSuffix);\n\t var defaultY = '' + (typeof positionOffset.y === 'string' ? positionOffset.y : positionOffset.y + unitSuffix);\n\t translation = 'translate(' + defaultX + ', ' + defaultY + ')' + translation;\n\t }\n\t return translation;\n\t}\n\n\tfunction getTouch(e /*: MouseTouchEvent*/, identifier /*: number*/) /*: ?{clientX: number, clientY: number}*/ {\n\t return e.targetTouches && findInArray(e.targetTouches, function (t) {\n\t return identifier === t.identifier;\n\t }) || e.changedTouches && findInArray(e.changedTouches, function (t) {\n\t return identifier === t.identifier;\n\t });\n\t}\n\n\tfunction getTouchIdentifier(e /*: MouseTouchEvent*/) /*: ?number*/ {\n\t if (e.targetTouches && e.targetTouches[0]) return e.targetTouches[0].identifier;\n\t if (e.changedTouches && e.changedTouches[0]) return e.changedTouches[0].identifier;\n\t}\n\n\t// User-select Hacks:\n\t//\n\t// Useful for preventing blue highlights all over everything when dragging.\n\n\t// Note we're passing `document` b/c we could be iframed\n\tfunction addUserSelectStyles(doc /*: ?Document*/) {\n\t if (!doc) return;\n\t var styleEl = doc.getElementById('react-draggable-style-el');\n\t if (!styleEl) {\n\t styleEl = doc.createElement('style');\n\t styleEl.type = 'text/css';\n\t styleEl.id = 'react-draggable-style-el';\n\t styleEl.innerHTML = '.react-draggable-transparent-selection *::-moz-selection {all: inherit;}\\n';\n\t styleEl.innerHTML += '.react-draggable-transparent-selection *::selection {all: inherit;}\\n';\n\t doc.getElementsByTagName('head')[0].appendChild(styleEl);\n\t }\n\t if (doc.body) addClassName(doc.body, 'react-draggable-transparent-selection');\n\t}\n\n\tfunction removeUserSelectStyles(doc /*: ?Document*/) {\n\t try {\n\t if (doc && doc.body) removeClassName(doc.body, 'react-draggable-transparent-selection');\n\t // $FlowIgnore: IE\n\t if (doc.selection) {\n\t // $FlowIgnore: IE\n\t doc.selection.empty();\n\t } else {\n\t window.getSelection().removeAllRanges(); // remove selection caused by scroll\n\t }\n\t } catch (e) {\n\t // probably IE\n\t }\n\t}\n\n\tfunction styleHacks() /*: Object*/ {\n\t var childStyle /*: Object*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t // Workaround IE pointer events; see #51\n\t // https://github.com/mzabriskie/react-draggable/issues/51#issuecomment-103488278\n\t return _extends({\n\t touchAction: 'none'\n\t }, childStyle);\n\t}\n\n\tfunction addClassName(el /*: HTMLElement*/, className /*: string*/) {\n\t if (el.classList) {\n\t el.classList.add(className);\n\t } else {\n\t if (!el.className.match(new RegExp('(?:^|\\\\s)' + className + '(?!\\\\S)'))) {\n\t el.className += ' ' + className;\n\t }\n\t }\n\t}\n\n\tfunction removeClassName(el /*: HTMLElement*/, className /*: string*/) {\n\t if (el.classList) {\n\t el.classList.remove(className);\n\t } else {\n\t el.className = el.className.replace(new RegExp('(?:^|\\\\s)' + className + '(?!\\\\S)', 'g'), '');\n\t }\n\t}\n\n\t/*:: import type Draggable from '../Draggable';*/\n\t/*:: import type {Bounds, ControlPosition, DraggableData, MouseTouchEvent} from './types';*/\n\t/*:: import type DraggableCore from '../DraggableCore';*/\n\n\n\tfunction getBoundPosition(draggable /*: Draggable*/, x /*: number*/, y /*: number*/) /*: [number, number]*/ {\n\t // If no bounds, short-circuit and move on\n\t if (!draggable.props.bounds) return [x, y];\n\n\t // Clone new bounds\n\t var bounds = draggable.props.bounds;\n\n\t bounds = typeof bounds === 'string' ? bounds : cloneBounds(bounds);\n\t var node = findDOMNode(draggable);\n\n\t if (typeof bounds === 'string') {\n\t var ownerDocument = node.ownerDocument;\n\n\t var ownerWindow = ownerDocument.defaultView;\n\t var boundNode = void 0;\n\t if (bounds === 'parent') {\n\t boundNode = node.parentNode;\n\t } else {\n\t boundNode = ownerDocument.querySelector(bounds);\n\t }\n\t if (!(boundNode instanceof ownerWindow.HTMLElement)) {\n\t throw new Error('Bounds selector \"' + bounds + '\" could not find an element.');\n\t }\n\t var nodeStyle = ownerWindow.getComputedStyle(node);\n\t var boundNodeStyle = ownerWindow.getComputedStyle(boundNode);\n\t // Compute bounds. This is a pain with padding and offsets but this gets it exactly right.\n\t bounds = {\n\t left: -node.offsetLeft + int(boundNodeStyle.paddingLeft) + int(nodeStyle.marginLeft),\n\t top: -node.offsetTop + int(boundNodeStyle.paddingTop) + int(nodeStyle.marginTop),\n\t right: innerWidth(boundNode) - outerWidth(node) - node.offsetLeft + int(boundNodeStyle.paddingRight) - int(nodeStyle.marginRight),\n\t bottom: innerHeight(boundNode) - outerHeight(node) - node.offsetTop + int(boundNodeStyle.paddingBottom) - int(nodeStyle.marginBottom)\n\t };\n\t }\n\n\t // Keep x and y below right and bottom limits...\n\t if (isNum(bounds.right)) x = Math.min(x, bounds.right);\n\t if (isNum(bounds.bottom)) y = Math.min(y, bounds.bottom);\n\n\t // But above left and top limits.\n\t if (isNum(bounds.left)) x = Math.max(x, bounds.left);\n\t if (isNum(bounds.top)) y = Math.max(y, bounds.top);\n\n\t return [x, y];\n\t}\n\n\tfunction snapToGrid(grid /*: [number, number]*/, pendingX /*: number*/, pendingY /*: number*/) /*: [number, number]*/ {\n\t var x = Math.round(pendingX / grid[0]) * grid[0];\n\t var y = Math.round(pendingY / grid[1]) * grid[1];\n\t return [x, y];\n\t}\n\n\tfunction canDragX(draggable /*: Draggable*/) /*: boolean*/ {\n\t return draggable.props.axis === 'both' || draggable.props.axis === 'x';\n\t}\n\n\tfunction canDragY(draggable /*: Draggable*/) /*: boolean*/ {\n\t return draggable.props.axis === 'both' || draggable.props.axis === 'y';\n\t}\n\n\t// Get {x, y} positions from event.\n\tfunction getControlPosition(e /*: MouseTouchEvent*/, touchIdentifier /*: ?number*/, draggableCore /*: DraggableCore*/) /*: ?ControlPosition*/ {\n\t var touchObj = typeof touchIdentifier === 'number' ? getTouch(e, touchIdentifier) : null;\n\t if (typeof touchIdentifier === 'number' && !touchObj) return null; // not the right touch\n\t var node = findDOMNode(draggableCore);\n\t // User can provide an offsetParent if desired.\n\t var offsetParent = draggableCore.props.offsetParent || node.offsetParent || node.ownerDocument.body;\n\t return offsetXYFromParent(touchObj || e, offsetParent);\n\t}\n\n\t// Create an data object exposed by <DraggableCore>'s events\n\tfunction createCoreData(draggable /*: DraggableCore*/, x /*: number*/, y /*: number*/) /*: DraggableData*/ {\n\t var state = draggable.state;\n\t var isStart = !isNum(state.lastX);\n\t var node = findDOMNode(draggable);\n\n\t if (isStart) {\n\t // If this is our first move, use the x and y as last coords.\n\t return {\n\t node: node,\n\t deltaX: 0, deltaY: 0,\n\t lastX: x, lastY: y,\n\t x: x, y: y\n\t };\n\t } else {\n\t // Otherwise calculate proper values.\n\t return {\n\t node: node,\n\t deltaX: x - state.lastX, deltaY: y - state.lastY,\n\t lastX: state.lastX, lastY: state.lastY,\n\t x: x, y: y\n\t };\n\t }\n\t}\n\n\t// Create an data exposed by <Draggable>'s events\n\tfunction createDraggableData(draggable /*: Draggable*/, coreData /*: DraggableData*/) /*: DraggableData*/ {\n\t var scale = draggable.props.scale;\n\t return {\n\t node: coreData.node,\n\t x: draggable.state.x + coreData.deltaX / scale,\n\t y: draggable.state.y + coreData.deltaY / scale,\n\t deltaX: coreData.deltaX / scale,\n\t deltaY: coreData.deltaY / scale,\n\t lastX: draggable.state.x,\n\t lastY: draggable.state.y\n\t };\n\t}\n\n\t// A lot faster than stringify/parse\n\tfunction cloneBounds(bounds /*: Bounds*/) /*: Bounds*/ {\n\t return {\n\t left: bounds.left,\n\t top: bounds.top,\n\t right: bounds.right,\n\t bottom: bounds.bottom\n\t };\n\t}\n\n\tfunction findDOMNode(draggable /*: Draggable | DraggableCore*/) /*: HTMLElement*/ {\n\t var node = ReactDOM.findDOMNode(draggable);\n\t if (!node) {\n\t throw new Error('<DraggableCore>: Unmounted during event!');\n\t }\n\t // $FlowIgnore we can't assert on HTMLElement due to tests... FIXME\n\t return node;\n\t}\n\n\t/*eslint no-console:0*/\n\tfunction log() {\n\t}\n\n\t/*:: import type {EventHandler, MouseTouchEvent} from './utils/types';*/\n\n\n\t// Simple abstraction for dragging events names.\n\t/*:: import type {Element as ReactElement} from 'react';*/\n\tvar eventsFor = {\n\t touch: {\n\t start: 'touchstart',\n\t move: 'touchmove',\n\t stop: 'touchend'\n\t },\n\t mouse: {\n\t start: 'mousedown',\n\t move: 'mousemove',\n\t stop: 'mouseup'\n\t }\n\t};\n\n\t// Default to mouse events.\n\tvar dragEventFor = eventsFor.mouse;\n\n\t/*:: type DraggableCoreState = {\n\t dragging: boolean,\n\t lastX: number,\n\t lastY: number,\n\t touchIdentifier: ?number\n\t};*/\n\t/*:: export type DraggableBounds = {\n\t left: number,\n\t right: number,\n\t top: number,\n\t bottom: number,\n\t};*/\n\t/*:: export type DraggableData = {\n\t node: HTMLElement,\n\t x: number, y: number,\n\t deltaX: number, deltaY: number,\n\t lastX: number, lastY: number,\n\t};*/\n\t/*:: export type DraggableEventHandler = (e: MouseEvent, data: DraggableData) => void;*/\n\t/*:: export type ControlPosition = {x: number, y: number};*/\n\t/*:: export type PositionOffsetControlPosition = {x: number|string, y: number|string};*/\n\n\n\t//\n\t// Define <DraggableCore>.\n\t//\n\t// <DraggableCore> is for advanced usage of <Draggable>. It maintains minimal internal state so it can\n\t// work well with libraries that require more control over the element.\n\t//\n\n\t/*:: export type DraggableCoreProps = {\n\t allowAnyClick: boolean,\n\t cancel: string,\n\t children: ReactElement<any>,\n\t disabled: boolean,\n\t enableUserSelectHack: boolean,\n\t offsetParent: HTMLElement,\n\t grid: [number, number],\n\t handle: string,\n\t onStart: DraggableEventHandler,\n\t onDrag: DraggableEventHandler,\n\t onStop: DraggableEventHandler,\n\t onMouseDown: (e: MouseEvent) => void,\n\t};*/\n\n\tvar DraggableCore = function (_React$Component) {\n\t inherits(DraggableCore, _React$Component);\n\n\t function DraggableCore() {\n\t var _ref;\n\n\t var _temp, _this, _ret;\n\n\t classCallCheck(this, DraggableCore);\n\n\t for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t args[_key] = arguments[_key];\n\t }\n\n\t return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = DraggableCore.__proto__ || Object.getPrototypeOf(DraggableCore)).call.apply(_ref, [this].concat(args))), _this), _this.state = {\n\t dragging: false,\n\t // Used while dragging to determine deltas.\n\t lastX: NaN, lastY: NaN,\n\t touchIdentifier: null\n\t }, _this.handleDragStart = function (e) {\n\t // Make it possible to attach event handlers on top of this one.\n\t _this.props.onMouseDown(e);\n\n\t // Only accept left-clicks.\n\t if (!_this.props.allowAnyClick && typeof e.button === 'number' && e.button !== 0) return false;\n\n\t // Get nodes. Be sure to grab relative document (could be iframed)\n\t var thisNode = ReactDOM.findDOMNode(_this);\n\t if (!thisNode || !thisNode.ownerDocument || !thisNode.ownerDocument.body) {\n\t throw new Error('<DraggableCore> not mounted on DragStart!');\n\t }\n\t var ownerDocument = thisNode.ownerDocument;\n\n\t // Short circuit if handle or cancel prop was provided and selector doesn't match.\n\n\t if (_this.props.disabled || !(e.target instanceof ownerDocument.defaultView.Node) || _this.props.handle && !matchesSelectorAndParentsTo(e.target, _this.props.handle, thisNode) || _this.props.cancel && matchesSelectorAndParentsTo(e.target, _this.props.cancel, thisNode)) {\n\t return;\n\t }\n\n\t // Set touch identifier in component state if this is a touch event. This allows us to\n\t // distinguish between individual touches on multitouch screens by identifying which\n\t // touchpoint was set to this element.\n\t var touchIdentifier = getTouchIdentifier(e);\n\t _this.setState({ touchIdentifier: touchIdentifier });\n\n\t // Get the current drag point from the event. This is used as the offset.\n\t var position = getControlPosition(e, touchIdentifier, _this);\n\t if (position == null) return; // not possible but satisfies flow\n\t var x = position.x,\n\t y = position.y;\n\n\t // Create an event object with all the data parents need to make a decision here.\n\n\t var coreEvent = createCoreData(_this, x, y);\n\n\t // Call event handler. If it returns explicit false, cancel.\n\t log('calling', _this.props.onStart);\n\t var shouldUpdate = _this.props.onStart(e, coreEvent);\n\t if (shouldUpdate === false) return;\n\n\t // Add a style to the body to disable user-select. This prevents text from\n\t // being selected all over the page.\n\t if (_this.props.enableUserSelectHack) addUserSelectStyles(ownerDocument);\n\n\t // Initiate dragging. Set the current x and y as offsets\n\t // so we know how much we've moved during the drag. This allows us\n\t // to drag elements around even if they have been moved, without issue.\n\t _this.setState({\n\t dragging: true,\n\n\t lastX: x,\n\t lastY: y\n\t });\n\n\t // Add events to the document directly so we catch when the user's mouse/touch moves outside of\n\t // this element. We use different events depending on whether or not we have detected that this\n\t // is a touch-capable device.\n\t addEvent(ownerDocument, dragEventFor.move, _this.handleDrag);\n\t addEvent(ownerDocument, dragEventFor.stop, _this.handleDragStop);\n\t }, _this.handleDrag = function (e) {\n\n\t // Prevent scrolling on mobile devices, like ipad/iphone.\n\t if (e.type === 'touchmove') e.preventDefault();\n\n\t // Get the current drag point from the event. This is used as the offset.\n\t var position = getControlPosition(e, _this.state.touchIdentifier, _this);\n\t if (position == null) return;\n\t var x = position.x,\n\t y = position.y;\n\n\t // Snap to grid if prop has been provided\n\n\t if (Array.isArray(_this.props.grid)) {\n\t var _deltaX = x - _this.state.lastX,\n\t _deltaY = y - _this.state.lastY;\n\n\t var _snapToGrid = snapToGrid(_this.props.grid, _deltaX, _deltaY);\n\n\t var _snapToGrid2 = slicedToArray(_snapToGrid, 2);\n\n\t _deltaX = _snapToGrid2[0];\n\t _deltaY = _snapToGrid2[1];\n\n\t if (!_deltaX && !_deltaY) return; // skip useless drag\n\t x = _this.state.lastX + _deltaX, y = _this.state.lastY + _deltaY;\n\t }\n\n\t var coreEvent = createCoreData(_this, x, y);\n\n\t // Call event handler. If it returns explicit false, trigger end.\n\t var shouldUpdate = _this.props.onDrag(e, coreEvent);\n\t if (shouldUpdate === false) {\n\t try {\n\t // $FlowIgnore\n\t _this.handleDragStop(new MouseEvent('mouseup'));\n\t } catch (err) {\n\t // Old browsers\n\t var event = ((document.createEvent('MouseEvents') /*: any*/) /*: MouseTouchEvent*/);\n\t // I see why this insanity was deprecated\n\t // $FlowIgnore\n\t event.initMouseEvent('mouseup', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n\t _this.handleDragStop(event);\n\t }\n\t return;\n\t }\n\n\t _this.setState({\n\t lastX: x,\n\t lastY: y\n\t });\n\t }, _this.handleDragStop = function (e) {\n\t if (!_this.state.dragging) return;\n\n\t var position = getControlPosition(e, _this.state.touchIdentifier, _this);\n\t if (position == null) return;\n\t var x = position.x,\n\t y = position.y;\n\n\t var coreEvent = createCoreData(_this, x, y);\n\n\t var thisNode = ReactDOM.findDOMNode(_this);\n\t if (thisNode) {\n\t // Remove user-select hack\n\t if (_this.props.enableUserSelectHack) removeUserSelectStyles(thisNode.ownerDocument);\n\t }\n\n\t // Reset the el.\n\t _this.setState({\n\t dragging: false,\n\t lastX: NaN,\n\t lastY: NaN\n\t });\n\n\t // Call event handler\n\t _this.props.onStop(e, coreEvent);\n\n\t if (thisNode) {\n\t removeEvent(thisNode.ownerDocument, dragEventFor.move, _this.handleDrag);\n\t removeEvent(thisNode.ownerDocument, dragEventFor.stop, _this.handleDragStop);\n\t }\n\t }, _this.onMouseDown = function (e) {\n\t dragEventFor = eventsFor.mouse; // on touchscreen laptops we could switch back to mouse\n\n\t return _this.handleDragStart(e);\n\t }, _this.onMouseUp = function (e) {\n\t dragEventFor = eventsFor.mouse;\n\n\t return _this.handleDragStop(e);\n\t }, _this.onTouchStart = function (e) {\n\t // We're on a touch device now, so change the event handlers\n\t dragEventFor = eventsFor.touch;\n\n\t return _this.handleDragStart(e);\n\t }, _this.onTouchEnd = function (e) {\n\t // We're on a touch device now, so change the event handlers\n\t dragEventFor = eventsFor.touch;\n\n\t return _this.handleDragStop(e);\n\t }, _temp), possibleConstructorReturn(_this, _ret);\n\t }\n\n\t createClass(DraggableCore, [{\n\t key: 'componentWillUnmount',\n\t value: function componentWillUnmount() {\n\t // Remove any leftover event handlers. Remove both touch and mouse handlers in case\n\t // some browser quirk caused a touch event to fire during a mouse move, or vice versa.\n\t var thisNode = ReactDOM.findDOMNode(this);\n\t if (thisNode) {\n\t var ownerDocument = thisNode.ownerDocument;\n\n\t removeEvent(ownerDocument, eventsFor.mouse.move, this.handleDrag);\n\t removeEvent(ownerDocument, eventsFor.touch.move, this.handleDrag);\n\t removeEvent(ownerDocument, eventsFor.mouse.stop, this.handleDragStop);\n\t removeEvent(ownerDocument, eventsFor.touch.stop, this.handleDragStop);\n\t if (this.props.enableUserSelectHack) removeUserSelectStyles(ownerDocument);\n\t }\n\t }\n\n\t // Same as onMouseDown (start drag), but now consider this a touch device.\n\n\t }, {\n\t key: 'render',\n\t value: function render() {\n\t // Reuse the child provided\n\t // This makes it flexible to use whatever element is wanted (div, ul, etc)\n\t return React.cloneElement(React.Children.only(this.props.children), {\n\t style: styleHacks(this.props.children.props.style),\n\n\t // Note: mouseMove handler is attached to document so it will still function\n\t // when the user drags quickly and leaves the bounds of the element.\n\t onMouseDown: this.onMouseDown,\n\t onTouchStart: this.onTouchStart,\n\t onMouseUp: this.onMouseUp,\n\t onTouchEnd: this.onTouchEnd\n\t });\n\t }\n\t }]);\n\t return DraggableCore;\n\t}(React.Component);\n\n\tDraggableCore.displayName = 'DraggableCore';\n\tDraggableCore.propTypes = {\n\t /**\n\t * `allowAnyClick` allows dragging using any mouse button.\n\t * By default, we only accept the left button.\n\t *\n\t * Defaults to `false`.\n\t */\n\t allowAnyClick: propTypes.bool,\n\n\t /**\n\t * `disabled`, if true, stops the <Draggable> from dragging. All handlers,\n\t * with the exception of `onMouseDown`, will not fire.\n\t */\n\t disabled: propTypes.bool,\n\n\t /**\n\t * By default, we add 'user-select:none' attributes to the document body\n\t * to prevent ugly text selection during drag. If this is causing problems\n\t * for your app, set this to `false`.\n\t */\n\t enableUserSelectHack: propTypes.bool,\n\n\t /**\n\t * `offsetParent`, if set, uses the passed DOM node to compute drag offsets\n\t * instead of using the parent node.\n\t */\n\t offsetParent: function offsetParent(props /*: DraggableCoreProps*/, propName /*: $Keys<DraggableCoreProps>*/) {\n\t if (props[propName] && props[propName].nodeType !== 1) {\n\t throw new Error('Draggable\\'s offsetParent must be a DOM Node.');\n\t }\n\t },\n\n\t /**\n\t * `grid` specifies the x and y that dragging should snap to.\n\t */\n\t grid: propTypes.arrayOf(propTypes.number),\n\n\t /**\n\t * `scale` specifies the scale of the area you are dragging inside of. It allows\n\t * the drag deltas to scale correctly with how far zoomed in/out you are.\n\t */\n\t scale: propTypes.number,\n\n\t /**\n\t * `handle` specifies a selector to be used as the handle that initiates drag.\n\t *\n\t * Example:\n\t *\n\t * ```jsx\n\t * let App = React.createClass({\n\t * render: function () {\n\t * return (\n\t * <Draggable handle=\".handle\">\n\t * <div>\n\t * <div className=\"handle\">Click me to drag</div>\n\t * <div>This is some other content</div>\n\t * </div>\n\t * </Draggable>\n\t * );\n\t * }\n\t * });\n\t * ```\n\t */\n\t handle: propTypes.string,\n\n\t /**\n\t * `cancel` specifies a selector to be used to prevent drag initialization.\n\t *\n\t * Example:\n\t *\n\t * ```jsx\n\t * let App = React.createClass({\n\t * render: function () {\n\t * return(\n\t * <Draggable cancel=\".cancel\">\n\t * <div>\n\t * <div className=\"cancel\">You can't drag from here</div>\n\t * <div>Dragging here works fine</div>\n\t * </div>\n\t * </Draggable>\n\t * );\n\t * }\n\t * });\n\t * ```\n\t */\n\t cancel: propTypes.string,\n\n\t /**\n\t * Called when dragging starts.\n\t * If this function returns the boolean false, dragging will be canceled.\n\t */\n\t onStart: propTypes.func,\n\n\t /**\n\t * Called while dragging.\n\t * If this function returns the boolean false, dragging will be canceled.\n\t */\n\t onDrag: propTypes.func,\n\n\t /**\n\t * Called when dragging stops.\n\t * If this function returns the boolean false, the drag will remain active.\n\t */\n\t onStop: propTypes.func,\n\n\t /**\n\t * A workaround option which can be passed if onMouseDown needs to be accessed,\n\t * since it'll always be blocked (as there is internal use of onMouseDown)\n\t */\n\t onMouseDown: propTypes.func,\n\n\t /**\n\t * These properties should be defined on the child, not here.\n\t */\n\t className: dontSetMe,\n\t style: dontSetMe,\n\t transform: dontSetMe\n\t};\n\tDraggableCore.defaultProps = {\n\t allowAnyClick: false, // by default only accept left click\n\t cancel: null,\n\t disabled: false,\n\t enableUserSelectHack: true,\n\t offsetParent: null,\n\t handle: null,\n\t grid: null,\n\t transform: null,\n\t onStart: function onStart() {},\n\t onDrag: function onDrag() {},\n\t onStop: function onStop() {},\n\t onMouseDown: function onMouseDown() {}\n\t};\n\n\t/*:: import type {DraggableEventHandler} from './utils/types';*/\n\t/*:: import type {Element as ReactElement} from 'react';*/\n\t/*:: type DraggableState = {\n\t dragging: boolean,\n\t dragged: boolean,\n\t x: number, y: number,\n\t slackX: number, slackY: number,\n\t isElementSVG: boolean\n\t};*/\n\n\n\t//\n\t// Define <Draggable>\n\t//\n\n\t/*:: export type DraggableProps = {\n\t ...$Exact<DraggableCoreProps>,\n\t axis: 'both' | 'x' | 'y' | 'none',\n\t bounds: DraggableBounds | string | false,\n\t defaultClassName: string,\n\t defaultClassNameDragging: string,\n\t defaultClassNameDragged: string,\n\t defaultPosition: ControlPosition,\n\t positionOffset: PositionOffsetControlPosition,\n\t position: ControlPosition,\n\t scale: number\n\t};*/\n\n\tvar Draggable = function (_React$Component) {\n\t inherits(Draggable, _React$Component);\n\n\t function Draggable(props /*: DraggableProps*/) {\n\t classCallCheck(this, Draggable);\n\n\t var _this = possibleConstructorReturn(this, (Draggable.__proto__ || Object.getPrototypeOf(Draggable)).call(this, props));\n\n\t _this.onDragStart = function (e, coreData) {\n\n\t // Short-circuit if user's callback killed it.\n\t var shouldStart = _this.props.onStart(e, createDraggableData(_this, coreData));\n\t // Kills start event on core as well, so move handlers are never bound.\n\t if (shouldStart === false) return false;\n\n\t _this.setState({ dragging: true, dragged: true });\n\t };\n\n\t _this.onDrag = function (e, coreData) {\n\t if (!_this.state.dragging) return false;\n\n\t var uiData = createDraggableData(_this, coreData);\n\n\t var newState /*: $Shape<DraggableState>*/ = {\n\t x: uiData.x,\n\t y: uiData.y\n\t };\n\n\t // Keep within bounds.\n\t if (_this.props.bounds) {\n\t // Save original x and y.\n\t var _x = newState.x,\n\t _y = newState.y;\n\n\t // Add slack to the values used to calculate bound position. This will ensure that if\n\t // we start removing slack, the element won't react to it right away until it's been\n\t // completely removed.\n\n\t newState.x += _this.state.slackX;\n\t newState.y += _this.state.slackY;\n\n\t // Get bound position. This will ceil/floor the x and y within the boundaries.\n\n\t var _getBoundPosition = getBoundPosition(_this, newState.x, newState.y),\n\t _getBoundPosition2 = slicedToArray(_getBoundPosition, 2),\n\t newStateX = _getBoundPosition2[0],\n\t newStateY = _getBoundPosition2[1];\n\n\t newState.x = newStateX;\n\t newState.y = newStateY;\n\n\t // Recalculate slack by noting how much was shaved by the boundPosition handler.\n\t newState.slackX = _this.state.slackX + (_x - newState.x);\n\t newState.slackY = _this.state.slackY + (_y - newState.y);\n\n\t // Update the event we fire to reflect what really happened after bounds took effect.\n\t uiData.x = newState.x;\n\t uiData.y = newState.y;\n\t uiData.deltaX = newState.x - _this.state.x;\n\t uiData.deltaY = newState.y - _this.state.y;\n\t }\n\n\t // Short-circuit if user's callback killed it.\n\t var shouldUpdate = _this.props.onDrag(e, uiData);\n\t if (shouldUpdate === false) return false;\n\n\t _this.setState(newState);\n\t };\n\n\t _this.onDragStop = function (e, coreData) {\n\t if (!_this.state.dragging) return false;\n\n\t // Short-circuit if user's callback killed it.\n\t var shouldStop = _this.props.onStop(e, createDraggableData(_this, coreData));\n\t if (shouldStop === false) return false;\n\n\t var newState /*: $Shape<DraggableState>*/ = {\n\t dragging: false,\n\t slackX: 0,\n\t slackY: 0\n\t };\n\n\t // If this is a controlled component, the result of this operation will be to\n\t // revert back to the old position. We expect a handler on `onDragStop`, at the least.\n\t var controlled = Boolean(_this.props.position);\n\t if (controlled) {\n\t var _this$props$position = _this.props.position,\n\t _x2 = _this$props$position.x,\n\t _y2 = _this$props$position.y;\n\n\t newState.x = _x2;\n\t newState.y = _y2;\n\t }\n\n\t _this.setState(newState);\n\t };\n\n\t _this.state = {\n\t // Whether or not we are currently dragging.\n\t dragging: false,\n\n\t // Whether or not we have been dragged before.\n\t dragged: false,\n\n\t // Current transform x and y.\n\t x: props.position ? props.position.x : props.defaultPosition.x,\n\t y: props.position ? props.position.y : props.defaultPosition.y,\n\n\t // Used for compensating for out-of-bounds drags\n\t slackX: 0, slackY: 0,\n\n\t // Can only determine if SVG after mounting\n\t isElementSVG: false\n\t };\n\n\t if (props.position && !(props.onDrag || props.onStop)) {\n\t // eslint-disable-next-line no-console\n\t console.warn('A `position` was applied to this <Draggable>, without drag handlers. This will make this ' + 'component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the ' + '`position` of this element.');\n\t }\n\t return _this;\n\t }\n\n\t createClass(Draggable, [{\n\t key: 'componentDidMount',\n\t value: function componentDidMount() {\n\t // Check to see if the element passed is an instanceof SVGElement\n\t if (typeof window.SVGElement !== 'undefined' && ReactDOM.findDOMNode(this) instanceof window.SVGElement) {\n\t this.setState({ isElementSVG: true });\n\t }\n\t }\n\t }, {\n\t key: 'componentWillReceiveProps',\n\t value: function componentWillReceiveProps(nextProps /*: Object*/) {\n\t // Set x/y if position has changed\n\t if (nextProps.position && (!this.props.position || nextProps.position.x !== this.props.position.x || nextProps.position.y !== this.props.position.y)) {\n\t this.setState({ x: nextProps.position.x, y: nextProps.position.y });\n\t }\n\t }\n\t }, {\n\t key: 'componentWillUnmount',\n\t value: function componentWillUnmount() {\n\t this.setState({ dragging: false }); // prevents invariant if unmounted while dragging\n\t }\n\t }, {\n\t key: 'render',\n\t value: function render() /*: ReactElement<any>*/ {\n\t var _classNames;\n\n\t var style = {},\n\t svgTransform = null;\n\n\t // If this is controlled, we don't want to move it - unless it's dragging.\n\t var controlled = Boolean(this.props.position);\n\t var draggable = !controlled || this.state.dragging;\n\n\t var position = this.props.position || this.props.defaultPosition;\n\t var transformOpts = {\n\t // Set left if horizontal drag is enabled\n\t x: canDragX(this) && draggable ? this.state.x : position.x,\n\n\t // Set top if vertical drag is enabled\n\t y: canDragY(this) && draggable ? this.state.y : position.y\n\t };\n\n\t // If this element was SVG, we use the `transform` attribute.\n\t if (this.state.isElementSVG) {\n\t svgTransform = createSVGTransform(transformOpts, this.props.positionOffset);\n\t } else {\n\t // Add a CSS transform to move the element around. This allows us to move the element around\n\t // without worrying about whether or not it is relatively or absolutely positioned.\n\t // If the item you are dragging already has a transform set, wrap it in a <span> so <Draggable>\n\t // has a clean slate.\n\t style = createCSSTransform(transformOpts, this.props.positionOffset);\n\t }\n\n\t var _props = this.props,\n\t defaultClassName = _props.defaultClassName,\n\t defaultClassNameDragging = _props.defaultClassNameDragging,\n\t defaultClassNameDragged = _props.defaultClassNameDragged;\n\n\n\t var children = React.Children.only(this.props.children);\n\n\t // Mark with class while dragging\n\t var className = classnames(children.props.className || '', defaultClassName, (_classNames = {}, defineProperty(_classNames, defaultClassNameDragging, this.state.dragging), defineProperty(_classNames, defaultClassNameDragged, this.state.dragged), _classNames));\n\n\t // Reuse the child provided\n\t // This makes it flexible to use whatever element is wanted (div, ul, etc)\n\t return React.createElement(\n\t DraggableCore,\n\t _extends({}, this.props, { onStart: this.onDragStart, onDrag: this.onDrag, onStop: this.onDragStop }),\n\t React.cloneElement(children, {\n\t className: className,\n\t style: _extends({}, children.props.style, style),\n\t transform: svgTransform\n\t })\n\t );\n\t }\n\t }]);\n\t return Draggable;\n\t}(React.Component);\n\n\tDraggable.displayName = 'Draggable';\n\tDraggable.propTypes = _extends({}, DraggableCore.propTypes, {\n\n\t /**\n\t * `axis` determines which axis the draggable can move.\n\t *\n\t * Note that all callbacks will still return data as normal. This only\n\t * controls flushing to the DOM.\n\t *\n\t * 'both' allows movement horizontally and vertically.\n\t * 'x' limits movement to horizontal axis.\n\t * 'y' limits movement to vertical axis.\n\t * 'none' limits all movement.\n\t *\n\t * Defaults to 'both'.\n\t */\n\t axis: propTypes.oneOf(['both', 'x', 'y', 'none']),\n\n\t /**\n\t * `bounds` determines the range of movement available to the element.\n\t * Available values are:\n\t *\n\t * 'parent' restricts movement within the Draggable's parent node.\n\t *\n\t * Alternatively, pass an object with the following properties, all of which are optional:\n\t *\n\t * {left: LEFT_BOUND, right: RIGHT_BOUND, bottom: BOTTOM_BOUND, top: TOP_BOUND}\n\t *\n\t * All values are in px.\n\t *\n\t * Example:\n\t *\n\t * ```jsx\n\t * let App = React.createClass({\n\t * render: function () {\n\t * return (\n\t * <Draggable bounds={{right: 300, bottom: 300}}>\n\t * <div>Content</div>\n\t * </Draggable>\n\t * );\n\t * }\n\t * });\n\t * ```\n\t */\n\t bounds: propTypes.oneOfType([propTypes.shape({\n\t left: propTypes.number,\n\t right: propTypes.number,\n\t top: propTypes.number,\n\t bottom: propTypes.number\n\t }), propTypes.string, propTypes.oneOf([false])]),\n\n\t defaultClassName: propTypes.string,\n\t defaultClassNameDragging: propTypes.string,\n\t defaultClassNameDragged: propTypes.string,\n\n\t /**\n\t * `defaultPosition` specifies the x and y that the dragged item should start at\n\t *\n\t * Example:\n\t *\n\t * ```jsx\n\t * let App = React.createClass({\n\t * render: function () {\n\t * return (\n\t * <Draggable defaultPosition={{x: 25, y: 25}}>\n\t * <div>I start with transformX: 25px and transformY: 25px;</div>\n\t * </Draggable>\n\t * );\n\t * }\n\t * });\n\t * ```\n\t */\n\t defaultPosition: propTypes.shape({\n\t x: propTypes.number,\n\t y: propTypes.number\n\t }),\n\t positionOffset: propTypes.shape({\n\t x: propTypes.oneOfType([propTypes.number, propTypes.string]),\n\t y: propTypes.oneOfType([propTypes.number, propTypes.string])\n\t }),\n\n\t /**\n\t * `position`, if present, defines the current position of the element.\n\t *\n\t * This is similar to how form elements in React work - if no `position` is supplied, the component\n\t * is uncontrolled.\n\t *\n\t * Example:\n\t *\n\t * ```jsx\n\t * let App = React.createClass({\n\t * render: function () {\n\t * return (\n\t * <Draggable position={{x: 25, y: 25}}>\n\t * <div>I start with transformX: 25px and transformY: 25px;</div>\n\t * </Draggable>\n\t * );\n\t * }\n\t * });\n\t * ```\n\t */\n\t position: propTypes.shape({\n\t x: propTypes.number,\n\t y: propTypes.number\n\t }),\n\n\t /**\n\t * These properties should be defined on the child, not here.\n\t */\n\t className: dontSetMe,\n\t style: dontSetMe,\n\t transform: dontSetMe\n\t});\n\tDraggable.defaultProps = _extends({}, DraggableCore.defaultProps, {\n\t axis: 'both',\n\t bounds: false,\n\t defaultClassName: 'react-draggable',\n\t defaultClassNameDragging: 'react-draggable-dragging',\n\t defaultClassNameDragged: 'react-draggable-dragged',\n\t defaultPosition: { x: 0, y: 0 },\n\t position: null,\n\t scale: 1\n\t});\n\n\t// Previous versions of this lib exported <Draggable> as the root export. As to not break\n\t// them, or TypeScript, we export *both* as the root and as 'default'.\n\t// See https://github.com/mzabriskie/react-draggable/pull/254\n\t// and https://github.com/mzabriskie/react-draggable/issues/266\n\tDraggable.default = Draggable;\n\tDraggable.DraggableCore = DraggableCore;\n\n\treturn Draggable;\n\n})));\n//# sourceMappingURL=react-draggable.js.map\n","import React, {Component} from 'react'\nimport { Header, Message, Divider } from 'semantic-ui-react'\nimport Draggable from 'react-draggable';\n\nclass InfoBox extends Component{\n\n constructor(props) {\n super(props)\n this.state = {\n style: {\n position:'fixed', \n top: 200, \n left: 200, \n width: 250\n }\n }\n }\n\n componentDidMount(){\n this.updateStyle()\n }\n\n componentDidUpdate(prevProps){\n if (this.props.defaultPos !== prevProps.defaultPos){\n this.updateStyle()\n }\n }\n\n handleOnStop(e){\n if (this.props.onStop){\n this.props.onStop(e)\n }\n }\n\n updateStyle(){\n this.setState({\n style: {...this.state.style,\n ...this.props.defaultPos}\n })\n }\n\n onDismiss(e){\n if (this.props.onDismiss){\n this.props.onDismiss(e)\n }\n }\n\n \n render(){\n if (!this.props.visible) return null\n return(\n <Draggable handle=\".handle\" onStop={e => this.handleOnStop(e)}\n >\n <div \n style={this.state.style}>\n \n <Message \n style={{opacity:0.98}}\n onDismiss={e => {this.onDismiss(e)}}\n size=\"small\"\n >\n <Header textAlign='center' as='h5' className=\"handle\" style={{cursor: 'grab'}}>{this.props.header}</Header>\n {/* <Message.Header textAlign='center' className=\"handle\" style={{cursor: 'grab'}}>{this.props.header}</Message.Header> */}\n <Divider></Divider>\n <Message.Content>\n {this.props.content}\n </Message.Content>\n </Message>\n\n </div> \n \n \n </Draggable>\n )\n }\n}\n\nexport default InfoBox","import React, { useEffect, useState, useRef } from 'react';\nimport {Popup} from 'semantic-ui-react'\n\nconst SiaPopup = ({content, trigger}) => {\n\n return <Popup inverted style={{opacity:0.9}} content={content} trigger={trigger}/>\n\n}\n\nexport default SiaPopup","import React, { useState, useEffect, useRef } from 'react'\nimport { List, Divider, Button, TextArea, Form, Label, Icon } from 'semantic-ui-react'\nimport InfoBox from './InfoBox'\nimport PopUp from '../SiaPopup'\n\nconst AnnoDetails = (props) => {\n const [comment, setComment] = useState('')\n const [example, setExample] = useState(false)\n const [showSaveBtn, setShowSaveBtn] = useState(false)\n const tARef = useRef()\n useEffect(() => {\n if (props.anno) {\n if (props.anno.comment) {\n setComment(props.anno.comment)\n } else {\n setComment('')\n }\n }\n }, [props.anno])\n\n useEffect(() => {\n if (tARef.current) {\n tARef.current.focus()\n }\n }, [props.commentInputTrigger])\n\n const onDismiss = () => {\n if (props.onDismiss) {\n props.onDismiss()\n }\n }\n\n const onCommentUpdate = () => {\n if (props.onCommentUpdate) {\n props.onCommentUpdate(comment)\n }\n setShowSaveBtn(false)\n }\n\n const onMarkExampleClick = () => {\n // setExample(!example)\n if (props.onMarkExample) {\n props.onMarkExample(props.anno)\n }\n }\n\n const renderSaveBtn = () => {\n if (showSaveBtn) {\n return <Label as=\"a\" corner=\"right\" icon=\"save\" color=\"red\"></Label>\n }\n }\n\n const renderComment = () => {\n return (\n <div>\n <Form onClick={() => {}}>\n {renderSaveBtn()}\n <TextArea\n placeholder=\"Write a comment\"\n ref={tARef}\n value={comment}\n rows={2}\n onBlur={() => onCommentUpdate()}\n onFocus={() => setShowSaveBtn(true)}\n onChange={(e) => setComment(e.target.value)}\n ></TextArea>\n </Form>\n </div>\n )\n }\n const renderLabels = () => {\n if (props.anno) {\n const selectedLabelIds = props.anno.labelIds\n if (!selectedLabelIds) return 'No Label'\n\n let lbls = ''\n props.anno.labelIds.forEach((lbl, idx) => {\n const labelObject = props.possibleLabels.find((el) => {\n return el.id === lbl\n })\n if (idx > 0) lbls += ', '\n lbls += labelObject.label\n })\n if (!lbls) return 'No Label'\n return lbls\n } else {\n return 'No Label'\n }\n }\n\n const renderExampleMark = () => {\n if (!props.allowedToMarkExample) return null\n let color = 'grey'\n let iconName = 'bookmark outline'\n if (props.anno) {\n if (props.anno.isExample) {\n color = 'yellow'\n iconName = 'bookmark'\n }\n }\n const mark = (\n <Label\n as=\"a\"\n color={color}\n style={{ opacity: 0.8 }}\n size=\"medium\"\n corner=\"left\"\n onClick={() => {\n onMarkExampleClick()\n }}\n >\n <Icon name={iconName} />\n </Label>\n )\n return (\n <PopUp\n content=\"Mark this annotation as example for other annotators\"\n trigger={mark}\n />\n )\n }\n\n const renderDescription = () => {\n if (props.anno) {\n return (\n <div>\n {renderExampleMark()}\n {/* <Header> \n Labels\n </Header>\n <div>\n {renderLabels()}\n </div> */}\n <List>\n <List.Item icon=\"at\" content={props.anno.id} />\n <List.Item icon=\"tag\" content={renderLabels()} />\n <List.Item\n icon=\"time\"\n content={`${props.anno.annoTime.toLocaleString('us', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })} seconds`}\n />\n {/* <List.Item icon='time' content={props.anno.annoTime} /> */}\n </List>\n {/* <Divider horizontal> Comment </Divider> */}\n {renderComment()}\n </div>\n )\n } else {\n return 'No annotation selected!'\n }\n }\n\n return (\n <InfoBox\n header={'Annotation Details'}\n content={renderDescription()}\n visible={props.visible}\n defaultPos={props.defaultPos}\n onDismiss={(e) => onDismiss()}\n />\n )\n}\n\nexport default AnnoDetails\n","import React, {useState, useEffect, useRef} from 'react'\n// import {connect} from 'react-redux'\nimport { List, Table, Button, Icon, Divider, Header, TextArea, Form, Label} from 'semantic-ui-react'\nimport InfoBox from './InfoBox'\nimport * as colorlut from '../utils/colorlut'\n// import actions from '../../../../actions'\n// import * as transform from '../utils/transform'\n// const { siaShowImgBar } = actions\n\nconst AnnoStats = (props) => {\n\n const [hideList, setHideList] = useState([])\n\n useEffect(() => {\n setHideList([])\n }, [props.imgLoadCount])\n\n const onDismiss = () => {\n if (props.onDismiss){\n props.onDismiss()\n }\n }\n\n const onLblClick = (lbl) => {\n let hideLbl = false\n if (hideList.includes(lbl.id)){\n setHideList(hideList.filter(e => e !== lbl.id))\n hideLbl = false\n } else {\n // hideList.push(lbl.id)\n setHideList([...hideList, lbl.id])\n hideLbl = true\n }\n if (props.onHideLbl){\n props.onHideLbl(lbl, hideLbl)\n }\n }\n\n const renderRow = (s) => {\n\n const opacity = hideList.includes(s.id) ? 0.5 : 1.0\n return <List.Item key={s.id}>\n <List.Content>\n <Label as='a' tag style={{background:s.color, opacity:opacity}}\n onClick={() => onLblClick(s)}\n >\n {s.label}\n <Label.Detail>{s.amount}</Label.Detail>\n </Label>\n </List.Content>\n </List.Item>\n }\n\n const renderRows = () => {\n let stats = {}\n props.annos.forEach(a => {\n // console.log('render rows', a)\n if (a.status !== 'deleted'){\n a.labelIds.forEach(lblId => {\n if (lblId in stats){\n stats[lblId] += 1\n } else {\n stats[lblId] = 1\n } \n })\n if (a.labelIds.length === 0) {\n if (-1 in stats){\n stats[-1] += 1\n } else {\n stats[-1] = 1\n } \n }\n }\n\n })\n const res = Object.entries(stats).map(([key, value]) => {\n let lbl = props.possibleLabels.find(e => {\n return e.id === parseInt(key)})\n if (!lbl){\n lbl = {'id':-1, 'label': 'No Label', 'color':colorlut.getDefaultColor()}\n }\n\n lbl.amount = value\n // return renderRow({class:idToLbl[key], amount:value, color:idToColor[key]})\n return renderRow(lbl)\n })\n return res\n }\n const renderDescription = () => {\n return <List>\n {renderRows()}\n </List>\n }\n \n return <InfoBox\n header={'Annotations per Label'}\n content={renderDescription()}\n visible={props.visible}\n defaultPos={props.defaultPos}\n onDismiss={e => onDismiss()}\n />\n}\n\nexport default AnnoStats","import Prompt from './Prompt'\nimport React, {useState} from 'react'\nimport { Card, Divider, Dimmer, Header, Image } from 'semantic-ui-react'\n\nconst LabelExampleViewer = (props) => {\n\n const requestExample = (e) => {\n e.stopPropagation()\n if (props.onRequestExample){\n props.onRequestExample()\n }\n }\n const renderContent = () => {\n if (!props.lbl) return null\n if (!props.exampleImg) return null\n const description = <div>\n {/* <Divider horizontal> Description </Divider> */}\n {props.lbl.description}\n <Divider horizontal> comment </Divider>\n { props.exampleImg.anno ? props.exampleImg.anno.comment : \"no comment\" }\n </div>\n return <div>\n <Card \n \n // image={props.exampleImg.img}\n // description={props.lbl.description}\n // header={props.lbl.label}\n // // description={props.exampleImg.anno.comment}\n // extra={props.exampleImg.anno.comment}\n >\n <Image onClick={(e) => requestExample(e)} src={props.exampleImg.img} wrapped ui={false} />\n <Card.Content>\n <Card.Header >{props.lbl.label}</Card.Header>\n {/* <Card.Description>{props.lbl.description}</Card.Description> */}\n <Card.Description>{description}</Card.Description>\n {/* <Card.Description>{props.exampleImg.anno.comment}</Card.Description> */}\n </Card.Content>\n </Card>\n {/* <Header inverted>{props.lbl.label}</Header>\n {props.lbl.description}\n <Image src={props.exampleImg.img} centered size='medium'></Image> */}\n </div>\n }\n\n const handlePromptClick = () => {\n if (props.onClose){\n props.onClose()\n }\n }\n\n return <Prompt onClick={() => {handlePromptClick()}}\n active={props.active} content={renderContent()} \n />\n\n}\n\nexport default LabelExampleViewer","import React, {useEffect, useState} from 'react'\nimport { Divider, Image, Card, Header } from 'semantic-ui-react'\nimport InfoBox from './InfoBox'\nimport SiaPopup from '../SiaPopup'\nimport AnnoExampleViewer from '../AnnoExampleViewer'\nconst LabelInfo = (props) => {\n\n const [showExampleViewer, setShowExampleViewer] = useState(false)\n const [myLbl, setMyLbl] = useState(undefined)\n // const { data: exampleImg, mutate: getAnnoExample } = exampleApi.useGetAnnoExampleImg({})\n useEffect(() => {\n if (props.selectedAnno){\n const selectedLabelIds = props.selectedAnno.labelIds\n if (selectedLabelIds) {\n const lbl = props.possibleLabels.find( e => {\n return selectedLabelIds[0] === e.id\n })\n if (lbl){\n if (lbl !== myLbl){\n setMyLbl(lbl)\n if (props.visible)\n // getAnnoExample({llId:lbl.id, type:'annoBased', drawAnno: true, addContext:0.05})\n requestImg(lbl, props.selectedAnno)\n }\n }\n }\n }\n }, [props.selectedAnno])\n const onDismiss = () => {\n if (props.onDismiss){\n props.onDismiss()\n }\n }\n\n const requestImg = (lbl, anno) => {\n if (props.onGetAnnoExample){\n props.onGetAnnoExample({lbl:lbl, anno:anno})\n }\n }\n\n const handleImgClick = () => {\n console.log('clicked img')\n // setShowExampleViewer(true)\n // requestImg(myLbl, props.selectedAnno)\n\n setShowExampleViewer(true)\n // getAnnoExample({llId:myLbl.id, type:'annoBased', drawAnno: true, addContext:0.05})\n }\n\n const renderExampleImg = () => {\n if (!props.exampleImg) return null\n return <div>\n <Divider onClick={() => handleImgClick()} horizontal> Example </Divider>\n <SiaPopup trigger={<Image src={props.exampleImg.img} rounded centered size='medium'\n onClick={() => handleImgClick()}\n />}\n content={'Click on image to view more examples'} />\n {/* <Image src='https://www.gstatic.com/webp/gallery3/1.png'/> */}\n </div>\n }\n\n const renderDescription = () => {\n // if (props.selectedAnno){\n // if (myLbl){\n // const selectedLabelIds = props.selectedAnno.labelIds\n // if (!selectedLabelIds) return 'No Label'\n // const lbl = props.possibleLabels.find( e => {\n // return selectedLabelIds[0] === e.id\n // })\n if (!myLbl) return \"No Label\"\n return <div>\n <Header>{\n myLbl.label\n }</Header>\n <div dangerouslySetInnerHTML={{__html: myLbl.description}} />\n {renderExampleImg()}\n <AnnoExampleViewer onRequestExample={() => requestImg(myLbl, props.selectedAnno)} onClose={() => {setShowExampleViewer(false)}} active={showExampleViewer} lbl={myLbl} exampleImg={props.exampleImg} />\n </div>\n // } else {\n // return 'No Label'\n // }\n }\n\n\n return <InfoBox\n header=\"Label Info\"\n content={renderDescription()}\n visible={props.visible}\n defaultPos={props.defaultPos}\n onDismiss={() => onDismiss()}\n />\n}\n\n\nexport default LabelInfo\n","import React, {Component} from 'react'\n// import {connect} from 'react-redux'\nimport AnnoDetails from './AnnoDetails'\nimport AnnoStats from './AnnoStats'\nimport LabelInfo from './LabelInfo'\n// import actions from '../../../../actions'\n// const { siaShowImgBar, siaSetUIConfig } = actions\n\nclass InfoBoxes extends Component{\n\n constructor(props) {\n super(props)\n this.state = {\n position: {\n top: 0,\n left: 0,\n }\n }\n }\n\n componentDidMount(){\n this.updateLayout()\n \n }\n\n componentDidUpdate(prevProps){\n\n if (this.props.layoutUpdate !== prevProps.layoutUpdate){\n this.updateLayout()\n }\n if (this.props.commentInputTrigger !== prevProps.commentInputTrigger){\n if (!this.props.uiConfig.annoDetails.visible){\n this.showAnnoDetails(true)\n }\n }\n }\n\n updateLayout(){\n if (this.props.container.current){\n const container = this.props.container.current.getBoundingClientRect()\n this.setState({\n position: {...this.state.position,\n left: container.right - 250,\n top: container.top,\n }\n })\n }\n }\n\n showAnnoDetails(show=true){\n this.props.onUiConfigUpdate(\n {...this.props.uiConfig,\n annoDetails: {\n ...this.props.uiConfig.annoDetails,\n visible: show\n }\n }\n )\n }\n\n onDismiss(type){\n if (this.props.onUiConfigUpdate){\n switch (type){\n case 'AnnoDetails':\n this.showAnnoDetails(false)\n break\n case 'LabelInfo':\n this.props.onUiConfigUpdate(\n {...this.props.uiConfig,\n labelInfo: {\n ...this.props.uiConfig.labelInfo,\n visible: false\n }\n }\n )\n break\n case 'AnnoStats':\n this.props.onUiConfigUpdate(\n {...this.props.uiConfig,\n annoStats: {\n ...this.props.uiConfig.annoStats,\n visible: false\n }\n }\n )\n break\n default:\n break\n }\n }\n }\n\n onCommentUpdate(comment){\n if (this.props.onCommentUpdate){\n this.props.onCommentUpdate(comment)\n }\n }\n\n onMarkExample(anno){\n if (this.props.onMarkExample){\n this.props.onMarkExample(anno)\n }\n }\n\n onHideLbl(lbl, hide){\n if(this.props.onHideLbl){\n this.props.onHideLbl(lbl, hide)\n }\n }\n\n render(){\n if (!this.props.annos) return null\n // if (!this.props.selectedAnno) return null\n return(\n <div >\n <LabelInfo selectedAnno={this.props.selectedAnno}\n possibleLabels={this.props.possibleLabels}\n defaultPos={this.state.position}\n onDismiss={() => this.onDismiss('LabelInfo')}\n visible={this.props.uiConfig.labelInfo.visible}\n onGetAnnoExample={(exampleArgs) => this.props.onGetAnnoExample ? this.props.onGetAnnoExample(exampleArgs):{} }\n exampleImg={this.props.exampleImg}\n />\n <AnnoDetails anno={this.props.selectedAnno} \n possibleLabels={this.props.possibleLabels}\n defaultPos={{\n left: this.state.position.left - 300,\n top: this.state.position.top\n }}\n onDismiss={() => this.onDismiss('AnnoDetails')}\n onCommentUpdate={(comment) => this.onCommentUpdate(comment)}\n onMarkExample={(anno) => this.onMarkExample(anno)}\n allowedToMarkExample={this.props.allowedToMarkExample}\n commentInputTrigger={this.props.commentInputTrigger}\n visible={this.props.uiConfig.annoDetails.visible}\n />\n <AnnoStats selectedAnno={this.props.selectedAnno}\n annos={this.props.annos}\n possibleLabels={this.props.possibleLabels}\n defaultPos={{\n left: this.state.position.left,\n top: this.state.position.top + 400\n }}\n // defaultPos={this.state.position}\n onDismiss={() => this.onDismiss('AnnoStats')}\n onHideLbl={(lbl, hide) => this.onHideLbl(lbl, hide)}\n visible={this.props.uiConfig.annoStats.visible}\n imgLoadCount={this.props.imgLoadCount}\n />\n </div>\n )\n }\n}\n\nexport default InfoBoxes","import React, {Component} from 'react'\nimport _ from 'lodash'\nimport Annotation from './Annotation/Annotation'\nimport AnnoLabelInput from './AnnoLabelInput'\nimport ImgBar from './ImgBar'\nimport Prompt from './Prompt'\nimport LabelInput from './LabelInput'\nimport AnnoToolBar from './AnnoToolBar'\n\nimport * as annoConversion from './utils/annoConversion'\nimport * as keyActions from './utils/keyActions'\nimport KeyMapper from './utils/keyActions'\nimport * as TOOLS from './types/tools'\nimport * as modes from './types/modes'\nimport UndoRedo from './utils/hist'\nimport * as annoStatus from './types/annoStatus'\nimport * as canvasActions from './types/canvasActions'\nimport { Loader, Dimmer, Icon, Header, Button, Form, TextArea} from 'semantic-ui-react';\nimport * as mouse from './utils/mouse';\nimport * as colorlut from './utils/colorlut'\nimport * as notificationType from './types/notificationType'\nimport * as wv from './utils/windowViewport'\n\nimport './SIA.scss'\nimport InfoBoxes from './InfoBoxes/InfoBoxArea'\n\n\n/**\n * SIA Canvas element that handles annotations within an image\n * \n * @param {React.Ref} container - A react ref to a div that defines the\n * space where this Canvas lives in.\n * @param {object} annos - A json object containing all annotation \n * information for an image\n * {\n * image : {\n * id: int, \n * number: int, \n * amount: int, \n * isFirst: bool, \n * isLast: bool,\n * description: string, // -> optional\n * },\n * annotations: {\n * bBoxes: [{\n * id: int, // -> Not required if status === annoStatus.NEW\n * data: {},\n * labelIds: list of int, // -> optional\n * status: see annoStatus, // -> optional\n * annoTime: float, // -> optional\n * },...],\n * points: []\n * lines: []\n * polygons: []\n * }\n * }\n * @param {object} possibleLabels - Possible labels that can be assigned to \n * an annotation.\n * { \n * id: int, \n * description: str, \n * label: str, (name of the label) \n * color: str (color is optional)\n * }\n * @param {blob} imageBlob - The actual image blob that will be displayed\n * @param {object} uiConfig - User interface configs \n * {\n * nodesRadius: int, strokeWidth: int,\n * layoutOffset: {left:int, top:int, right:int, bottom:int}, -> Offset of the canvas inside the container\n * imgBarVisible: bool,\n * imgLabelInputVisible: bool,\n * centerCanvasInContainer: bool, -> Center the canvas in the middle of the container.\n * maxCanvas: bool -> Maximize Canvas Size. Do not fit canvas to image size.\n * }\n * @param {int} layoutUpdate - A counter that triggers a layout update\n * everytime it is incremented.\n * @param {string} selectedTool - The tool that is selected to draw an \n * annotation. Possible choices are: 'bBox', 'point', 'line', 'polygon'\n * @param {object} canvasConfig - Configuration for this canvas\n * {\n * annos:{\n * tools: {\n * point: bool,\n * line: bool,\n * polygon: bool,\n * bbox: bool\n * },\n * multilabels: bool,\n * actions: {\n * draw: bool,\n * label: bool,\n * edit: bool,\n * },\n * maxAnnos: null or int,\n * minArea: int\n * },\n * img: {\n * multilabels: bool,\n * actions: {\n * label: bool,\n * }\n * },\n * allowedToMarkExample: bool, -> Indicates wether the current user is allowed to mark an annotation as example.\n * autoSaveInterval: int -> Interval in seconds when an autosave will be requested by canvas\n * }\n * @param {str or int} defaultLabel (optional) - Name or ID of the default label that is used\n * when no label was selected by the annotator. If not set \"no label\" will be used.\n * If ID is used, it needs to be one of the possible label ids.\n * @param {bool} blocked Block canvas view with loading dimmer.\n * @param {bool} preventScrolling Prevent scrolling on mouseEnter\n * @param {int} nextAnnoId Id that will be used for the next annotation that \n * will be created. If undefined, the canvas will create its own ids.\n * @param {bool} lockedAnnos A list of AnnoIds of annos that should only be displayed.\n * Such annos can not be edited in any way.\n * @event onNotification - Callback for Notification messages\n * args: {title: str, message: str, type: str}\n * @event onKeyDown - Fires for keyDown on canvas \n * @event onKeyUp - Fires for keyUp on canvas \n * @event onAnnoEvent - Fires when an anno performed an action\n * args: {anno: annoObject, newAnnos: list of annoObjects, pAction: str}\n * @event onCanvasEvent - Fires on canvas event\n * args: {action: action, data: dataObject}\n * action -> CANVAS_SVG_UPDATE \n * data: {width: int, height: int, scale: float, translateX: float,\n * translateY:float}\n * action -> CANVAS_UI_CONFIG_UPDATE\n * action -> CANVAS_LABEL_INPUT_CLOSE \n * action -> CANVAS_IMG_LOADED\n * action -> CANVAS_IMGBAR_CLOSE\n * @event onImgBarClose - Fires when close button on ImgBar was hit.\n * @event onGetFunction - Get special canvas functions for manipulation from outside canvas\n * deleteAllAnnos()\n * unloadImage()\n * resetZoom()\n * getAnnos(annos,removeFrontendIds)\n */\nclass Canvas extends Component{\n\n constructor(props){\n super(props)\n this.state = {\n \n svg: {\n width: '100%',\n height: '100%',\n scale:1.0,\n translateX:0,\n translateY:0\n },\n image: {\n width: undefined,\n height: undefined\n },\n imageOffset: {\n x: 0,\n y: 0\n },\n annos: [],\n mode: modes.VIEW,\n // selectedAnnoId: {id:undefined},\n selectedAnnoId: undefined,\n showSingleAnno: undefined,\n showLabelInput: false,\n imageLoaded: false,\n imgLoadCount: 0,\n imgLabelIds: [],\n imgLabelChanged: false,\n imgAnnoTime: 0,\n imgLoadTimestamp: 0,\n performedImageInit: false,\n prevLabel: [],\n imageBlob: undefined,\n isJunk: false,\n imgBarVisible:false,\n annoToolBarVisible: false,\n possibleLabels: undefined,\n annoCommentInputTrigger: 0,\n // showAnnoCommentInput: false\n }\n this.img = React.createRef()\n this.svg = React.createRef()\n this.container = React.createRef()\n this.hist = new UndoRedo()\n this.keyMapper = new KeyMapper((keyAction) => this.handleKeyAction(keyAction))\n this.mousePosAbs = undefined\n this.clipboard = undefined\n this.autoSaveI = undefined\n }\n\n componentDidMount(){\n this.updatePossibleLabels()\n if (Number.isInteger(this.props.defaultLabel)){\n\n this.setState({prevLabel:[this.props.defaultLabel]})\n }\n if (this.props.canvasConfig.autoSaveInterval){\n this.autoSaveI = setInterval(() => {\n // console.log('AutoSave')\n // this.props.onAutoSave()\n this.triggerCanvasEvent(canvasActions.CANVAS_AUTO_SAVE)\n }, this.props.canvasConfig.autoSaveInterval*1000)\n }\n if (this.props.onGetFunction){\n this.props.onGetFunction({\n 'deleteAllAnnos':() => this.deleteAllAnnos(),\n 'unloadImage': () => this.unloadImage(),\n 'resetZoom': () => this.resetZoom(),\n 'getAnnos': (annos,removeFrontendIds) => this.getAnnos(annos, removeFrontendIds)\n })\n // this.props.onGetFunction(\n // () => this.deleteAllAnnos()\n // )\n }\n }\n\n componentWillUnmount(){\n clearInterval(this.autoSaveI)\n console.log('Cleard auto save interval!')\n }\n\n componentDidUpdate(prevProps, prevState){\n // if (this.props.image.id !== prevProps.image.id){\n \n // }\n if (prevProps.imageMeta !== this.props.imageMeta){\n this.setState({\n imgLabelIds: this.props.imageMeta.labelIds,\n imgAnnoTime: this.props.imageMeta.annoTime,\n imgLoadTimestamp: performance.now()\n // isJunk: this.props.annos.image.isJunk\n })\n }\n if (prevProps.annos !== this.props.annos){\n if (this.state.imageBlob) { \n this.updateCanvasView(\n annoConversion.fixBackendAnnos(this.props.annos) \n ) \n }\n // this.setState({\n // imageLoaded: false,\n // // imageBlob: undefined\n // })\n }\n if (prevProps.isJunk !== this.props.isJunk){\n if (this.state.isJunk !== this.props.isJunk){\n this.setState({\n isJunk: this.props.isJunk\n })\n }\n }\n if (this.state.imageBlob !== this.props.imageBlob){\n this.setState({imageBlob: this.props.imageBlob})\n }\n // if (!this.state.imageLoaded){\n // if(this.props.annos.image.id === this.props.image.id){\n // this.setState({\n // imageLoaded: true\n // })\n // if (this.props.onImageLoaded){\n // this.props.onImageLoaded()\n // }\n // }\n // }\n if (this.props.possibleLabels !== prevProps.possibleLabels){\n this.updatePossibleLabels()\n }\n if (this.state.performedImageInit){\n // Initialize canvas history\n this.setState({\n performedImageInit:false,\n annoToolBarVisible:false\n })\n if (this.props.uiConfig.imgBarVisible){\n this.setState({imgBarVisible:true})\n }\n this.hist.clearHist()\n this.hist.push({\n ...this.getAnnos(),\n selectedAnnoId: undefined\n }, 'init')\n }\n if (this.state.imageLoaded){\n // Selected annotation should be on top\n this.putSelectedOnTop(prevState)\n if (prevState.imgLoadCount !== this.state.imgLoadCount){\n this.updateCanvasView(\n annoConversion.fixBackendAnnos(this.props.annos)\n )\n if (this.props.imageMeta){\n this.setImageLabels(this.props.imageMeta.labelIds)\n this.setState({\n performedImageInit:true\n })\n }\n } \n if(prevProps.layoutUpdate !== this.props.layoutUpdate){\n this.selectAnnotation(undefined)\n // this.updateCanvasView(this.getAnnoBackendFormat())\n // const {imageOffset} = this.updateImageSize()\n this.updateCanvasView(annoConversion.canvasToBackendAnnos(\n this.state.annos, this.state.svg, false, this.state.imageOffset\n ))\n }\n \n }\n }\n\n onImageLoad(){\n this.setState({\n imageLoaded: true,\n imgLoadCount: this.state.imgLoadCount + 1,\n showLabelInput: false,\n showSingleAnno: undefined,\n selectedAnnoId: undefined\n })\n this.triggerCanvasEvent(canvasActions.CANVAS_IMG_LOADED)\n // if (this.props.onImageLoaded){\n // this.props.onImageLoaded()\n // }\n }\n\n onMouseOver(){\n this.svg.current.focus()\n //Prevent scrolling on svg\n if (this.props.preventScrolling){\n document.body.style.overflow = 'hidden'\n }\n }\n\n onMouseLeave(){\n if (this.props.preventScrolling){\n document.body.style.overflow = ''\n }\n }\n\n onWheel(e){\n // Zoom implementation. Note that svg is first scaled and \n // second translated!\n const up = e.deltaY < 0\n const mousePos = this.getMousePosition(e)\n const zoomFactor=1.25\n let nextScale\n if (up) {\n nextScale = this.state.svg.scale * zoomFactor\n \n } else {\n nextScale = this.state.svg.scale / zoomFactor\n }\n let newTranslation\n //Constrain zoom\n if (nextScale < 1.0){\n nextScale = 1.0\n newTranslation = {x:0, y:0}\n } else if (nextScale > 200.0){\n nextScale = 200.0\n newTranslation = wv.getZoomTranslation(mousePos, this.state.svg, nextScale)\n } else {\n newTranslation = wv.getZoomTranslation(mousePos, this.state.svg, nextScale)\n }\n this.setState({svg: {\n ...this.state.svg,\n scale: nextScale,\n // translateX: -1*(mousePos.x * nextScale - mousePos.x)/nextScale,\n // translateY: -1*(mousePos.y * nextScale - mousePos.y)/nextScale\n translateX: newTranslation.x,\n translateY: newTranslation.y\n }})\n return false\n }\n\n onRightClick(e){\n e.preventDefault()\n }\n\n onMouseDown(e){\n if (e.button === 0){\n this.selectAnnotation(undefined)\n }\n else if (e.button === 1){\n this.setMode(modes.CAMERA_MOVE)\n }\n else if (e.button === 2){\n //Create annotation on right click\n this.createNewAnnotation(e)\n }\n }\n\n onAnnoMouseDown(e){\n if (e.button === 1){\n // this.collectAnnos()\n this.setMode(modes.CAMERA_MOVE)\n }\n else if (e.button === 2){\n //Create annotation on right click\n this.createNewAnnotation(e)\n }\n else if (e.button === 0){\n if (this.state.showLabelInput){\n const anno = this.findAnno(this.state.selectedAnnoId)\n this.updateSelectedAnno(anno, modes.VIEW)\n this.showSingleAnno(undefined)\n this.showLabelInput(false)\n }\n }\n }\n\n onMouseUp(e){\n switch (e.button){\n case 1:\n this.setMode(modes.VIEW)\n break\n default:\n break\n }\n }\n\n // handleAnnoCommentInputClose(comment){\n // const anno = this.findAnno(this.state.selectedAnnoId)\n // anno.comment = comment\n // this.stopAnnotimeMeasure(anno)\n // this.updateSelectedAnno(anno, modes.VIEW)\n // console.log('handleAnnoCommentInputClose', comment)\n // }\n \n updateAnnoComment(comment){\n const anno = this.findAnno(this.state.selectedAnnoId)\n anno.comment = comment\n this.handleAnnoEvent(anno, canvasActions.ANNO_COMMENT_UPDATE)\n // this.stopAnnotimeMeasure(anno)\n // console.log('updateAnnoComment', comment)\n }\n\n handleKeyAction(action){\n const anno = this.findAnno(this.state.selectedAnnoId)\n const camKeyStepSize = 20 * this.state.svg.scale\n\n switch(action){\n case keyActions.EDIT_LABEL:\n // Need to get the newest version of annotation data directly \n // from annotation object, when editing label/ hitting enter\n // in create mode, since annotation data in canvas are not updated\n // to this point in time. \n const ar = this.findAnnoRef(this.state.selectedAnnoId)\n let myAnno = undefined\n if (ar !== undefined){\n myAnno = ar.current.myAnno.current.getResult()\n }\n this.editAnnoLabel(myAnno)\n break\n case keyActions.DELETE_ANNO:\n this.deleteAnnotation(anno)\n break\n case keyActions.TOGGLE_ANNO_COMMENT_INPUT:\n if (this.state.selectedAnnoId) {\n this.setState({annoCommentInputTrigger: this.state.annoCommentInputTrigger+1})\n // this.startAnnotimeMeasure(anno)\n // this.showSingleAnno(this.state.selectedAnnoId)\n }\n break\n case keyActions.DELETE_ANNO_IN_CREATION:\n this.deleteAnnoInCreationMode(anno)\n break\n case keyActions.ENTER_ANNO_ADD_MODE:\n if (anno){\n this.updateSelectedAnno(\n anno, modes.ADD\n )\n // this.showSingleAnno(anno.id)\n }\n break\n case keyActions.LEAVE_ANNO_ADD_MODE:\n if (anno){\n this.updateSelectedAnno(\n anno, modes.VIEW\n )\n // this.showSingleAnno(undefined)\n }\n break\n case keyActions.UNDO:\n this.undo()\n break\n case keyActions.REDO:\n this.redo()\n break\n case keyActions.TRAVERSE_ANNOS:\n this.traverseAnnos()\n break\n case keyActions.CAM_MOVE_LEFT:\n // this.setMode(modes.CAMERA_MOVE)\n this.moveCamera(camKeyStepSize, 0)\n break\n case keyActions.CAM_MOVE_RIGHT:\n this.moveCamera(-camKeyStepSize, 0)\n break\n case keyActions.CAM_MOVE_UP:\n this.moveCamera(0, camKeyStepSize)\n break\n case keyActions.CAM_MOVE_DOWN:\n this.moveCamera(0, -camKeyStepSize)\n break\n case keyActions.CAM_MOVE_STOP:\n // this.setMode(modes.VIEW)\n break\n case keyActions.COPY_ANNOTATION:\n this.copyAnnotation()\n break\n case keyActions.PASTE_ANNOTATION:\n this.pasteAnnotation(0)\n break\n case keyActions.RECREATE_ANNO:\n // recreate selected annotation using the anno id\n if(this.state.selectedAnnoId) this.recreateAnnotation(this.state.selectedAnnoId)\n break\n default:\n console.warn('Unknown key action', action)\n }\n\n }\n\n onKeyDown(e){\n e.preventDefault()\n this.keyMapper.keyDown(e.key)\n // this.findAnno(this.state.selectedAnnoId)\n if (this.props.onKeyDown){\n this.props.onKeyDown(e)\n }\n }\n\n onKeyUp(e){\n e.preventDefault()\n this.keyMapper.keyUp(e.key)\n if (this.props.onKeyUp){\n this.props.onKeyUp(e)\n }\n }\n\n onMouseMove(e){\n if (this.state.mode === modes.CAMERA_MOVE){\n this.moveCamera(e.movementX, e.movementY)\n }\n }\n\n onLabelInputDeleteClick(annoId){\n this.removeSelectedAnno()\n }\n \n \n /**\n * Trigger canvas event\n * @param {String} action Action that was performed\n * @param {Object} data Data object of the action\n */\n triggerCanvasEvent(action, data){\n if (this.props.onCanvasEvent){\n this.props.onCanvasEvent(action, data)\n }\n }\n\n /**\n * Handle actions that have been performed by an annotation \n * @param {Number} anno Id of the annotation\n * @param {String} pAction Action that was performed\n */\n handleAnnoEvent(anno, pAction){\n let newAnnos = undefined\n switch(pAction){\n case canvasActions.ANNO_MARK_EXAMPLE:\n newAnnos = this.updateSelectedAnno(anno, modes.VIEW)\n this.pushHist(\n newAnnos, anno.id,\n pAction, this.state.showSingleAnno\n )\n break\n case canvasActions.ANNO_SELECTED:\n this.selectAnnotation(anno.id)\n // this.pushHist(\n // this.state.annos, anno.id,\n // pAction, this.state.showSingleAnno\n // )\n break\n case canvasActions.ANNO_START_CREATING:\n newAnnos = this.updateSelectedAnno(anno)\n this.pushHist(\n newAnnos, anno.id,\n pAction, this.state.showSingleAnno\n )\n break\n case canvasActions.ANNO_CREATED:\n anno = this.stopAnnotimeMeasure(anno)\n newAnnos = this.updateSelectedAnno(anno, modes.VIEW)\n this.pushHist(\n newAnnos, anno.id,\n pAction, undefined\n )\n this.showSingleAnno(undefined)\n this.setState({annoToolBarVisible:true})\n break\n case canvasActions.ANNO_MOVED:\n anno = this.stopAnnotimeMeasure(anno)\n newAnnos = this.updateSelectedAnno(anno, modes.VIEW)\n this.showSingleAnno(undefined)\n this.pushHist(\n newAnnos, anno.id,\n pAction, undefined\n )\n this.setState({annoToolBarVisible:true})\n break\n case canvasActions.ANNO_ENTER_MOVE_MODE:\n anno = this.startAnnotimeMeasure(anno)\n this.updateSelectedAnno(anno, modes.MOVE)\n this.showSingleAnno(anno.id)\n this.setState({annoToolBarVisible:false})\n break\n case canvasActions.ANNO_ENTER_EDIT_MODE:\n anno = this.startAnnotimeMeasure(anno)\n this.updateSelectedAnno(anno, modes.EDIT)\n // this.showSingleAnno(anno.id)\n this.setState({annoToolBarVisible:false})\n break\n case canvasActions.ANNO_ADDED_NODE:\n newAnnos = this.updateSelectedAnno(anno, modes.VIEW)\n this.pushHist(\n newAnnos, anno.id,\n pAction, this.state.showSingleAnno\n )\n break\n case canvasActions.ANNO_REMOVED_NODE:\n if (!this.checkAnnoLength(anno)){\n newAnnos = this.updateSelectedAnno(anno, modes.DELETED)\n this.showSingleAnno(undefined)\n } else {\n newAnnos = this.updateSelectedAnno(anno, modes.CREATE)\n }\n this.pushHist(\n newAnnos, anno.id,\n pAction, this.state.showSingleAnno\n )\n break\n case canvasActions.ANNO_EDITED:\n anno = this.stopAnnotimeMeasure(anno)\n newAnnos = this.updateSelectedAnno(anno, modes.VIEW)\n this.pushHist(\n newAnnos, anno.id,\n pAction, this.state.showSingleAnno\n )\n this.setState({annoToolBarVisible:true})\n break\n case canvasActions.ANNO_DELETED:\n newAnnos = this.updateSelectedAnno(anno, modes.DELETED)\n this.selectAnnotation(undefined)\n this.showSingleAnno(undefined)\n this.pushHist(\n newAnnos, undefined,\n pAction, this.state.showSingleAnno\n )\n break\n case canvasActions.ANNO_COMMENT_UPDATE:\n newAnnos = this.updateSelectedAnno(anno, modes.VIEW)\n // newAnnos = this.updateSelectedAnno(anno, modes.DELETED) \n // this.selectAnnotation(undefined)\n // this.showSingleAnno(undefined)\n this.pushHist(\n newAnnos, anno.id,\n pAction, this.state.showSingleAnno\n )\n this.handleNotification({\n title: \"Saved comment\",\n message: `Saved comment: ${anno.comment}`,\n type: notificationType.SUCCESS\n })\n break\n case canvasActions.ANNO_LABEL_UPDATE:\n anno = this.stopAnnotimeMeasure(anno)\n if (!this.checkAnnoLength(anno)){\n newAnnos = this.updateSelectedAnno(anno, modes.DELETED)\n } else {\n newAnnos = this.updateSelectedAnno(anno, modes.VIEW)\n }\n this.pushHist(\n newAnnos, anno.id,\n pAction, undefined\n )\n this.setState({annoToolBarVisible:true})\n break\n case canvasActions.ANNO_CREATED_NODE:\n anno = this.stopAnnotimeMeasure(anno)\n newAnnos = this.updateSelectedAnno(anno, modes.CREATE)\n this.pushHist(\n newAnnos, anno.id,\n pAction, this.state.showSingleAnno\n )\n break\n case canvasActions.ANNO_CREATED_FINAL_NODE:\n anno = this.stopAnnotimeMeasure(anno)\n newAnnos = this.updateSelectedAnno(anno, modes.VIEW)\n this.pushHist(\n newAnnos, anno.id,\n pAction, undefined\n )\n this.showSingleAnno(undefined)\n this.setState({annoToolBarVisible:true})\n break\n default:\n console.warn('Action not handeled', pAction)\n break\n }\n if (this.props.onAnnoEvent){\n this.props.onAnnoEvent(anno, newAnnos, pAction)\n }\n }\n\n onAnnoLabelInputUpdate(anno){\n this.updateSelectedAnno(anno)\n }\n\n onAnnoLabelInputClose(){\n this.svg.current.focus()\n this.showLabelInput(false)\n this.showSingleAnno(undefined)\n const anno = this.findAnno(this.state.selectedAnnoId)\n this.handleAnnoEvent(anno, canvasActions.ANNO_LABEL_UPDATE)\n }\n\n handleImgBarClose(){\n this.triggerCanvasEvent(canvasActions.CANVAS_IMGBAR_CLOSE)\n // if (this.props.onImgBarClose){\n // this.props.onImgBarClose()\n // }\n }\n\n handleImgLabelUpdate(label){\n this.setState({\n imgLabelIds: label,\n imgLabelChanged: true,\n })\n this.pushHist(this.state.annos,\n this.state.selectedAnnoId,\n canvasActions.IMG_LABEL_UPDATE,\n this.state.showSingleAnno,\n label\n )\n }\n\n handleCanvasClick(e){\n if (this.props.uiConfig.imgBarVisible){\n this.setState({imgBarVisible:true})\n }\n }\n\n handleImgBarMouseEnter(e){\n this.setState({imgBarVisible:false})\n }\n\n handleImgLabelInputClose(){\n this.triggerCanvasEvent(canvasActions.CANVAS_LABEL_INPUT_CLOSE)\n // if (this.props.onImgLabelInputClose){\n // this.props.onImgLabelInputClose()\n // }\n }\n\n // handleAnnoCommentInputClose(e){\n // this.showAnnoCommentInputField(false)\n // }\n\n handleSvgMouseMove(e){\n this.mousePosAbs = mouse.getMousePositionAbs(e, this.state.svg)\n }\n\n handleNotification(messageObj){\n if (this.props.onNotification){\n this.props.onNotification(messageObj)\n }\n }\n\n handleHideLbl(lbl, hide){\n // console.log('hide lbl', lbl, hide)\n let hiddenSelected = false\n const newAnnos = this.state.annos.map(anno => {\n // console.log('map annos', anno)\n const newAnno = {...anno}\n if (anno.labelIds.includes(lbl.id)){\n newAnno.visible = !hide\n if (anno.id === this.state.selectedAnnoId) hiddenSelected=true\n } else if (anno.labelIds.length === 0){ // no label case\n if (lbl.id === -1){ // -1 indicates no label\n newAnno.visible = !hide\n if (anno.id === this.state.selectedAnnoId) hiddenSelected=true\n }\n }\n return newAnno\n })\n // console.log('newAnnos', newAnnos)\n this.setState({annos: newAnnos})\n if (hiddenSelected){\n this.selectAnnotation(undefined)\n }\n }\n\n handleMarkExample(anno){\n const newAnno = {...anno}\n if (newAnno.isExample == undefined){\n newAnno.isExample = true \n } else if (newAnno.isExample){\n newAnno.isExample = false\n } else {\n newAnno.isExample = true\n }\n this.handleAnnoEvent(newAnno, canvasActions.ANNO_MARK_EXAMPLE)\n\n }\n\n /*************\n * LOGIC *\n **************/\n copyAnnotation(){\n this.clipboard = this.findAnno(this.state.selectedAnnoId)\n this.handleNotification({\n title: \"Copyed annotation to clipboard\",\n message: 'Copyed '+this.clipboard.type,\n type: notificationType.SUCCESS\n })\n }\n\n pasteAnnotation(offset=0){\n if (this.clipboard){\n let annos = [...this.state.annos]\n const uid = _.uniqueId('new')\n annos.push({\n ...this.clipboard,\n id: uid,\n annoTime: 0,\n status: annoStatus.NEW,\n data: this.clipboard.data.map(e => {\n return {x: e.x+offset, y: e.y+offset}\n })\n })\n this.setState({annos: annos, selectedAnnoId: uid})\n this.handleNotification({\n title: \"Pasted annotation to canvas\",\n message: 'Pasted and selected '+this.clipboard.type,\n type: notificationType.SUCCESS\n })\n }\n }\n\n\n checkAnnoLength(anno){\n if (anno.type === 'polygon' && anno.data.length < 3){\n this.handleNotification({\n title: \"Invalid polygon!\",\n message: 'A vaild polygon needs at least 3 points!',\n type: notificationType.WARNING\n })\n return false\n } \n // if (anno.type === 'line' && anno.data.length < 2){\n // this.handleNotification({\n // title: \"Invalid line!\",\n // message: 'A vaild line needs at least 2 points!',\n // type: notificationType.WARNING\n // })\n // return false\n // } \n return true\n }\n\n startAnnotimeMeasure(anno){\n anno.timestamp = performance.now()\n return anno\n }\n \n stopAnnotimeMeasure(anno){\n if (anno.timestamp === undefined){\n console.error('No timestamp for annotime measurement. Check if you started measurement', anno)\n return undefined\n } else {\n let now = performance.now()\n anno.annoTime += (now - anno.timestamp) / 1000\n anno.timestamp = now\n return anno\n }\n }\n\n updatePossibleLabels(){\n if (!this.props.possibleLabels) return\n if (this.props.possibleLabels.length <= 0) return\n let lbls = this.props.possibleLabels\n lbls = lbls.map(e => {\n if (!('color' in e)){\n return {\n ...e, color: colorlut.getColor(e.id)}\n } else {\n return {...e}\n }\n })\n this.setState({\n possibleLabels: [...lbls]\n })\n }\n\n editAnnoLabel(anno){\n if (this.state.selectedAnnoId){\n let myAnno\n if (anno === undefined){\n myAnno = this.findAnno(this.state.selectedAnnoId)\n } else {\n myAnno = {...anno}\n }\n myAnno = this.startAnnotimeMeasure(myAnno)\n this.showLabelInput()\n this.updateSelectedAnno(myAnno, modes.EDIT_LABEL)\n }\n }\n unloadImage(){\n if(this.state.imageLoaded){\n this.setState({imageLoaded:false})\n }\n }\n /**\n * Find a annotation by id in current state\n * \n * @param {int} annoId - Id of the annotation to find\n */\n findAnno(annoId){\n return this.state.annos.find(e => {\n return e.id === annoId\n })\n }\n\n findAnnoRef(annoId){\n if (this.state.selectedAnnoId === undefined) return undefined\n return this.annoRefs.find(e => {\n if (e.current){\n return e.current.isSelected()\n } else {\n return false\n }\n })\n }\n\n pushHist(annos, selectedAnnoId, pAction, showSingleAnno, imgLabelIds=this.state.imgLabelIds){\n this.hist.push({\n ...this.getAnnos(annos, false),\n selectedAnnoId: selectedAnnoId,\n showSingleAnno: showSingleAnno,\n imgLabelIds: imgLabelIds\n }, pAction)\n }\n\n undo(){\n if (!this.hist.isEmpty()){\n const cState = this.hist.undo()\n this.setCanvasState(\n cState.entry.annotations,\n cState.entry.imgLabelIds, \n cState.entry.selectedAnnoId,\n cState.entry.showSingleAnno)\n }\n }\n\n redo(){\n if (!this.hist.isEmpty()){\n const cState = this.hist.redo()\n this.setCanvasState(\n cState.entry.annotations,\n cState.entry.imgLabelIds, \n cState.entry.selectedAnnoId,\n cState.entry.showSingleAnno)\n }\n }\n\n deleteAnnotation(anno) {\n if (anno){\n if (anno.mode === modes.CREATE){\n const ar = this.findAnnoRef(this.state.selectedAnnoId)\n if (ar !== undefined) ar.current.myAnno.current.removeLastNode()\n \n } else {\n this.handleAnnoEvent(anno, canvasActions.ANNO_DELETED)\n }\n }\n }\n\n deleteAnnoInCreationMode(anno) {\n if (anno){\n if (anno.mode === modes.CREATE){\n // const ar = this.findAnnoRef(this.state.selectedAnnoId)\n // if (ar !== undefined) ar.current.myAnno.current.removeLastNode()\n this.handleAnnoEvent(anno, canvasActions.ANNO_DELETED)\n \n } else {\n }\n }\n }\n\n deleteAllAnnos(){\n let newAnnos = []\n this.state.annos.forEach( e => {\n if ((typeof e.id) !== \"string\"){\n newAnnos.push(\n {...e, status: annoStatus.DELETED}\n )\n }\n })\n this.pushHist(newAnnos, undefined, 'deletedAllAnnos', this.state.showSingleAnno, this.state.imgLabelIds)\n this.setState({annos: newAnnos})\n this.selectAnnotation(undefined)\n this.showSingleAnno(undefined)\n }\n\n /**\n * Set state of Canvas annotations and imageLabels.\n * \n * @param {list} annotations - Annotations in backend format\n * @param {list} imgLabelIds - IDs of the image labels\n * @param {object} selectedAnno - The selected annotation\n * @param {int} showSingleAnno - The id of the single annotation\n * that should be visible\n */\n setCanvasState(annotations, imgLabelIds, selectedAnnoId, showSingleAnno){\n this.updateCanvasView({...annotations})\n this.setImageLabels([...imgLabelIds])\n this.selectAnnotation(selectedAnnoId)\n this.setState({showSingleAnno: showSingleAnno})\n }\n\n isLocked(annoId){\n if (this.props.lockedAnnos){\n if (this.props.lockedAnnos.includes(annoId)){\n return true\n }\n }\n return false\n }\n\n selectAnnotation(annoId){\n if (this.isLocked(annoId)) {\n this.handleNotification({\n title: \"Annotation locked\",\n message: `Annotation with id ${annoId} is locked and can not be edited`,\n type: notificationType.WARNING\n })\n return\n } \n if (annoId){\n const anno = this.findAnno(annoId)\n this.setState({\n selectedAnnoId: annoId\n })\n if (anno){\n if (anno.mode !== modes.CREATE){\n this.setState({\n annoToolBarVisible: true\n })\n }\n }\n } else {\n this.setState({\n selectedAnnoId: undefined,\n annoToolBarVisible: false\n })\n if (this.state.showLabelInput){\n this.onAnnoLabelInputClose()\n }\n }\n // if(this.props.onAnnoSelect){\n // const anno = this.findAnno(annoId)\n // this.props.onAnnoSelect(anno)\n // }\n }\n\n /**\n * Traverse annotations by key hit\n */\n traverseAnnos(){\n if (this.state.annos.length > 0){\n const myAnnos = this.state.annos.filter(e => {\n return e.status !== annoStatus.DELETED && !this.isLocked(e.id) && !(e.visible === false)\n })\n if (myAnnos.length > 0){\n if (!this.state.selectedAnnoId){\n this.selectAnnotation(myAnnos[0].id)\n } else {\n let currentIdx = myAnnos.findIndex( e => {\n return e.id === this.state.selectedAnnoId\n })\n if (currentIdx+1 < myAnnos.length){\n this.selectAnnotation(myAnnos[currentIdx+1].id)\n } else {\n this.selectAnnotation(myAnnos[0].id)\n }\n }\n }\n }\n } \n\n getAnnos(annos=undefined, removeFrontedIds=true){\n const myAnnos = annos ? annos : this.state.annos\n // const backendFormat = this.getAnnoBackendFormat(removeFrontedIds, myAnnos)\n const backendFormat = annoConversion.canvasToBackendAnnos(myAnnos, \n this.state.svg, removeFrontedIds, this.state.imageOffset)\n const finalData = {\n imgId: this.props.imageMeta.id,\n imgLabelIds: this.state.imgLabelIds,\n imgLabelChanged: this.state.imgLabelChanged,\n annotations: backendFormat,\n isJunk: this.state.isJunk,\n annoTime: this.props.imageMeta.annoTime + (performance.now() - this.state.imgLoadTimestamp)/1000\n }\n return finalData\n }\n\n /**\n * Reset zoom level on Canvas\n */\n resetZoom(){\n this.setState({svg: {\n ...this.state.svg,\n translateX: 0,\n translateY: 0,\n scale: 1.0\n }})\n }\n\n moveCamera(movementX, movementY){\n let trans_x = this.state.svg.translateX + movementX / this.state.svg.scale\n let trans_y = this.state.svg.translateY + movementY / this.state.svg.scale\n const vXMin = this.state.svg.width * 0.25\n const vXMax = this.state.svg.width * 0.75\n const yXMin = this.state.svg.height * 0.25\n const yXMax = this.state.svg.height * 0.75\n const vLeft = wv.getViewportCoordinates({x:0, y:0}, this.state.svg)\n const vRight = wv.getViewportCoordinates({x:this.state.svg.width, y:this.state.svg.height}, this.state.svg)\n if (vLeft.vX >= vXMin){\n trans_x = this.state.svg.translateX - 5\n } else if (vRight.vX <= vXMax){\n trans_x = this.state.svg.translateX +5\n } \n if (vLeft.vY >= yXMin){\n trans_y = this.state.svg.translateY - 5\n } else if (vRight.vY <= yXMax){\n trans_y= this.state.svg.translateY +5\n } \n this.setState({svg: {\n ...this.state.svg,\n translateX: trans_x,\n translateY: trans_y\n }})\n }\n\n setMode(mode){\n if (this.state.mode !== mode){\n this.setState({mode: mode})\n }\n }\n \n getMousePosition(e){\n const absPos = this.getMousePositionAbs(e)\n return {\n x: (absPos.x )/this.state.svg.scale - this.state.svg.translateX,\n y: (absPos.y )/this.state.svg.scale - this.state.svg.translateY\n }\n }\n\n getMousePositionAbs(e){\n return {\n x: (e.pageX - this.svg.current.getBoundingClientRect().left),\n y: (e.pageY - this.svg.current.getBoundingClientRect().top)\n }\n }\n\n showLabelInput(visible=true){\n this.setState({\n showLabelInput: visible\n })\n if (visible){\n this.showSingleAnno(this.state.selectedAnnoId)\n }\n }\n\n createNewAnnotation(e){\n //Do not create new Annotation if controlKey was pressed!\n let allowed = false\n if (this.keyMapper.controlDown) return\n if (this.props.selectedTool){\n const maxAnnos = this.props.canvasConfig.annos.maxAnnos\n if (maxAnnos){\n if (this.state.annos.length < maxAnnos){\n allowed = true\n } else {\n console.warn('Maximum number of annotations reached! MaxAnnos:', maxAnnos)\n this.handleNotification({\n title: 'Maximum number of annotations reached!',\n message: `Only ${maxAnnos} annotations per image are allowed by config` ,\n type: notificationType.WARNING\n })\n }\n } else {\n allowed = true\n }\n } else {\n console.warn('No annotation tool selected!')\n this.handleNotification({\n title: 'No tool selected!',\n message: 'Please select an annotation tool in the toolbar.',\n type: notificationType.INFO\n })\n }\n if (allowed){\n const mousePos = this.getMousePosition(e)\n // const selAnno = this.findAnno(this.state.selectedAnnoId)\n let newAnno = {\n id: this.props.nextAnnoId ? this.props.nextAnnoId : _.uniqueId('new'),\n type: this.props.selectedTool,\n data: [{\n x: mousePos.x, \n y: mousePos.y\n },{\n x: mousePos.x,\n y: mousePos.y\n }],\n mode: modes.CREATE,\n status: annoStatus.NEW,\n labelIds: this.state.prevLabel,\n selectedNode: 1,\n annoTime: 0.0\n }\n newAnno = this.startAnnotimeMeasure(newAnno)\n this.setState({\n annos: [...this.state.annos, newAnno],\n selectedAnnoId: newAnno.id,\n showSingleAnno: newAnno.id,\n annoToolBarVisible: false\n })\n if (this.props.selectedTool !== TOOLS.BBOX && \n this.props.selectedTool !== TOOLS.POINT){ \n const merged = this.mergeSelectedAnno(newAnno)\n this.pushHist(\n merged.newAnnos,\n newAnno.id, \n canvasActions.ANNO_CREATED_NODE,\n newAnno.id\n )\n }\n }\n }\n\n /**\n * recreate an existing annotation in case the creation process was not finished\n * @param {string} id of annotation\n */\n recreateAnnotation(annoID) {\n\n let annos = this.state.annos\n\n // search for id of selected anno in all annos (should normally be last item in list, but to be sure)\n let annoIndex\n let anno\n \n for(var k in annos) if(annos[k].id == annoID) {\n annoIndex = k\n anno = annos[k]\n break\n }\n\n // editing is only allowed on line and polygon\n if(!['line', 'polygon'].includes(anno.type)) return console.log(\"Cant recreate annotation: Type \" + anno.type + \" is forbidden\")\n\n // remove the old annotation\n this.state.annos.splice(annoIndex, 1)\n\n // create a new annotation based on the datapoints of the old annotation\n let newAnno = {\n id: anno.id,\n type: anno.type,\n data: anno.data,\n mode: modes.CREATE,\n status: (anno.status == 'database' ? annoStatus.CHANGED : annoStatus.NEW),\n labelIds: anno.labelIds,\n selectedNode: anno.data.length - 1,\n annoTime: anno.annoTime\n }\n\n newAnno = this.startAnnotimeMeasure(newAnno)\n this.setState({\n annos: [...this.state.annos, newAnno],\n selectedAnnoId: newAnno.id,\n showSingleAnno: newAnno.id,\n annoToolBarVisible: false\n })\n\n console.log(\"Annotation recreated\")\n }\n\n putSelectedOnTop(prevState){\n // The selected annotation need to be rendered as last one in \n // oder to be above all other annotations.\n if (this.state.selectedAnnoId){\n if (prevState.selectedAnnoId !== this.state.selectedAnnoId){\n const annos = this.state.annos.filter( (el) => {\n return el.id !== this.state.selectedAnnoId\n })\n const lastAnno = this.state.annos.find( el => {\n return el.id === this.state.selectedAnnoId\n })\n annos.push(lastAnno)\n this.setState({annos: [\n ...annos\n ]})\n }\n }\n }\n\n getLabel(lblId){\n return this.state.possibleLabels.find( e => {\n return e.id === lblId\n })\n }\n\n getAnnoColor(){\n if (this.state.selectedAnnoId){\n const anno = this.findAnno(this.state.selectedAnnoId)\n if (anno){\n if (anno.labelIds.length > 0){\n return this.getLabel(anno.labelIds[0]).color\n }\n } \n }\n return colorlut.getDefaultColor()\n }\n\n /**\n * Update selected anno and override mode if desired\n * \n * @param {object} anno - The new annotation the becomes the selected anno\n * @param {string} mode - The new mode for the selected anno\n * @returns The new anno that was set as selectedAnno in state and \n * the new annos list that was set in state\n */\n updateSelectedAnno(anno, mode=undefined){\n if (!anno) return\n const {newAnnos, newAnno} = this.mergeSelectedAnno(anno, mode)\n this.setState({\n annos: newAnnos,\n selectedAnnoId: anno.id,\n prevLabel: anno.labelIds, \n })\n // if(this.props.onAnnoSelect){\n // if (newAnno !== null){\n // this.props.onAnnoSelect(newAnno)\n // }\n // }\n return newAnnos\n }\n\n mergeSelectedAnno(anno, mode=undefined){\n const filtered = this.state.annos.filter( (el) => {\n return el.id !== anno.id\n }) \n let newAnno\n if (mode){\n newAnno = {...anno, mode:mode}\n if (mode === modes.DELETED){\n if (anno.status !== annoStatus.NEW){\n newAnno = {\n ...newAnno,\n status: annoStatus.DELETED\n }\n } else {\n newAnno = null\n }\n } else {\n newAnno = {\n ...newAnno,\n status: anno.status !== annoStatus.NEW ? annoStatus.CHANGED : annoStatus.NEW\n }\n }\n } else {\n newAnno = {...anno}\n }\n if (newAnno !== null){\n filtered.push(newAnno)\n }\n const newAnnos = [...filtered]\n return {newAnnos, newAnno}\n }\n\n showSingleAnno(annoId){\n if (this.state.showSingleAnno !== annoId){\n this.setState({showSingleAnno: annoId})\n } \n }\n\n updateImageSize(){\n \n var container = this.props.container.current.getBoundingClientRect()\n \n // if (container.left < this.props.uiConfig.toolBarWidth){\n // canvasLeft = this.props.uiConfig.toolBarWidth + 10\n // } else {\n // canvasLeft = container.left\n // }\n // var clientWidth = document.documentElement.clientWidth\n var clientHeight = document.documentElement.clientHeight\n var canvasTop\n var canvasLeft\n var maxImgHeight\n var maxImgWidth \n const layoutOffset = this.props.uiConfig.layoutOffset\n if(layoutOffset){\n canvasTop = container.top + layoutOffset.top\n canvasLeft = container.left + layoutOffset.left\n maxImgHeight = clientHeight - container.top - layoutOffset.bottom - layoutOffset.top\n maxImgWidth = container.right -canvasLeft - layoutOffset.right\n } else {\n canvasTop = container.top\n canvasLeft = container.left\n maxImgHeight = clientHeight - container.top\n maxImgWidth = container.right -canvasLeft\n }\n // if (this.props.appliedFullscreen) maxImgHeight = maxImgHeight + 10 \n var ratio = this.img.current.naturalWidth / this.img.current.naturalHeight\n var imgWidth = \"100%\"\n var imgHeight = \"100%\"\n if (maxImgHeight * ratio > maxImgWidth){\n imgWidth = maxImgWidth\n imgHeight = maxImgWidth / ratio\n } else {\n imgWidth = maxImgHeight * ratio\n imgHeight = maxImgHeight\n }\n var svg \n const imgOffset = {x: 0, y:0}\n if (this.props.uiConfig.maxCanvas){\n imgOffset.x = (maxImgWidth - imgWidth)/2\n imgOffset.y = (maxImgHeight - imgHeight)/2\n console.log(`imgOffset: `, imgOffset)\n svg = {\n ...this.state.svg, width: maxImgWidth, height: maxImgHeight,\n left: canvasLeft, top: canvasTop\n }\n } else {\n if (this.props.uiConfig.centerCanvasInContainer){\n const resSpaceX = maxImgWidth - imgWidth\n if (resSpaceX > 2){\n canvasLeft = canvasLeft + resSpaceX / 2\n }\n const resSpaceY = maxImgHeight - imgHeight\n if (resSpaceY > 2){\n canvasTop = canvasTop + resSpaceY / 2\n }\n }\n svg = {\n ...this.state.svg, width : imgWidth, height: imgHeight,\n left: canvasLeft, top: canvasTop\n }\n }\n this.setState({\n svg,\n image:{\n width: this.img.current.naturalWidth,\n height: this.img.current.naturalHeight,\n },\n imageOffset: imgOffset\n })\n this.svgUpdate(svg)\n return {imgWidth, imgHeight, imgOffset}\n }\n\n svgUpdate(svg){\n this.triggerCanvasEvent(canvasActions.CANVAS_SVG_UPDATE, svg)\n // if(this.props.onSVGUpdate){\n // this.props.onSVGUpdate(svg)\n // }\n }\n\n setImageLabels(labelIds){\n if (labelIds !== this.state.imgLabelIds){\n this.setState({\n imgLabelIds: labelIds\n })\n }\n }\n\n updateCanvasView(annotations){\n \n\n var annos = []\n //Annotation data should be present and a pixel accurate value \n //for svg should be calculated\n if(annotations){\n const imgSize = this.updateImageSize()\n this.setState({annos: [...annoConversion.backendAnnosToCanvas(annotations, {width: imgSize.imgWidth, height:imgSize.imgHeight}, imgSize.imgOffset)]})\n }\n }\n\n renderAnnotations(){\n // Do not render annotations while moving the camera!\n if (this.state.mode !== modes.CAMERA_MOVE){\n this.annoRefs = []\n const annos = this.state.annos.map((el) => {\n this.annoRefs.push(React.createRef())\n return <Annotation type={el.type} \n data={el} key={el.id} svg={{...this.state.svg}}\n imageOffset={this.state.imageOffset}\n ref={this.annoRefs[this.annoRefs.length - 1]}\n onMouseDown={e => this.onAnnoMouseDown(e)}\n onAction={(anno, pAction) => this.handleAnnoEvent(anno, pAction)}\n selectedAnno={this.state.selectedAnnoId}\n // onModeChange={(anno) => this.onAnnoModeChange(anno)}\n showSingleAnno={this.state.showSingleAnno}\n uiConfig={this.props.uiConfig}\n allowedActions={this.props.canvasConfig.annos.actions}\n possibleLabels={this.state.possibleLabels}\n image={this.state.image}\n canvasConfig={this.props.canvasConfig}\n onNotification={(messageObj) => this.handleNotification(messageObj) }\n defaultLabel={this.props.defaultLabel}\n />\n })\n return <g>{annos}</g>\n } else {\n return null\n }\n \n }\n\n renderImgLabelInput(){\n if (!this.props.imageMeta) return null\n return <Prompt \n onClick={() => this.handleImgLabelInputClose()}\n active={this.props.uiConfig.imgLabelInputVisible}\n header={<div>\n Add label for the whole image\n </div>}\n content={<div>\n <LabelInput\n // multilabels={true}\n multilabels={this.props.canvasConfig.img.multilabels}\n // relatedId={this.props.annos.image.id}\n visible={true}\n onLabelUpdate={label => this.handleImgLabelUpdate(label)}\n possibleLabels={this.state.possibleLabels}\n initLabelIds={this.state.imgLabelIds}\n relatedId={this.props.imageMeta.id}\n defaultLabel={this.props.defaultLabel}\n // disabled={!this.props.allowedActions.label}\n // renderPopup\n />\n <Button basic color=\"green\" inverted\n onClick={() => this.handleImgLabelInputClose()}\n >\n <Icon name='check'></Icon>\n OK\n </Button>\n </div>}\n />\n }\n\n renderAnnoToolBar(selectedAnno){\n let visible = this.state.annoToolBarVisible\n if (this.state.mode === modes.CAMERA_MOVE) visible = false\n return <AnnoToolBar visible={visible} \n selectedAnno={selectedAnno}\n svg={this.state.svg}\n onClick={() => this.editAnnoLabel()}\n color={this.getAnnoColor()}\n />\n }\n\n renderAnnoLabelInpput(selectedAnno){\n let visible = this.state.showLabelInput\n if (this.state.mode === modes.CAMERA_MOVE) visible = false\n return <AnnoLabelInput svg={this.state.svg} \n // svgRef={this.svg}\n onClose={() => this.onAnnoLabelInputClose()}\n onDeleteClick={annoId => this.onLabelInputDeleteClick(annoId)}\n selectedAnno={selectedAnno}\n visible={visible}\n onLabelUpdate={anno => this.onAnnoLabelInputUpdate(anno)}\n possibleLabels={this.state.possibleLabels}\n allowedActions={this.props.canvasConfig.annos.actions}\n multilabels={this.props.canvasConfig.annos.multilabels}\n mousePos={this.mousePosAbs}\n defaultLabel={this.props.defaultLabel}\n // multilabels={true}\n />\n }\n\n // renderAnnoCommentInput(selectedAnno){\n // return <AnnoCommentInput \n // triggerInput={this.state.annoCommentInputTrigger}\n // onClose={comment => this.handleAnnoCommentInputClose(comment)}\n // iniComment={selectedAnno ? selectedAnno.comment : ''}\n // />\n // }\n\n render(){\n const selectedAnno = this.findAnno(this.state.selectedAnnoId)\n return(\n <div ref={this.container} >\n <div height={this.state.svg.height} \n style={{position: 'fixed', top: this.state.svg.top, left: this.state.svg.left}}\n >\n {/* {this.renderAnnoCommentInput(selectedAnno)} */}\n {this.renderImgLabelInput()}\n <ImgBar container={this.container} \n visible={this.state.imgBarVisible}\n possibleLabels={this.state.possibleLabels}\n annos={this.props.annos}\n svg={this.state.svg}\n imageMeta={this.props.imageMeta}\n onClose={() => this.handleImgBarClose()}\n imgLabelIds={this.state.imgLabelIds}\n // onLabelUpdate={label => this.handleImgLabelUpdate(label)}\n // imgLabelIds={this.state.imgLabelIds}\n // multilabels={this.props.canvasConfig.img.multilabels}\n // allowedActions={this.props.canvasConfig.img.actions}\n onMouseEnter={e => this.handleImgBarMouseEnter(e)}\n />\n <Dimmer active={!this.state.imageLoaded||this.props.blocked}><Loader>Loading</Loader></Dimmer>\n <Dimmer active={this.state.isJunk}>\n <Header as='h2' icon inverted>\n <Icon name='ban' />\n Marked as Junk\n </Header>\n </Dimmer>\n {this.renderAnnoToolBar(selectedAnno)}\n {/* <div style={{position: 'fixed', top: this.props.container.top, left: this.props.container.left}}> */}\n {this.renderAnnoLabelInpput(selectedAnno)}\n <InfoBoxes container={this.props.container} \n layoutUpdate={this.props.layoutUpdate} \n annos={this.state.annos}\n selectedAnno={selectedAnno}\n possibleLabels={this.state.possibleLabels}\n allowedToMarkExample={this.props.canvasConfig.allowedToMarkExample}\n uiConfig={this.props.uiConfig}\n imgLoadCount={this.state.imgLoadCount}\n onCommentUpdate={comment => this.updateAnnoComment(comment)}\n onUiConfigUpdate={e => this.triggerCanvasEvent(canvasActions.CANVAS_UI_CONFIG_UPDATE, e)}\n onHideLbl={(lbl, hide) => this.handleHideLbl(lbl, hide)}\n onMarkExample={anno => this.handleMarkExample(anno)}\n commentInputTrigger={this.state.annoCommentInputTrigger}\n onGetAnnoExample={(exampleArgs) => this.props.onGetAnnoExample ? this.props.onGetAnnoExample(exampleArgs):{} }\n exampleImg={this.props.exampleImg}\n />\n <svg ref={this.svg} width={this.state.svg.width} \n height={this.state.svg.height}\n onKeyDown={e => this.onKeyDown(e)}\n onKeyUp={e => this.onKeyUp(e)}\n onClick={e => this.handleCanvasClick(e)}\n onMouseMove={e => this.handleSvgMouseMove(e)}\n tabIndex=\"0\"\n >\n <g \n transform={`scale(${this.state.svg.scale}) translate(${this.state.svg.translateX}, ${this.state.svg.translateY})`}\n onMouseOver={() => {this.onMouseOver()}}\n onMouseLeave={() => {this.onMouseLeave()}}\n // onMouseEnter={() => this.svg.current.focus()}\n onMouseUp={(e) => {this.onMouseUp(e)}}\n onWheel={(e) => this.onWheel(e)}\n onMouseMove={(e) => {this.onMouseMove(e)}}\n >\n <image\n onContextMenu={(e) => this.onRightClick(e)}\n onMouseDown={(e) => this.onMouseDown(e)}\n href={this.props.imageBlob} \n width={this.state.svg.width} \n height={this.state.svg.height}\n />\n {this.renderAnnotations()}\n </g>\n </svg>\n <img \n alt='sia' style={{display:'none'}} ref={this.img} \n onLoad={() => {this.onImageLoad()}} src={this.state.imageBlob}\n width=\"100%\" height=\"100%\"\n />\n {/* </div> */}\n </div>\n {/* Placeholder for Layout*/}\n <div style={{minHeight: this.state.svg.height}}></div> \n </div>)\n }\n}\n\nexport default Canvas","export const TOOL_SELECTED='toolSelected'\nexport const GET_NEXT_IMAGE='getNextImage'\nexport const GET_PREV_IMAGE='getPrevImage'\nexport const TASK_FINISHED='taskFinished'\nexport const SHOW_IMAGE_LABEL_INPUT='showImageLabelInput'\nexport const IMG_IS_JUNK='imageIsJunk'\nexport const DELETE_ALL_ANNOS='deleteAllAnnos'\nexport const SET_FULLSCREEN='setFullscreen'\nexport const SHOW_ANNO_DETAILS='showAnnoDetails'\nexport const SHOW_LABEL_INFO='showLabelInfo'\nexport const SHOW_ANNO_STATS='showAnnoStats'\nexport const EDIT_STROKE_WIDTH='editStrokeWidth'\nexport const EDIT_NODE_RADIUS='editNodeRadius'\nexport const APPLY_FILTER='applyFilter'\nexport const SAVE='save'","import React, {Component} from 'react'\n\nimport { Popup, Icon, Menu, Divider, Checkbox } from 'semantic-ui-react'\nimport * as tbe from './types/toolbarEvents'\nclass SIASettingButton extends Component{\n\n constructor(props) {\n super(props)\n this.state = {\n\n }\n }\n\n triggerEvent(e, data){\n if (this.props.onSettingEvent){\n this.props.onSettingEvent(e, data)\n }\n }\n toggleAnnoDetails(){\n this.triggerEvent(tbe.SHOW_ANNO_DETAILS)\n }\n\n toggleLabelInfo(){\n this.triggerEvent(tbe.SHOW_LABEL_INFO)\n }\n\n toggleAnnoStats(){\n this.triggerEvent(tbe.SHOW_ANNO_STATS)\n }\n\n handleStrokeWidthChange(e){\n this.triggerEvent(tbe.EDIT_STROKE_WIDTH, parseInt(e.target.value))\n }\n\n handleNodeRadiusChange(e){\n this.triggerEvent(tbe.EDIT_NODE_RADIUS, parseInt(e.target.value))\n }\n\n renderInfoBoxContent(){\n return <div>\n <Divider horizontal>Info Boxes</Divider>\n <Checkbox \n checked={this.props.uiConfig.annoDetails.visible} \n label=\"Annotation Details\" toggle\n onClick={() => this.toggleAnnoDetails()}\n />\n <Checkbox \n checked={this.props.uiConfig.labelInfo.visible} \n label=\"Label Info\" toggle\n onClick={() => this.toggleLabelInfo()}\n />\n <Checkbox \n checked={this.props.uiConfig.annoStats.visible} \n label=\"Anno Stats\" toggle\n onClick={() => this.toggleAnnoStats()}\n />\n </div>\n }\n renderInfoBoxes(){\n if (!this.props.enabled) return null\n if (this.props.enabled == true){\n return this.renderInfoBoxContent()\n } else {\n if (this.props.enabled.infoBoxes){\n return this.renderInfoBoxContent()\n }\n }\n }\n\n renderAnnoStyle(){\n if (!this.props.enabled) return null\n if (this.props.enabled == true){\n return this.renderAnnoStyleContent()\n } else {\n if (this.props.enabled.annoStyle){\n return this.renderAnnoStyleContent()\n }\n }\n }\n renderAnnoStyleContent(){\n return <div>\n <Divider horizontal>Anno Appearance</Divider>\n <div>Stroke width: {this.props.uiConfig.strokeWidth}</div>\n <input\n type='range'\n min={1}\n max={10}\n value={this.props.uiConfig.strokeWidth}\n onChange={e => this.handleStrokeWidthChange(e)}\n />\n <div>Node radius: {this.props.uiConfig.nodeRadius}</div>\n <input\n type='range'\n min={1}\n max={10}\n value={this.props.uiConfig.nodeRadius}\n onChange={e => this.handleNodeRadiusChange(e)}\n />\n </div>\n }\n\n render(){\n\n if (!this.props.uiConfig) return null\n const popupContent = <div >\n {this.renderInfoBoxes()}\n {this.renderAnnoStyle()}\n </div>\n return(\n <Popup trigger={ \n <Menu.Item name='setting'>\n <Icon name='setting' />\n </Menu.Item>\n }\n content={popupContent}\n position={\"right center\"}\n pinned\n on=\"click\"\n style={{zIndex:7000}}\n />\n )\n }\n}\n\nexport default SIASettingButton","export function active(filter){\n return filter.clahe.active || filter.rotate.active\n}","import React, {Component} from 'react'\nimport { Popup, Icon, Menu, Divider, Checkbox } from 'semantic-ui-react'\nimport * as filterTools from './filterTools'\nimport * as tbe from './types/toolbarEvents'\nclass SIAFilterButton extends Component{\n\n constructor(props) {\n super(props)\n this.state = {\n clipLimit: 3,\n active: false,\n color: undefined\n }\n }\n\n componentDidUpdate(prevProps){\n if (prevProps.filter.clahe.clipLimit !== this.props.filter.clahe.clipLimit){\n this.setState({clipLimit:this.props.filter.clahe.clipLimit})\n }\n if (this.props.filter !== prevProps.filter){\n if (filterTools.active(this.props.filter)){\n this.setState({color:'red', active:true})\n } else {\n this.setState({color:'white', active:false})\n }\n }\n }\n\n triggerEvent(e, data){\n if (this.props.onFilterEvent){\n this.props.onFilterEvent(e, data)\n }\n }\n\n handleClipLimitChange(e){\n const cl = parseInt(e.target.value)\n this.setState({clipLimit:cl})\n // this.claheFilter(cl)\n }\n\n rotateImg(angle){\n const active = !(this.props.filter.rotate.active && this.props.filter.rotate.angle === angle)\n const myAngle = active ? angle : 0\n this.triggerEvent( tbe.APPLY_FILTER,\n {\n ...this.props.filter,\n rotate: {angle:myAngle, active:active}\n })\n\n // this.props.siaApplyFilter({\n // ...this.props.filter,\n // rotate: {angle:myAngle, active:active}\n // })\n }\n\n claheFilter(clipLimit){\n const filter = {\n 'clahe' : {\n 'clipLimit':clipLimit, \n active:!this.props.filter.clahe.active\n }\n }\n this.triggerEvent(tbe.APPLY_FILTER,\n {\n ...this.props.filter,\n clahe: filter.clahe\n })\n // this.props.siaApplyFilter({\n // ...this.props.filter,\n // clahe: filter.clahe\n // })\n }\n\n releaseCLAHESlider(e){\n const filter = {\n 'clahe' : {\n 'clipLimit':parseInt(e.target.value), \n active:true\n }\n }\n this.triggerEvent(tbe.APPLY_FILTER,\n {\n ...this.props.filter,\n clahe: filter.clahe\n })\n // this.props.siaApplyFilter({\n // ...this.props.filter,\n // clahe: filter.clahe\n // })\n }\n\n renderRotateContent(){\n const filter = this.props.filter\n return <div>\n <Divider horizontal>Rotate</Divider>\n <Checkbox \n checked={filter.rotate.active && filter.rotate.angle === 90} \n label=\"Rotate 90\" toggle\n onClick={() => this.rotateImg(90)}\n />\n <Checkbox \n checked={filter.rotate.active && filter.rotate.angle === -90} \n label=\"Rotate -90\" toggle\n onClick={() => this.rotateImg(-90)}\n />\n <Checkbox \n checked={filter.rotate.active && filter.rotate.angle === 180 } \n label=\"Rotate 180\" toggle\n onClick={() => this.rotateImg(180)}\n />\n </div>\n\n }\n\n renderRotate(){\n if (!this.props.enabled) return null\n if (this.props.enabled === true){\n return this.renderRotateContent()\n } else {\n if (this.props.enabled.rotate){\n return this.renderRotateContent()\n }\n }\n }\n\n renderClaheContent(){\n const filter = this.props.filter\n return <div>\n <Divider horizontal>Histogram equalization</Divider>\n <Checkbox \n checked={filter.clahe.active} \n label=\"Histogram equalization\" toggle\n onClick={() => this.claheFilter(this.state.clipLimit)}\n />\n <div>Cliplimit: {this.state.clipLimit}</div>\n <input\n type='range'\n min={0}\n max={40}\n value={this.state.clipLimit}\n onChange={e => this.handleClipLimitChange(e)}\n onMouseUp={e => this.releaseCLAHESlider(e)}\n />\n </div>\n\n }\n\n renderClahe(){\n if (!this.props.enabled) return null\n if (this.props.enabled === true){\n return this.renderClaheContent()\n } else {\n if (this.props.enabled.clahe){\n return this.renderClaheContent()\n }\n }\n }\n\n render(){\n if (!this.props.imageMeta) return null\n const popupContent = <div >\n {this.renderRotate()}\n {this.renderClahe()}\n </div>\n return(\n <Popup trigger={ \n <Menu.Item name='filter' active={this.state.active}>\n <Icon name='filter' color={this.state.color}/>\n </Menu.Item>\n }\n content={popupContent}\n position={\"right center\"}\n pinned\n on=\"click\"\n style={{zIndex:7000}}\n />\n )\n }\n}\n\nexport default SIAFilterButton","import React from 'react'\n\nexport function textIcon(){\n return <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" \n // x=\"0px\" y=\"0px\"\n // width=\"1190.549px\" height=\"841.891px\" \n viewBox=\"0 0 1190.549 841.891\" \n width=\"17px\"\n // onClick={e => this.handleClick(e)}\n >\n <path id=\"T\" fillRule=\"evenodd\" clipRule=\"evenodd\" fill=\"currentColor\" d=\"M925.876,172.939c-0.172-13.004,0.161-26.013,0.116-39.019\n c-0.021-4.017-5.046-9.053-9.037-9.087c-7.948-0.068-15.897-0.051-23.848-0.051c-73.526,0.006-147.051,0.02-220.578,0.032\n c-8.095,0.001-11.969,3.776-11.969,11.742c-0.009,154.998-0.009,309.997-0.009,464.998c0,44.257-0.002,88.519,0.009,132.778\n c0,7.553,4.173,11.736,11.651,11.747c21.677,0.018,30.288-0.227,65.032,0.018c34.743,0.239,46.295,27.955,46.295,46.43\n c-0.005,18.477-13.856,42.722-46.792,43.747c-42.993,0.197-85.989-0.057-128.979-0.05c-47.697,0.014-95.387,0.009-143.078,0.074\n c-13.712-0.278-44.888-9.133-44.888-44.159c0-35.025,20.399-44.646,42.975-46.192c16.293,0.115,45.164,0.179,67.743,0.16\n c5.553-0.006,10.175-5.03,10.178-11.005c0.008-45.524-0.016-91.049-0.018-136.569c0-99.001,0-197.997,0.008-296.994\n c0.001-55.278,0.018-110.559,0.007-165.837c0-6.513-4.521-10.917-11.118-10.917c-81.116-0.005-162.229-0.005-243.34-0.001\n c-6.977,0-11.061,3.995-11.069,10.825c-0.016,12.286-0.033,24.569,0.019,36.855c-0.076,20.742-10.042,43.007-40.763,43.007\n c-30.724,0-46.917-15.208-48.805-43.296c-0.419-14.084,0.01-28.181,0.01-42.272c0-27.46,0-54.917,0-82.379\n c0-1.048,0.747-16.871,13.391-30.357c12.642-13.485,26.225-12.505,27.633-12.505c84.544,0.015,169.091,0.009,253.635,0.009\n c153.191,0.001,459.578,0.004,459.578,0.004s20.149-0.287,35.766-0.17c0.983-0.023,18.696,1.188,30.027,13.07\n c11.333,11.885,9.972,27.513,9.972,28.256c-0.024,42.091,0.255,84.183-0.007,126.274c-0.247,26.341-22.705,41.944-44.85,42.037\n C948.049,214.236,926.687,199.643,925.876,172.939z\"/>\n </svg>\n}\n\nexport function lineIcon(){\n return (\n <svg version=\"1.1\" id=\"Linie\" xmlns=\"http://www.w3.org/2000/svg\"\n // xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n // width=\"1190.549px\" height=\"841.891px\" \n viewBox=\"0 0 1190.549 841.891\" \n width=\"17px\"\n // enable-background=\"new 0 0 1190.549 841.891\"\n // xml:space=\"preserve\"\n >\n <path fill=\"currentColor\" d=\"M986.331,109.582c7.141-10.669,28.926-51.179-2.968-85.299S891.011,8.972,891.011,8.972L539.125,133.474\n L63.239,302.022c-21.503,7.998-53.586,30.072-60.956,61.716s-2.116,58.538,22.414,96.79S211.33,752.213,228.564,777.28\n c26.453,36.868,62.16,58.042,105.507,57.154s365.665-7.485,365.665-7.485l331.7-8.325l89.453-2.293c0,0,70.998-7.179,69.861-60.287\n c-1.135-53.108-74.618-62.721-74.618-62.721s-733.215,15.553-749.148,15.576c-22.688,0.201-45.355-15.278-54.146-28.928\n s-175.79-272.956-175.79-272.956l600.587-212.338c0,0-73.179,67.087-99.315,100.041s-30.56,74.565-5.053,95.237\n c31.188,24.081,91.974-3.708,123.127-39.312C782.35,323.912,979.191,120.251,986.331,109.582z\"/>\n </svg>\n )\n}\n\nexport function bBoxIcon(){\n return (\n <svg version=\"1.1\" id=\"Linie\" xmlns=\"http://www.w3.org/2000/svg\"\n // xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n // width=\"1190.549px\" height=\"841.891px\" \n viewBox=\"0 0 1190.549 841.891\" \n width=\"17px\"\n // enable-background=\"new 0 0 1190.549 841.891\"\n // xml:space=\"preserve\"\n >\n <path fill=\"none\" stroke=\"currentColor\" strokeWidth=\"120\" strokeMiterlimit=\"10\" d=\"M929.775,710.655\n c0,23.386-19.134,42.52-42.52,42.52H278.991c-23.386,0-42.52-19.134-42.52-42.52V102.392c0-23.386,19.134-42.52,42.52-42.52\n h608.264c23.386,0,42.52,19.134,42.52,42.52V710.655z\"/>\n </svg>\n )\n}\n\nexport function polygonIcon(){\n return (\n <svg version=\"1.1\" id=\"Linie\" xmlns=\"http://www.w3.org/2000/svg\"\n // xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n // width=\"1190.549px\" height=\"841.891px\" \n viewBox=\"0 0 1190.549 841.891\" \n width=\"17px\"\n // enable-background=\"new 0 0 1190.549 841.891\"\n // xml:space=\"preserve\"\n >\n <path fill=\"none\" stroke=\"currentColor\" strokeWidth=\"120\" strokeMiterlimit=\"10\" d=\"M342.327,769.938\n c-23.379,0.548-52.922-15.056-65.65-34.674L65.479,409.738c-12.729-19.619-5.085-41.998,16.984-49.732L917.331,67.421\n c22.07-7.734,26.86-0.275,10.645,16.576L691.761,329.475c-16.216,16.852-14.503,42.542,3.807,57.092l425.212,337.901\n c18.31,14.549,14.16,26.901-9.219,27.449L342.327,769.938z\"/>\n </svg>\n )\n}\n\nexport function pointIcon(){\n return (\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" \n // x=\"0px\" y=\"0px\"\n // width=\"1190.549px\" height=\"841.891px\" \n viewBox=\"0 0 1190.549 841.891\" \n width=\"17px\"\n >\n <path fill=\"currentColor\" d=\"M748.197,408.286c0,151.355-122.699,274.058-274.059,274.058c-151.357,0-274.057-122.703-274.057-274.058\n c0-151.356,122.7-274.057,274.057-274.057C625.497,134.229,748.197,256.929,748.197,408.286z\"/>\n </svg>\n )\n}","import React, {Component} from 'react'\nimport { Icon, Menu, Button, Card } from 'semantic-ui-react'\nimport SIASettingButton from './SIASettingButton'\nimport SIAFilterButton from './SIAFilterButton'\nimport Prompt from './Prompt'\n\nimport * as TOOLS from './types/tools'\nimport * as siaIcons from './utils/siaIcons'\nimport * as tbe from './types/toolbarEvents'\n\nclass ToolBar extends Component{\n\n constructor(props) {\n super(props)\n this.state = {\n // fullscreenMode: false,\n position: {\n left: 0,\n top: 5,\n width: 40\n },\n showFinishPrompt: false,\n showHelp: false\n }\n this.toolBarGroup = React.createRef()\n }\n\n componentDidMount(){\n \n }\n componentDidUpdate(prevProps, prevState){\n // if (prevState.fullscreenMode !== this.state.fullscreenMode){\n // this.props.siaSetFullscreen(this.state.fullscreenMode)\n // }\n\n if (this.props.layoutUpdate !== prevProps.layoutUpdate){\n this.calcPosition()\n }\n if (this.props.svg !== prevProps.svg){\n this.calcPosition()\n }\n\n }\n\n onClick(e, tool){\n this.triggerToolBarEvent(tbe.TOOL_SELECTED, tool)\n }\n\n calcPosition(){\n if (!this.props.enabled) return\n const tb = this.toolBarGroup.current.getBoundingClientRect()\n if (tb){\n if (this.props.svg){\n let toolBarTop = undefined\n toolBarTop = this.props.svg.top + (this.props.svg.height)/6\n this.setState({\n position: {...this.state.position,\n left: this.props.svg.left - 55,\n top: toolBarTop,\n }\n })\n }\n }\n }\n getNextImg(){\n // this.props.siaGetNextImage(this.props.imageMeta.id)\n this.triggerToolBarEvent(tbe.GET_NEXT_IMAGE)\n }\n\n getPrevImg(){\n // this.props.siaGetPrevImage(this.props.imageMeta.id)\n this.triggerToolBarEvent(tbe.GET_PREV_IMAGE)\n }\n\n setFinished(){\n // this.props.siaSetTaskFinished()\n this.triggerToolBarEvent(tbe.TASK_FINISHED)\n \n }\n\n toggleFinishPrompt(){\n this.setState({\n showFinishPrompt: !this.state.showFinishPrompt\n })\n }\n\n toggleFullscreen(){\n // this.setState({\n // fullscreenMode: !this.state.fullscreenMode\n // })\n this.triggerToolBarEvent(tbe.SET_FULLSCREEN)\n }\n\n toggleImgLabelInput(){\n // this.props.siaShowImgLabelInput(!this.props.imgLabelInput.show)\n this.triggerToolBarEvent(tbe.SHOW_IMAGE_LABEL_INPUT)\n }\n\n toggleJunk(){\n // this.props.siaImgIsJunk(!this.props.isJunk)\n this.triggerToolBarEvent(tbe.IMG_IS_JUNK)\n }\n\n toggleHelp(){\n this.setState({showHelp: !this.state.showHelp})\n }\n\n handleOnDeleteAllAnnos(){\n this.triggerToolBarEvent(tbe.DELETE_ALL_ANNOS)\n }\n\n handleSave(){\n this.triggerToolBarEvent(tbe.SAVE)\n }\n\n triggerToolBarEvent(event, data){\n if (this.props.onToolBarEvent){\n this.props.onToolBarEvent(event, data)\n }\n }\n\n renderToolButtons(){\n if (!this.props.canvasConfig) return null\n if (!this.props.enabled.toolSelection) return null\n if (!this.props.canvasConfig.annos.actions.draw) return null\n let btns = []\n if (this.props.canvasConfig.tools.point){\n btns.push(\n <Menu.Item name='dot circle' key={TOOLS.POINT}\n active={this.props.active.selectedTool===TOOLS.POINT} \n onClick={e => this.onClick(e, TOOLS.POINT)}\n >\n {siaIcons.pointIcon()}\n </Menu.Item>\n )\n }\n if (this.props.canvasConfig.tools.line){\n btns.push(\n <Menu.Item name='paint brush' key={TOOLS.LINE}\n active={this.props.active.selectedTool===TOOLS.LINE} \n onClick={e => this.onClick(e, TOOLS.LINE)}\n >\n {siaIcons.lineIcon()}\n </Menu.Item>\n )\n }\n if (this.props.canvasConfig.tools.bbox){\n btns.push(\n <Menu.Item name='square outline' key={TOOLS.BBOX}\n active={this.props.active.selectedTool===TOOLS.BBOX} \n onClick={e => this.onClick(e, TOOLS.BBOX)}\n >\n {siaIcons.bBoxIcon()}\n </Menu.Item>\n )\n }\n if (this.props.canvasConfig.tools.polygon){\n btns.push(\n <Menu.Item name='pencil alternate' key={TOOLS.POLYGON}\n active={this.props.active.selectedTool===TOOLS.POLYGON} \n onClick={e => this.onClick(e, TOOLS.POLYGON)}\n >\n {siaIcons.polygonIcon()}\n </Menu.Item>\n )\n }\n return btns\n }\n\n renderFinishPrompt(){\n return (\n <Prompt active={this.state.showFinishPrompt}\n header={<div>\n <Icon name='paper plane outline'></Icon>\n Do you wish to FINISH this SIA Task?\n </div>}\n content={<div>\n <Button basic color=\"green\" inverted\n onClick={() => this.setFinished()}\n >\n <Icon name='check'></Icon>\n Yes\n </Button>\n <Button basic color=\"red\" inverted\n onClick={() => this.toggleFinishPrompt()}\n >\n <Icon name='ban'></Icon> No\n </Button>\n </div>}\n />\n )\n }\n /**\n * Render next and prev image buttons \n *\n */\n renderNavigation(){\n let btns = []\n if (!this.props.enabled.nextPrev) return null\n if (this.props.imageMeta){\n if (this.props.imageMeta.isLast){\n btns.push(\n <Menu.Item name='paper plane outline' key='finish'\n active={false} \n onClick={() => this.toggleFinishPrompt()}\n >\n <Icon name='paper plane outline' />\n {this.renderFinishPrompt()}\n </Menu.Item>\n )\n } else {\n btns.push(\n <Menu.Item name='arrow right' key='next'\n active={false} \n onClick={() => this.getNextImg()}\n >\n <Icon name='arrow right' />\n </Menu.Item>\n )\n }\n btns.push(\n <Menu.Item name='arrow left' key='prev'\n active={false} \n onClick={() => this.getPrevImg()}\n disabled={this.props.imageMeta.isFirst}\n >\n <Icon name='arrow left' />\n </Menu.Item>\n )\n }\n return btns\n }\n\n renderJunkButton(){\n if (!this.props.enabled.junk) return null\n return <Menu.Item name='ban' key='junk'\n active={this.props.active.isJunk} \n onClick={() => this.toggleJunk()}\n >\n <Icon name='ban' />\n </Menu.Item>\n }\n\n renderDeleteAllAnnosButton(){\n if (!this.props.enabled.deleteAll) return null\n return <Menu.Item name='trash alternate outline' key='deleteAllAnnos'\n onClick={() => this.handleOnDeleteAllAnnos()}\n >\n <Icon name='trash alternate outline' />\n </Menu.Item>\n }\n\n renderSaveButton(){\n if (!this.props.enabled.save) return null\n return <Menu.Item name='save' key='save'\n onClick={() => this.handleSave()}\n >\n {/* <Icon name='save' color='red'/> */}\n <Icon name='save' />\n </Menu.Item>\n }\n\n renderHelpButton(){\n if (!this.props.enabled.help) return null\n return <Menu.Item name='help' key='help'\n active={false} \n onClick={() => this.toggleHelp()}\n >\n <Icon name='help' />\n <Prompt active={this.state.showHelp}\n content={<div>\n <Card.Group>\n <Card>\n <Card.Content header='How to draw?' />\n <Card.Content description='1.) Select a Tool in the toolbar 2.) Draw with RIGHT CLICK on Canvas' />\n </Card>\n <Card>\n <Card.Content header='How to delete an annotation?' />\n <Card.Content description='1.) Select an annotation with LEFT CLICK 2.) Press DELETE or BACKSPACE' />\n </Card>\n <Card>\n <Card.Content header='How to assign a label?' />\n <Card.Content description='1.) Select an annotation with LEFT CLICK 2.) Hit ENTER 3.) Type into the input field 4.) Hit ENTER to confirm 5.) Hit ESCAPE to close the input field'/>\n </Card>\n <Card>\n <Card.Content header='Undo/ Redo' />\n <Card.Content description='Undo: Hit STRG + Z'/>\n <Card.Content description='Redo: Hit STRG + R'/>\n </Card>\n <Card>\n <Card.Content header='Add a node to Line/Polygon' />\n <Card.Content description='Hit STRG + Click left on the line'/>\n </Card>\n <Card>\n <Card.Content header='Remove a node from Line/Polygon in create mode' />\n <Card.Content description='Press DELETE or BACKSPACE'/>\n </Card>\n <Card>\n <Card.Content header='Edit Line/Polygon' />\n <Card.Content description='1.) Click on the Annotation you want to edit.'/>\n <Card.Content description='2.) Press \"e\". New nodes can now be added using right click'/>\n </Card>\n <Card>\n <Card.Content header='Zoom/ Move Canvas' />\n <Card.Content description='Zoom: Use MOUSE WHEEL to zoom in/out'/>\n <Card.Content description='Move: Hold MOUSE WHEEL and move mouse. Or Use W/A/S/D keys to move camera up/left/down/right'/>\n </Card>\n <Card>\n <Card.Content header='TAB navigation' />\n <Card.Content description='You can traverse all visible annotation by hitting TAB.'/>\n </Card>\n <Card>\n <Card.Content header='Next/Prev image navigation' />\n <Card.Content description='Get next image by hitting ARROW_RIGHT key. Get previous image by hitting ARROW_LEFT key.'/>\n </Card>\n <Card>\n <Card.Content header='Copy and Paste annotations' />\n <Card.Content description='Copy: 1.) Select annotation 2.) Hit STRG + C'/>\n <Card.Content description='Paste: STRG + V'/>\n </Card>\n <Card>\n <Card.Content header='Mark image as junk' />\n <Card.Content description='1.) Press J key'/>\n </Card>\n <Card>\n <Card.Content header='Assign a comment to a 2D annoation' />\n <Card.Content description='1.) Select annotation 2.) Hit C key'/>\n </Card>\n </Card.Group>\n </div>}\n />\n </Menu.Item>\n }\n\n \n renderImgLabelInput(){\n if (!this.props.enabled.imgLabel) return null\n if (this.props.canvasConfig.img.actions.label){\n return <Menu.Item name='img label input' \n // active={this.props.imgLabelInput.show} \n onClick={() => this.toggleImgLabelInput()}\n >\n {/* <Icon name='pencil' /> */}\n {siaIcons.textIcon()}\n \n </Menu.Item>\n }\n }\n\n renderFullscreenBtn(){\n if (!this.props.enabled.fullscreen) return null\n return <Menu.Item name='expand arrows alternate' \n active={this.props.active.fullscreen} \n onClick={() => this.toggleFullscreen()}\n >\n <Icon name='expand arrows alternate' />\n </Menu.Item>\n }\n\n renderSettingBtn(){\n if (!this.props.enabled.settings) return null\n return <SIASettingButton \n enabled= {this.props.enabled.settings}\n uiConfig={this.props.uiConfig}\n onSettingEvent={(e,data) => this.triggerToolBarEvent(e, data)}/>\n }\n\n renderFilterBtn(){\n console.log('filter', this.props.filter)\n if (!this.props.enabled.filter) return null\n if (!this.props.filter) return null\n return <SIAFilterButton \n enabled={this.props.enabled.filter}\n onFilterEvent={(e, data) => this.triggerToolBarEvent(e, data)}\n filter={this.props.filter}\n imageMeta={this.props.imageMeta}\n />\n }\n\n render(){\n if (!this.props.enabled) return null\n return(\n <div\n ref={this.toolBarGroup}\n style={{position:'fixed', top: this.state.position.top, left:this.state.position.left}}>\n <Menu icon inverted vertical>\n {this.renderSaveButton()}\n {this.renderImgLabelInput()}\n {this.renderNavigation()}\n {this.renderToolButtons()}\n {this.renderFullscreenBtn()}\n {this.renderJunkButton()}\n {this.renderDeleteAllAnnosButton()}\n {this.renderHelpButton()}\n {this.renderSettingBtn()}\n {this.renderFilterBtn()}\n </Menu>\n </div>\n )\n }\n}\n\nexport default ToolBar","import React, { useRef, useEffect, useState } from 'react'\n\nimport ToolBar from './ToolBar'\nimport Canvas from './Canvas'\nimport * as tbe from './types/toolbarEvents'\nimport * as annoActions from './types/canvasActions'\n\n/**\n * SIA element that handles annotations within an image\n * \n * @param {object} annos - A json object containing all annotation \n * information for an image\n * {\n * image : {\n * id: int, \n * number: int, \n * amount: int, \n * isFirst: bool, \n * isLast: bool,\n * description: string, // -> optional\n * },\n * annotations: {\n * bBoxes: [{\n * id: int, // -> Not required if status === annoStatus.NEW\n * data: {},\n * labelIds: list of int, // -> optional\n * status: see annoStatus, // -> optional\n * annoTime: float, // -> optional\n * },...],\n * points: []\n * lines: []\n * polygons: []\n * }\n * }\n * @param {object} possibleLabels - Possible labels that can be assigned to \n * an annotation.\n * [{ \n * id: int, \n * description: str, \n * label: str, (name of the label) \n * color: str (color is optional)\n * }, ...]\n * @param {blob} imageBlob - The actual image blob that will be displayed\n * @param {object} imageMeta - Meta information for the current image\n * {\n * \"id\": int,\n * \"number\": int, // -> number of image in current annotask\n * \"amount\": int, // -> total number of images in current annotask\n * \"isFirst\": bool, // -> True if this image is the first image\n * \"isLast\": bool, // -> True if current image is the last image in annotask\n * \"labelIds\": list of int, // -> List of label for the current image\n * \"isJunk\": bool, // -> Indicates wether current image is a junk image\n * \"annoTime\": float, // -> Total annotation time for the current image\n * \"description\": str or null // -> Description or comment for the current image\n * }\n * @param {object} exampleImg - Example for a selected label\n * {\n * \"anno\": {\n * \"id\": int, // -> ID of the example annotation\n * \"comment\": null or str // -> Comment that has been assigned to this example\n * },\n * \"img\": image blob\n * }\n * @param {bool} isJunk - Indicates wether the current image is junk or not\n * @param {object} uiConfig - User interface configs \n * {\n * nodesRadius: int, strokeWidth: int,\n * layoutOffset: {left:int, top:int, right:int, bottom:int}, -> Offset of the canvas inside the container\n * imgBarVisible: bool,\n * imgLabelInputVisible: bool,\n * centerCanvasInContainer: bool, -> Center the canvas in the middle of the container.\n * maxCanvas: bool -> Maximize Canvas Size. Do not fit canvas to image size.\n * }\n * @param {int} layoutUpdate - A counter that triggers a layout update\n * everytime it is incremented.\n * @param {string} selectedTool - The tool that is selected to draw an \n * annotation. Possible choices are: 'bBox', 'point', 'line', 'polygon'\n * @param {object} canvasConfig - Configuration for this canvas\n * {\n * annos:{\n * tools: {\n * point: bool,\n * line: bool,\n * polygon: bool,\n * bbox: bool\n * },\n * multilabels: bool,\n * actions: {\n * draw: bool,\n * label: bool,\n * edit: bool,\n * },\n * maxAnnos: null or int,\n * minArea: int\n * },\n * img: {\n * multilabels: bool,\n * actions: {\n * label: bool,\n * }\n * },\n * allowedToMarkExample: bool, -> Indicates wether the current user is allowed to mark an annotation as example.\n * autoSaveInterval: int -> Interval in seconds when an autosave will be requested by canvas\n * }\n * @param {str or int} defaultLabel (optional) - Name or ID of the default label that is used\n * when no label was selected by the annotator. If not set \"no label\" will be used.\n * If ID is used, it needs to be one of the possible label ids.\n * @param {bool} blocked Block canvas view with loading dimmer.\n * @param {bool} preventScrolling Prevent scrolling on mouseEnter\n * @param {int} nextAnnoId Id that will be used for the next annotation that \n * will be created. If undefined, the canvas will create its own ids.\n * @param {bool} lockedAnnos A list of AnnoIds of annos that should only be displayed.\n * Such annos can not be edited in any way.\n * @param {object} filter Information for the filter Popup\n * {\n * \"clahe\": {\n * \"clipLimit\": int,\n * \"active\": bool\n * },\n * \"rotate\": {\n * \"angle\": 90 | -90 | 180,\n * \"active\": bool\n * }\n * } \n * @param {bool | object} toolbarEnabled Defines which toolbar buttons are \n * displayed or if toolbar is shown at all. \n * false | {\n * imgLabel: bool,\n * nextPrev: bool,\n * toolSelection: bool,\n * fullscreen: bool,\n * junk: bool,\n * deleteAll: bool,\n * settings: bool | {infoBoxes: bool, annoStyle: bool},\n * filter: bool | {rotate: bool, clahe:bool},\n * help: bool\n * }\n * @event onNotification - Callback for Notification messages\n * args: {title: str, message: str, type: str}\n * @event onCanvasKeyDown - Fires for keyDown on canvas \n * @event onAnnoEvent - Fires when an anno performed an action\n * args: {anno: annoObject, newAnnos: list of annoObjects, pAction: str}\n * @event onGetAnnoExample - Fires when anno example is requested by canvas\n * {\n * id: int, // -> ID of the annotation that will be requested as example\n * comment: null or str\n * }\n * @event onCanvasEvent - Fires on canvas event\n * args: {action: action, data: dataObject}\n * action -> CANVAS_SVG_UPDATE \n * data: {width: int, height: int, scale: float, translateX: float,\n * translateY:float}\n * action -> CANVAS_UI_CONFIG_UPDATE\n * action -> CANVAS_LABEL_INPUT_CLOSE \n * action -> CANVAS_IMG_LOADED\n * action -> CANVAS_IMGBAR_CLOSE\n * @event onToolBarEvent - Fires on Toolbar event\n * args: {e: event, data: data object}\n * \n * e -> DELETE_ALL_ANNOS \n * e -> TOOL_SELECTED\n * data: 'bbox', 'point', 'line', 'polygon'\n * e -> GET_NEXT_IMAGE\n * data: int // -> Image ID\n * e -> GET_PREV_IMAGE\n * data: int // -> Image ID\n * e -> TASK_FINISHED\n * data: null\n * e -> SHOW_IMAGE_LABEL_INPUT\n * data: null\n * e -> IMG_IS_JUNK\n * data: null\n * e -> APPLY_FILTER\n * data: {\n * \"clahe\": {\n * \"clipLimit\": int,\n * \"active\": bool\n * },\n * \"rotate\": {\n * \"angle\": 90 | -90 | 180,\n * \"active\": bool\n * }\n * } \n * e -> SHOW_ANNO_DETAILS\n * data: null\n * e -> SHOW_LABEL_INFO\n * data: null\n * e -> SHOW_ANNO_STATS\n * data: null\n * e -> EDIT_STROKE_WIDTH\n * data: int // -> Stroke width\n * e -> EDIT_NODE_RADIUS\n * data: int // -> Radius\n * @event onGetFunction - Get special canvas functions for manipulation from outside canvas\n * deleteAllAnnos()\n * unloadImage()\n * resetZoom()\n * getAnnos(annos,removeFrontendIds)\n */\nconst Sia = (props) => {\n\n const [fullscreenCSS, setFullscreenCSS] = useState('')\n const [layoutUpdate, setLayoutUpdate] = useState(0)\n const [svg, setSvg] = useState()\n const [externalConfigUpdate, setExternalConfigUpdate] = useState(false)\n const [uiConfig, setUiConfig] = useState(\n {\n \"nodeRadius\": 4,\n \"strokeWidth\": 4,\n \"annoDetails\": {\n \"visible\": false\n },\n \"labelInfo\": {\n \"visible\": false\n },\n \"annoStats\": {\n \"visible\": false\n },\n \"layoutOffset\": {\n \"left\": 20,\n \"top\": 0,\n \"bottom\": 5,\n \"right\": 5\n },\n \"imgBarVisible\": true,\n \"imgLabelInputVisible\": false,\n \"centerCanvasInContainer\": true,\n \"maxCanvas\": true\n }\n )\n const containerRef = useRef()\n\n useEffect(() => {\n doLayoutUpdate()\n }, [props.layoutUpdate])\n\n useEffect(() => {\n setExternalConfigUpdate(true)\n setUiConfig({...uiConfig, ...props.uiConfig})\n }, [props.uiConfig])\n\n useEffect(() => {\n if (externalConfigUpdate){\n setExternalConfigUpdate(false)\n }else{\n if (props.onCanvasEvent){\n props.onCanvasEvent(annoActions.CANVAS_UI_CONFIG_UPDATE, uiConfig)\n }\n }\n }, [uiConfig])\n\n const doLayoutUpdate = () => {\n setLayoutUpdate(layoutUpdate + 1)\n }\n\n const handleAnnoEvent = (anno, annos, action) => {\n if (props.onAnnoEvent){\n props.onAnnoEvent(anno, annos, action)\n }\n\n }\n\n const handleNotification = (msg) => {\n if (props.onNotification){\n props.onNotification(msg)\n }\n\n }\n\n const handleCanvasKeyDown = (e) => {\n if (props.onCanvasKeyDown){\n props.onCanvasKeyDown(e)\n }\n\n }\n\n const handleCanvasEvent = (e, data) => {\n switch(e){\n case annoActions.CANVAS_SVG_UPDATE:\n setSvg(data)\n break\n case annoActions.CANVAS_UI_CONFIG_UPDATE:\n setUiConfig({...uiConfig, ...data})\n break\n default:\n break\n }\n if (props.onCanvasEvent){\n props.onCanvasEvent(e, data)\n }\n }\n\n const handleGetFunction = (deleteAll) => {\n if (props.onGetFunction){\n props.onGetFunction(deleteAll)\n }\n }\n\n const handleToolBarEvent = (e, data) => {\n switch(e){\n case tbe.SET_FULLSCREEN:\n if (fullscreenCSS === ''){\n setFullscreenCSS('sia-fullscreen')\n setUiConfig({...uiConfig,\n layoutOffset: {\n ...uiConfig.layoutOffset,\n left: 50,\n top: 5,\n } \n })\n doLayoutUpdate()\n } else {\n setFullscreenCSS('')\n setUiConfig({...uiConfig,\n layoutOffset: {\n ...uiConfig.layoutOffset,\n left: 20,\n top: 0,\n } \n })\n doLayoutUpdate()\n }\n break\n case tbe.SHOW_ANNO_DETAILS:\n setUiConfig({\n ...uiConfig,\n annoDetails: {\n ...uiConfig.annoDetails,\n visible: !uiConfig.annoDetails.visible,\n },\n })\n break\n case tbe.SHOW_LABEL_INFO:\n setUiConfig({\n ...uiConfig,\n labelInfo: {\n ...uiConfig.labelInfo,\n visible: !uiConfig.labelInfo.visible,\n },\n })\n break\n case tbe.SHOW_ANNO_STATS:\n setUiConfig({\n ...uiConfig,\n annoStats: {\n ...uiConfig.annoStats,\n visible: !uiConfig.annoStats.visible,\n },\n })\n break\n case tbe.EDIT_STROKE_WIDTH:\n setUiConfig({...uiConfig, strokeWidth: data})\n break\n case tbe.EDIT_NODE_RADIUS:\n setUiConfig({...uiConfig, nodeRadius: data})\n break\n default:\n break\n }\n if (props.onToolBarEvent){\n props.onToolBarEvent(e, data)\n }\n }\n\n return (\n <div className={fullscreenCSS} ref={containerRef}>\n <Canvas\n container={containerRef}\n\n onAnnoEvent={\n (anno, annos, action) => handleAnnoEvent(anno, annos, action)\n }\n onNotification={\n (messageObj) => handleNotification(messageObj)\n }\n onKeyDown={\n e => handleCanvasKeyDown(e)\n }\n onCanvasEvent={\n (action, data) => handleCanvasEvent(action, data)\n }\n onGetAnnoExample={\n (exampleArgs) => props.onGetAnnoExample ? props.onGetAnnoExample(exampleArgs):{} \n }\n onGetFunction={(canvasFunc) => handleGetFunction(canvasFunc)}\n\n canvasConfig={props.canvasConfig}\n uiConfig={uiConfig}\n\n nextAnnoId={props.nextAnnoId}\n annos={props.annos}\n imageMeta={props.imageMeta}\n imageBlob={props.imageBlob}\n possibleLabels={props.possibleLabels}\n exampleImg={props.exampleImg}\n lockedAnnos={props.lockedAnnos}\n layoutUpdate={layoutUpdate}\n selectedTool={props.selectedTool}\n isJunk={props.isJunk}\n blocked={props.blockCanvas}\n defaultLabel={props.defaultLabel}\n preventScrolling={props.preventScrolling}\n />\n <ToolBar \n onToolBarEvent={\n (e, data) => handleToolBarEvent(e, data)\n }\n imageMeta={props.imageMeta}\n layoutUpdate={layoutUpdate}\n svg={svg}\n active={{\n isJunk: props.isJunk,\n selectedTool: props.selectedTool,\n fullscreen: props.fullscreenMode\n }}\n enabled={props.toolbarEnabled}\n canvasConfig={props.canvasConfig}\n uiConfig={uiConfig}\n filter={props.filter}\n />\n </div>\n )\n\n}\n\nexport default Sia","const canvasConfig = {\n tools: {\n point: true,\n line: true,\n polygon: true,\n bbox: true,\n junk: true\n },\n annos: {\n minArea: 250,\n multilabels: false,\n actions: {\n draw: true,\n label: true,\n edit: true\n },\n maxAnnos: null\n },\n img: {\n multilabels: false,\n actions: {\n label: true\n }\n },\n autoSaveInterval: undefined,\n allowedToMarkExample: true\n}\n\nconst filter = {\n rotate: { active: false, angle: 0 },\n clahe: { active: false, clipLimit: 3 },\n}\n\nconst uiConfig = {\n nodeRadius: 4,\n strokeWidth: 4,\n annoDetails: {\n visible: false\n },\n labelInfo: {\n visible: false\n },\n annoStats: {\n visible: false\n },\n layoutOffset: {\n left: 20,\n top: 0,\n bottom: 5,\n right: 5\n },\n imgBarVisible: true,\n imgLabelInputVisible: false,\n centerCanvasInContainer: true,\n maxCanvas: true\n}\n\nconst selectedTool = 'bBox'\n\nconst imgMeta = {\n id: 58,\n number: 1,\n amount: 10,\n isFirst: true,\n isLast: false,\n labelIds: [],\n isJunk: null,\n annoTime: 23.4247,\n description: null\n}\n\nconst toolbarEnabled = {\n imgLabel: true,\n nextPrev: true,\n toolSelection: true,\n fullscreen: true,\n junk: true,\n deleteAll: true,\n settings: {\n infoBoxes: true,\n annoStyle: true\n },\n filter: {\n rotate: true,\n clahe: true\n },\n help: true\n}\n\nconst annos = {\n bBoxes: [\n {\n id: 1,\n labelIds: [2],\n data: {\n x: 0.3628092087028825,\n y: 0.4157427937915743,\n w: 0.3932840216186252,\n h: 0.2727272727272727,\n },\n },\n {\n id: 2,\n labelIds: [],\n data: {\n x: 0.7482027785476719,\n y: 0.43736141906873616,\n w: 0.044891560421285975,\n h: 0.1917960088691796,\n },\n },\n ],\n points: [],\n lines: [],\n polygons: [],\n }\n\n\nconst defaultLabel = 2\n\nconst possibleLabels = [\n {\n id: 2,\n label: 'Aeroplane',\n nameAndClass: 'Aeroplane (VOC2012)',\n description: 'Includes gliders but not hang gliders or helicopters',\n },\n {\n id: 3,\n label: 'Bicycle',\n nameAndClass: 'Bicycle (VOC2012)',\n description: 'Includes tricycles, unicycles',\n },\n {\n id: 4,\n label: 'Bird',\n nameAndClass: 'Bird (VOC2012)',\n description: 'All birds',\n },\n {\n id: 5,\n label: 'Boat',\n nameAndClass: 'Boat (VOC2012)',\n description: 'Ships, rowing boats, pedaloes but not jet skis',\n },\n {\n id: 6,\n label: 'Bottle',\n nameAndClass: 'Bottle (VOC2012)',\n description: 'Plastic, glass or feeding bottles',\n },\n {\n id: 7,\n label: 'Bus',\n nameAndClass: 'Bus (VOC2012)',\n description: 'Includes minibus but not trams',\n },\n {\n id: 8,\n label: 'Car',\n nameAndClass: 'Car (VOC2012)',\n description:\n \"Includes cars, vans, large family cars for 6-8 people etc.\\nExcludes go-carts, tractors, emergency vehicles, lorries/trucks etc.\\nDo not label where only the vehicle interior is shown.\\nInclude toys that look just like real cars, but not 'cartoony' toys.\",\n },\n {\n id: 9,\n label: 'Cat',\n nameAndClass: 'Cat (VOC2012)',\n description: 'Domestic cats (not lions etc.)',\n },\n {\n id: 10,\n label: 'Chair',\n nameAndClass: 'Chair (VOC2012)',\n description:\n 'Includes armchairs, deckchairs but not stools or benches.\\nExcludes seats in buses, cars etc.\\nExcludes wheelchairs.',\n },\n {\n id: 11,\n label: 'Cow',\n nameAndClass: 'Cow (VOC2012)',\n description: 'All cows',\n },\n {\n id: 12,\n label: 'Dining table',\n nameAndClass: 'Dining table (VOC2012)',\n description:\n 'Only tables for eating at.\\nNot coffee tables, desks, side tables or picnic benches',\n },\n {\n id: 13,\n label: 'Dog',\n nameAndClass: 'Dog (VOC2012)',\n description: 'Domestic dogs (not wolves etc.)',\n },\n {\n id: 14,\n label: 'Horse',\n nameAndClass: 'Horse (VOC2012)',\n description: 'Includes ponies, donkeys, mules etc.',\n },\n {\n id: 15,\n label: 'Motorbike',\n nameAndClass: 'Motorbike (VOC2012)',\n description: 'Includes mopeds, scooters, sidecars',\n },\n {\n id: 16,\n label: 'Person',\n nameAndClass: 'Person (VOC2012)',\n description: 'Includes babies, faces (i.e. truncated people)',\n },\n {\n id: 17,\n label: 'Potted plant',\n nameAndClass: 'Potted plant (VOC2012)',\n description:\n 'Indoor plants excluding flowers in vases, or outdoor plants clearly in a pot. ',\n },\n {\n id: 18,\n label: 'Sheep',\n nameAndClass: 'Sheep (VOC2012)',\n description: 'Sheep, not goats',\n },\n {\n id: 19,\n label: 'Sofa',\n nameAndClass: 'Sofa (VOC2012)',\n description: 'Excludes sofas made up as sofa-beds',\n },\n {\n id: 20,\n label: 'Train',\n nameAndClass: 'Train (VOC2012)',\n description: 'Includes train carriages, excludes trams',\n },\n {\n id: 21,\n label: 'TV/monitor',\n nameAndClass: 'TV/monitor (VOC2012)',\n description: 'Standalone screens (not laptops), not advertising displays',\n },\n]\n\nconst imgBlob = \n 'data:image/jpeg;base64,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'\n\n\nexport {\n defaultLabel,\n canvasConfig,\n uiConfig,\n annos,\n imgBlob,\n possibleLabels,\n filter,\n toolbarEnabled,\n imgMeta,\n selectedTool\n}\n"],"names":["toSia","data","image","type","imgOffset","w","width","h","height","x0","x","y0","y","map","e","toBackend","svg","imgWidth","imgHeight","xList","yList","minX","Math","min","maxX","max","minY","maxY","warn","getMinMaxPoints","minPoint","maxPoint","getArea","scaledImg","originalImg","relData","abs","undefined","area","length","j","i","move","movementX","movementY","getBox","Infinity","forEach","el","getCenter","box","getMostLeftPoint","minXList","push","getTopPoint","minYList","correctAnnotation","imageOffset","corrected","rotateAnnotation","center","angle","PI","rotated","round","cos","point","sin","resizeAnnoData","sizeOld","sizeNew","xRatio","yRatio","parseInt","VIEW","EDIT","CREATE","MOVE","ADD","CAMERA_MOVE","EDIT_LABEL","DELETED","defaultFontSize","defaultRectHeight","AnnoBar","props","state","textRef","React","createRef","mode","modes","setPosition","preventDefault","onClick","topPoint","transform","anno","current","text","getBoundingClientRect","textPadding","rectWidth","scale","setState","ceil","top","left","label","possibleLabels","labelObject","labelIds","lbl","idx","find","id","defaultLabel","Number","isInteger","style","handleClick","fontSize","Component","InfSelectionArea","enable","enableSelArea","disableSelArea","onMouseMove","onMouseUp","selAreaCss","CREATE_NODE","EDIT_NODE","NORMAL_NODE","Node","getCursorStyle","prevProps","isPoint","turnSelAreaOn","turnHaloOn","button","turnSelAreaOff","stopPropagation","onMouseDown","isSelected","turnHaloOff","onDoubleClick","onMouseLeave","cursorstyles","haloCss","r","onContextMenu","handleMouseLeave","renderHalo","className","onMouseOver","renderNodes","ANNO_DELETED","ANNO_SELECTED","ANNO_CREATED","ANNO_MOVED","ANNO_ENTER_MOVE_MODE","ANNO_EDITED","ANNO_ENTER_EDIT_MODE","ANNO_ADDED_NODE","ANNO_REMOVED_NODE","ANNO_LABEL_UPDATE","ANNO_CREATED_NODE","ANNO_CREATED_FINAL_NODE","ANNO_START_CREATING","ANNO_COMMENT_UPDATE","ANNO_MARK_EXAMPLE","CANVAS_SVG_UPDATE","CANVAS_UI_CONFIG_UPDATE","CANVAS_AUTO_SAVE","CANVAS_LABEL_INPUT_CLOSE","CANVAS_IMG_LOADED","CANVAS_IMGBAR_CLOSE","IMG_LABEL_UPDATE","Point","newAnno","requestModeChange","performedAction","canvasActions","pAction","onAction","onModeChangeRequest","selectedNode","onNodeMouseDown","renderPoint","renderNode","renderInfSelectionArea","getMousePosition","absPos","getMousePositionAbs","translateX","translateY","pageX","pageY","BBox","mousePos","mouse","idxMinus","idxPlus","newAnnoData","join","toPolygonStr","onNodeMouseUp","onNodeMouseMove","handleNodeMouseLeave","renderPolygon","Edge","p1","p2","closingEdge","strokeWidth","Polygon","updateAnnoByMousePos","addNode","mPos","slice","oldRest","concat","onNodeDoubleClick","edges","onEdgeMouseDown","renderEdges","Line","fill","renderPolyline","NEW","DATABASE","CHANGED","colors20","colors","nColors","getColor","n","getDefaultColor","allowedToLabel","allowedActions","allowedToEdit","status","annoStatus","edit","INFO","SUCCESS","WARNING","Annotation","myAnno","showSingleAnno","setVisible","visible","setMode","messageObj","onNotification","canvasConfig","annos","minArea","notify","notificationType","constraints","setAnnoMode","visibility","selectedAnno","lblId","getLabel","color","colorlut","uiConfig","nodeRadius","getStyle","getCssClass","handleModeChangeRequest","performedAnnoAction","onNodeClick","error","annoType","renderAnnoBar","renderAnno","LabelInput","inputRef","updatePossibleLabels","initLabelIds","performInit","prevState","focusOnRender","click","confirmLabel","annoLabelUpdate","closeLabelInput","relatedId","performKeyAction","key","item","multilabels","value","event","onItemClick","unshift","onLabelUpdate","filter","val","onClose","Dropdown","onKeyDown","onChange","opacity","disabled","open","__html","description","renderLabelInfo","renderPopup","Popup","renderLabelInput","renderPopupContent","AnnoLabelInput","inputGroupRef","position","updateAnnoLabel","ImgBar","onMouseEnter","imgLabelIds","imageMeta","handleMouseEnter","justifyContent","alignItems","renderImgDescription","number","amount","renderImgLabels","Prompt","active","zIndex","header","content","AnnoToolBar","inputRect","renderDaviIcon","_fixBackendAnnoElement","element","_","uniqueId","annoTime","fixBackendAnnos","backendAnnos","bBoxes","lines","polygons","points","log","backendAnnosToCanvas","imgSize","canvasToBackendAnnos","forBackendPost","myAnnos","bAnnos","annoId","backendFormat","DELETE_ANNO","ENTER_ANNO_ADD_MODE","LEAVE_ANNO_ADD_MODE","UNDO","REDO","TRAVERSE_ANNOS","CAM_MOVE_UP","CAM_MOVE_DOWN","CAM_MOVE_LEFT","CAM_MOVE_RIGHT","CAM_MOVE_STOP","COPY_ANNOTATION","PASTE_ANNOTATION","RECREATE_ANNO","DELETE_ANNO_IN_CREATION","TOGGLE_ANNO_COMMENT_INPUT","KeyMapper","keyActionHandler","controlDown","triggerKeyAction","keyAction","POINT","BBOX","LINE","POLYGON","UndoRedo","maxElements","hist","pointer","entry","histEl","shift","pop","getViewportCoordinates","window","viewport","scaleX","xMax","xMin","scaleY","yMax","yMin","vX","vY","getZoomTranslation","w0","s1","s0","translation","global","factory","module","require","this","ReactDOM","hasOwnProperty","createCommonjsModule","fn","exports","makeEmptyFunction","arg","emptyFunction","thatReturns","thatReturnsFalse","thatReturnsTrue","thatReturnsNull","thatReturnsThis","thatReturnsArgument","emptyFunction_1","validateFormat","format","Error","invariant","condition","a","b","c","d","f","args","argIndex","replace","name","framesToPop","invariant_1","warning","printWarning","_len","arguments","Array","_key","message","console","indexOf","_len2","_key2","apply","warning_1","getOwnPropertySymbols","Object","prototype","propIsEnumerable","propertyIsEnumerable","toObject","TypeError","shouldUseNative","assign","test1","String","getOwnPropertyNames","test2","fromCharCode","order2","test3","split","letter","keys","err","objectAssign","target","source","from","to","symbols","s","call","ReactPropTypesSecret","ReactPropTypesSecret_1","invariant$1","warning$1","ReactPropTypesSecret$1","loggedTypeFailures","checkPropTypes","typeSpecs","values","location","componentName","getStack","typeSpecName","ex","stack","checkPropTypes_1","factoryWithTypeCheckers","isValidElement","throwOnDirectAccess","ITERATOR_SYMBOL","Symbol","iterator","FAUX_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","iteratorFn","ANONYMOUS","ReactPropTypes","createPrimitiveTypeChecker","createAnyTypeChecker","createArrayOfTypeChecker","createElementTypeChecker","createInstanceTypeChecker","createNodeChecker","createObjectOfTypeChecker","createEnumTypeChecker","createUnionTypeChecker","createShapeTypeChecker","createStrictShapeTypeChecker","is","PropTypeError","createChainableTypeChecker","validate","manualPropTypeCallCache","manualPropTypeWarningCount","checkType","isRequired","propName","propFullName","secret","cacheKey","chainedCheckType","bind","expectedType","propValue","propType","getPropType","preciseType","getPreciseType","typeChecker","isArray","expectedClass","expectedClassName","actualClassName","getClassName","expectedValues","valuesString","JSON","stringify","arrayOfTypeCheckers","checker","getPostfixForTypeWarning","isNode","shapeTypes","allKeys","every","step","entries","next","done","isSymbol","RegExp","Date","constructor","PropTypes","propTypes","REACT_ELEMENT_TYPE","for","object","$$typeof","classnames","hasOwn","classNames","classes","argType","findInArray","array","callback","isFunction","func","toString","isNum","num","isNaN","int","dontSetMe","prefixes","getPrefix","prop","document","documentElement","browserPrefixToKey","prefix","kebabToTitleCase","str","out","shouldCapitalize","toUpperCase","browserPrefix","classCallCheck","instance","Constructor","createClass","defineProperties","descriptor","enumerable","configurable","writable","defineProperty","protoProps","staticProps","obj","_extends","inherits","subClass","superClass","create","setPrototypeOf","__proto__","possibleConstructorReturn","self","ReferenceError","slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","_i","_s","matchesSelectorFunc","matchesSelector","selector","method","matchesSelectorAndParentsTo","baseNode","node","parentNode","addEvent","handler","attachEvent","addEventListener","removeEvent","detachEvent","removeEventListener","outerHeight","clientHeight","computedStyle","ownerDocument","defaultView","getComputedStyle","borderTopWidth","borderBottomWidth","outerWidth","clientWidth","borderLeftWidth","borderRightWidth","innerHeight","paddingTop","paddingBottom","innerWidth","paddingLeft","paddingRight","offsetXYFromParent","evt","offsetParent","isBody","body","offsetParentRect","clientX","scrollLeft","clientY","scrollTop","createCSSTransform","controlPos","positionOffset","getTranslation","createSVGTransform","_ref2","unitSuffix","defaultX","defaultY","getTouch","identifier","targetTouches","t","changedTouches","getTouchIdentifier","addUserSelectStyles","doc","styleEl","getElementById","createElement","innerHTML","getElementsByTagName","appendChild","addClassName","removeUserSelectStyles","removeClassName","selection","empty","getSelection","removeAllRanges","styleHacks","childStyle","classList","add","match","remove","getBoundPosition","draggable","bounds","cloneBounds","findDOMNode","ownerWindow","boundNode","querySelector","HTMLElement","nodeStyle","boundNodeStyle","offsetLeft","marginLeft","offsetTop","marginTop","marginRight","marginBottom","right","bottom","snapToGrid","grid","pendingX","pendingY","canDragX","axis","canDragY","getControlPosition","touchIdentifier","draggableCore","touchObj","createCoreData","isStart","lastX","deltaY","lastY","createDraggableData","coreData","deltaX","eventsFor","dragEventFor","DraggableCore","_React$Component","_ref","_temp","_this","_ret","getPrototypeOf","NaN","handleDragStart","allowAnyClick","thisNode","handle","cancel","coreEvent","onStart","shouldUpdate","enableUserSelectHack","handleDrag","stop","handleDragStop","_deltaX","_deltaY","_snapToGrid","_snapToGrid2","onDrag","MouseEvent","createEvent","initMouseEvent","dragging","onStop","onTouchStart","touch","onTouchEnd","componentWillUnmount","render","cloneElement","Children","only","children","displayName","bool","nodeType","arrayOf","string","defaultProps","Draggable","onDragStart","shouldStart","dragged","uiData","newState","_x","_y","slackX","slackY","_getBoundPosition","_getBoundPosition2","newStateX","newStateY","onDragStop","shouldStop","controlled","Boolean","_this$props$position","_x2","_y2","defaultPosition","componentDidMount","SVGElement","isElementSVG","componentWillReceiveProps","nextProps","_classNames","svgTransform","transformOpts","_props","defaultClassName","defaultClassNameDragging","defaultClassNameDragged","oneOf","oneOfType","shape","default","InfoBox","updateStyle","defaultPos","onDismiss","handleOnStop","cursor","Divider","SiaPopup","trigger","AnnoDetails","useState","comment","setComment","example","setExample","showSaveBtn","setShowSaveBtn","tARef","useRef","focus","commentInputTrigger","onCommentUpdate","onMarkExampleClick","onMarkExample","renderSaveBtn","Label","renderComment","TextArea","renderLabels","selectedLabelIds","lbls","renderExampleMark","allowedToMarkExample","iconName","isExample","mark","Icon","PopUp","renderDescription","List","toLocaleString","AnnoStats","hideList","setHideList","imgLoadCount","onLblClick","hideLbl","includes","onHideLbl","renderRow","background","renderRows","stats","res","LabelExampleViewer","requestExample","onRequestExample","renderContent","exampleImg","Image","img","handlePromptClick","LabelInfo","showExampleViewer","setShowExampleViewer","myLbl","setMyLbl","requestImg","onGetAnnoExample","handleImgClick","renderExampleImg","AnnoExampleViewer","InfoBoxes","updateLayout","layoutUpdate","annoDetails","showAnnoDetails","container","show","onUiConfigUpdate","labelInfo","annoStats","hide","exampleArgs","Canvas","keyMapper","handleKeyAction","mousePosAbs","clipboard","autoSaveI","prevLabel","autoSaveInterval","setInterval","triggerCanvasEvent","onGetFunction","deleteAllAnnos","unloadImage","resetZoom","removeFrontendIds","getAnnos","performance","now","imageBlob","updateCanvasView","annoConversion","isJunk","performedImageInit","imgBarVisible","clearHist","imageLoaded","putSelectedOnTop","setImageLabels","selectAnnotation","preventScrolling","overflow","up","zoomFactor","nextScale","newTranslation","wv","createNewAnnotation","showLabelInput","findAnno","selectedAnnoId","updateSelectedAnno","handleAnnoEvent","action","camKeyStepSize","keyActions","ar","findAnnoRef","getResult","editAnnoLabel","deleteAnnotation","annoCommentInputTrigger","deleteAnnoInCreationMode","undo","redo","traverseAnnos","moveCamera","copyAnnotation","pasteAnnotation","recreateAnnotation","keyDown","keyUp","onKeyUp","removeSelectedAnno","onCanvasEvent","newAnnos","pushHist","stopAnnotimeMeasure","annoToolBarVisible","startAnnotimeMeasure","checkAnnoLength","handleNotification","onAnnoEvent","hiddenSelected","offset","uid","timestamp","annoRefs","isEmpty","cState","setCanvasState","annotations","removeLastNode","lockedAnnos","isLocked","onAnnoLabelInputClose","currentIdx","findIndex","removeFrontedIds","finalData","imgLabelChanged","imgLoadTimestamp","trans_x","trans_y","vXMin","vXMax","yXMin","yXMax","vLeft","vRight","allowed","selectedTool","maxAnnos","nextAnnoId","TOOLS","merged","mergeSelectedAnno","annoID","annoIndex","k","splice","lastAnno","filtered","canvasTop","canvasLeft","maxImgHeight","maxImgWidth","layoutOffset","ratio","naturalWidth","naturalHeight","maxCanvas","centerCanvasInContainer","resSpaceX","resSpaceY","svgUpdate","updateImageSize","onAnnoMouseDown","actions","handleImgLabelInputClose","imgLabelInputVisible","handleImgLabelUpdate","getAnnoColor","onLabelInputDeleteClick","onAnnoLabelInputUpdate","renderImgLabelInput","handleImgBarClose","handleImgBarMouseEnter","blocked","renderAnnoToolBar","renderAnnoLabelInpput","updateAnnoComment","handleHideLbl","handleMarkExample","handleCanvasClick","handleSvgMouseMove","onWheel","onRightClick","renderAnnotations","display","onImageLoad","minHeight","TOOL_SELECTED","GET_NEXT_IMAGE","GET_PREV_IMAGE","TASK_FINISHED","SHOW_IMAGE_LABEL_INPUT","IMG_IS_JUNK","DELETE_ALL_ANNOS","SET_FULLSCREEN","SHOW_ANNO_DETAILS","SHOW_LABEL_INFO","SHOW_ANNO_STATS","EDIT_STROKE_WIDTH","EDIT_NODE_RADIUS","APPLY_FILTER","SAVE","SIASettingButton","onSettingEvent","triggerEvent","tbe","Checkbox","toggleAnnoDetails","toggleLabelInfo","toggleAnnoStats","enabled","renderInfoBoxContent","infoBoxes","renderAnnoStyleContent","annoStyle","handleStrokeWidthChange","handleNodeRadiusChange","popupContent","renderInfoBoxes","renderAnnoStyle","clahe","rotate","SIAFilterButton","clipLimit","filterTools","onFilterEvent","cl","myAngle","rotateImg","renderRotateContent","claheFilter","handleClipLimitChange","releaseCLAHESlider","renderClaheContent","renderRotate","renderClahe","textIcon","lineIcon","bBoxIcon","polygonIcon","pointIcon","ToolBar","toolBarGroup","calcPosition","tool","triggerToolBarEvent","tb","toolBarTop","showFinishPrompt","showHelp","onToolBarEvent","toolSelection","draw","btns","tools","line","bbox","polygon","setFinished","toggleFinishPrompt","nextPrev","isLast","renderFinishPrompt","getNextImg","getPrevImg","isFirst","junk","toggleJunk","deleteAll","handleOnDeleteAllAnnos","save","handleSave","help","toggleHelp","Card","imgLabel","toggleImgLabelInput","fullscreen","toggleFullscreen","settings","renderSaveButton","renderNavigation","renderToolButtons","renderFullscreenBtn","renderJunkButton","renderDeleteAllAnnosButton","renderHelpButton","renderSettingBtn","renderFilterBtn","Sia","fullscreenCSS","setFullscreenCSS","setLayoutUpdate","setSvg","externalConfigUpdate","setExternalConfigUpdate","setUiConfig","containerRef","annoActions","doLayoutUpdate","msg","handleCanvasKeyDown","onCanvasKeyDown","handleCanvasEvent","handleGetFunction","handleToolBarEvent","canvasFunc","blockCanvas","fullscreenMode","toolbarEnabled","imgMeta","imgBlob"],"mappings":"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"}