lost-sia 1.0.2 → 1.1.1

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":["../src/utils/transform.js","../src/types/modes.js","../src/Annotation/AnnoBar.js","../src/Annotation/InfSelectionArea.js","../node_modules/style-inject/dist/style-inject.es.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"],"sourcesContent":["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","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 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 render(){\n\n if (!this.props.uiConfig) return null\n const popupContent = <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 <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 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 render(){\n const filter = this.props.filter\n if (!this.props.imageMeta) return null\n const popupContent = <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 <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 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 uiConfig={this.props.uiConfig}\n onSettingEvent={(e,data) => this.triggerToolBarEvent(e, data)}/>\n }\n\n renderFilterBtn(){\n if (!this.props.enabled.filter) return null\n return <SIAFilterButton \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: true,\n * nextPrev: true,\n * toolSelection: true,\n * fullscreen: true,\n * junk: true,\n * deleteAll: true,\n * settings: true,\n * filter: true,\n * help: true\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"],"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","popupContent","Checkbox","toggleAnnoDetails","toggleLabelInfo","toggleAnnoStats","handleStrokeWidthChange","handleNodeRadiusChange","clahe","rotate","SIAFilterButton","clipLimit","filterTools","onFilterEvent","cl","myAngle","rotateImg","claheFilter","handleClipLimitChange","releaseCLAHESlider","textIcon","lineIcon","bBoxIcon","polygonIcon","pointIcon","ToolBar","toolBarGroup","calcPosition","tool","triggerToolBarEvent","enabled","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"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils/transform.js","../src/types/modes.js","../src/Annotation/AnnoBar.js","../src/Annotation/InfSelectionArea.js","../node_modules/style-inject/dist/style-inject.es.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"],"sourcesContent":["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","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 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 if (!this.props.enabled.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"],"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"],"mappings":"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"}