@linkurious/ogma-annotations 1.1.1 → 1.1.2
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.mjs +308 -308
- package/dist/index.mjs.map +1 -1
- package/dist/index.umd.js +6 -6
- package/dist/index.umd.js.map +1 -1
- package/package.json +1 -1
package/dist/index.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../../../node_modules/vector2js/dist/vector2js.js","../../../node_modules/nanoid/index.browser.js","../src/Editor/Arrows/defaults.ts","../src/utils.ts","../src/Editor/Arrows/render.ts","../src/constants.ts","../../../node_modules/eventemitter3/index.js","../src/Editor/base.ts","../src/Editor/Arrows/index.ts","../src/Editor/Texts/defaults.ts","../../../node_modules/@borgar/textbox/dist/textbox.js","../src/Editor/Texts/render.ts","../src/Editor/Texts/index.ts","../src/links.ts","../src/types.ts","../src/Control.ts"],"sourcesContent":["/*\r\n* A simple 2d Vector class for node.js / javascript.\r\n*\r\n* Author: Ronen Ness, 2016.\r\n* License: MIT.\r\n*/\r\n\r\n\r\n(function(name, definition) {\r\n if (typeof module != 'undefined') module.exports = definition();\r\n else if (typeof define == 'function' && typeof define.amd == 'object') define(definition);\r\n else this[name] = definition();\r\n}('Vector', function() {\r\n\r\n \"use strict\";\r\n\r\n // create the vector main object\r\n var Vector = (function () {\r\n\r\n \"use strict\";\r\n\r\n // pi * 2\r\n var PI2 = Math.PI * 2;\r\n\r\n // convert radians to degrees\r\n var radToDeg = (180 / Math.PI);\r\n\r\n // convert degrees to radians\r\n var degToRad = (Math.PI / 180);\r\n\r\n // round numbers from 10'th digit\r\n // this is useful for calculations that should return round or almost round numbers, but have a long tail of 0's and 1 due to floating points stuff\r\n function smartRound(num)\r\n {\r\n return Math.round(num * 100000000.0) / 100000000.0;\r\n }\r\n\r\n // return distance between vectors\r\n function vectorsDistance(p1, p2) {\r\n var dx = p2.x - p1.x,\r\n dy = p2.y - p1.y;\r\n return Math.sqrt(dx * dx + dy * dy);\r\n };\r\n\r\n // return angle (in radians) between two vectors\r\n function vectorsAngle(P1, P2, wrap) {\r\n var deltaY = P2.y - P1.y,\r\n deltaX = P2.x - P1.x;\r\n var ret = Math.atan2(deltaY, deltaX);\r\n if (wrap) {while (ret < 0) ret += PI2;}\r\n return ret;\r\n };\r\n\r\n // create the vector\r\n function Vector(x, y)\r\n {\r\n this.x = x !== undefined ? x : 0;\r\n this.y = y !== undefined ? y : 0;\r\n }\r\n\r\n // create a vector with length 1 from a given radian.\r\n // @param radian - angle in radians.\r\n // @return new vector instance.\r\n Vector.fromRadians = function (radian)\r\n {\r\n var x = Math.cos(radian);\r\n var y = Math.sin(radian);\r\n return new Vector(x, y);\r\n };\r\n\r\n // create a vector with length 1 from a given degree.\r\n // @param degree - angle in degrees.\r\n // @return new vector instance.\r\n Vector.fromDegrees = function (degree)\r\n {\r\n var rad = degree * (Math.PI / 180.0);\r\n return Vector.fromRadians(rad);\r\n };\r\n\r\n // create a vector from string (\"x,y\").\r\n // @param str - string to create vector from.\r\n // @return new vector instance.\r\n Vector.fromString = function (str)\r\n {\r\n var parts = str.split(\",\");\r\n return new Vector(parseFloat(parts[0]), parseFloat(parts[1]));\r\n };\r\n\r\n // create a vector from array ( [x, y] ).\r\n // @param arr - array to create vector from.\r\n // @return new vector instance.\r\n Vector.fromArray = function (arr)\r\n {\r\n return new Vector(arr[0], arr[1]);\r\n };\r\n\r\n // vector prototype\r\n Vector.prototype = {\r\n\r\n // version\r\n version: \"2.0.1\",\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone the vector and return the cloned instance.\r\n // @return cloned vector.\r\n clone: function()\r\n {\r\n return new Vector(this.x, this.y);\r\n },\r\n\r\n // [API]\r\n // []\r\n // Get if equal to another vector\r\n // @param vector - other vector to compare with.\r\n // @return if vectors are equal.\r\n equals: function(vector)\r\n {\r\n return (this.prototype === vector.prototype) && (this.x === vector.x) && (this.y === vector.y);\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // set values from another vector. this changes value of self.\r\n // @param vector - other vector to get values from.\r\n // @return self.\r\n copy: function(vector)\r\n {\r\n this.x = vector.x;\r\n this.y = vector.y;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // set only the x component from another vector.\r\n // @return self.\r\n copyX: function(vector)\r\n {\r\n this.x = vector.x;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // set only the y component from another vector.\r\n // @return self.\r\n copyY: function(vector)\r\n {\r\n this.y = vector.y;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // []\r\n // convert to a dictionary with {x, y}.\r\n // @return a dictionary representation of the vector.\r\n toDict: function()\r\n {\r\n return {x: this.x, y: this.y};\r\n },\r\n\r\n // [API]\r\n // []\r\n // convert to array with [x, y].\r\n // @return an array representation of the vector.\r\n toArray: function()\r\n {\r\n return [this.x, this.y];\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // set values from x, y.\r\n // @param x - optional x component to set.\r\n // @param y - optional y component to set.\r\n // @return self.\r\n set: function(x, y)\r\n {\r\n if (x !== undefined) this.x = x;\r\n if (y !== undefined) this.y = y;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone and flip between x and y values.\r\n // @return cloned vector with flipped x and y components.\r\n flipXY: function()\r\n {\r\n return new Vector(this.y, this.x);\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // flip between x and y values.\r\n // @return self.\r\n flipXYSelf: function()\r\n {\r\n this.y = [this.x, this.x = this.y][0];\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone and invert x and y values (like multiply with -1, eg x, y => -x, -y)\r\n // @return cloned vector with inverted values.\r\n invert: function()\r\n {\r\n return this.mulScalar(-1);\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // invert x and y values (like multiply with -1, eg x, y => -x, -y)\r\n // @return self.\r\n invertSelf: function()\r\n {\r\n this.mulScalarSelf(-1);\r\n return this;\r\n },\r\n\r\n // [API]\r\n // []\r\n // get the distance from another vector.\r\n // @param other - vector to get distance from.\r\n // @return distance between vectors.\r\n distanceFrom: function (other)\r\n {\r\n return vectorsDistance(this, other);\r\n },\r\n\r\n // [API]\r\n // []\r\n // get angle from another vector in radians.\r\n // @return angle in radians from this to other.\r\n radiansTo: function (other)\r\n {\r\n return vectorsAngle(this, other, true);\r\n },\r\n\r\n // [API]\r\n // []\r\n // get degrees from another vector in degrees.\r\n // @return angle in degrees from this to other.\r\n degreesTo: function (other)\r\n {\r\n return vectorsAngle(this, other, true) * radToDeg;\r\n },\r\n\r\n // [API]\r\n // []\r\n // convert this vector to a radian angle.\r\n // this is equivalent to doing Vector.zero.radiansTo(this).\r\n // @return angle in radians.\r\n toRadians: function (other)\r\n {\r\n return vectorsAngle(Vector.zero, this, true);\r\n },\r\n\r\n // [API]\r\n // []\r\n // convert this vector to degree.\r\n // this is equivalent to doing Vector.zero.degreeTo(this).\r\n // @return angle in degrees (0-360).\r\n toDegrees: function (other)\r\n {\r\n return this.toRadians() * radToDeg;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // rotate this vector by a given degree.\r\n // @param degrees - degrees to rotate this vector by (can be positive or negative).\r\n // @return self.\r\n rotateDegreesSelf: function(degrees)\r\n {\r\n return this.rotateRadiansSelf(degrees * degToRad);\r\n },\r\n\r\n // [API]\r\n // [chainable]\r\n // clone and rotate the vector by a given degree.\r\n // @param degrees - degree to rotate this vector by (can be positive or negative).\r\n // @return cloned rotated vector.\r\n rotateDegrees: function(degrees)\r\n {\r\n return this.clone().rotateDegreesSelf(degrees);\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // rotate this vector by a given radian.\r\n // @param radians - radians to rotate this vector by (can be positive or negative).\r\n // @return self.\r\n rotateRadiansSelf: function(radians)\r\n {\r\n var ca = Math.cos(radians);\r\n var sa = Math.sin(radians);\r\n var x = (this.x * ca) - (this.y * sa);\r\n var y = (this.x * sa) + (this.y * ca);\r\n this.x = smartRound(x);\r\n this.y = smartRound(y);\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable]\r\n // clone and rotate the vector by a given degree.\r\n // @param radians - radians to rotate this vector by (can be positive or negative).\r\n // @return cloned rotated vector.\r\n rotateRadians: function(radians)\r\n {\r\n return this.clone().rotateRadiansSelf(radians);\r\n },\r\n\r\n // [API]\r\n // []\r\n // calculate the length of this vector (aka magnitude).\r\n // @return vector length.\r\n length: function()\r\n {\r\n return Math.sqrt(this.x*this.x + this.y*this.y);\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // normalize this vector, eg make length equal 1.\r\n // @return self.\r\n normalizeSelf: function()\r\n {\r\n var by = Math.sqrt(this.x * this.x + this.y * this.y);\r\n if (by === 0) return this;\r\n this.x /= by;\r\n this.y /= by;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone and normalize the vector.\r\n // @return normalized vector.\r\n normalize: function()\r\n {\r\n return this.clone().normalizeSelf();\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // add other vector to self.\r\n // for example, v(10, 11) + v(5, 6) = v(15, 17).\r\n // @param other - vector to add components to self.\r\n // @return self.\r\n addSelf: function (other)\r\n {\r\n // if we got a number instead of vector, use the scalar function\r\n if (typeof other === \"number\") {\r\n return this.addScalarSelf(other);\r\n }\r\n\r\n // update and return\r\n this.x += other.x;\r\n this.y += other.y;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // subtract other vector from self.\r\n // for example, v(10, 10) - v(2, 3) = v(8, 7).\r\n // @param other - vector to subtract components from self.\r\n // @return self.\r\n subSelf: function (other)\r\n {\r\n // if we got a number instead of vector, use the scalar function\r\n if (typeof other === \"number\") {\r\n return this.subScalarSelf(other);\r\n }\r\n\r\n // update and return\r\n this.x -= other.x;\r\n this.y -= other.y;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // divide self by other vector.\r\n // for example, v(10, 20) / v(2, 5) = v(5, 4).\r\n // @param other - vector to divide components from self.\r\n // @return self.\r\n divSelf: function (other)\r\n {\r\n // if we got a number instead of vector, use the scalar function\r\n if (typeof other === \"number\") {\r\n return this.divScalarSelf(other);\r\n }\r\n\r\n // update and return\r\n this.x /= other.x;\r\n this.y /= other.y;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // multiply self vector by other vector.\r\n // for example, v(2, 3) * v(3, 4) = v(6, 12).\r\n // @param other - vector to multiply components with self.\r\n // @return self.\r\n mulSelf: function (other)\r\n {\r\n // if we got a number instead of vector, use the scalar function\r\n if (typeof other === \"number\") {\r\n return this.mulScalarSelf(other);\r\n }\r\n\r\n // update and return\r\n this.x *= other.x;\r\n this.y *= other.y;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // add scalar value to self.\r\n // for example, v(2, 3) + 5 = v(7, 8).\r\n // @param val - value to add to components.\r\n // @return self.\r\n addScalarSelf: function (val)\r\n {\r\n this.x += val;\r\n this.y += val;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // subtract scalar from self.\r\n // for example, v(7, 9) - 5 = v(3, 4).\r\n // @param val - value to subtract from components.\r\n // @return self.\r\n subScalarSelf: function (val)\r\n {\r\n this.x -= val;\r\n this.y -= val;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // divide self by scalar.\r\n // for example, v(6, 8) / 5 = v(3, 4).\r\n // @param val - value to divide components by.\r\n // @return self.\r\n divScalarSelf: function (val)\r\n {\r\n this.x /= val;\r\n this.y /= val;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // multiply self by scalar.\r\n // for example, v(2, 3) * 2 = v(4, 6).\r\n // @param val - value to multiply components with.\r\n // @return self.\r\n mulScalarSelf: function (val)\r\n {\r\n this.x *= val;\r\n this.y *= val;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone self and add other vector to it.\r\n // @param other - vector to add with.\r\n // @return cloned vector.\r\n add: function (other)\r\n {\r\n return this.clone().addSelf(other);\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone self and subtract other vector from it.\r\n // @param other - vector to subtract with.\r\n // @return cloned vector.\r\n sub: function (other)\r\n {\r\n return this.clone().subSelf(other);\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone self and multiply by other vector.\r\n // @param other - vector to multiply with.\r\n // @return cloned vector.\r\n mul: function (other)\r\n {\r\n return this.clone().mulSelf(other);\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone self and divide by other vector.\r\n // @param other - vector to divide with.\r\n // @param scalar - value to divide by.\r\n // @return cloned vector.\r\n div: function (other)\r\n {\r\n return this.clone().divSelf(other);\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone self and add scalar to it.\r\n // @param scalar - value to add.\r\n // @return cloned vector.\r\n addScalar: function (scalar)\r\n {\r\n return this.clone().addScalarSelf(scalar);\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone self and substract scalar from it.\r\n // @param scalar - value to subtract.\r\n // @return cloned vector.\r\n subScalar: function (scalar)\r\n {\r\n return this.clone().subScalarSelf(scalar);\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone self and multiply by scalar.\r\n // @param scalar - value to multiply with.\r\n // @return cloned vector.\r\n mulScalar: function (scalar)\r\n {\r\n return this.clone().mulScalarSelf(scalar);\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone self and divide by scalar.\r\n // @param scalar - value to divide by.\r\n // @return cloned vector.\r\n divScalar: function (scalar)\r\n {\r\n return this.clone().divScalarSelf(scalar);\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // clamp vector values into range.\r\n // note: this function does not validate that min < max.\r\n // @param min - min value for x, y components.\r\n // @param max - max value for x, y components.\r\n // @return self.\r\n clampSelf: function (min, max)\r\n {\r\n if (this.x < min.x) this.x = min.x;\r\n if (this.y < min.y) this.y = min.y;\r\n if (this.x > max.x) this.x = max.x;\r\n if (this.y > max.y) this.y = max.y;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone vector and clamp its values.\r\n // note: this function does not validate that min < max.\r\n // @param min - min value for x, y components.\r\n // @param max - max value for x, y components.\r\n // @return cloned vector in range.\r\n clamp: function (min, max)\r\n {\r\n return this.clone().clampSelf(min, max);\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // apply a function on x and y components of the vector.\r\n // for example, you can use Math.round to round the vector x, y values.\r\n // @param func - function to apply on components.\r\n // @return self.\r\n applySelf: function (func)\r\n {\r\n this.x = func(this.x);\r\n this.y = func(this.y);\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone self and apply a function on x and y components of the clone vector.\r\n // for example, you can use Math.round to round the vector x, y values.\r\n // @param func - function to apply on components.\r\n // @return cloned vector.\r\n apply: function (func)\r\n {\r\n return this.clone().applySelf(func);\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // turn self to absolute values (eg turn x, y positive).\r\n // @return self.\r\n absSelf: function()\r\n {\r\n return this.applySelf(Math.abs);\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone and turn to absolute values (eg turn x, y positive).\r\n // @return cloned vector.\r\n abs: function()\r\n {\r\n return this.clone().absSelf();\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // turn self to round values (eg turn x, y positive).\r\n // @return self.\r\n roundSelf: function()\r\n {\r\n return this.applySelf(Math.round);\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone and turn to round values (eg turn x, y positive).\r\n // @return cloned vector.\r\n round: function()\r\n {\r\n return this.clone().roundSelf();\r\n },\r\n\r\n // [API]\r\n // []\r\n // calculate dot-product of this vector with another vector.\r\n // @param other - other vector to calculate dot-product with.\r\n // @return dot product.\r\n dot: function (other)\r\n {\r\n return (this.x * other.x) + (this.y * other.y);\r\n },\r\n\r\n // [API]\r\n // []\r\n // calculate cross-product of this vector with another vector.\r\n // @param other - other vector to calculate cross-product with.\r\n // @return dot product.\r\n cross: function (other)\r\n {\r\n return (this.x * other.y) - (this.y * other.x);\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // if any of the components of this vector are NaN, null, undefined, etc. set them to defaults.\r\n // note: 0's are considered to be a valid number and will not be replaced with a default value.\r\n // @param x - default value for x if undefined (0 if not defined).\r\n // @param y - default value for y if undefined (0 if not defined).\r\n // @return self.\r\n repairSelf: function(x, y)\r\n {\r\n // checking if number but also trying a simple math equasion and check if NaN (because typeof NaN == number..)\r\n if (typeof this.x !== \"number\" || isNaN(this.x + 1)) {this.x = x || 0;}\r\n if (typeof this.y !== \"number\" || isNaN(this.y + 1)) {this.y = y || 0;}\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // create a clone and if any of the components of the vector are NaN, null, undefined, etc. set them to default.\r\n // note: 0's are considered to be a valid number and will not be replaced with a default value.\r\n // @param x - default value for x if undefined (0 if not defined).\r\n // @param y - default value for y if undefined (0 if not defined).\r\n // @return repaired clone.\r\n repair: function(x, y)\r\n {\r\n return this.clone().repairSelf(x, y);\r\n },\r\n\r\n // [API]\r\n // []\r\n // convert to string in the form of \"x,y\".\r\n // @return string representation of the vector.\r\n toString: function ()\r\n {\r\n // default format\r\n return this.x + \",\" + this.y;\r\n },\r\n\r\n // [API]\r\n // []\r\n // convert to a string with a given format.\r\n // @param format - a string in which %x and %y will be replaced with the vector values.\r\n // @return formatted string representing the vector.\r\n format: function (format)\r\n {\r\n // default format\r\n format = format || \"%x,%y\";\r\n format = format.replace(new RegExp(\"%x\", 'g'), this.x);\r\n format = format.replace(new RegExp(\"%y\", 'g'), this.y);\r\n return format;\r\n },\r\n };\r\n\r\n // return the vector class\r\n return Vector;\r\n\r\n })();\r\n\r\n // some default consts\r\n Vector.zero = new Vector(0, 0);\r\n Vector.one = new Vector(1, 1);\r\n Vector.up = new Vector(0, -1);\r\n Vector.down = new Vector(0, 1);\r\n Vector.left = new Vector(-1, 0);\r\n Vector.right = new Vector(1, 0);\r\n Vector.upLeft = new Vector(-1, -1);\r\n Vector.downLeft = new Vector(-1, 1);\r\n Vector.upRight = new Vector(1, -1);\r\n Vector.downRight = new Vector(1, 1);\r\n\r\n // alias for magnitude\r\n Vector.prototype.magnitude = Vector.prototype.length;\r\n\r\n // if freeze is supported make those consts freeze\r\n if (Object.freeze)\r\n {\r\n Object.freeze(Vector.zero);\r\n Object.freeze(Vector.one);\r\n Object.freeze(Vector.up);\r\n Object.freeze(Vector.down);\r\n Object.freeze(Vector.left);\r\n Object.freeze(Vector.right);\r\n Object.freeze(Vector.upLeft);\r\n Object.freeze(Vector.downLeft);\r\n Object.freeze(Vector.upRight);\r\n Object.freeze(Vector.downRight);\r\n }\r\n\r\n // return the vector class\r\n return Vector;\r\n}));","import { urlAlphabet } from './url-alphabet/index.js'\nlet random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nlet nanoid = (size = 21) =>\n crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {\n byte &= 63\n if (byte < 36) {\n id += byte.toString(36)\n } else if (byte < 62) {\n id += (byte - 26).toString(36).toUpperCase()\n } else if (byte > 62) {\n id += '-'\n } else {\n id += '_'\n }\n return id\n }, '')\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n","import { nanoid as getId } from 'nanoid';\nimport { Arrow, ArrowStyles } from '../../types';\n\nexport const defaultStyle: ArrowStyles = {\n strokeType: 'plain',\n strokeColor: 'black',\n strokeWidth: 1,\n head: 'none',\n tail: 'none'\n};\n\n// used when adding a new Arrow\nexport const defaultOptions: Arrow = {\n id: 0,\n type: 'Feature',\n properties: {\n type: 'arrow',\n style: {\n ...defaultStyle\n }\n },\n geometry: {\n type: 'LineString',\n coordinates: [\n [0, 0],\n [100, 100]\n ]\n }\n\n // type: 'arrow',\n // stroke: {\n // type: 'plain',\n // color: 'black',\n // width: 1\n // },\n // head: 'none',\n // tail: 'arrow-plain',\n // start: { x: 0, y: 0 },\n // end: { x: 100, y: 100 }\n};\n\nexport const createArrow = (\n x0 = 0,\n y0 = 0,\n x1 = 0,\n y1 = 0,\n styles = { ...defaultStyle }\n): Arrow => ({\n id: getId(),\n type: 'Feature',\n properties: {\n type: 'arrow',\n style: {\n ...defaultStyle,\n ...styles\n }\n },\n geometry: {\n type: 'LineString',\n coordinates: [\n [x0, y0],\n [x1, y1]\n ]\n }\n});\n","import { Point } from '@linkurious/ogma';\nimport type {\n BBox,\n Feature,\n FeatureCollection,\n Geometry,\n Position\n} from 'geojson';\nimport { AnnotationCollection, Arrow, Text } from './types';\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\nexport function createSVGElement<T extends SVGElement>(tag: string): T {\n return document.createElementNS(SVG_NS, tag) as T;\n}\n\nexport function getTextBbox(t: Text) {\n if (!t.geometry.bbox) updateTextBbox(t);\n return t.geometry.bbox as BBox;\n}\n\nexport function getTextSize(t: Text) {\n const bbox = getTextBbox(t);\n return {\n width: bbox[2] - bbox[0],\n height: bbox[3] - bbox[1]\n };\n}\n\nexport function getTextPosition(t: Text) {\n const bbox = getTextBbox(t);\n return { x: bbox[0], y: bbox[1] };\n}\n\nexport function updateTextBbox(t: Text) {\n // TODO: maybe check the winding order of the coordinates\n const [x0, y0] = t.geometry.coordinates[0][0];\n const [x1, y1] = t.geometry.coordinates[0][2];\n t.geometry.bbox = [x0, y0, x1, y1];\n}\n\nexport function setTextBbox(\n t: Text,\n x: number,\n y: number,\n width: number,\n height: number\n) {\n t.geometry.bbox = [x, y, x + width, y + height];\n t.geometry.coordinates = [\n [\n [x, y],\n [x + width, y],\n [x + width, y + height],\n [x, y + height],\n [x, y]\n ]\n ];\n}\n\nexport function getArrowStart(a: Arrow) {\n const [x, y] = a.geometry.coordinates[0];\n return { x, y };\n}\n\nexport function getArrowSide(a: Arrow, side: 'start' | 'end') {\n const [x, y] = a.geometry.coordinates[side === 'start' ? 0 : 1];\n return { x, y };\n}\n\nexport function getArrowEnd(a: Arrow) {\n const [x, y] = a.geometry.coordinates[1];\n return { x, y };\n}\n\nexport function setArrowStart(a: Arrow, x: number, y: number) {\n a.geometry.coordinates[0] = [x, y];\n}\n\nexport function setArrowEnd(a: Arrow, x: number, y: number) {\n a.geometry.coordinates[1] = [x, y];\n}\n\nexport function getArrowEndPoints(a: Arrow) {\n return { start: getArrowStart(a), end: getArrowEnd(a) };\n}\n\nexport function setArrowEndPoint(\n a: Arrow,\n side: 'start' | 'end',\n x: number,\n y: number\n) {\n if (side === 'start') setArrowStart(a, x, y);\n else setArrowEnd(a, x, y);\n}\n\nexport const getHandleId = (handle: HTMLDivElement): number =>\n parseInt(handle.getAttribute('data-handle-id') || '-1');\n\ntype Bounds = [number, number, number, number];\n\nexport function getAnnotationsBounds(\n annotations: AnnotationCollection\n): Bounds {\n return getCoordinatesDump(annotations).reduce(\n (acc: Bounds, coord) => {\n acc[0] = Math.min(coord[0], acc[0]);\n acc[1] = Math.min(coord[1], acc[1]);\n acc[2] = Math.max(coord[0], acc[2]);\n acc[3] = Math.max(coord[1], acc[3]);\n return acc;\n },\n [\n Number.POSITIVE_INFINITY,\n Number.POSITIVE_INFINITY,\n Number.NEGATIVE_INFINITY,\n Number.NEGATIVE_INFINITY\n ]\n );\n}\n\nfunction getCoordinatesDump(\n gj: Feature | FeatureCollection | Geometry\n): Position[] {\n let coords: Position[] = [];\n if (gj.type == 'Point') {\n coords = [gj.coordinates];\n } else if (gj.type == 'LineString' || gj.type == 'MultiPoint') {\n coords = gj.coordinates;\n } else if (gj.type == 'Polygon' || gj.type == 'MultiLineString') {\n coords = gj.coordinates.reduce(function (dump, part) {\n return dump.concat(part);\n }, []);\n } else if (gj.type == 'MultiPolygon') {\n coords = gj.coordinates.reduce<Position[]>(\n (dump, poly) =>\n dump.concat(poly.reduce((points, part) => points.concat(part), [])),\n []\n );\n } else if (gj.type == 'Feature') {\n coords = getCoordinatesDump(gj.geometry);\n } else if (gj.type == 'GeometryCollection') {\n coords = gj.geometries.reduce<Position[]>(\n (dump, g) => dump.concat(getCoordinatesDump(g)),\n []\n );\n } else if (gj.type == 'FeatureCollection') {\n coords = gj.features.reduce<Position[]>(\n (dump, f) => dump.concat(getCoordinatesDump(f)),\n []\n );\n }\n return coords;\n}\n\nexport function getAttachmentPointOnNode(\n start: Point,\n nodeCenter: Point,\n nodeRadius: number\n) {\n const angle = Math.atan2(start.y - nodeCenter.y, start.x - nodeCenter.x);\n return {\n x: nodeCenter.x + nodeRadius * Math.cos(angle),\n y: nodeCenter.y + nodeRadius * Math.sin(angle)\n };\n}\n","import Vec2 from 'vector2js';\nimport { Arrow, ArrowStyles, Extremity } from '../../types';\nimport { createSVGElement, getArrowEndPoints } from '../../utils';\n\n/**\n * @function getArrowHeight\n * @param arrow The arrow to measure\n * @returns The height of the bounding box of the arrow\n */\nexport function getArrowHeight(arrow: Arrow, min = 5, max = 30): number {\n const { start, end } = getArrowEndPoints(arrow);\n const a = new Vec2(start.x, start.y);\n const b = new Vec2(end.x, end.y);\n const vec = b.sub(a);\n const strokeW = arrow.properties.style && arrow.properties.style.strokeWidth ? arrow.properties.style?.strokeWidth : 0;\n return Math.min(max, Math.max(3 * strokeW, vec.length() * 0.1, min));\n}\n\n/**\n * @function drawExt\n * @param point The extremity position\n * @param vec The arrow vector (end-start)\n * @param type The type of extremity\n * @param height The height of the arrow\n */\nfunction drawExt(\n point: Vec2,\n vec: Vec2,\n type: Extremity | undefined,\n height: number\n): string {\n const delta = vec.clone().normalize().invert().mul(height);\n if (!type || type === 'none') return '';\n const p1 = point.clone().add(delta.rotateRadians(Math.PI / 8));\n const p2 = point.clone().add(delta.rotateRadians(-Math.PI / 8));\n\n const pt = `${point.x} ${point.y}`;\n return `M ${p1.x} ${p1.y} L ${pt} ${p2.x} ${p2.y} ${type === 'arrow' ? '' : `${p1.x} ${p1.y}`\n }`;\n}\n\n/**\n * @function draw\n * @param arrow The arrow to draw\n * @param g the group in which to draw\n */\nexport default function draw(\n arrow: Arrow,\n g: SVGGElement,\n defaultStyle: ArrowStyles,\n minArrowHeight: number,\n maxArrowHeight: number\n) {\n const { start, end } = getArrowEndPoints(arrow);\n const { tail, head, strokeColor, strokeWidth } =\n arrow.properties.style || defaultStyle;\n const a = new Vec2(start.x, start.y);\n const b = new Vec2(end.x, end.y);\n const vec = b.clone().sub(a);\n const tipLength = getArrowHeight(arrow, minArrowHeight, maxArrowHeight);\n const path = createSVGElement<SVGPathElement>('path');\n path.setAttribute('data-annotation', `${arrow.id}`);\n path.setAttribute('data-annotation-type', 'arrow');\n const filled = head === 'arrow-plain' || tail === 'arrow';\n path.setAttribute('stroke', strokeColor || 'none');\n path.setAttribute('stroke-width', `${strokeWidth}`);\n path.setAttribute('fill', filled ? strokeColor || '' : 'none');\n path.setAttribute('stroke-linecap', 'round');\n path.setAttribute('stroke-linejoin', 'round');\n const headD = drawExt(a, vec.clone().invert(), tail, tipLength);\n const tailD = drawExt(b, vec, head, tipLength);\n const d = headD + `M ${a.x} ${a.y} ${b.x} ${b.y}` + tailD;\n path.setAttribute('d', d);\n g.appendChild(path);\n}\n","export const NONE = -1;\n\nexport const EVT_DRAG = 'dragging';\nexport const EVT_DRAG_START = 'dragstart';\nexport const EVT_DRAG_END = 'dragend';\nexport const EVT_SELECT = 'select';\nexport const EVT_UNSELECT = 'unselect';\nexport const EVT_HOVER = 'hover';\nexport const EVT_UNHOVER = 'unhover';\nexport const EVT_REMOVE = 'remove';\nexport const EVT_ADD = 'add';\nexport const EVT_CANCEL_DRAWING = 'cancelDrawing';\nexport const EVT_UPDATE = 'update';\nexport const EVT_LINK = 'link';\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","import Ogma, {\n MouseButtonEvent,\n MouseMoveEvent,\n Options,\n Overlay,\n Point,\n SVGLayer\n} from '@linkurious/ogma';\nimport eventEmmitter from 'eventemitter3';\nimport { nanoid as getId } from 'nanoid';\nimport {\n EVT_ADD,\n EVT_HOVER,\n EVT_REMOVE,\n EVT_SELECT,\n EVT_UNHOVER,\n EVT_UNSELECT,\n NONE\n} from '../constants';\nimport { Annotation, Events, Id } from '../types';\n\n/**\n * @class Annotations\n * Abstract class to display Texts and Arrows, provide add/remove/update and mouse events\n * Modifying annotation is handled by the child classes, it is too specific\n */\nexport default abstract class Editor<\n T extends Annotation\n> extends eventEmmitter<Events<T>> {\n protected ogma: Ogma;\n protected elements: T[];\n // layer to draw elements\n protected layer: SVGLayer;\n protected editor: Overlay;\n protected selectedId: Id = NONE;\n protected hoveredId: Id = NONE;\n // used to remember ogma options before we change them\n protected ogmaOptions: Options;\n protected shouldDetect: boolean;\n protected isDragging: boolean;\n protected maxHandleScale = 1.5;\n\n\n constructor(ogma: Ogma, editorHtml: string) {\n super();\n this.ogma = ogma;\n this.elements = [];\n this.shouldDetect = true;\n this.isDragging = false;\n this.ogmaOptions = ogma.getOptions();\n //handle select/unselect on click\n ogma.events\n .on(['click', 'mousemove'], this._onClickMouseMove)\n .on('keyup', this._onKeyUp)\n // @ts-expect-error\n .on('newFrame', () => {\n this.refreshEditor();\n });\n\n // Layer to draw all the annotations\n this.layer = ogma.layers.addSVGLayer({\n draw: (svg) => this.draw(svg)\n });\n this.layer.moveToTop();\n // UI to move/resize the element\n this.editor = ogma.layers.addLayer(editorHtml);\n this.editor.hide();\n }\n\n private _onKeyUp = (evt: { code: number; }) => {\n if (evt.code === 27 && this.selectedId !== NONE) this.unselect();\n else if (\n (evt.code === 46 || evt.code === 8) &&\n this.selectedId !== NONE &&\n this._canRemove()\n ) {\n this.remove(this.selectedId);\n }\n };\n\n protected _canRemove() {\n return true;\n }\n\n private _onClickMouseMove = (\n evt: MouseButtonEvent<unknown, unknown> & MouseMoveEvent\n ) => {\n if (!evt.domEvent || this.isDragging || !this.shouldDetect) return;\n const point = this.ogma.view.screenToGraphCoordinates(evt);\n\n // try to detect annotation\n const element =\n this.shouldDetect || (!this.shouldDetect && +this.selectedId > -1)\n ? this.detect(point, 0)\n : undefined;\n // hover/unhover on mousemove\n if (evt.domEvent.type === 'mousemove') {\n if (element) this.hover(element.id);\n else if (this.hoveredId !== NONE) this.unhover();\n } else {\n // select/unselect on click\n if (element) {\n this.select(element.id);\n } else if (this.selectedId !== NONE) {\n this.unselect();\n }\n }\n };\n\n /**\n * @method add\n * @param options Params for the annotation (merged with default)\n * @returns the added annotation\n */\n add(options: T) {\n const def = this.getDefaultOptions();\n const o = Object.assign(options, {\n id: options.id === undefined ? getId() : options.id,\n type: options.type,\n properties: {\n ...def.properties,\n ...(options.properties || {}),\n // styles need to be merged\n style: { ...def.properties.style, ...(options.properties.style || {}) }\n },\n geometry: {\n ...def.geometry,\n ...options.geometry\n }\n } as T);\n this.elements.push(o);\n this.layer.refresh();\n this.emit(EVT_ADD, o);\n return o;\n }\n\n public updateStyle(annotation: T, style: Partial<T['properties']['style']>) {\n this.updateAnnotation(annotation, {\n properties: {\n style\n }\n } as Partial<T>);\n }\n\n public updateGeometry(annotation: T, geometry: Partial<T['geometry']>) {\n this.updateAnnotation(annotation, {\n geometry\n } as Partial<T>);\n }\n\n /**\n * @method update\n * Updates an annotation (position, color etc)\n * @param id Id of the annotation to update\n * @param new params of the annotation\n */\n update(id: Id, element: Partial<T>) {\n const target = this.getById(id);\n this.updateAnnotation(target, element);\n }\n\n updateAnnotation(target: T, element: Partial<T>) {\n if (!target) return;\n const id = target.id;\n Object.keys(element).forEach((key) => {\n if (key === 'id') return;\n if (key === 'properties') {\n const properties = element.properties || { style: {} };\n target.properties = {\n ...(target.properties || {}),\n ...(properties || {}),\n style: {\n ...(target.properties.style || {}),\n ...(properties.style || {})\n }\n };\n } else if (key === 'geometry') {\n target.geometry = {\n ...target.geometry,\n ...element.geometry\n };\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n } else target[key] = element[key];\n });\n if (id === this.selectedId) this.refreshEditor();\n this.layer.refresh();\n }\n\n getById(id: Id): T {\n for (let i = 0; i < this.elements.length; i++) {\n const element = this.elements[i];\n if (element.id !== id) continue;\n return element;\n }\n return undefined as unknown as T;\n }\n\n /**\n * @method select\n * @param id id of the element to select\n * Select element, show editor, disable Ogma dragging and fire event\n */\n select(id: Id) {\n const element = this.getById(id);\n if (!element) return;\n this.editor.show();\n this.selectedId = id;\n this.refreshEditor();\n this.layer.refresh();\n this.emit(EVT_SELECT, element);\n }\n\n hover(id: Id) {\n const element = this.getById(id);\n if (!element) return;\n this.editor.show();\n this.hoveredId = id;\n this.refreshEditor();\n this.layer.refresh();\n this.emit(EVT_HOVER, element);\n }\n\n getSelectedFeature() {\n if (this.selectedId === NONE) return null;\n return this.getById(this.selectedId);\n }\n\n unselect() {\n const current = this.getById(this.selectedId);\n if (current) this.emit(EVT_UNSELECT, current);\n this.selectedId = NONE;\n // do not hide editor if there is something hovered\n if (this.hoveredId === NONE) this.editor.hide();\n this.layer.refresh();\n return this;\n }\n\n unhover() {\n const current = this.getById(this.hoveredId);\n this.emit(EVT_UNHOVER, current);\n this.hoveredId = NONE;\n // do not hide editor if there is something selected\n if (this.selectedId === NONE) this.editor.hide();\n this.layer.refresh();\n return this;\n }\n\n /**\n * @method remove\n * @param id Id of the annotation to remove\n * Removes annotation with the given id\n */\n remove(id: Id) {\n const element = this.getById(id);\n if (id === this.hoveredId) this.unhover();\n if (id === this.selectedId) this.unselect();\n this.elements = this.elements.filter((a) => a.id !== id);\n if (element) this.emit(EVT_REMOVE, element);\n this.layer.refresh();\n }\n\n /**\n * @method disableDragging\n * Prevents Ogma from dragging elements or moving the view while dragging an annotation\n */\n public disableDragging() {\n this.ogma.setOptions({\n interactions: {\n drag: { enabled: false },\n pan: { enabled: false }\n },\n detect: {\n nodes: false,\n edges: false,\n nodeTexts: false,\n edgeTexts: false\n }\n });\n }\n\n /**\n * @method restoreDragging\n * restore ogma options as they were before we start dragging an annotation\n */\n public restoreDragging() {\n this.ogma.setOptions(this.ogmaOptions);\n }\n\n public enableDetection() {\n this.shouldDetect = true;\n }\n /**\n * @method disableDetection\n * Disables the hover behaviour, used by controller to avoid hovering\n * arrows while dragging texts and vice versa\n */\n public disableDetection() {\n this.shouldDetect = false;\n }\n\n public refreshLayer() {\n this.layer.refresh();\n }\n\n public getElements() {\n return [...this.elements];\n }\n public abstract refreshEditor(): void;\n public abstract draw(svg: SVGSVGElement): void;\n public abstract cancelDrawing(): void;\n\n public abstract getDefaultOptions(): T;\n public abstract detect(point: Point, margin: number): T | undefined;\n public destroy() {\n this.ogma.events.off(this._onClickMouseMove).off(this._onKeyUp);\n this.layer.destroy();\n }\n}\n","import Ogma, { Point } from '@linkurious/ogma';\nimport Vector2 from 'vector2js';\nimport { createArrow, defaultOptions, defaultStyle } from './defaults';\nimport drawArrow, { getArrowHeight } from './render';\nimport { EVT_DRAG, EVT_DRAG_END, EVT_DRAG_START, NONE } from '../../constants';\nimport { Arrow, ControllerOptions } from '../../types';\nimport {\n createSVGElement,\n getArrowEnd,\n getArrowEndPoints,\n getArrowStart,\n getHandleId,\n setArrowEnd,\n setArrowStart\n} from '../../utils';\nimport Editor from '../base';\n\nconst HANDLE_LINE = 'handle-line';\nconst HANDLE_START = 'handle-start';\nconst HANDLE_END = 'handle-end';\n\n/**\n * @class Arrows\n * Draw and edit arrows\n */\nexport class Arrows extends Editor<Arrow> {\n // active handle id\n private draggedHandle = NONE;\n private start: Point = { x: 0, y: 0 };\n private end: Point = { x: 0, y: 0 };\n private arrow: Arrow = { ...defaultOptions };\n private startX = 0;\n private startY = 0;\n private minArrowHeight = 0;\n private maxArrowHeight = 0;\n private handles: HTMLDivElement[] = [];\n\n constructor(\n ogma: Ogma,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options: Pick<\n Partial<ControllerOptions>,\n 'arrowHandleSize' | 'maxArrowHeight' | 'minArrowHeight'\n > = {}\n ) {\n super(\n ogma,\n `\n <div class=\"arrow-handle\">\n <div id=\"${HANDLE_LINE}\" data-handle-id=\"0\" class=\"handle line\"></div>\n <div id=\"${HANDLE_START}\" data-handle-id=\"1\" class=\"handle\"></div>\n <div id=\"${HANDLE_END}\" data-handle-id=\"2\" class=\"handle\"></div>\n </div>\n `\n );\n\n this.minArrowHeight = options.minArrowHeight || 0;\n this.maxArrowHeight = options.maxArrowHeight || 1e6;\n\n this.handles = Array.prototype.slice.call(\n this.editor.element.querySelectorAll('.arrow-handle>.handle')\n );\n\n // events to move/resize\n this.handles.forEach((handle: HTMLDivElement) =>\n handle.addEventListener('mousedown', this.onHandleMouseDown)\n );\n document.addEventListener('mousemove', this.onMouseMove, true);\n document.addEventListener('mouseup', this.onMouseUp);\n }\n\n private onHandleMouseDown = (evt: MouseEvent) => {\n const res = this.getById(this.selectedId) || this.getById(this.hoveredId);\n if (!res) return;\n\n this.startDragging(res, evt.clientX, evt.clientY);\n this.draggedHandle = getHandleId(evt.target as HTMLDivElement);\n };\n\n /**\n * Start drawing a new arrow, it will also be added as a new annotation\n * @param x\n * @param y\n * @param arrow\n */\n public startDrawing(\n x: number,\n y: number,\n arrow: Arrow = createArrow(x, y, x, y, defaultStyle)\n ) {\n this.add(arrow);\n this.hoveredId = arrow.id;\n const pos = this.ogma.view.graphToScreenCoordinates({ x, y });\n const bb = this.ogma.getContainer()?.getBoundingClientRect() || { left: 0, top: 0 };\n this.startDragging(this.getById(arrow.id), pos.x + bb?.left, pos.y + bb.top);\n this.draggedHandle = 2;\n }\n\n public cancelDrawing(): void {\n if (!this.isDragging) return;\n this.remove(this.arrow.id);\n this.emit(EVT_DRAG_END, this.arrow);\n this.restoreDragging();\n this.isDragging = false;\n this.draggedHandle = NONE;\n }\n\n private startDragging(arrow: Arrow, x: number, y: number) {\n // element could be just hovered at that point, select it\n if (this.selectedId !== arrow.id) this.select(this.hoveredId);\n this.arrow = arrow;\n // remember drag start point and arrow ends poisitions\n this.startX = x;\n this.startY = y;\n\n this.start = getArrowStart(this.arrow);\n this.end = getArrowEnd(this.arrow);\n\n this.disableDragging();\n this.emit(EVT_DRAG_START, this.arrow);\n this.isDragging = true;\n }\n\n private onMouseUp = () => {\n if (this.draggedHandle === -1) return;\n this.restoreDragging();\n this.isDragging = false;\n this.draggedHandle = NONE;\n this.emit(EVT_DRAG_END, this.arrow);\n };\n\n private onMouseMove = (evt: MouseEvent) => {\n if (!this.isDragging || this.draggedHandle === NONE) return;\n\n const handle = this.handles[this.draggedHandle];\n const zoom = this.ogma.view.getZoom();\n const dx = (evt.clientX - this.startX) / zoom;\n const dy = (evt.clientY - this.startY) / zoom;\n\n const isLine = handle.id === HANDLE_LINE;\n const isStart = handle.id === HANDLE_START;\n const isEnd = handle.id === HANDLE_END;\n\n if (isLine || isStart)\n setArrowStart(this.arrow, this.start.x + dx, this.start.y + dy);\n if (isLine || isEnd)\n setArrowEnd(this.arrow, this.end.x + dx, this.end.y + dy);\n\n this.emit(\n EVT_DRAG,\n this.arrow,\n isLine ? 'line' : isStart ? 'start' : 'end'\n );\n this.refreshEditor();\n this.layer.refresh();\n };\n\n public detect(point: Point, margin = 0): Arrow | undefined {\n return this.elements.find((a) => {\n const { start, end } = getArrowEndPoints(a);\n // p is the vector from mouse pointer to the center of the arrow\n const p = new Vector2(point.x, point.y).sub(\n new Vector2((start.x + end.x) / 2, (start.y + end.y) / 2)\n );\n const vec = new Vector2(end.x, end.y).sub(new Vector2(start.x, start.y));\n const width = vec.length();\n const vecN = vec.normalize();\n const height = getArrowHeight(a);\n // check if the cursor is within the bounds of the bounding rectangle\n // of the arrow extended by margin\n return (\n Math.abs(vecN.dot(p)) < width / 2 + margin &&\n Math.abs(vecN.rotateRadians(Math.PI / 2).dot(p)) < height / 2 + margin\n );\n });\n }\n\n public refreshEditor() {\n if (+this.selectedId < 0 && +this.hoveredId < 0) return;\n const arrow =\n this.selectedId !== NONE\n ? this.getById(this.selectedId)\n : this.getById(this.hoveredId);\n const extremities = getArrowEndPoints(arrow);\n const start = this.ogma.view.graphToScreenCoordinates(extremities.start);\n const end = this.ogma.view.graphToScreenCoordinates(extremities.end);\n const scale = Math.min(this.ogma.view.getZoom(), this.maxHandleScale);\n const [lineH, startH, endH] = Array.prototype.slice.call(\n this.editor.element.querySelectorAll('.handle')\n ) as HTMLDivElement[];\n\n startH.style.transform = `translate(${start.x}px, ${start.y}px) translate(-50%, -50%) scale(${scale})`;\n endH.style.transform = `translate(${end.x}px, ${end.y}px) translate(-50%, -50%) scale(${scale}`;\n\n const middle = {\n x: (end.x + start.x) / 2,\n y: (end.y + start.y) / 2\n };\n\n const v = new Vector2(end.x - start.x, end.y - start.y);\n const vn = v.mul(1 / v.length());\n const angle = Math.atan2(vn.y, vn.x);\n\n lineH.style.width = `${v.length() / scale}px`;\n lineH.style.left = `${middle.x}px`;\n lineH.style.top = `${middle.y}px`;\n lineH.style.transform = `translate(-50%, -50%) rotate(${angle}rad) scale(${scale}) `;\n }\n public getDefaultOptions(): Arrow {\n return defaultOptions;\n }\n public draw(svg: SVGSVGElement): void {\n svg.innerHTML = '';\n const g = createSVGElement<SVGGElement>('g');\n this.elements.forEach((a) =>\n drawArrow(a, g, defaultStyle, this.minArrowHeight, this.maxArrowHeight)\n );\n svg.appendChild(g);\n }\n\n public destroy(): void {\n super.destroy();\n document.removeEventListener('mousemove', this.onMouseMove, true);\n document.removeEventListener('mouseup', this.onMouseUp);\n }\n}\n\nexport {\n defaultOptions as defaultArrowOptions,\n defaultStyle as defaultArrowStyle,\n createArrow\n};\n","import { nanoid as getId } from 'nanoid';\nimport { AnnotationOptions, Text, TextStyle } from '../../types';\n\nexport const defaultStyle: TextStyle = {\n font: 'sans-serif',\n fontSize: '12',\n color: 'black',\n background: '',\n strokeWidth: 1,\n strokeColor: '#000',\n strokeType: 'plain'\n};\n\n//used when adding a new Text\nexport const defaultOptions: Text = {\n id: 0,\n type: 'Feature',\n properties: {\n type: 'text',\n content: '',\n style: { ...defaultStyle }\n },\n geometry: {\n type: 'Polygon',\n coordinates: [\n [\n [0, 0],\n [100, 0],\n [100, 50],\n [0, 50],\n [0, 0]\n ]\n ]\n }\n // position: { x: 0, y: 0 },\n // size: { width: 100, height: 50 }\n};\n\nexport const defaultControllerOptions: AnnotationOptions = {\n handleSize: 3.5,\n placeholder: 'Your text...'\n};\n\nexport const createText = (\n x = 0,\n y = 0,\n width = 100,\n height = 50,\n content = '',\n styles: Partial<TextStyle> = { ...defaultStyle }\n): Text => ({\n id: getId(),\n type: 'Feature',\n properties: {\n type: 'text',\n content,\n style: { ...defaultStyle, ...styles }\n },\n geometry: {\n type: 'Polygon',\n coordinates: [\n [\n [x, y],\n [x + width, y],\n [x + width, y + height],\n [x, y + height],\n [x, y]\n ]\n ]\n }\n});\n","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.Textbox=e():t.Textbox=e()}(this,(()=>(()=>{\"use strict\";var t={d:(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},e={};function r(t){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},r(t)}t.d(e,{default:()=>_t});var n=/^((?:[a-z\\d-]+\\s+)*)([\\d.]+(%|em|px)|(?:x+-)?large|(?:x+-)?small|medium)(?:\\s*\\/\\s*(normal|[\\d.]+(%|px|em)?))?(\\s.+)?$/,i=/\\bsmall-caps\\b/,o=/\\b(?:italic|oblique)\\b/,a=/\\bbold(?:er)?\\b/,l=13.3333333,s={\"xx-small\":9,\"x-small\":10,smaller:13.3333,small:13,medium:16,large:18,larger:19.2,\"x-large\":24,\"xx-large\":32};function u(t){var e=\"\",r=this;return r.style&&\"normal\"!==r.style&&(e+=r.style),r.variant&&\"normal\"!==r.variant&&(e+=(e?\" \":\"\")+r.variant),r.weight&&\"normal\"!==r.weight&&(e+=(e?\" \":\"\")+r.weight),r.size&&(e+=(e?\" \":\"\")+r.size+\"px\",r.height!==r.size&&(e+=\"/\"+r.height+\"px\")),r.family&&(e+=(e?\" \":\"\")+r.family),t&&(e+=\"::\"+r.baseline),t&&(e+=\"::\"+r.color),e}var c={id:\"\",family:\"sans-serif\",height:14,size:12,variant:\"\",style:\"\",weight:\"\",baseline:\"\",color:null,toString:u,valueOf:u};function f(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.exec(t);e.family=(r[6]||\"\").trim();var u=s[r[2]]||parseFloat(r[2]);\"%\"===r[3]?u*=.16:\"em\"===r[3]?u*=16:\"pt\"===r[3]&&(u*=l),e.size=u;var c=parseFloat(r[4]);if(\"normal\"!==c&&\"inherit\"!==c&&c?r[5]&&\"em\"!==r[5]?\"pt\"===r[5]?e.height=c*l:\"%\"===r[5]?e.height=.01*u:e.height=c:e.height=c*u:e.height=Math.round(u*(7/6)),i.test(r[1])&&(e.variant=\"small-caps\"),o.test(r[1])&&(e.style=\"italic\"),a.test(r[1]))e.weight=\"bold\";else{var f=parseInt(/\\b(\\d+)\\b/.exec(r[1]),10);f>=100&&400!==f&&(e.weight=f)}return e}function h(){var t,e,n,i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"12px/14px sans-serif\",o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=14,l=12,s=null,h=null,p=\"\";if(i&&i.nodeType){var g=i&&(i.ownerDocument&&i.ownerDocument.defaultView||i.document&&i||i.defaultView),d=g.getComputedStyle(i,null);t=d.getPropertyValue(\"font-family\")||\"\",l=parseFloat(d.getPropertyValue(\"font-size\")),a=d.getPropertyValue(\"line-height\"),s=d.getPropertyValue(\"font-weight\"),h=d.getPropertyValue(\"font-style\"),p=d.getPropertyValue(\"font-variant\")||\"\"}else if(\"string\"==typeof i){var v=f(i);t=v.family,l=v.size,a=v.height,p=v.variant,h=v.style,s=v.weight}else\"object\"===r(i)&&(t=i.family,l=i.size,a=i.height,p=i.variant,s=i.weight,h=i.style,e=i.baseline,n=i.color);o.size&&o.size<3&&(l*=o.size),a=\"normal\"!==a&&a?parseFloat(a):l*(7/6),o.height&&o.height<3&&(a*=o.height);var m=Object.create(c);return m.family=o.family||t||\"sans-serif\",m.height=null==a?14:a,m.size=null==l?12:l,m.variant=o.variant||p||\"\",m.style=o.style||h||\"\",m.weight=o.weight||s||\"\",m.baseline=e||0,null!=o.baseline&&(m.baseline=o.baseline),m.color=o.color||n||\"\",m.id=u.call(m,!0),m}const p={\"\\n\":.28,\"\\r\":.28,\" \":.28,\" \":.28,\" \":.28,\"\":0,\" \":.5,\" \":1,\" \":.5,\" \":1,\" \":.33,\" \":.25,\" \":.16,\" \":.56,\" \":.28,\" \":.2,\" \":.15,\"\":0,\" \":.16,\" \":.22,\" \":1,\"\\ufeff\":0};var g,d=function(t){var e=\"undefined\"!=typeof OffscreenCanvas&&new OffscreenCanvas(100,100)||t&&t.createElement(\"canvas\");if(e&&e.getContext){var r=e.getContext(\"2d\");if(r&&\"function\"==typeof r.measureText)return function(t,e){return r.font=String(e),r.measureText(t).width}}}(\"undefined\"!=typeof document?document:null)||(g={},function(t,e){if(!g[e]){var r=h(e);g[e]=r,/\\bmonospace\\b/.test(r.family)?r.size*=.6:(r.size*=.45,r.weight&&(r.size*=1.18))}return t.length*g[e].size}),v={},m={trim:!0,collapse:!0};function y(t,e,r){var n=Object.assign({},m,r),i=String(t);if(!i)return 0;if(i in p){var o=e.id+\"/\"+i;return o in v||(v[o]=d(\"_\".concat(i,\"_\"),e)-d(\"__\",e)),v[o]}return n.trim&&n.collapse?n.trim?i=i.trim():n.collapse&&(i=i.replace(/\\s+/g,\" \")):i=i.replace(/\\n/g,\" \"),d(i,e)+e.size*(t.tracking||0)}function b(t){return b=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},b(t)}function w(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,\"prototype\",{writable:!1}),e&&x(t,e)}function x(t,e){return x=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},x(t,e)}function S(t){var e=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var r,n=k(t);if(e){var i=k(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return A(this,r)}}function A(t,e){if(e&&(\"object\"===b(e)||\"function\"==typeof e))return e;if(void 0!==e)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}(t)}function k(t){return k=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},k(t)}function E(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function O(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,(void 0,i=function(t,e){if(\"object\"!==b(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e);if(\"object\"!==b(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(n.key,\"string\"),\"symbol\"===b(i)?i:String(i)),n)}var i}function j(t,e,r){return e&&O(t.prototype,e),r&&O(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),t}var z=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\";E(this,t),this.value=e,this.weight=null,this.style=null,this.font=null,this.href=null,this.sub=!1,this.sup=!1}return j(t,[{key:\"clone\",value:function(){var e=new t(this.value);return e.value=this.value,e.weight=this.weight,e.style=this.style,e.font=this.font,e.href=this.href,e.sub=this.sub,e.sup=this.sup,e}},{key:\"valueOf\",value:function(){return this.value}},{key:\"toString\",value:function(){return this.value}}]),t}(),P=function(t){w(r,t);var e=S(r);function r(){return E(this,r),e.apply(this,arguments)}return j(r)}(z),T=function(t){w(r,t);var e=S(r);function r(){return E(this,r),e.apply(this,arguments)}return j(r)}(z),q=function(t){w(r,t);var e=S(r);function r(){return E(this,r),e.apply(this,arguments)}return j(r)}(z),C=/^[\\n\\r\\t\\x20\\xA0\\u2000-\\u200B\\u205F\\u3000]/,_=/^[^\\n\\r\\t\\u0020\\u2000-\\u200B\\u205F\\u3000]{2,}/,F=/^[\\xA0\\u2011\\u202F\\u2060\\uFEFF]/,I=/^(?:[;\\xAD%?…]|,(?!\\d))/,L=/^[´±°¢£¤$¥\\u2212]/;function B(t,e){!1!==e&&(t=t.trim());for(var r,n,i=[],o=t.charAt(0),a=0,l=1,s=t.length;l<s;l++){r=t.charAt(l),n=t.charAt(l+1);var u=C.test(o),c=C.test(r),f=c||u,h=void 0;if((L.test(r)&&!F.test(o)||I.test(o+n)&&!F.test(r))&&(f=!0),\"-\"!==o&&\"‐\"!==o&&\"–\"!==o&&\"—\"!==o||((h=C.test(t.charAt(l-2)))&&!c&&(f=!1),!h&&_.test(r+n)&&(f=!0)),f){var p=t.slice(a,l);/\\u00AD$/.test(p)?(i.push(new z(p.slice(0,-1))),i.push(new q)):(i.push(new z(p)),i.push(new P)),a=l}o=r}return i.push(new z(t.slice(a))),i}const $={nbsp:\" \",iexcl:\"¡\",cent:\"¢\",pound:\"£\",curren:\"¤\",yen:\"¥\",brvbar:\"¦\",sect:\"§\",uml:\"¨\",copy:\"©\",ordf:\"ª\",laquo:\"«\",not:\"¬\",shy:\"\",reg:\"®\",macr:\"¯\",deg:\"°\",plusmn:\"±\",sup2:\"²\",sup3:\"³\",acute:\"´\",micro:\"µ\",para:\"¶\",middot:\"·\",cedil:\"¸\",sup1:\"¹\",ordm:\"º\",raquo:\"»\",frac14:\"¼\",frac12:\"½\",frac34:\"¾\",iquest:\"¿\",Agrave:\"À\",Aacute:\"Á\",Acirc:\"Â\",Atilde:\"Ã\",Auml:\"Ä\",Aring:\"Å\",AElig:\"Æ\",Ccedil:\"Ç\",Egrave:\"È\",Eacute:\"É\",Ecirc:\"Ê\",Euml:\"Ë\",Igrave:\"Ì\",Iacute:\"Í\",Icirc:\"Î\",Iuml:\"Ï\",ETH:\"Ð\",Ntilde:\"Ñ\",Ograve:\"Ò\",Oacute:\"Ó\",Ocirc:\"Ô\",Otilde:\"Õ\",Ouml:\"Ö\",times:\"×\",Oslash:\"Ø\",Ugrave:\"Ù\",Uacute:\"Ú\",Ucirc:\"Û\",Uuml:\"Ü\",Yacute:\"Ý\",THORN:\"Þ\",szlig:\"ß\",agrave:\"à\",aacute:\"á\",acirc:\"â\",atilde:\"ã\",auml:\"ä\",aring:\"å\",aelig:\"æ\",ccedil:\"ç\",egrave:\"è\",eacute:\"é\",ecirc:\"ê\",euml:\"ë\",igrave:\"ì\",iacute:\"í\",icirc:\"î\",iuml:\"ï\",eth:\"ð\",ntilde:\"ñ\",ograve:\"ò\",oacute:\"ó\",ocirc:\"ô\",otilde:\"õ\",ouml:\"ö\",divide:\"÷\",oslash:\"ø\",ugrave:\"ù\",uacute:\"ú\",ucirc:\"û\",uuml:\"ü\",yacute:\"ý\",thorn:\"þ\",yuml:\"ÿ\",fnof:\"ƒ\",Alpha:\"Α\",Beta:\"Β\",Gamma:\"Γ\",Delta:\"Δ\",Epsilon:\"Ε\",Zeta:\"Ζ\",Eta:\"Η\",Theta:\"Θ\",Iota:\"Ι\",Kappa:\"Κ\",Lambda:\"Λ\",Mu:\"Μ\",Nu:\"Ν\",Xi:\"Ξ\",Omicron:\"Ο\",Pi:\"Π\",Rho:\"Ρ\",Sigma:\"Σ\",Tau:\"Τ\",Upsilon:\"Υ\",Phi:\"Φ\",Chi:\"Χ\",Psi:\"Ψ\",Omega:\"Ω\",alpha:\"α\",beta:\"β\",gamma:\"γ\",delta:\"δ\",epsilon:\"ε\",zeta:\"ζ\",eta:\"η\",theta:\"θ\",iota:\"ι\",kappa:\"κ\",lambda:\"λ\",mu:\"μ\",nu:\"ν\",xi:\"ξ\",omicron:\"ο\",pi:\"π\",rho:\"ρ\",sigmaf:\"ς\",sigma:\"σ\",tau:\"τ\",upsilon:\"υ\",phi:\"φ\",chi:\"χ\",psi:\"ψ\",omega:\"ω\",thetasym:\"ϑ\",upsih:\"ϒ\",piv:\"ϖ\",bull:\"•\",hellip:\"…\",prime:\"′\",Prime:\"″\",oline:\"‾\",frasl:\"⁄\",weierp:\"℘\",image:\"ℑ\",real:\"ℜ\",trade:\"™\",alefsym:\"ℵ\",larr:\"←\",uarr:\"↑\",rarr:\"→\",darr:\"↓\",harr:\"↔\",crarr:\"↵\",lArr:\"⇐\",uArr:\"⇑\",rArr:\"⇒\",dArr:\"⇓\",hArr:\"⇔\",forall:\"∀\",part:\"∂\",exist:\"∃\",empty:\"∅\",nabla:\"∇\",isin:\"∈\",notin:\"∉\",ni:\"∋\",prod:\"∏\",sum:\"∑\",minus:\"−\",lowast:\"∗\",radic:\"√\",prop:\"∝\",infin:\"∞\",ang:\"∠\",and:\"⊥\",or:\"⊦\",cap:\"∩\",cup:\"∪\",int:\"∫\",there4:\"∴\",sim:\"∼\",cong:\"≅\",asymp:\"≈\",ne:\"≠\",equiv:\"≡\",le:\"≤\",ge:\"≥\",sub:\"⊂\",sup:\"⊃\",nsub:\"⊄\",sube:\"⊆\",supe:\"⊇\",oplus:\"⊕\",otimes:\"⊗\",perp:\"⊥\",sdot:\"⋅\",lceil:\"⌈\",rceil:\"⌉\",lfloor:\"⌊\",rfloor:\"⌋\",lang:\"〈\",rang:\"〉\",loz:\"◊\",spades:\"♠\",clubs:\"♣\",hearts:\"♥\",diams:\"♦\",quot:'\"',amp:\"&\",lt:\"<\",gt:\">\",OElig:\"Œ\",oelig:\"œ\",Scaron:\"Š\",scaron:\"š\",Yuml:\"Ÿ\",circ:\"ˆ\",tilde:\"˜\",ensp:\" \",emsp:\" \",thinsp:\" \",zwnj:\"\",zwj:\"\",lrm:\"\",rlm:\"\",ndash:\"–\",mdash:\"—\",lsquo:\"‘\",rsquo:\"’\",sbquo:\"‚\",ldquo:\"“\",rdquo:\"”\",bdquo:\"„\",dagger:\"†\",Dagger:\"‡\",permil:\"‰\",lsaquo:\"‹\",rsaquo:\"›\"};var D=/^[\\n\\r\\x20\\u2000-\\u200B\\u205F\\u3000]/,R=/^<\\/([a-zA-Z0-9]+)([^>]*)>/,U=/^<([a-zA-Z0-9]+)((?:\\s[^=\\s/]+(?:\\s*=\\s*(?:\"[^\"]+\"|'[^']+'|[^>\\\\s]+))?)+)?\\s*(\\/?)>(\\n*)/,M=/^<!--(.+?)-->/,N=/&(?:#(\\d\\d{2,})|#x([\\da-fA-F]{2,})|([a-zA-Z][a-zA-Z1-4]{1,8}));/g,V={b:function(t){t.weight=\"bold\"},strong:function(t){t.weight=\"bold\"},i:function(t){t.style=\"italic\"},em:function(t){t.style=\"italic\"},dfn:function(t){t.style=\"italic\"},cite:function(t){t.style=\"italic\"},code:function(t){t.family=\"monospace\"},kbd:function(t){t.family=\"monospace\"},samp:function(t){t.family=\"monospace\"},var:function(t){t.family=\"monospace\"},tt:function(t){t.family=\"monospace\"},sub:function(t){t.sub=!0},sup:function(t){t.sup=!0}},Z={div:1,li:1,blockquote:2,h1:2,h2:2,h3:2,h4:2,h5:2,h6:2,ul:2,ol:2,hr:2,p:2};function W(t){return t.replace(N,(function(t,e,r,n){if(e||r){var i=e?10:16;return String.fromCharCode(parseInt(e||r,i))}return n in $?$[n]:t}))}function H(t){if(t&&t.length>1){if('\"'===t[0]&&'\"'===t[t.length-1])return t.slice(1,-1);if(\"'\"===t[0]&&\"'\"===t[t.length-1])return t.slice(1,-1)}return t}var X=/^\\s*([^=\\s&]+)(?:\\s*=\\s*(\"[^\"]+\"|'[^']+'|[^>\\s]+))?/;function G(t){var e,r={};if(t){do{if(e=X.exec(t)){var n=W(H(e[2]||\"\")).replace(/[ \\r\\n\\t]+/g,\" \").trim();if(r[e[1]]=n,(t=t.slice(e[0].length)).length&&/^\\S/.test(t[0]))throw new Error(\"Attribute error\")}}while(e&&t.length);if(/\\S/.test(t))throw new Error(\"Attribute error\")}return r}const J={copyright:\"©\",textcopyright:\"©\",dag:\"†\",textdagger:\"†\",ddag:\"‡\",textdaggerdbl:\"‡\",guillemotleft:\"«\",guillemotright:\"»\",guilsinglleft:\"‹\",guilsinglright:\"›\",ldots:\"…\",dots:\"…\",textellipsis:\"…\",lq:\"‘\",P:\"¶\",textparagraph:\"¶\",pounds:\"£\",textsterling:\"£\",quotedblbase:\"„\",quotesinglbase:\"‚\",rq:\"’\",S:\"§\",sim:\"~\",textasciicircum:\"^\",textasciitilde:\"˜\",texttildelow:\"~\",textasteriskcentered:\"*\",textbackslash:\"'\",textbar:\"|\",textbardbl:\"╎\",textbigcircle:\"◯\",textbraceleft:\"{\",textbraceright:\"}\",textbullet:\"•\",textdollar:\"$\",textemdash:\"—\",textendash:\"—\",texteuro:\"€\",eurosym:\"€\",euro:\"€\",textexclamdown:\"¡\",textgreater:\">\",textless:\"<\",textordfeminine:\"ª\",textordmasculine:\"º\",textperiodcentered:\"·\",cdot:\"·\",textquestiondown:\"¿\",textquotedblleft:\"“\",textquotedblright:\"”\",textquoteleft:\"‘\",textquoteright:\"’\",textquotestraightbase:\"‚\",textquotestraightdblbase:\"„\",textregistered:\"®\",textthreequartersemdash:\"-\",texttrademark:\"™\",texttwelveudash:\"-\",textunderscore:\"_\",textvisiblespace:\"␣\",gets:\"←\",textleftarrow:\"←\",to:\"→\",textrightarrow:\"→\",textdegree:\"°\",infty:\"∞\",triangle:\"△\",triangledown:\"▽\",blacktriangle:\"▲\",blacktriangledown:\"▼\",angle:\"∠\",sphericalangle:\"∢\",aleph:\"ℵ\",hbar:\"ħ\",imath:\"𝚤\",jmath:\"𝚥\",ell:\"ℓ\",wp:\"℘\",Re:\"ℜ\",Im:\"ℑ\",mho:\"℧\",prime:\"′\",emptyset:\"∅\",nabla:\"∇\",surd:\"√\",partial:\"∂\",top:\"⟙\",bot:\"⟂\",vdash:\"⟝\",dashv:\"⟞\",forall:\"∀\",exists:\"∃\",nexists:\"∄\",neg:\"¬\",lnot:\"¬\",flat:\"♭\",natural:\"♮\",sharp:\"♯\",backslash:\"\\\\\",Box:\"□\",Diamond:\"♢\",clubsuit:\"♣\",diamondsuit:\"♦\",heartsuit:\"♥\",spadesuit:\"♠\",Join:\"⨝\",blacksquare:\"■\",bigstar:\"★\",diagdown:\"╲\",diagup:\"╱\",blacklozenge:\"⧫\",rfloor:\"⌋\",lfloor:\"⌊\",rceil:\"⌉\",lceil:\"⌈\",rangle:\"⟩\",langle:\"⟨\",sum:\"∑\",int:\"∫\",oint:\"∮\",prod:\"∏\",coprod:\"∏\",bigcap:\"∩\",bigcup:\"∪\",bigsqcup:\"⊔\",bigvee:\"∨\",bigwedge:\"∧\",bigodot:\"⊙\",bigotimes:\"⊗\",bigoplus:\"⊕\",biguplus:\"⊎\",alpha:\"α\",beta:\"β\",chi:\"χ\",delta:\"δ\",epsilon:\"ε\",eta:\"η\",gamma:\"γ\",iota:\"ι\",kappa:\"κ\",lambda:\"λ\",mu:\"μ\",nu:\"ν\",omega:\"ω\",phi:\"φ\",pi:\"π\",psi:\"ψ\",rho:\"ρ\",sigma:\"σ\",tau:\"τ\",theta:\"θ\",upsilon:\"υ\",xi:\"ξ\",zeta:\"ζ\",Alpha:\"Α\",Beta:\"Β\",Chi:\"Χ\",Delta:\"Δ\",Epsilon:\"Ε\",Eta:\"Η\",Gamma:\"Γ\",Iota:\"Ι\",Kappa:\"Κ\",Lambda:\"Λ\",Mu:\"Μ\",Nu:\"Ν\",Omega:\"Ω\",Phi:\"Φ\",Pi:\"Π\",Psi:\"Ψ\",Rho:\"Ρ\",Sigma:\"Σ\",Tau:\"Τ\",Theta:\"Θ\",Upsilon:\"Υ\",Xi:\"Ξ\",Zeta:\"Ζ\",aa:\"å\",AA:\"Å\",ae:\"æ\",AE:\"Æ\",dh:\"ð\",DH:\"Ð\",dj:\"đ\",DJ:\"Đ\",ij:\"ij\",IJ:\"IJ\",l:\"ł\",L:\"Ł\",ng:\"ŋ\",NG:\"Ŋ\",o:\"ø\",O:\"Ø\",oe:\"œ\",OE:\"Œ\",ss:\"ß\",SS:\"SS\",th:\"þ\",TH:\"Þ\"};var K=/^(\\^|_|\\\\[^#$%&~_^\\\\{}()\\s]+)(\\{)?/,Y=/^%[^\\n]+(?:\\n|$)/,Q=/^[^#$%&~_^\\\\{}]+/,tt=/^\\\\([&{}$%#_])/,et=/(?:\\\\[\\\\@,!:;-]|-{2,3}|[!?]`|``?|,,|''?|~|<<|>>)/g,rt={\"---\":\"—\",\"--\":\"–\",\"!`\":\"¡\",\"?`\":\"¿\",\"``\":\"“\",\",,\":\"„\",\"''\":\"”\",\"`\":\"‘\",\"'\":\"’\",\"<<\":\"«\",\">>\":\"»\",\"~\":\" \",\"\\\\-\":\"\",\"\\\\,\":\" \",\"\\\\;\":\" \",\"\\\\:\":\" \",\"\\\\!\":\" \",\"\\\\@\":\"\\ufeff\",\"\\\\\\\\\":\"\\\\newline{}\"},nt={bf:function(t){t.weight=\"bold\"},it:function(t){t.style=\"italic\"},sl:function(t){t.style=\"italic\"},color:function(t,e){t.color=e},href:function(t,e){t.href=e},\"^\":function(t){t.sup=!0},_:function(t){t.sub=!0},par:function(t){this.tokens.push(new T,new T)},newline:function(t){this.tokens.push(new T)},url:function(t,e){this.open_context().href=e,this.add_token(new z(e)),this.close_context()}};nt.textsuperscript=nt[\"^\"],nt.textsubscript=nt._,nt.textsl=nt.sl,nt.mathbf=nt.bf,nt.mathit=nt.it,nt.textbf=nt.bf,nt.textit=nt.it,nt.textcolor=nt.color;var it=/[\\r\\n\\xA0]+/g;function ot(t,e){t.sup&&(t.baseline=.45,t.size=.7),t.sub&&(t.baseline=-.3,t.size=.7);var r=e;return(t.style||t.weight||t.baseline||t.color||t.size||t.family)&&(r=h(e,t)),r}function at(t,e,r){for(var n,i,o=t.width;o+r.width>e&&t.length;)i=(n=t[t.length-1]).width,n.width>r.width?(n.value=n.value.slice(0,-1),n.width=y(n,n.font),o+=n.width):t.pop(),o-=i;t[t.length-1]instanceof q&&t.pop(),n=t[t.length-1]||n||{},r.font=h(r.font,n.bold,n.italic,\"\"),r.href=t.length?n.href:null,r.rel=t.length?n.rel:null,r.target=t.length?n.target:null,t.push(r)}function lt(t){return Math.round(1e6*t)/1e6}function st(t){return function(t){if(Array.isArray(t))return ut(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(t)||function(t,e){if(t){if(\"string\"==typeof t)return ut(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===r&&t.constructor&&(r=t.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(t):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?ut(t,e):void 0}}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function ut(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}var ct={center:\"middle\",right:\"end\"},ft={middle:.5,center:.5,bottom:1,end:1},ht=function(t,e){return!t&&!e||t===e};function pt(t,e){var r=[],n=e.font(),i=n.size,o=n.family,a=e.align(),l=e.createElement();if(t.length){var s=n.height,u=e.valign(),c=e.height()(),f=e.width()(0),h=!isFinite(f)&&1===t.length,p=h?null:e.x(),g=lt(s/i),d=h?null:lt(s/(1.15*i+(s-i)/2));if(ft[u]&&isFinite(c)){var v=\"bottom\"===u?1:.5;d+=(c*v-s*t.length*v)/i}var m=\"justify\"===a,y=0;\"right\"===a?y=f:\"center\"===a&&(y=f/2);for(var b=[],w=\"tspan\",x=null,S=\"\",A=function(){if(S){var t=l(w,x,S);b.push(t)}w=\"tspan\",x=null,S=\"\"},k=0,E=t.length;k<E;k++){var O=\"\",j=\"\",z=0,P=t[k];if(P.length){b=[];for(var q=0,C=0,_=void 0,F=0,I=P.length;F<I;F++){var L=P[F],B=L.font;L.whitespace&&q++,C+=L.width,F&&!L.tracking&&!z&&ht(B.id,O)&&ht(L.class,j)&&ht(_,L.href)?S+=L.value:(A(),S=L.value,x={fontFamily:B.family!==o?B.family:null,fontSize:B.size!==i?B.size:null,fontWeight:B.weight||null,fontStyle:B.style||null,fontVariant:\"normal\"!==B.variant&&B.variant||null,fill:B.color||null,baselineShift:B.baseline?100*B.baseline+\"%\":null,className:L.class||null},z&&(x.dx=lt(z),z=0),L.tracking&&(z=B.size*L.tracking),L.href&&!_?(_=L.href,w=\"a\",x.href=_,x.rel=L.rel,x.target=L.target):_=null,O=B.id,j=L.class)}if(A(),h)r.push.apply(r,st(b));else{var $=null,D=k===E-1||P[P.length-1]instanceof T;m&&P.length>1&&!D&&($=lt((f-C)/q)),r.push(l.apply(void 0,[\"tspan\",{wordSpacing:$,x:p(k)+y,dy:lt(k?g:d)+\"em\"}].concat(st(b))))}}else r.push(l(\"tspan\",{x:p(k),dy:lt(k?g:d)+\"em\"},\" \"))}}return l.apply(void 0,[\"text\",{fontFamily:o,fontSize:i,textAnchor:ct[a]||\"start\"}].concat(r))}var gt={middle:.5,center:.5,bottom:1,end:1};function dt(t,e,r){if(t.length){r.textBaseline=\"middle\";var n=e.font(),i=n.height,o=n.size,a=e.valign(),l=e.height()(),s=e.width()(0),u=e.align(),c=\"justify\"===u,f=.5*i,h=gt[a];if(h&&isFinite(l)){var p=t.length*i;f+=l*h-p*h}t.forEach((function(n,a){var l=e.x()(a),h=a*i+f,p=0,g=0;n.forEach((function(t){t.whitespace&&p++,g+=t.width}));var d=0,v=a===t.length-1||n[n.length-1]instanceof T;c&&n.length>1&&!v&&(d=(s-g)/p),n.forEach((function(t){r.font=t.font;var e=t.font,n=e.baseline?o*-e.baseline+.15*o:0;r.fillStyle=function(t,e){return t.color?t.color:e.href?\"#00C\":\"#000\"}(e,t);var i=0;if(\"right\"===u?i+=s-g:\"center\"===u?i+=s/2-g/2:\"justify\"===u&&(t.whitespace||t instanceof T)&&(l+=d),r.fillText(t.value,l+i,h+n),t.href){r.beginPath(),r.strokeStyle=r.fillStyle;var a=Math.floor(h+.45*o)+.5;r.moveTo(l+i,a),r.lineTo(l+i+t.width,a),r.stroke()}l+=t.width}))}))}}function vt(t){return vt=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},vt(t)}function mt(t){for(var e={},r=0;r<t.length;r++){var n=t[r];\"number\"!=typeof n&&null!=n&&(\"string\"==typeof n?e.text=n:\"function\"==typeof n?e.fn=n:\"object\"===vt(n)&&n._groups?e.d3=n:n&&n.nodeType&&n.getContext?e.ctx=n.getContext(\"2d\"):n&&n.fillText&&n.beginPath?e.ctx=n:n&&(e.text=n))}return e}function yt(t){return yt=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},yt(t)}function bt(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,(void 0,i=function(t,e){if(\"object\"!==yt(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e);if(\"object\"!==yt(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(n.key,\"string\"),\"symbol\"===yt(i)?i:String(i)),n)}var i}var wt=h(),xt=function(t){return\"function\"==typeof t?t:function(){return t}},St=function(){function t(e){if(function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.props={overflow:\"ellipsis\",lineclamp:null,align:\"left\",wordBreak:null,valign:\"top\",width:function(){return 1/0},height:function(){return 1/0},x:function(){return 0},font:null,tAnchor:0,parser:t.defaultparser},e)for(var r in e)\"function\"==typeof this[r]&&this[r](e[r])}var e,r;return e=t,r=[{key:\"linebreak\",value:function(t){var e=this,r=this.props.parser(String(t)),n=this.font(),i=function(t,e,r){if(!t.length)return[];var n=e.height(),i=e.width(),o=e.overflowLine(),a=e.overflowWrap(),l=h(r,!0,!1),s=isFinite(n())?Math.floor(n()/r.height):1/0;if(!n()&&!i(0)||!s)return[];for(var u=0,c=0,f=0,g=[],d=[],v=!1;u<t.length&&c<s;){var m=t[u],b=ot(m,r);if(m.width=y(m,b),m.font=b,m.line=c,m.whitespace=m.value in p,m.value&&(m.value=m.value.replace(it,\" \")),!f&&m.whitespace||v&&m.whitespace);else if(m instanceof T)f=0,d=[],g.push(u+1),c++;else if(m instanceof P||m instanceof q)d.push({index:u,width:f});else if(m.whitespace||f+m.width<i(c))f+=m.width;else if(d.length){var w=void 0,x=void 0;do{x=!0,w=d.pop();var S=t[w.index],A=void 0;S instanceof q&&(A=y(\"-\",S.font),w.width+A>i(c)&&(x=!d.length))}while(!x);g.push(w.index+1),f=0,c++,u=w.index,d=[]}else if(\"break-word\"===a){var k=i(c);if(f+m.width>k){var E=m.clone();do{m.value=m.value.slice(0,-1),m.width=y(m,m.font),f+=m.width}while(m.value&&m.width>k);E.value=E.value.slice(m.value.length),t.splice(u+1,0,new P,E)}g.push(u+1),f=0,c++}else f+=m.width;u++,v=m.whitespace}u!==g[g.length-1]&&g.push(u);var O=0,j=0,C=g.map((function(e){for(var r,n=O;(r=t[n])&&(r.whitespace||!r.value);)n++;for(var i=e,o=null;i>n&&(r=t[i-1])&&(r.whitespace||!(r.value||r instanceof q));)r instanceof T&&(o=r),i--;r instanceof q&&(r.value=\"-\",r.width=y(\"-\",r.font)),O=e;var a=t.slice(n,i).filter((function(t){return t.value}));return o&&a.push(o),a.width=a.reduce((function(t,e){return t+e.width}),0),a.width>j&&(j=a.width),a}));if(C.hasLineOverflow=!1,o){var _=\"ellipsis\"===o?\"…\":o;C.forEach((function(t,e){var n=i(e);if(t.width>n){var o=new z(_);o.font=r,o.width=y(_,l),at(t,n,o),C.hasLineOverflow=!0}}))}var F=\"ellipsis\"===e.overflow()?\"…\":e.overflow();if(F&&u!==t.length){var I=i(C.length-1),L=C[C.length-1],B=new z(F);B.font=r,B.width=y(F,l),at(L,I,B),C.hasOverflow=!0}else C.hasOverflow=!1;return C.font=r,C.width=j,C}(r,this,n);return i.height=i.length*n.height,i.render=function(t){return e.render(i,t)},i.svg=i.render,i.draw=i.render,i}},{key:\"font\",value:function(t){return arguments.length?(this.props.font=h(t),this):this.props.font||h(wt)}},{key:\"overflow\",value:function(t){return arguments.length?(this.props.overflow=String(t),this):this.props.overflow}},{key:\"overflowLine\",value:function(t){return arguments.length?(this.props.lineclamp=String(t),this):this.props.lineclamp}},{key:\"valign\",value:function(t){return arguments.length?(this.props.valign=t,this):this.props.valign}},{key:\"align\",value:function(t){if(!arguments.length)return this.props.align;var e=String(t).toLowerCase();return\"left\"===e||\"start\"===e?(this.props.align=\"left\",this.props.tAnchor=0):\"center\"===e||\"middle\"===e?(this.props.align=\"center\",this.props.tAnchor=-.5):\"end\"===e||\"right\"===e?(this.props.align=\"right\",this.props.tAnchor=-1):\"justify\"===e&&(this.props.align=t,this.props.tAnchor=0),this}},{key:\"overflowWrap\",value:function(t){if(!arguments.length)return this.props.overflowWrap||\"normal\";var e=String(t).toLowerCase();return\"break-word\"===e?this.props.overflowWrap=\"break-word\":\"normal\"!==e&&null!=t||(this.props.overflowWrap=null),this}},{key:\"width\",value:function(t){return arguments.length?(this.props.width=xt(t),this):this.props.width}},{key:\"height\",value:function(t){return arguments.length?(this.props.height=xt(t),this):this.props.height}},{key:\"x\",value:function(t){return arguments.length?(this.props.x=xt(t),this):this.props.x}},{key:\"parser\",value:function(e){if(!arguments.length)return this.props.parser;if(\"string\"==typeof e){var r=t[e]||t[e+\"parser\"];\"function\"==typeof r&&(e=r)}if(\"function\"!=typeof e)throw new Error(\"Unknown parser: \"+e);return this.props.parser=e,this}},{key:\"createElement\",value:function(e){return arguments.length?(this.props.createElement=e,this):this.props.createElement||t.createElement}},{key:\"render\",value:function(){var t=mt(arguments);return\"string\"==typeof t.text&&(t.text=this.linebreak(t.text)),t.ctx?dt(t.text,this,t.ctx):pt(t.text,this)}}],r&&bt(e.prototype,r),Object.defineProperty(e,\"prototype\",{writable:!1}),t}();function At(t){return At=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},At(t)}function kt(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function Et(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,(void 0,i=function(t,e){if(\"object\"!==At(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e);if(\"object\"!==At(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(n.key,\"string\"),\"symbol\"===At(i)?i:String(i)),n)}var i}var Ot=function(t){return\"function\"==typeof t?t:function(){return t}},jt=function(){function t(e){if(function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.props={width:function(){return 1/0},height:function(){return 1/0},rotation:0,vAnchor:0,hAnchor:0},e)for(var r in e)\"function\"==typeof this[r]&&this[r](e[r]);this.render=this.render.bind(this)}var e,r;return e=t,r=[{key:\"anchor\",value:function(t){var e=this.props,r=e.hAnchor,n=e.vAnchor,i=e.width,o=e.height;if(!arguments.length)return[r*i(0),n*o(0)];if(\"string\"==typeof t){var a=this.props;t.toLowerCase().trim().split(/\\s+/).forEach((function(t){\"top\"===t&&(a.vAnchor=-0),\"middle\"===t&&(a.vAnchor=-.5),\"bottom\"===t&&(a.vAnchor=-1),\"left\"===t&&(a.hAnchor=-0),\"center\"===t&&(a.hAnchor=-.5),\"right\"===t&&(a.hAnchor=-1)}))}return this}},{key:\"width\",value:function(t){return arguments.length?(this.props.width=Ot(t),this):this.props.width}},{key:\"height\",value:function(t){return arguments.length?(this.props.height=Ot(t),this):this.props.height}},{key:\"rotate\",value:function(t){return arguments.length?(this.props.rotation=t,this):this.props.rotation}},{key:\"createElement\",value:function(e){return arguments.length?(this.props.createElement=e,this):this.props.createElement||t.createElement}},{key:\"canvas\",value:function(t,e){var r,n=t.getContext?t.getContext(\"2d\"):t;return n.save(),n.rotate(this.rotate()*Math.PI/180),n.translate.apply(n,function(t){if(Array.isArray(t))return kt(t)}(r=this.anchor())||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(r)||function(t,e){if(t){if(\"string\"==typeof t)return kt(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===r&&t.constructor&&(r=t.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(t):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?kt(t,e):void 0}}(r)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),e(n),n.restore(),n}},{key:\"render\",value:function(){var t=mt(arguments);if(t.d3)return t.d3.attr(\"transform\",\"rotate(\".concat(this.rotate(),\") translate(\").concat(this.anchor(),\")\"));if(t.ctx)return this.canvas(t.ctx,t.fn);if(t.text){var e=\"function\"==typeof t.text.render?t.text.render():t.text;return this.createElement()(\"g\",{transform:\"rotate(\".concat(this.rotate(),\") translate(\").concat(this.anchor(),\")\")},e)}}}],r&&Et(e.prototype,r),Object.defineProperty(e,\"prototype\",{writable:!1}),t}(),zt=Object.prototype.hasOwnProperty,Pt={};function Tt(t){return Pt[t]||(Pt[t]=t.replace(/([a-z])([A-Z])/g,(function(t,e,r){return e+\"-\"+r.toLowerCase()}))),Pt[t]}function qt(t,e){if(Array.isArray(e))return e.forEach((function(e){return qt(t,e)}));\"string\"==typeof e&&(e=document.createTextNode(e)),t.appendChild(e)}function Ct(t,e){if(\"undefined\"!=typeof document){var r=\"string\"==typeof t?document.createElementNS(\"http://www.w3.org/2000/svg\",t):t;if(e&&r.setAttribute)for(var n in e)zt.call(e,n)&&null!=e[n]&&r.setAttribute(\"className\"===n?\"class\":Tt(n),e[n]);for(var i=arguments.length,o=new Array(i>2?i-2:0),a=2;a<i;a++)o[a-2]=arguments[a];return null!=o&&o.length&&o.forEach((function(t){qt(r,t)})),r}}St.createElement=Ct,St.textparser=B,St.defaultparser=B,St.htmlparser=function(t){t=String(t||\"\").trim();for(var e,r,n={weight:null,style:null,sub:!1,sup:!1,href:null,color:null,rel:null,target:null},i=[],o=[],a=function(t){for(var e in n)n[e]&&(t[e]=n[e]);i.push(t)},l=function(t){var e=i.length,r=Z[t];if(e&&r){for(var n=e-1;i[n]&&(i[n]instanceof P||D.test(i[n].value));)n--;for(;r&&i[n]&&i[n]instanceof T;)n--,r--;for(;r-- >0;)i.push(new T)}};t.length;){if(e=/^[^<]+/.exec(t))B(W(e[0]),!1).forEach(a);else if(e=M.exec(t));else if(e=R.exec(t))o.length&&(n=o.pop()),l(e[1]);else if(e=U.exec(t)){var s=e[1];l(s),o.push(n),n=Object.create(n),V[s]&&V[s](n,\"\");var u=G(e[2]);\"a\"===s&&(u.href&&(n.href=u.href),u.rel&&(n.rel=u.rel),u.target&&(n.target=u.target)),u.class&&(n.class=n.class?n.class+\" \"+u.class:u.class),u.style&&(r=/(?:^|\\s|;)color\\s*:\\s*([^;\\s\"']+)/.exec(u.style))&&r[1]&&(n.color=r[1]),\"br\"===s&&i.push(new T)}else e=[t.slice(0,1)],a(new z(e[0]));t=t.slice(e[0].length)}for(var c=i[i.length-1];c instanceof T;)i.pop(),c=i[i.length-1];return i},St.latexparser=function(t){t=String(t||\"\").trim();var e=[0];t=t.replace(/\\\\verb,(.*?),/,(function(t,r){return e.push(r),\"\\\\verb,\"+(e.length-1)+\",\"})).replace(/\\\\\\\\\\n/g,(function(){return\"\\\\\\\\\"})).replace(et,(function(t,e,r){return\"\\\\\"===r.charAt(e-1)?t:rt[t]})).replace(/\\n\\s+/g,(function(t){return/\\n/.test(t.slice(1))?\"\\\\par \":t})).replace(/\\\\symbol\\{(\\d+)\\}/,(function(t,e,r,n){return\"\\\\\"===n.charAt(r-1)?t:String.fromCharCode(1*e)})).replace(/(^|[^\\\\])(\\^|_)(\\d|[^{]\\S*)/g,(function(t,e,r,n){return e+r+\"{\"+n+\"}\"})).replace(/\\\\verb,(.*?),/,(function(t,r){return\"\\\\verb,\".concat(e[+r],\",\")}));for(var r,n={weight:null,italic:null,variant:null,sub:!1,sup:!1,href:null},i=[],o=[],a=function(t){for(var e in n)n[e]&&(t[e]=n[e]);return i.push(t),t},l=function(){o.push(n),n=Object.create(n)},s=function(){if(!o.length)throw new Error(\"Unexpected }\");n=o.pop()},u={tokens:i,open_context:l,close_context:s,add_token:a};t.length;){if(r=Q.exec(t))B(r[0],!1).forEach(a);else if(r=tt.exec(t))a(new z(r[1]));else if(r=Y.exec(t));else if(r=/^\\{/.exec(t))l();else if(r=/^\\}/.exec(t))s();else if(r=/^\\$/.exec(t));else if(r=/^\\\\verb,([^,]+),/.exec(t))a(new z(r[1]));else if(r=K.exec(t)){var c=r[1].slice(1)||r[1],f=!!r[2];if(/^(La)?TeX$/i.test(c)){l(),n.family=\"serif\";var h=void 0;\"LaTeX\"===c&&((h=a(new z(\"L\"))).tracking=-.25,(h=a(new z(\"A\"))).size=.7,h.baseline=.3,h.tracking=-.1),(h=a(new z(\"T\"))).tracking=-.17,(h=a(new z(\"E\"))).baseline=-.22,h.tracking=-.13,h=a(new z(\"X\")),s()}else if(c in J)a(new z(J[c])),f&&l();else if(c in nt){var p=[],g=nt[c].length-1,d=void 0;if(g){for(f=!1,t=t.slice(r[0].length-1);g--;){if(!(d=/^\\{([^}]+)\\}/.exec(t)))throw new Error(c+\" is missing an argument\");p.push(d[1]),t=t.slice(d[0].length)}r[0]=/^\\{/.exec(t)?\"{\":\"\",f=!!r[0]}f&&l(),nt[c].apply(u,[n].concat(p))}else console.warn(\"unknown latex command\",c),a(new z(r[1])),f&&l()}else r=[t.slice(0,1)],a(new z(r[0]));t=t.slice(r[0].length)}return i},St.measureText=function(t,e,r){return y(t,h(e),r)},St.Token=z,St.Break=P,St.LineBreak=T,St.SoftHyphen=q,St.Rotator=jt,jt.createElement=Ct;const _t=St;return e.default})()));\n//# sourceMappingURL=textbox.js.map","import Textbox from '@borgar/textbox';\nimport { Text } from '../../types';\nimport { getTextSize } from '../../utils';\n\n/**\n * @function draw\n * @param annotation the annotation to draw\n * @param g the group in which the text should be drawn\n */\nexport default function draw(annotation: Text, g: SVGGElement) {\n // make sure text does not overflow\n const size = getTextSize(annotation);\n const { fontSize, font, padding = 0 } = annotation.properties.style || {};\n\n if (size.width === size.height && size.width === 0) return;\n const box = new Textbox({\n font: `${fontSize}px/${fontSize}px ${font}`.replace(/(px)+/g, 'px'),\n width: size.width - padding * 2,\n height: size.height - padding * 2,\n align: 'left',\n valign: 'top',\n x: 0,\n overflow: 'ellipsis',\n parser: 'html',\n createElement: Textbox.createElement\n });\n\n const lines = box.linebreak(\n annotation.properties.content.replaceAll('\\n', '<br>')\n );\n // Destination canvas is set to the height of the output\n const text = lines.render();\n\n text.setAttribute('transform', `translate(${padding}, ${padding})`);\n g.appendChild(text);\n}\n","import Ogma, { Point } from '@linkurious/ogma';\nimport {\n createText,\n defaultControllerOptions,\n defaultOptions,\n defaultStyle\n} from './defaults';\nimport drawText from './render';\nimport {\n EVT_DRAG,\n EVT_DRAG_END,\n EVT_DRAG_START,\n EVT_UPDATE,\n NONE\n} from '../../constants';\nimport { ControllerOptions, Id, Text } from '../../types';\nimport {\n createSVGElement,\n getHandleId,\n getTextPosition,\n getTextSize,\n setTextBbox\n} from '../../utils';\nimport Editor from '../base';\n\ninterface Rect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nconst minSize = 20;\n\n/**\n * @class Texts\n * Draw, update, edit texts\n */\nexport class Texts extends Editor<Text> {\n private textArea: HTMLTextAreaElement;\n private handleSize: number;\n private rect: Rect = { x: 0, y: 0, width: 0, height: 0 };\n private annotation: Text = { ...defaultOptions };\n private startX = 0;\n private startY = 0;\n private handles: HTMLDivElement[] = [];\n private draggedHandle = NONE;\n private isFocused = false;\n private placeholder = 'Type your text here...';\n\n constructor(\n ogma: Ogma,\n options: Pick<\n Partial<ControllerOptions>,\n 'textHandleSize' | 'textPlaceholder'\n > = {}\n ) {\n super(\n ogma,\n `\n <div class=\"annotation-text-handle\">\n <span class=\"handle line-handle top\" data-handle-id=\"0\"></span>\n <span class=\"handle line-handle bottom\" data-handle-id=\"1\"></span>\n <span class=\"handle line-handle left\" data-handle-id=\"2\"></span>\n <span class=\"handle line-handle right\" data-handle-id=\"3\"></span>\n <span class=\"handle top right point-handle top-right\" data-handle-id=\"4\"></span>\n <span class=\"handle left top point-handle top-left\" data-handle-id=\"5\"></span>\n <span class=\"handle bottom right point-handle bottom-right\" data-handle-id=\"6\"></span>\n <span class=\"handle left bottom left-handle point-handle bottom-left\" data-handle-id=\"7\"></span>\n <textarea wrap=\"off\"></textarea>\n </div>\n `\n );\n this.handleSize = (defaultControllerOptions.handleSize ||\n options.textHandleSize) as number;\n this.placeholder =\n defaultControllerOptions.placeholder || options.textPlaceholder || '';\n\n // hidden text input to edit the text, we swap it with SVG when selected or hovered\n const textArea = (this.textArea =\n this.editor.element.querySelector<HTMLTextAreaElement>('textarea')!);\n textArea.addEventListener('input', this._onInput);\n textArea.addEventListener('focus', this._onFocus);\n textArea.addEventListener('blur', this._onBlur);\n textArea.spellcheck = false;\n\n this.handles = Array.prototype.slice.call(\n this.editor.element.querySelectorAll('.annotation-text-handle > .handle')\n );\n\n // events to move/resize\n this.handles.forEach((handle: HTMLDivElement) =>\n handle.addEventListener('mousedown', this.onHandleMouseDown)\n );\n\n document.addEventListener('mouseup', this.onMouseUp);\n document.addEventListener('mousemove', this.onMouseMove, true);\n // update the width of the controls depending on zoom\n ogma.events.on(['viewChanged', 'zoom'], this.onViewChanged);\n }\n\n private _onFocus = () => {\n if (this.textArea.value === this.placeholder) this.textArea.value = '';\n this.isFocused = true;\n };\n\n private _onBlur = () => {\n this.isFocused = false;\n };\n\n protected _canRemove() {\n return !this.isFocused;\n }\n\n public startDrawing = (\n x: number,\n y: number,\n text = createText(x, y, 0, 0, '', defaultStyle)\n ) => {\n this.add(text);\n const pos = this.ogma.view.graphToScreenCoordinates({ x, y });\n this.select(text.id);\n this.startDragging(this.getById(text.id), pos.x, pos.y);\n this.draggedHandle = 6;\n };\n\n public cancelDrawing = () => {\n if (!this.isDragging) return;\n this.remove(this.annotation.id);\n this.annotation = { ...defaultOptions };\n this.draggedHandle = NONE;\n this.isDragging = false;\n this.emit(EVT_DRAG_END, this.annotation);\n };\n\n private startDragging = (text: Text, clientX: number, clientY: number) => {\n this.annotation = text;\n const position = getTextPosition(this.annotation);\n const size = getTextSize(this.annotation);\n\n this.rect.x = position.x;\n this.rect.y = position.y;\n this.rect.width = size.width;\n this.rect.height = size.height;\n\n this.startX = clientX;\n this.startY = clientY;\n this.disableDragging();\n this.textArea.classList.add('noevents');\n this.textArea.setAttribute('disabled', 'disabled');\n this.emit(EVT_DRAG_START, this.annotation);\n this.isDragging = true;\n };\n\n private onHandleMouseDown = (evt: MouseEvent) => {\n const res = this.getById(this.selectedId) || this.getById(this.hoveredId);\n if (!res) return;\n if (this.selectedId !== res.id) this.select(this.hoveredId);\n\n this.startDragging(res, evt.clientX, evt.clientY);\n this.draggedHandle = getHandleId(evt.target as HTMLDivElement);\n };\n\n private onMouseMove = (evt: MouseEvent) => {\n requestAnimationFrame(() => this._onMouseMove(evt));\n };\n\n private _onMouseMove = (evt: MouseEvent) => {\n if (!this.isDragging) return;\n\n evt.stopPropagation();\n evt.preventDefault();\n\n const handle = this.handles[this.draggedHandle];\n\n const isTop = handle.classList.contains('top');\n const isLeft = handle.classList.contains('left');\n const isRight = handle.classList.contains('right');\n const isBottom = handle.classList.contains('bottom');\n const isLine = handle.classList.contains('line-handle');\n\n const zoom = this.ogma.view.getZoom();\n const dx = (evt.clientX - this.startX) / zoom;\n const dy = (evt.clientY - this.startY) / zoom;\n const x = isLeft || isLine ? this.rect.x + dx : this.rect.x;\n const y = isTop || isLine ? this.rect.y + dy : this.rect.y;\n const width = Math.max(\n this.rect.width + dx * (isLine ? 0 : isLeft ? -1 : isRight ? 1 : 0),\n minSize\n );\n const height = Math.max(\n this.rect.height + dy * (isLine ? 0 : isTop ? -1 : isBottom ? 1 : 0),\n minSize\n );\n setTextBbox(this.annotation, x, y, width, height);\n this.emit(EVT_DRAG, this.annotation, 'text');\n\n this.refreshEditor();\n this.layer.refresh();\n };\n\n private onMouseUp = () => {\n if (!this.isDragging || this.draggedHandle === NONE) return;\n\n this.restoreDragging();\n this.textArea.classList.remove('noevents');\n this.textArea.removeAttribute('disabled');\n this.emit(EVT_DRAG_END, this.annotation);\n this.isDragging = false;\n this.draggedHandle = NONE;\n };\n\n private onViewChanged = () => {\n const w = Math.max(2, this.handleSize / this.ogma.view.getZoom());\n document.documentElement.style.setProperty('--handle-width', `${w}px`);\n };\n\n private _onInput = () => {\n const annotation = this.getById(this.selectedId);\n if (!annotation) return;\n // prevent double spaces as it is not handled by the align algo.\n //const selectionCursor = this.textArea.selectionEnd;\n this.textArea.value = this.textArea.value.replace(/ +(?= )/g, '');\n this.textArea.focus();\n //this.textArea.selectionEnd = Math.max(0, selectionCursor - 1);\n annotation.properties.content = this.textArea.value;\n this.emit(EVT_UPDATE, annotation);\n this.layer.refresh();\n };\n\n public detect({ x, y }: Point, margin = 0): Text | undefined {\n // check if the pointer is within the bounding box of one of the texts\n return this.elements.find((a) => {\n const { x: tx, y: ty } = getTextPosition(a);\n const { width, height } = getTextSize(a);\n\n return (\n tx - margin < x &&\n ty - margin < y &&\n tx + width + margin > x &&\n ty + height + margin > y\n );\n });\n }\n\n public draw(svg: SVGSVGElement): void {\n svg.innerHTML = '';\n const styleContent = '';\n this.elements.forEach((annotation, i) => {\n const className = `class${i}`;\n const size = getTextSize(annotation);\n const position = getTextPosition(annotation);\n const id = annotation.id;\n const {\n color,\n fontSize,\n font,\n strokeColor,\n strokeWidth,\n strokeType,\n background\n } = annotation.properties.style || defaultStyle;\n if (\n id === this.selectedId ||\n (this.selectedId === -1 && id === this.hoveredId)\n )\n return;\n const g = createSVGElement<SVGGElement>('g');\n g.setAttribute('fill', `${color}`);\n g.setAttribute('font-size', `${fontSize}`);\n g.setAttribute('font-family', `${font}`);\n\n // rect is used for background and stroke\n const rect = createSVGElement<SVGRectElement>('rect');\n let addRect = false;\n if (strokeType && strokeType !== 'none') {\n addRect = true;\n rect.setAttribute('stroke', strokeColor || 'black');\n rect.setAttribute('stroke-width', `${strokeWidth}`);\n if (strokeType === 'dashed') {\n rect.setAttribute('stroke-dasharray', `5,5`);\n }\n }\n if ((background && background.length) || addRect) {\n addRect = true;\n rect.setAttribute('fill', background || 'transparent');\n }\n if (addRect) {\n rect.setAttribute('width', `${size.width}`);\n rect.setAttribute('height', `${size.height}`);\n }\n g.appendChild(rect);\n drawText(annotation, g);\n g.setAttribute('transform', `translate(${position.x},${position.y})`);\n g.classList.add(className);\n g.setAttribute('data-annotation', `${annotation.id}`);\n g.setAttribute('data-annotation-type', 'text');\n svg.appendChild(g);\n });\n const style = createSVGElement<SVGStyleElement>('style');\n style.innerHTML = styleContent;\n if (!svg.firstChild) return;\n svg.insertBefore(style, svg.firstChild);\n }\n\n public getDefaultOptions(): Text {\n return defaultOptions;\n }\n\n public refreshEditor() {\n if (+this.selectedId < 0 && +this.hoveredId < 0) return;\n const t = this.getById(this.selectedId) || this.getById(this.hoveredId);\n const size = getTextSize(t);\n const position = this.ogma.view.graphToScreenCoordinates(getTextPosition(t));\n const zoom = this.ogma.view.getZoom();\n const scale = Math.min(zoom, this.maxHandleScale);\n\n const {\n font,\n fontSize,\n color,\n background,\n padding = 0\n } = t.properties.style || defaultStyle;\n const scaledFontSize = fontSize;\n this.textArea.value = t.properties.content;\n this.editor.element.style.transform = `translate(${position.x}px, ${position.y}px)`\n + `translate(-50%, -50%)`\n + `translate(${size.width / 2 * zoom}px, ${size.height / 2 * zoom}px)`\n + `scale(${scale})`;\n this.editor.element.style.width = `${size.width}px`;\n this.editor.element.style.height = `${size.height}px`;\n this.textArea.style.font = `${scaledFontSize} ${font}`;\n this.textArea.style.fontFamily = font || 'sans-serif';\n this.textArea.style.fontSize = `${scaledFontSize}px`;\n this.textArea.style.padding = `${padding}px`;\n this.textArea.style.lineHeight = `${scaledFontSize}px`;\n\n this.textArea.style.boxSizing = 'border-box';\n this.textArea.style.color = color || 'black';\n this.textArea.style.background = background || 'transparent';\n\n this.textArea.placeholder = this.placeholder;\n\n this.layer.refresh();\n }\n\n select(id: Id): void {\n super.select(id);\n this.textArea.focus();\n }\n\n public destroy(): void {\n super.destroy();\n document.removeEventListener('mouseup', this.onMouseUp);\n document.removeEventListener('mousemove', this.onMouseMove, true);\n // update the width of the controls depending on zoom\n this.ogma.events.off(this.onViewChanged);\n }\n}\n\nexport {\n defaultOptions as defaultTextOptions,\n defaultStyle as defaultTextStyle,\n defaultControllerOptions,\n createText\n};\n","import { Point } from '@linkurious/ogma';\nimport { nanoid as getId } from 'nanoid';\nimport { Arrow, Id, TargetType, Link, Side } from './types';\n\n/**\n * Class that implements linking between annotation arrows and different items.\n * An arrow can be connected to a text or to a node. It supports double indexing\n * so that you could get the arrow by the id of the text or the id of the node\n * or by the id of the arrow id itself.\n * A node or text can be connected to multiple arrows.\n * An arrow can be connected to only one node or text, but on both ends.\n */\nexport class Links {\n private links: Record<Id, Link> = {};\n private linksByTargetId: Record<Id, Id[]> = {};\n private linksByArrowId: Record<Id, { start?: Id; end?: Id }> = {};\n\n public add(\n arrow: Arrow,\n side: Side,\n targetId: Id,\n targetType: TargetType,\n connectionPoint: Point\n ) {\n const id = getId();\n const arrowId = arrow.id;\n // create a link\n const link: Link = {\n id,\n arrow: arrowId,\n target: targetId,\n targetType,\n connectionPoint,\n side\n };\n // add it to the links\n this.links[id] = link;\n // add it to the linksByTargetId\n if (!this.linksByTargetId[targetId]) {\n this.linksByTargetId[targetId] = [];\n }\n this.linksByTargetId[targetId].push(id);\n\n // add it to the linksByArrowId\n if (!this.linksByArrowId[arrowId]) {\n this.linksByArrowId[arrowId] = {};\n }\n this.linksByArrowId[arrowId][side] = id;\n\n // make it serializable\n arrow.properties.link = arrow.properties.link || {};\n arrow.properties.link[side] = {\n id: targetId,\n side,\n type: targetType,\n magnet: connectionPoint\n };\n return this;\n }\n\n public arrowIsLinked(arrowId: Id, side: Side) {\n return !!this.linksByArrowId[arrowId]?.[side];\n }\n\n // remove the link between the arrow and the target by arrow id and side\n public remove(arrow: Arrow, side: Side) {\n const arrowId = arrow.id;\n const id = this.linksByArrowId[arrowId]?.[side];\n delete arrow.properties.link?.[side];\n if (!id) return this;\n const link = this.links[id];\n // remove the link from the links\n delete this.links[id];\n // remove the link from the linksByTargetId\n const targetLinks = this.linksByTargetId[link.target];\n for (let i = 0; i < targetLinks.length; i++) {\n if (targetLinks[i] === id) {\n targetLinks.splice(i, 1);\n break;\n }\n }\n // remove the link from the linksByArrowId\n delete this.linksByArrowId[arrowId][side];\n return this;\n }\n\n getArrowLink(arrowId: Id, side: Side): Link | null {\n const id = this.linksByArrowId[arrowId]?.[side];\n if (!id) return null;\n return this.links[id];\n }\n\n getTargetLinks(targetId: Id): Link[] {\n return this.linksByTargetId[targetId]?.map((id) => this.links[id]) ?? [];\n }\n}\n","import { Point } from '@linkurious/ogma';\nimport type {\n Feature,\n FeatureCollection,\n Geometry,\n GeometryObject,\n LineString,\n Polygon\n} from 'geojson';\nimport {\n EVT_ADD,\n EVT_CANCEL_DRAWING,\n EVT_DRAG,\n EVT_DRAG_END,\n EVT_DRAG_START,\n EVT_HOVER,\n EVT_REMOVE,\n EVT_SELECT,\n EVT_UNHOVER,\n EVT_UNSELECT,\n EVT_UPDATE,\n EVT_LINK\n} from './constants';\n\nexport const isArrow = (\n a: AnnotationFeature<Geometry, AnnotationProps>\n): a is Arrow => a.properties.type === 'arrow';\n\nexport const isText = (\n a: AnnotationFeature<Geometry, AnnotationProps>\n): a is Text => a.properties.type === 'text';\n\nexport const isAnnotationCollection = (\n a: AnnotationFeature<Geometry, AnnotationProps> | FeatureCollection\n): a is AnnotationCollection => a.type === 'FeatureCollection';\n\ntype AnnotationType = 'arrow' | 'text';\n\nexport interface AnnotationProps {\n type: AnnotationType;\n style?: unknown;\n}\n\n// const c: AnnotationCollection = {\n// type: 'FeatureCollection',\n// features: [\n// {\n// type: 'Feature',\n// id: '1',\n// properties: {\n// type: 'text',\n// content: 'Hello world'\n// },\n// geometry: {\n// type: 'Polygon',\n// coordinates: [\n// [\n// [0, 0],\n// [1, 0],\n// [1, 1],\n// [0, 1],\n// [0, 0]\n// ]\n// ]\n// }\n// }\n// ]\n// };\n\nexport type Id = string | number;\n\nexport interface AnnotationFeature<\n G extends GeometryObject = GeometryObject,\n P = AnnotationProps\n> extends Feature<G, P> {\n id: string | number;\n}\n\nexport interface ArrowStyles extends StrokeOptions {\n tail?: Extremity;\n head?: Extremity;\n}\n\ntype ExportedLink = {\n id: Id;\n side: 'start' | 'end';\n type: 'node' | 'text';\n magnet?: Point;\n};\n\nexport interface ArrowProperties extends AnnotationProps {\n type: 'arrow';\n style?: ArrowStyles;\n link?: Partial<Record<Side, ExportedLink>>;\n}\n\nexport type Arrow = AnnotationFeature<LineString, ArrowProperties>;\n\nexport interface AnnotationCollection extends FeatureCollection {\n features: (Arrow | Text)[];\n}\n\nexport type StrokeOptions = {\n strokeType?: 'plain' | 'dashed' | 'none';\n strokeColor?: string;\n strokeWidth?: number;\n};\n\nexport interface TextStyle extends StrokeOptions {\n /** Helvetica, sans-serif... */\n font?: string;\n /** 12px, 1em... */\n fontSize?: string;\n /** text color: #f00, yellow...*/\n color?: string;\n /** background color: empty for transparent #f00, yellow...*/\n background?: string;\n // /** stroke of the box: falsy to none */\n // stroke?: Stroke;\n /** padding around the text */\n padding?: number;\n}\n\nexport interface TextProperties extends AnnotationProps {\n type: 'text';\n /**text to display*/\n content: string;\n style?: TextStyle;\n}\n\nexport type Text = AnnotationFeature<Polygon, TextProperties>;\n\nexport type Stroke = {\n type: 'plain' | 'dashed' | 'none';\n color: string;\n width: number;\n};\n\nexport type StrokeStyle = Stroke;\n\nexport type Extremity = 'none' | 'arrow' | 'arrow-plain';\n\nexport type AnnotationOptions = {\n handleSize: number;\n placeholder: string;\n};\n\nexport type Events<T> = {\n [EVT_HOVER]: (evt: T) => void;\n [EVT_UNHOVER]: (evt: T) => void;\n [EVT_SELECT]: (evt: T) => void;\n [EVT_UNSELECT]: (evt: T) => void;\n [EVT_DRAG_START]: (evt: T) => void;\n [EVT_DRAG]: (evt: T, key: 'line' | 'start' | 'end' | 'text') => void;\n [EVT_DRAG_END]: (evt: T) => void;\n [EVT_REMOVE]: (evt: T) => void;\n [EVT_ADD]: (evt: T) => void;\n [EVT_UPDATE]: (evt: T) => void;\n};\n\nexport type FeatureEvents = {\n /**\n * Event trigerred when selecting an annotation\n * @param evt The annotation selected\n */\n [EVT_SELECT]: (evt: Annotation) => void;\n /**\n * Event trigerred when unselecting an annotation\n * @param evt The annotation unselected\n */\n [EVT_UNSELECT]: (evt: Annotation) => void;\n /**\n * Event trigerred when removing an annotation\n * @param evt The annotation removed\n */\n [EVT_REMOVE]: (evt: Annotation) => void;\n /**\n * Event trigerred when adding an annotation\n * @param evt The annotation added\n */\n [EVT_ADD]: (evt: Annotation) => void;\n [EVT_CANCEL_DRAWING]: () => void;\n /**\n * Event trigerred when updating an annotation\n * @returns The annotation updated\n */\n [EVT_UPDATE]: (evt: Annotation) => void;\n /**\n * Event trigerred when linking an arrow to a text or node\n */\n [EVT_LINK]: (evt: { arrow: Arrow; link: Link; }) => void;\n};\n\nexport type TargetType = 'text' | 'node';\n\nexport type Side = 'start' | 'end';\n\nexport type Link = {\n /** arrow atteched to the text or node */\n arrow: Id;\n /** id of the text the arrow is attached to */\n id: Id;\n\n /** On which end the arrow is tighten to the text */\n side: Side;\n\n /** id of the text or node the arrow is attached to */\n target: Id;\n /** Text or node */\n targetType: TargetType;\n /**\n * On which point relative to topleft corner the arrow is tighten, in case of\n * node, it can be deduced from the arrow itself\n */\n connectionPoint: Point;\n};\n\nexport type ControllerOptions = {\n magnetColor: string;\n /**\n * The radius in which arrows are attracted\n */\n magnetRadius: number;\n /**\n * The margin in which the Texts are detected when looking for magnet points\n */\n detectMargin: number;\n /**\n * Display size of the magnet point\n */\n magnetHandleRadius: number;\n\n /**\n * Placeholder for the text input\n */\n textPlaceholder: string;\n\n /**\n * Size of the text handle\n */\n textHandleSize: number;\n\n /**\n * Size of the arrow handle\n */\n arrowHandleSize: number;\n\n /**\n * Minimum height of the arrow in units\n */\n minArrowHeight: number;\n\n /**\n * Maximum height of the arrow in units\n */\n maxArrowHeight: number;\n};\n\nexport type Annotation = Arrow | Text;\n","import Ogma, {\n CanvasLayer,\n LayoutEndEvent,\n Node,\n NodeList,\n NodesDragProgressEvent,\n Point\n} from '@linkurious/ogma';\nimport EventEmitter from 'eventemitter3';\nimport Vector2 from 'vector2js';\nimport {\n EVT_ADD,\n EVT_CANCEL_DRAWING,\n EVT_DRAG,\n EVT_DRAG_END,\n EVT_DRAG_START,\n EVT_LINK,\n EVT_REMOVE,\n EVT_SELECT,\n EVT_UNSELECT,\n EVT_UPDATE\n} from './constants';\nimport { Arrows } from './Editor/Arrows';\nimport Editor from './Editor/base';\nimport { Texts } from './Editor/Texts';\nimport { Links } from './links';\nimport {\n Annotation,\n AnnotationCollection,\n Arrow,\n ControllerOptions,\n FeatureEvents,\n Id,\n Text,\n isAnnotationCollection,\n isArrow,\n isText,\n Link\n} from './types';\n\nimport {\n getArrowEnd,\n getArrowStart,\n getArrowSide,\n getTextPosition,\n getTextSize,\n setArrowEndPoint,\n getAttachmentPointOnNode\n} from './utils';\n\nconst defaultOptions: ControllerOptions = {\n magnetColor: '#3e8',\n detectMargin: 20,\n magnetHandleRadius: 5,\n magnetRadius: 10,\n textPlaceholder: 'Type here',\n arrowHandleSize: 3.5,\n textHandleSize: 3.5,\n minArrowHeight: 20,\n maxArrowHeight: 30\n};\n\ntype EndType = 'start' | 'end';\nconst ends: EndType[] = ['start', 'end'];\n\n// TODO: move to methods\nconst MAGNETS: Point[] = [\n { x: 0, y: 0 },\n { x: 0.5, y: 0 },\n { x: 1, y: 0 },\n { x: 0, y: 0.5 },\n { x: 1, y: 0.5 },\n { x: 0, y: 1 },\n { x: 0.5, y: 1 },\n { x: 1, y: 1 }\n];\n\ntype MagnetPoint = {\n point: Point;\n magnet: Point;\n};\n\nexport class Control extends EventEmitter<FeatureEvents> {\n private arrows: Arrows;\n private texts: Texts;\n private links = new Links();\n private layer: CanvasLayer;\n private annotations: Editor<Arrow | Text>[];\n private ogma: Ogma;\n private options: ControllerOptions;\n private selected: Annotation | null = null;\n private updateTimeout = 0;\n private hoveredNode: Node | null = null;\n\n private dragged: Arrow | null = null;\n private textToMagnet: Text | undefined = undefined;\n private activeLinks: Link[] = [];\n\n constructor(ogma: Ogma, options: Partial<ControllerOptions> = {}) {\n super();\n this.options = this.setOptions({ ...defaultOptions, ...options });\n this.ogma = ogma;\n this.arrows = new Arrows(ogma, this.options);\n this.texts = new Texts(ogma, this.options);\n this.annotations = [this.arrows, this.texts];\n\n this.annotations.forEach((a) => {\n a.on(EVT_DRAG_START, this._onFeatureDragStart)\n .on(EVT_DRAG, this._onFeatureDrag)\n .on(EVT_DRAG_END, this._onFeatureDragEnd)\n .on(EVT_UPDATE, this.onUpdate)\n .on(EVT_UNSELECT, this._onUnselect)\n .on(EVT_SELECT, this._onSelect)\n .on(EVT_ADD, this._onAdded)\n .on(EVT_REMOVE, this._onRemoved);\n });\n\n this.ogma.events\n .on('nodesDragStart', this._onNodesDragStart)\n .on('nodesDragProgress', this._onNodesDrag)\n .on('layoutEnd', this._onLayoutEnd);\n\n this.layer = ogma.layers.addCanvasLayer(this._render);\n this.layer.moveToBottom();\n }\n\n private _render = (ctx: CanvasRenderingContext2D) => {\n if (!this.dragged || this.textToMagnet === undefined) return;\n ctx.beginPath();\n ctx.fillStyle = 'green';\n const z = this.ogma.view.getZoom();\n MAGNETS.forEach((magnet) => {\n if (!this.textToMagnet) return;\n const size = getTextSize(this.textToMagnet);\n const position = getTextPosition(this.textToMagnet);\n const { x, y } = new Vector2(magnet.x, magnet.y)\n .mul({ x: size.width, y: size.height })\n .add(position);\n ctx.moveTo(x, y);\n ctx.arc(x, y, this.options.magnetHandleRadius / z, 0, Math.PI * 2);\n });\n ctx.fill();\n ctx.closePath();\n };\n\n private _onFeatureDrag = (\n a: Text | Arrow,\n key: EndType | 'line' | 'text'\n ) => {\n const h = key;\n if (isArrow(a) && h === 'line') {\n ['start', 'end']\n .find((side) => {\n const point = side === 'start' ? getArrowStart(a) : getArrowEnd(a);\n const snapped = this._snapToText(a, h as EndType, point);\n return snapped || this._findAndSnapToNode(a, side as EndType, point);\n });\n } else if (isArrow(a) && h !== 'line') {\n const point = h === 'start' ? getArrowStart(a) : getArrowEnd(a);\n const snapped = this._snapToText(a, h as EndType, point);\n // if no text is detected and option is on, we to snap to node\n if (!snapped) this._findAndSnapToNode(a, h as EndType, point);\n } else if (isText(a)) {\n this.activeLinks.forEach(({ arrow: id, side, connectionPoint }) => {\n const arrow = this.getAnnotation(id) as Arrow;\n const size = getTextSize(a);\n const position = getTextPosition(a);\n const pt = new Vector2(connectionPoint!.x, connectionPoint!.y)\n .mul({ x: size.width, y: size.height })\n .add(position);\n arrow.geometry.coordinates[side === 'start' ? 0 : 1] = [pt.x, pt.y];\n });\n if (this.activeLinks.length) this.arrows.refreshLayer();\n }\n this.layer.refresh();\n };\n\n private _onFeatureDragEnd = (a: Text | Arrow) => {\n if (this.dragged !== null && isArrow(a) && getArrowStart(this.dragged)) {\n ends.forEach((side) => {\n const link = this.links.getArrowLink(a.id, side);\n if (link) {\n this.emit(EVT_LINK, {\n arrow: a,\n link: this.links.getArrowLink(a.id, side)!\n });\n }\n });\n }\n if (isText(a) || isArrow(a)) this.onUpdate(a);\n\n this.dragged = null;\n this.activeLinks = [];\n this.textToMagnet = undefined;\n this.annotations.forEach((o) => o.enableDetection());\n this.layer.refresh();\n };\n\n private _onFeatureDragStart = (d: Arrow | Text) => {\n this.textToMagnet = undefined;\n if (isArrow(d)) this.dragged = d as Arrow;\n else if (isText(d))\n this.activeLinks.push(...this.links.getTargetLinks(d.id));\n this.annotations.forEach((a) => {\n const selected = a.getSelectedFeature();\n if (selected && selected !== d) a.unhover().unselect();\n a.disableDetection();\n });\n };\n\n private _onNodesDragStart = () => {\n this.arrows.unhover().unselect();\n this.texts.unhover().unselect();\n };\n\n private _onNodesDrag = (evt: NodesDragProgressEvent<unknown, unknown>) => {\n const { dx, dy } = evt;\n this._moveNodes(evt.nodes, dx, dy);\n };\n\n private _onLayoutEnd = (evt: LayoutEndEvent) => {\n evt.ids.forEach((id, i) => {\n const links = this.links.getTargetLinks(id);\n links.forEach(link => {\n const arrow = this.getAnnotation(link.arrow) as Arrow;\n const side = link.side;\n const otherSide = getArrowSide(\n arrow,\n side === 'start' ? 'end' : 'start'\n );\n // @ts-ignore\n const point = evt.positions.current[i];\n const radius = this.ogma.getNode(id)!.getAttribute('radius');\n const anchor = getAttachmentPointOnNode(otherSide, point, +radius);\n setArrowEndPoint(arrow, side, anchor.x, anchor.y);\n });\n });\n this.arrows.refreshLayer();\n this.texts.refreshLayer();\n };\n\n private _moveNodes(nodes: NodeList, dx: number, dy: number) {\n nodes.forEach((node) => {\n const links = this.links.getTargetLinks(node.getId());\n const pos = node.getPosition();\n links.forEach((link) => {\n const arrow = this.getAnnotation(link.arrow) as Arrow;\n const side = link.side;\n const otherSide = getArrowSide(\n arrow,\n side === 'start' ? 'end' : 'start'\n );\n\n let anchor = pos; // graph space\n const r = +node.getAttribute('radius');\n const eps = 1e-6;\n if (\n link.connectionPoint.x - (pos.x - dx) > eps ||\n link.connectionPoint.y - (pos.y - dy) > eps\n ) {\n anchor = getAttachmentPointOnNode(otherSide, pos, r);\n }\n setArrowEndPoint(arrow, side, anchor.x, anchor.y);\n });\n });\n this.arrows.refreshLayer();\n }\n\n private _snapToText(arrow: Arrow, side: EndType, point: Point) {\n const text = this.texts.detect(point, this.options.detectMargin);\n this.links.remove(arrow, side);\n if (!text) return false;\n this.textToMagnet = text;\n const anchor = this.findMagnetPoint(MAGNETS, text, point);\n if (anchor) {\n setArrowEndPoint(arrow, side, anchor.point.x, anchor.point.y);\n this.links.add(arrow, side, text.id, 'text', anchor.magnet);\n return true;\n }\n return false;\n }\n\n private _findAndSnapToNode(arrow: Arrow, side: EndType, point: Point) {\n const screenPoint = this.ogma.view.graphToScreenCoordinates(point);\n const element = this.ogma.view.getElementAt(screenPoint);\n this.links.remove(arrow, side);\n if (element && element.isNode) {\n this.hoveredNode = element;\n this.hoveredNode.setSelected(true);\n // if close to the node border, snap to it\n this._snapToNode(arrow, side, element, screenPoint);\n } else {\n if (this.hoveredNode) this.hoveredNode.setSelected(false);\n this.hoveredNode = null;\n }\n }\n\n private _snapToNode(\n arrow: Arrow,\n side: EndType,\n node: Node,\n screenPoint: Point\n ) {\n const pos = node.getPositionOnScreen();\n const r = +node.getAttribute('radius');\n const rpx = r * this.ogma.view.getZoom();\n const dx = screenPoint.x - pos.x;\n const dy = screenPoint.y - pos.y;\n const dist = Math.sqrt(dx * dx + dy * dy);\n const nodeCenter = node.getPosition();\n\n // clever snapping, center if close to center, otherwise snap\n // to border if close to it. Currently just somple way\n if (dist < rpx + this.options.detectMargin) {\n let anchor = nodeCenter; // graph space\n if (dist > rpx / 2) {\n const otherEnd = getArrowSide(arrow, side === 'end' ? 'start' : 'end');\n anchor = getAttachmentPointOnNode(otherEnd, anchor, r);\n }\n setArrowEndPoint(arrow, side, anchor.x, anchor.y);\n this.links.add(arrow, side, node.getId(), 'node', anchor);\n }\n // TODO: handle the other endpoint, if it's connected to a node\n }\n\n private _onAdded = (annotation: Annotation) => {\n this.emit(EVT_ADD, annotation);\n };\n\n private _onRemoved = (annotation: Annotation) => {\n this.emit(EVT_REMOVE, annotation);\n };\n\n private _onUnselect = (annotation: Annotation) => {\n this.selected = null;\n this.emit(EVT_UNSELECT, annotation);\n };\n\n private _onSelect = (annotation: Annotation) => {\n if (this.selected === annotation) return;\n this.selected = annotation;\n this.emit(EVT_SELECT, this.selected);\n };\n\n /**\n * @returns the currently selected annotation\n */\n public getSelected() {\n return this.selected;\n }\n\n private findMagnetPoint(magnets: Point[], textToMagnet: Text, point: Point) {\n let res: MagnetPoint | undefined;\n for (const magnet of magnets) {\n const size = getTextSize(textToMagnet);\n const position = getTextPosition(textToMagnet);\n const mPoint = new Vector2(magnet.x, magnet.y)\n .mul({ x: size.width, y: size.height })\n .add(position);\n const dist = mPoint.sub(point).length();\n const scaledRadius = this.options.magnetRadius * this.ogma.view.getZoom();\n if (dist < Math.max(scaledRadius, this.options.magnetHandleRadius)) {\n res = {\n point: mPoint,\n magnet\n };\n break;\n }\n }\n return res;\n }\n\n /**\n * Set the options for the controller\n * @param options new Options\n * @returns the updated options\n */\n public setOptions(options: Partial<ControllerOptions> = {}) {\n this.options = {\n ...(this.options || {}),\n ...options\n } as ControllerOptions;\n return this.options;\n }\n /**\n * Selects the annotation with the given id\n * @param id the id of the annotation to select\n */\n public select(id: Id): this {\n const annotation = this.getAnnotations().features.find((a) => a.id === id);\n if (!annotation) return this;\n if (isArrow(annotation)) this.arrows.select(annotation.id);\n else if (isText(annotation)) this.texts.select(annotation.id);\n return this;\n }\n /**\n * Unselects the currently selected annotation\n */\n public unselect(): this {\n if (!this.selected) return this;\n if (isArrow(this.selected)) this.arrows.unselect();\n else if (isText(this.selected)) this.texts.unselect();\n return this;\n }\n /**\n * Add an annotation to the controller\n * @param annotation The annotation to add\n */\n public add(annotation: Arrow | Text | AnnotationCollection): this {\n if (isAnnotationCollection(annotation)) {\n annotation.features.forEach((f) =>\n this.add(f as unknown as Arrow | Text)\n );\n return this;\n }\n switch (annotation.properties.type) {\n case 'text':\n this.texts.add(annotation as unknown as Text);\n break;\n // more to follow\n default:\n this.arrows.add(annotation as unknown as Arrow);\n this.loadLink(annotation as unknown as Arrow);\n break;\n }\n return this;\n }\n /**\n * Remove an annotation or an array of annotations from the controller\n * @param annotation The annotation(s) to remove\n */\n public remove(annotation: Arrow | Text | AnnotationCollection): this {\n if (isAnnotationCollection(annotation)) {\n annotation.features.forEach((f) =>\n this.remove(f as unknown as Arrow | Text)\n );\n return this;\n } else if (isArrow(annotation)) {\n this.links.remove(annotation, 'start');\n this.links.remove(annotation, 'end');\n this.arrows.remove(annotation.id);\n } else {\n this.texts.remove(annotation.id);\n }\n return this;\n }\n private loadLink(arrow: Arrow) {\n if (!arrow.properties.link) return;\n for (const side of ends) {\n const link = arrow.properties.link[side];\n if (!link) continue;\n const targetText = this.getAnnotation(link.id);\n if (targetText) {\n this.links.add(arrow, side, link.id, link.type, link.magnet!);\n } else {\n const targetNode = this.ogma.getNode(link.id);\n if (!targetNode) continue;\n this.links.add(arrow, side, link.id, link.type, link.magnet!);\n }\n }\n }\n /**\n * Start adding an arrow (add it, and give control to the user)\n * @param x coord of the first point\n * @param y coord of the first point\n * @param arrow The arrow to add\n */\n public startArrow(x: number, y: number, arrow?: Arrow) {\n this.cancelDrawing();\n this.arrows.startDrawing(x, y, arrow);\n }\n /**\n * Start adding a text (add it, and give control to the user)\n * @param x coord of the top left point\n * @param y coord of the top left point\n * @param text The text to add\n */\n public startText(x: number, y: number, text?: Text) {\n this.cancelDrawing();\n this.texts.startDrawing(x, y, text);\n }\n /**\n * Cancel drawing on the current frame\n */\n public cancelDrawing() {\n this.annotations.forEach((o) => o.cancelDrawing());\n this.emit(EVT_CANCEL_DRAWING);\n }\n /**\n * Triggers the update event on the annotation\n * @param annotation The annotation updated\n */\n public onUpdate = (annotation: Annotation) => {\n cancelAnimationFrame(this.updateTimeout);\n this.updateTimeout = requestAnimationFrame(() =>\n this._onUpdate(annotation)\n );\n };\n\n private _onUpdate = (annotation: Annotation) => {\n this.emit(EVT_UPDATE, annotation);\n };\n\n /**\n * Update the style of the annotation with the given id\n * @param id The id of the annotation to update\n * @param style The new style\n */\n public updateStyle<A extends Annotation>(\n id: Id,\n style: A['properties']['style']\n ): this {\n const annotation = this.getAnnotations().features.find((a) => a.id === id);\n if (!annotation) return this;\n if (isArrow(annotation)) this.arrows.updateStyle(annotation, style);\n else if (isText(annotation)) this.texts.updateStyle(annotation, style);\n this.onUpdate(annotation);\n return this;\n }\n\n /**\n * \n * @returns the annotations in the controller\n */\n public getAnnotations() {\n const collection: AnnotationCollection = {\n type: 'FeatureCollection',\n features: []\n };\n this.annotations.forEach((editor) => {\n collection.features = [...collection.features, ...editor.getElements()];\n });\n return collection;\n }\n /**\n * Retrieve the annotation with the given id\n * @param id the id of the annotation to get\n * @returns The annotation with the given id\n */\n public getAnnotation(id: Id) {\n return this.getAnnotations().features.find((a) => a.id === id);\n }\n /**\n * Destroy the controller and its elements\n */\n public destroy() {\n this.annotations.forEach((o) => o.destroy());\n this.layer.destroy();\n }\n}\n"],"names":["name","definition","module","Vector","PI2","radToDeg","degToRad","smartRound","num","vectorsDistance","p1","p2","dx","dy","vectorsAngle","P1","P2","wrap","deltaY","deltaX","ret","x","y","radian","degree","rad","str","parts","arr","vector","other","degrees","radians","ca","sa","by","val","scalar","min","max","func","format","nanoid","size","id","byte","defaultStyle","defaultOptions","createArrow","x0","y0","x1","y1","styles","getId","SVG_NS","createSVGElement","tag","getTextBbox","t","updateTextBbox","getTextSize","bbox","getTextPosition","setTextBbox","width","height","getArrowStart","a","getArrowSide","side","getArrowEnd","setArrowStart","setArrowEnd","getArrowEndPoints","setArrowEndPoint","getHandleId","handle","getAnnotationsBounds","annotations","getCoordinatesDump","acc","coord","gj","coords","dump","part","poly","points","g","f","getAttachmentPointOnNode","start","nodeCenter","nodeRadius","angle","getArrowHeight","arrow","end","Vec2","vec","strokeW","_a","drawExt","point","type","delta","pt","draw","minArrowHeight","maxArrowHeight","tail","head","strokeColor","strokeWidth","b","tipLength","path","filled","headD","tailD","d","NONE","EVT_DRAG","EVT_DRAG_START","EVT_DRAG_END","EVT_SELECT","EVT_UNSELECT","EVT_HOVER","EVT_UNHOVER","EVT_REMOVE","EVT_ADD","EVT_CANCEL_DRAWING","EVT_UPDATE","EVT_LINK","has","prefix","Events","EE","fn","context","once","addListener","emitter","event","listener","evt","clearEvent","EventEmitter","names","events","handlers","i","l","ee","listeners","a1","a2","a3","a4","a5","len","args","length","j","Editor","eventEmmitter","ogma","editorHtml","__publicField","element","svg","options","def","o","annotation","style","geometry","target","key","properties","current","HANDLE_LINE","HANDLE_START","HANDLE_END","Arrows","res","zoom","isLine","isStart","isEnd","pos","bb","margin","p","Vector2","vecN","extremities","scale","lineH","startH","endH","middle","v","vn","drawArrow","defaultControllerOptions","createText","content","e","this","r","n","_t","s","u","c","h","m","w","S","k","A","E","O","z","P","T","q","C","_","F","I","L","B","$","D","R","U","M","N","V","Z","W","H","X","G","J","K","Y","Q","tt","et","rt","nt","it","ot","at","lt","st","ut","ct","ft","ht","gt","dt","vt","mt","yt","bt","wt","xt","St","At","kt","Et","Ot","jt","zt","Pt","Tt","qt","Ct","fontSize","font","padding","text","Textbox","minSize","Texts","clientX","clientY","position","isTop","isLeft","isRight","isBottom","textArea","tx","ty","styleContent","className","color","strokeType","background","rect","addRect","drawText","scaledFontSize","Links","targetId","targetType","connectionPoint","arrowId","link","_b","targetLinks","isArrow","isText","isAnnotationCollection","ends","MAGNETS","Control","ctx","magnet","selected","otherSide","radius","anchor","nodes","node","links","eps","screenPoint","rpx","dist","otherEnd","magnets","textToMagnet","mPoint","scaledRadius","collection","editor"],"mappings":"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IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,IAAI,KAAK,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,QAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,OAAO,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,QAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,OAAO,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,IAAI,MAAM,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,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","x_google_ignoreList":[0,1,6,10]}
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../../../node_modules/vector2js/dist/vector2js.js","../../../node_modules/nanoid/index.browser.js","../src/Editor/Arrows/defaults.ts","../src/utils.ts","../src/Editor/Arrows/render.ts","../src/constants.ts","../../../node_modules/eventemitter3/index.js","../src/Editor/base.ts","../src/Editor/Arrows/index.ts","../src/Editor/Texts/defaults.ts","../../../node_modules/@borgar/textbox/dist/textbox.js","../src/Editor/Texts/render.ts","../src/Editor/Texts/index.ts","../src/links.ts","../src/types.ts","../src/Control.ts"],"sourcesContent":["/*\r\n* A simple 2d Vector class for node.js / javascript.\r\n*\r\n* Author: Ronen Ness, 2016.\r\n* License: MIT.\r\n*/\r\n\r\n\r\n(function(name, definition) {\r\n if (typeof module != 'undefined') module.exports = definition();\r\n else if (typeof define == 'function' && typeof define.amd == 'object') define(definition);\r\n else this[name] = definition();\r\n}('Vector', function() {\r\n\r\n \"use strict\";\r\n\r\n // create the vector main object\r\n var Vector = (function () {\r\n\r\n \"use strict\";\r\n\r\n // pi * 2\r\n var PI2 = Math.PI * 2;\r\n\r\n // convert radians to degrees\r\n var radToDeg = (180 / Math.PI);\r\n\r\n // convert degrees to radians\r\n var degToRad = (Math.PI / 180);\r\n\r\n // round numbers from 10'th digit\r\n // this is useful for calculations that should return round or almost round numbers, but have a long tail of 0's and 1 due to floating points stuff\r\n function smartRound(num)\r\n {\r\n return Math.round(num * 100000000.0) / 100000000.0;\r\n }\r\n\r\n // return distance between vectors\r\n function vectorsDistance(p1, p2) {\r\n var dx = p2.x - p1.x,\r\n dy = p2.y - p1.y;\r\n return Math.sqrt(dx * dx + dy * dy);\r\n };\r\n\r\n // return angle (in radians) between two vectors\r\n function vectorsAngle(P1, P2, wrap) {\r\n var deltaY = P2.y - P1.y,\r\n deltaX = P2.x - P1.x;\r\n var ret = Math.atan2(deltaY, deltaX);\r\n if (wrap) {while (ret < 0) ret += PI2;}\r\n return ret;\r\n };\r\n\r\n // create the vector\r\n function Vector(x, y)\r\n {\r\n this.x = x !== undefined ? x : 0;\r\n this.y = y !== undefined ? y : 0;\r\n }\r\n\r\n // create a vector with length 1 from a given radian.\r\n // @param radian - angle in radians.\r\n // @return new vector instance.\r\n Vector.fromRadians = function (radian)\r\n {\r\n var x = Math.cos(radian);\r\n var y = Math.sin(radian);\r\n return new Vector(x, y);\r\n };\r\n\r\n // create a vector with length 1 from a given degree.\r\n // @param degree - angle in degrees.\r\n // @return new vector instance.\r\n Vector.fromDegrees = function (degree)\r\n {\r\n var rad = degree * (Math.PI / 180.0);\r\n return Vector.fromRadians(rad);\r\n };\r\n\r\n // create a vector from string (\"x,y\").\r\n // @param str - string to create vector from.\r\n // @return new vector instance.\r\n Vector.fromString = function (str)\r\n {\r\n var parts = str.split(\",\");\r\n return new Vector(parseFloat(parts[0]), parseFloat(parts[1]));\r\n };\r\n\r\n // create a vector from array ( [x, y] ).\r\n // @param arr - array to create vector from.\r\n // @return new vector instance.\r\n Vector.fromArray = function (arr)\r\n {\r\n return new Vector(arr[0], arr[1]);\r\n };\r\n\r\n // vector prototype\r\n Vector.prototype = {\r\n\r\n // version\r\n version: \"2.0.1\",\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone the vector and return the cloned instance.\r\n // @return cloned vector.\r\n clone: function()\r\n {\r\n return new Vector(this.x, this.y);\r\n },\r\n\r\n // [API]\r\n // []\r\n // Get if equal to another vector\r\n // @param vector - other vector to compare with.\r\n // @return if vectors are equal.\r\n equals: function(vector)\r\n {\r\n return (this.prototype === vector.prototype) && (this.x === vector.x) && (this.y === vector.y);\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // set values from another vector. this changes value of self.\r\n // @param vector - other vector to get values from.\r\n // @return self.\r\n copy: function(vector)\r\n {\r\n this.x = vector.x;\r\n this.y = vector.y;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // set only the x component from another vector.\r\n // @return self.\r\n copyX: function(vector)\r\n {\r\n this.x = vector.x;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // set only the y component from another vector.\r\n // @return self.\r\n copyY: function(vector)\r\n {\r\n this.y = vector.y;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // []\r\n // convert to a dictionary with {x, y}.\r\n // @return a dictionary representation of the vector.\r\n toDict: function()\r\n {\r\n return {x: this.x, y: this.y};\r\n },\r\n\r\n // [API]\r\n // []\r\n // convert to array with [x, y].\r\n // @return an array representation of the vector.\r\n toArray: function()\r\n {\r\n return [this.x, this.y];\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // set values from x, y.\r\n // @param x - optional x component to set.\r\n // @param y - optional y component to set.\r\n // @return self.\r\n set: function(x, y)\r\n {\r\n if (x !== undefined) this.x = x;\r\n if (y !== undefined) this.y = y;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone and flip between x and y values.\r\n // @return cloned vector with flipped x and y components.\r\n flipXY: function()\r\n {\r\n return new Vector(this.y, this.x);\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // flip between x and y values.\r\n // @return self.\r\n flipXYSelf: function()\r\n {\r\n this.y = [this.x, this.x = this.y][0];\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone and invert x and y values (like multiply with -1, eg x, y => -x, -y)\r\n // @return cloned vector with inverted values.\r\n invert: function()\r\n {\r\n return this.mulScalar(-1);\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // invert x and y values (like multiply with -1, eg x, y => -x, -y)\r\n // @return self.\r\n invertSelf: function()\r\n {\r\n this.mulScalarSelf(-1);\r\n return this;\r\n },\r\n\r\n // [API]\r\n // []\r\n // get the distance from another vector.\r\n // @param other - vector to get distance from.\r\n // @return distance between vectors.\r\n distanceFrom: function (other)\r\n {\r\n return vectorsDistance(this, other);\r\n },\r\n\r\n // [API]\r\n // []\r\n // get angle from another vector in radians.\r\n // @return angle in radians from this to other.\r\n radiansTo: function (other)\r\n {\r\n return vectorsAngle(this, other, true);\r\n },\r\n\r\n // [API]\r\n // []\r\n // get degrees from another vector in degrees.\r\n // @return angle in degrees from this to other.\r\n degreesTo: function (other)\r\n {\r\n return vectorsAngle(this, other, true) * radToDeg;\r\n },\r\n\r\n // [API]\r\n // []\r\n // convert this vector to a radian angle.\r\n // this is equivalent to doing Vector.zero.radiansTo(this).\r\n // @return angle in radians.\r\n toRadians: function (other)\r\n {\r\n return vectorsAngle(Vector.zero, this, true);\r\n },\r\n\r\n // [API]\r\n // []\r\n // convert this vector to degree.\r\n // this is equivalent to doing Vector.zero.degreeTo(this).\r\n // @return angle in degrees (0-360).\r\n toDegrees: function (other)\r\n {\r\n return this.toRadians() * radToDeg;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // rotate this vector by a given degree.\r\n // @param degrees - degrees to rotate this vector by (can be positive or negative).\r\n // @return self.\r\n rotateDegreesSelf: function(degrees)\r\n {\r\n return this.rotateRadiansSelf(degrees * degToRad);\r\n },\r\n\r\n // [API]\r\n // [chainable]\r\n // clone and rotate the vector by a given degree.\r\n // @param degrees - degree to rotate this vector by (can be positive or negative).\r\n // @return cloned rotated vector.\r\n rotateDegrees: function(degrees)\r\n {\r\n return this.clone().rotateDegreesSelf(degrees);\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // rotate this vector by a given radian.\r\n // @param radians - radians to rotate this vector by (can be positive or negative).\r\n // @return self.\r\n rotateRadiansSelf: function(radians)\r\n {\r\n var ca = Math.cos(radians);\r\n var sa = Math.sin(radians);\r\n var x = (this.x * ca) - (this.y * sa);\r\n var y = (this.x * sa) + (this.y * ca);\r\n this.x = smartRound(x);\r\n this.y = smartRound(y);\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable]\r\n // clone and rotate the vector by a given degree.\r\n // @param radians - radians to rotate this vector by (can be positive or negative).\r\n // @return cloned rotated vector.\r\n rotateRadians: function(radians)\r\n {\r\n return this.clone().rotateRadiansSelf(radians);\r\n },\r\n\r\n // [API]\r\n // []\r\n // calculate the length of this vector (aka magnitude).\r\n // @return vector length.\r\n length: function()\r\n {\r\n return Math.sqrt(this.x*this.x + this.y*this.y);\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // normalize this vector, eg make length equal 1.\r\n // @return self.\r\n normalizeSelf: function()\r\n {\r\n var by = Math.sqrt(this.x * this.x + this.y * this.y);\r\n if (by === 0) return this;\r\n this.x /= by;\r\n this.y /= by;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone and normalize the vector.\r\n // @return normalized vector.\r\n normalize: function()\r\n {\r\n return this.clone().normalizeSelf();\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // add other vector to self.\r\n // for example, v(10, 11) + v(5, 6) = v(15, 17).\r\n // @param other - vector to add components to self.\r\n // @return self.\r\n addSelf: function (other)\r\n {\r\n // if we got a number instead of vector, use the scalar function\r\n if (typeof other === \"number\") {\r\n return this.addScalarSelf(other);\r\n }\r\n\r\n // update and return\r\n this.x += other.x;\r\n this.y += other.y;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // subtract other vector from self.\r\n // for example, v(10, 10) - v(2, 3) = v(8, 7).\r\n // @param other - vector to subtract components from self.\r\n // @return self.\r\n subSelf: function (other)\r\n {\r\n // if we got a number instead of vector, use the scalar function\r\n if (typeof other === \"number\") {\r\n return this.subScalarSelf(other);\r\n }\r\n\r\n // update and return\r\n this.x -= other.x;\r\n this.y -= other.y;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // divide self by other vector.\r\n // for example, v(10, 20) / v(2, 5) = v(5, 4).\r\n // @param other - vector to divide components from self.\r\n // @return self.\r\n divSelf: function (other)\r\n {\r\n // if we got a number instead of vector, use the scalar function\r\n if (typeof other === \"number\") {\r\n return this.divScalarSelf(other);\r\n }\r\n\r\n // update and return\r\n this.x /= other.x;\r\n this.y /= other.y;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // multiply self vector by other vector.\r\n // for example, v(2, 3) * v(3, 4) = v(6, 12).\r\n // @param other - vector to multiply components with self.\r\n // @return self.\r\n mulSelf: function (other)\r\n {\r\n // if we got a number instead of vector, use the scalar function\r\n if (typeof other === \"number\") {\r\n return this.mulScalarSelf(other);\r\n }\r\n\r\n // update and return\r\n this.x *= other.x;\r\n this.y *= other.y;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // add scalar value to self.\r\n // for example, v(2, 3) + 5 = v(7, 8).\r\n // @param val - value to add to components.\r\n // @return self.\r\n addScalarSelf: function (val)\r\n {\r\n this.x += val;\r\n this.y += val;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // subtract scalar from self.\r\n // for example, v(7, 9) - 5 = v(3, 4).\r\n // @param val - value to subtract from components.\r\n // @return self.\r\n subScalarSelf: function (val)\r\n {\r\n this.x -= val;\r\n this.y -= val;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // divide self by scalar.\r\n // for example, v(6, 8) / 5 = v(3, 4).\r\n // @param val - value to divide components by.\r\n // @return self.\r\n divScalarSelf: function (val)\r\n {\r\n this.x /= val;\r\n this.y /= val;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // multiply self by scalar.\r\n // for example, v(2, 3) * 2 = v(4, 6).\r\n // @param val - value to multiply components with.\r\n // @return self.\r\n mulScalarSelf: function (val)\r\n {\r\n this.x *= val;\r\n this.y *= val;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone self and add other vector to it.\r\n // @param other - vector to add with.\r\n // @return cloned vector.\r\n add: function (other)\r\n {\r\n return this.clone().addSelf(other);\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone self and subtract other vector from it.\r\n // @param other - vector to subtract with.\r\n // @return cloned vector.\r\n sub: function (other)\r\n {\r\n return this.clone().subSelf(other);\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone self and multiply by other vector.\r\n // @param other - vector to multiply with.\r\n // @return cloned vector.\r\n mul: function (other)\r\n {\r\n return this.clone().mulSelf(other);\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone self and divide by other vector.\r\n // @param other - vector to divide with.\r\n // @param scalar - value to divide by.\r\n // @return cloned vector.\r\n div: function (other)\r\n {\r\n return this.clone().divSelf(other);\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone self and add scalar to it.\r\n // @param scalar - value to add.\r\n // @return cloned vector.\r\n addScalar: function (scalar)\r\n {\r\n return this.clone().addScalarSelf(scalar);\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone self and substract scalar from it.\r\n // @param scalar - value to subtract.\r\n // @return cloned vector.\r\n subScalar: function (scalar)\r\n {\r\n return this.clone().subScalarSelf(scalar);\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone self and multiply by scalar.\r\n // @param scalar - value to multiply with.\r\n // @return cloned vector.\r\n mulScalar: function (scalar)\r\n {\r\n return this.clone().mulScalarSelf(scalar);\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone self and divide by scalar.\r\n // @param scalar - value to divide by.\r\n // @return cloned vector.\r\n divScalar: function (scalar)\r\n {\r\n return this.clone().divScalarSelf(scalar);\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // clamp vector values into range.\r\n // note: this function does not validate that min < max.\r\n // @param min - min value for x, y components.\r\n // @param max - max value for x, y components.\r\n // @return self.\r\n clampSelf: function (min, max)\r\n {\r\n if (this.x < min.x) this.x = min.x;\r\n if (this.y < min.y) this.y = min.y;\r\n if (this.x > max.x) this.x = max.x;\r\n if (this.y > max.y) this.y = max.y;\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone vector and clamp its values.\r\n // note: this function does not validate that min < max.\r\n // @param min - min value for x, y components.\r\n // @param max - max value for x, y components.\r\n // @return cloned vector in range.\r\n clamp: function (min, max)\r\n {\r\n return this.clone().clampSelf(min, max);\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // apply a function on x and y components of the vector.\r\n // for example, you can use Math.round to round the vector x, y values.\r\n // @param func - function to apply on components.\r\n // @return self.\r\n applySelf: function (func)\r\n {\r\n this.x = func(this.x);\r\n this.y = func(this.y);\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone self and apply a function on x and y components of the clone vector.\r\n // for example, you can use Math.round to round the vector x, y values.\r\n // @param func - function to apply on components.\r\n // @return cloned vector.\r\n apply: function (func)\r\n {\r\n return this.clone().applySelf(func);\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // turn self to absolute values (eg turn x, y positive).\r\n // @return self.\r\n absSelf: function()\r\n {\r\n return this.applySelf(Math.abs);\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone and turn to absolute values (eg turn x, y positive).\r\n // @return cloned vector.\r\n abs: function()\r\n {\r\n return this.clone().absSelf();\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // turn self to round values (eg turn x, y positive).\r\n // @return self.\r\n roundSelf: function()\r\n {\r\n return this.applySelf(Math.round);\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // clone and turn to round values (eg turn x, y positive).\r\n // @return cloned vector.\r\n round: function()\r\n {\r\n return this.clone().roundSelf();\r\n },\r\n\r\n // [API]\r\n // []\r\n // calculate dot-product of this vector with another vector.\r\n // @param other - other vector to calculate dot-product with.\r\n // @return dot product.\r\n dot: function (other)\r\n {\r\n return (this.x * other.x) + (this.y * other.y);\r\n },\r\n\r\n // [API]\r\n // []\r\n // calculate cross-product of this vector with another vector.\r\n // @param other - other vector to calculate cross-product with.\r\n // @return dot product.\r\n cross: function (other)\r\n {\r\n return (this.x * other.y) - (this.y * other.x);\r\n },\r\n\r\n // [API]\r\n // [chainable, changeSelf]\r\n // if any of the components of this vector are NaN, null, undefined, etc. set them to defaults.\r\n // note: 0's are considered to be a valid number and will not be replaced with a default value.\r\n // @param x - default value for x if undefined (0 if not defined).\r\n // @param y - default value for y if undefined (0 if not defined).\r\n // @return self.\r\n repairSelf: function(x, y)\r\n {\r\n // checking if number but also trying a simple math equasion and check if NaN (because typeof NaN == number..)\r\n if (typeof this.x !== \"number\" || isNaN(this.x + 1)) {this.x = x || 0;}\r\n if (typeof this.y !== \"number\" || isNaN(this.y + 1)) {this.y = y || 0;}\r\n return this;\r\n },\r\n\r\n // [API]\r\n // [chainable, clone]\r\n // create a clone and if any of the components of the vector are NaN, null, undefined, etc. set them to default.\r\n // note: 0's are considered to be a valid number and will not be replaced with a default value.\r\n // @param x - default value for x if undefined (0 if not defined).\r\n // @param y - default value for y if undefined (0 if not defined).\r\n // @return repaired clone.\r\n repair: function(x, y)\r\n {\r\n return this.clone().repairSelf(x, y);\r\n },\r\n\r\n // [API]\r\n // []\r\n // convert to string in the form of \"x,y\".\r\n // @return string representation of the vector.\r\n toString: function ()\r\n {\r\n // default format\r\n return this.x + \",\" + this.y;\r\n },\r\n\r\n // [API]\r\n // []\r\n // convert to a string with a given format.\r\n // @param format - a string in which %x and %y will be replaced with the vector values.\r\n // @return formatted string representing the vector.\r\n format: function (format)\r\n {\r\n // default format\r\n format = format || \"%x,%y\";\r\n format = format.replace(new RegExp(\"%x\", 'g'), this.x);\r\n format = format.replace(new RegExp(\"%y\", 'g'), this.y);\r\n return format;\r\n },\r\n };\r\n\r\n // return the vector class\r\n return Vector;\r\n\r\n })();\r\n\r\n // some default consts\r\n Vector.zero = new Vector(0, 0);\r\n Vector.one = new Vector(1, 1);\r\n Vector.up = new Vector(0, -1);\r\n Vector.down = new Vector(0, 1);\r\n Vector.left = new Vector(-1, 0);\r\n Vector.right = new Vector(1, 0);\r\n Vector.upLeft = new Vector(-1, -1);\r\n Vector.downLeft = new Vector(-1, 1);\r\n Vector.upRight = new Vector(1, -1);\r\n Vector.downRight = new Vector(1, 1);\r\n\r\n // alias for magnitude\r\n Vector.prototype.magnitude = Vector.prototype.length;\r\n\r\n // if freeze is supported make those consts freeze\r\n if (Object.freeze)\r\n {\r\n Object.freeze(Vector.zero);\r\n Object.freeze(Vector.one);\r\n Object.freeze(Vector.up);\r\n Object.freeze(Vector.down);\r\n Object.freeze(Vector.left);\r\n Object.freeze(Vector.right);\r\n Object.freeze(Vector.upLeft);\r\n Object.freeze(Vector.downLeft);\r\n Object.freeze(Vector.upRight);\r\n Object.freeze(Vector.downRight);\r\n }\r\n\r\n // return the vector class\r\n return Vector;\r\n}));","import { urlAlphabet } from './url-alphabet/index.js'\nlet random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nlet nanoid = (size = 21) =>\n crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {\n byte &= 63\n if (byte < 36) {\n id += byte.toString(36)\n } else if (byte < 62) {\n id += (byte - 26).toString(36).toUpperCase()\n } else if (byte > 62) {\n id += '-'\n } else {\n id += '_'\n }\n return id\n }, '')\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n","import { nanoid as getId } from 'nanoid';\nimport { Arrow, ArrowStyles } from '../../types';\n\nexport const defaultStyle: ArrowStyles = {\n strokeType: 'plain',\n strokeColor: 'black',\n strokeWidth: 1,\n head: 'none',\n tail: 'none'\n};\n\n// used when adding a new Arrow\nexport const defaultOptions: Arrow = {\n id: 0,\n type: 'Feature',\n properties: {\n type: 'arrow',\n style: {\n ...defaultStyle\n }\n },\n geometry: {\n type: 'LineString',\n coordinates: [\n [0, 0],\n [100, 100]\n ]\n }\n\n // type: 'arrow',\n // stroke: {\n // type: 'plain',\n // color: 'black',\n // width: 1\n // },\n // head: 'none',\n // tail: 'arrow-plain',\n // start: { x: 0, y: 0 },\n // end: { x: 100, y: 100 }\n};\n\nexport const createArrow = (\n x0 = 0,\n y0 = 0,\n x1 = 0,\n y1 = 0,\n styles = { ...defaultStyle }\n): Arrow => ({\n id: getId(),\n type: 'Feature',\n properties: {\n type: 'arrow',\n style: {\n ...defaultStyle,\n ...styles\n }\n },\n geometry: {\n type: 'LineString',\n coordinates: [\n [x0, y0],\n [x1, y1]\n ]\n }\n});\n","import { Point } from '@linkurious/ogma';\nimport type {\n BBox,\n Feature,\n FeatureCollection,\n Geometry,\n Position\n} from 'geojson';\nimport { AnnotationCollection, Arrow, Text } from './types';\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\nexport function createSVGElement<T extends SVGElement>(tag: string): T {\n return document.createElementNS(SVG_NS, tag) as T;\n}\n\nexport function getTextBbox(t: Text) {\n if (!t.geometry.bbox) updateTextBbox(t);\n return t.geometry.bbox as BBox;\n}\n\nexport function getTextSize(t: Text) {\n const bbox = getTextBbox(t);\n return {\n width: bbox[2] - bbox[0],\n height: bbox[3] - bbox[1]\n };\n}\n\nexport function getTextPosition(t: Text) {\n const bbox = getTextBbox(t);\n return { x: bbox[0], y: bbox[1] };\n}\n\nexport function updateTextBbox(t: Text) {\n // TODO: maybe check the winding order of the coordinates\n const [x0, y0] = t.geometry.coordinates[0][0];\n const [x1, y1] = t.geometry.coordinates[0][2];\n t.geometry.bbox = [x0, y0, x1, y1];\n}\n\nexport function setTextBbox(\n t: Text,\n x: number,\n y: number,\n width: number,\n height: number\n) {\n t.geometry.bbox = [x, y, x + width, y + height];\n t.geometry.coordinates = [\n [\n [x, y],\n [x + width, y],\n [x + width, y + height],\n [x, y + height],\n [x, y]\n ]\n ];\n}\n\nexport function getArrowStart(a: Arrow) {\n const [x, y] = a.geometry.coordinates[0];\n return { x, y };\n}\n\nexport function getArrowSide(a: Arrow, side: 'start' | 'end') {\n const [x, y] = a.geometry.coordinates[side === 'start' ? 0 : 1];\n return { x, y };\n}\n\nexport function getArrowEnd(a: Arrow) {\n const [x, y] = a.geometry.coordinates[1];\n return { x, y };\n}\n\nexport function setArrowStart(a: Arrow, x: number, y: number) {\n a.geometry.coordinates[0] = [x, y];\n}\n\nexport function setArrowEnd(a: Arrow, x: number, y: number) {\n a.geometry.coordinates[1] = [x, y];\n}\n\nexport function getArrowEndPoints(a: Arrow) {\n return { start: getArrowStart(a), end: getArrowEnd(a) };\n}\n\nexport function setArrowEndPoint(\n a: Arrow,\n side: 'start' | 'end',\n x: number,\n y: number\n) {\n if (side === 'start') setArrowStart(a, x, y);\n else setArrowEnd(a, x, y);\n}\n\nexport const getHandleId = (handle: HTMLDivElement): number =>\n parseInt(handle.getAttribute('data-handle-id') || '-1');\n\ntype Bounds = [number, number, number, number];\n\nexport function getAnnotationsBounds(\n annotations: AnnotationCollection\n): Bounds {\n return getCoordinatesDump(annotations).reduce(\n (acc: Bounds, coord) => {\n acc[0] = Math.min(coord[0], acc[0]);\n acc[1] = Math.min(coord[1], acc[1]);\n acc[2] = Math.max(coord[0], acc[2]);\n acc[3] = Math.max(coord[1], acc[3]);\n return acc;\n },\n [\n Number.POSITIVE_INFINITY,\n Number.POSITIVE_INFINITY,\n Number.NEGATIVE_INFINITY,\n Number.NEGATIVE_INFINITY\n ]\n );\n}\n\nfunction getCoordinatesDump(\n gj: Feature | FeatureCollection | Geometry\n): Position[] {\n let coords: Position[] = [];\n if (gj.type == 'Point') {\n coords = [gj.coordinates];\n } else if (gj.type == 'LineString' || gj.type == 'MultiPoint') {\n coords = gj.coordinates;\n } else if (gj.type == 'Polygon' || gj.type == 'MultiLineString') {\n coords = gj.coordinates.reduce(function (dump, part) {\n return dump.concat(part);\n }, []);\n } else if (gj.type == 'MultiPolygon') {\n coords = gj.coordinates.reduce<Position[]>(\n (dump, poly) =>\n dump.concat(poly.reduce((points, part) => points.concat(part), [])),\n []\n );\n } else if (gj.type == 'Feature') {\n coords = getCoordinatesDump(gj.geometry);\n } else if (gj.type == 'GeometryCollection') {\n coords = gj.geometries.reduce<Position[]>(\n (dump, g) => dump.concat(getCoordinatesDump(g)),\n []\n );\n } else if (gj.type == 'FeatureCollection') {\n coords = gj.features.reduce<Position[]>(\n (dump, f) => dump.concat(getCoordinatesDump(f)),\n []\n );\n }\n return coords;\n}\n\nexport function getAttachmentPointOnNode(\n start: Point,\n nodeCenter: Point,\n nodeRadius: number\n) {\n const angle = Math.atan2(start.y - nodeCenter.y, start.x - nodeCenter.x);\n return {\n x: nodeCenter.x + nodeRadius * Math.cos(angle),\n y: nodeCenter.y + nodeRadius * Math.sin(angle)\n };\n}\n","import Vec2 from 'vector2js';\nimport { Arrow, ArrowStyles, Extremity } from '../../types';\nimport { createSVGElement, getArrowEndPoints } from '../../utils';\n\n/**\n * @function getArrowHeight\n * @param arrow The arrow to measure\n * @returns The height of the bounding box of the arrow\n */\nexport function getArrowHeight(arrow: Arrow, min = 5, max = 30): number {\n const { start, end } = getArrowEndPoints(arrow);\n const a = new Vec2(start.x, start.y);\n const b = new Vec2(end.x, end.y);\n const vec = b.sub(a);\n const strokeW = arrow.properties.style && arrow.properties.style.strokeWidth ? arrow.properties.style?.strokeWidth : 0;\n return Math.min(max, Math.max(3 * strokeW, vec.length() * 0.1, min));\n}\n\n/**\n * @function drawExt\n * @param point The extremity position\n * @param vec The arrow vector (end-start)\n * @param type The type of extremity\n * @param height The height of the arrow\n */\nfunction drawExt(\n point: Vec2,\n vec: Vec2,\n type: Extremity | undefined,\n height: number\n): string {\n const delta = vec.clone().normalize().invert().mul(height);\n if (!type || type === 'none') return '';\n const p1 = point.clone().add(delta.rotateRadians(Math.PI / 8));\n const p2 = point.clone().add(delta.rotateRadians(-Math.PI / 8));\n\n const pt = `${point.x} ${point.y}`;\n return `M ${p1.x} ${p1.y} L ${pt} ${p2.x} ${p2.y} ${type === 'arrow' ? '' : `${p1.x} ${p1.y}`\n }`;\n}\n\n/**\n * @function draw\n * @param arrow The arrow to draw\n * @param g the group in which to draw\n */\nexport default function draw(\n arrow: Arrow,\n g: SVGGElement,\n defaultStyle: ArrowStyles,\n minArrowHeight: number,\n maxArrowHeight: number\n) {\n const { start, end } = getArrowEndPoints(arrow);\n const { tail, head, strokeColor, strokeWidth } =\n arrow.properties.style || defaultStyle;\n const a = new Vec2(start.x, start.y);\n const b = new Vec2(end.x, end.y);\n const vec = b.clone().sub(a);\n const tipLength = getArrowHeight(arrow, minArrowHeight, maxArrowHeight);\n const path = createSVGElement<SVGPathElement>('path');\n path.setAttribute('data-annotation', `${arrow.id}`);\n path.setAttribute('data-annotation-type', 'arrow');\n const filled = head === 'arrow-plain' || tail === 'arrow';\n path.setAttribute('stroke', strokeColor || 'none');\n path.setAttribute('stroke-width', `${strokeWidth}`);\n path.setAttribute('fill', filled ? strokeColor || '' : 'none');\n path.setAttribute('stroke-linecap', 'round');\n path.setAttribute('stroke-linejoin', 'round');\n const headD = drawExt(a, vec.clone().invert(), tail, tipLength);\n const tailD = drawExt(b, vec, head, tipLength);\n const d = headD + `M ${a.x} ${a.y} ${b.x} ${b.y}` + tailD;\n path.setAttribute('d', d);\n g.appendChild(path);\n}\n","export const NONE = -1;\n\nexport const EVT_DRAG = 'dragging';\nexport const EVT_DRAG_START = 'dragstart';\nexport const EVT_DRAG_END = 'dragend';\nexport const EVT_SELECT = 'select';\nexport const EVT_UNSELECT = 'unselect';\nexport const EVT_HOVER = 'hover';\nexport const EVT_UNHOVER = 'unhover';\nexport const EVT_REMOVE = 'remove';\nexport const EVT_ADD = 'add';\nexport const EVT_CANCEL_DRAWING = 'cancelDrawing';\nexport const EVT_UPDATE = 'update';\nexport const EVT_LINK = 'link';\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","import Ogma, {\n MouseButtonEvent,\n MouseMoveEvent,\n Options,\n Overlay,\n Point,\n SVGLayer\n} from '@linkurious/ogma';\nimport eventEmmitter from 'eventemitter3';\nimport { nanoid as getId } from 'nanoid';\nimport {\n EVT_ADD,\n EVT_HOVER,\n EVT_REMOVE,\n EVT_SELECT,\n EVT_UNHOVER,\n EVT_UNSELECT,\n NONE\n} from '../constants';\nimport { Annotation, Events, Id } from '../types';\n\n/**\n * @class Annotations\n * Abstract class to display Texts and Arrows, provide add/remove/update and mouse events\n * Modifying annotation is handled by the child classes, it is too specific\n */\nexport default abstract class Editor<\n T extends Annotation\n> extends eventEmmitter<Events<T>> {\n protected ogma: Ogma;\n protected elements: T[];\n // layer to draw elements\n protected layer: SVGLayer;\n protected editor: Overlay;\n protected selectedId: Id = NONE;\n protected hoveredId: Id = NONE;\n // used to remember ogma options before we change them\n protected ogmaOptions: Options;\n protected shouldDetect: boolean;\n protected isDragging: boolean;\n protected maxHandleScale = 1.5;\n\n\n constructor(ogma: Ogma, editorHtml: string) {\n super();\n this.ogma = ogma;\n this.elements = [];\n this.shouldDetect = true;\n this.isDragging = false;\n this.ogmaOptions = ogma.getOptions();\n //handle select/unselect on click\n ogma.events\n .on(['click', 'mousemove'], this._onClickMouseMove)\n .on('keyup', this._onKeyUp)\n // @ts-expect-error\n .on('newFrame', () => {\n this.refreshEditor();\n });\n\n // Layer to draw all the annotations\n this.layer = ogma.layers.addSVGLayer({\n draw: (svg) => this.draw(svg)\n });\n this.layer.moveToTop();\n // UI to move/resize the element\n this.editor = ogma.layers.addLayer(editorHtml);\n this.editor.hide();\n }\n\n private _onKeyUp = (evt: { code: number; }) => {\n if (evt.code === 27 && this.selectedId !== NONE) this.unselect();\n else if (\n (evt.code === 46 || evt.code === 8) &&\n this.selectedId !== NONE &&\n this._canRemove()\n ) {\n this.remove(this.selectedId);\n }\n };\n\n protected _canRemove() {\n return true;\n }\n\n private _onClickMouseMove = (\n evt: MouseButtonEvent<unknown, unknown> & MouseMoveEvent\n ) => {\n if (!evt.domEvent || this.isDragging || !this.shouldDetect) return;\n const point = this.ogma.view.screenToGraphCoordinates(evt);\n\n // try to detect annotation\n const element =\n this.shouldDetect || (!this.shouldDetect && +this.selectedId > -1)\n ? this.detect(point, 0)\n : undefined;\n // hover/unhover on mousemove\n if (evt.domEvent.type === 'mousemove') {\n if (element) this.hover(element.id);\n else if (this.hoveredId !== NONE) this.unhover();\n } else {\n // select/unselect on click\n if (element) {\n this.select(element.id);\n } else if (this.selectedId !== NONE) {\n this.unselect();\n }\n }\n };\n\n /**\n * @method add\n * @param options Params for the annotation (merged with default)\n * @returns the added annotation\n */\n add(options: T) {\n const def = this.getDefaultOptions();\n const o = Object.assign(options, {\n id: options.id === undefined ? getId() : options.id,\n type: options.type,\n properties: {\n ...def.properties,\n ...(options.properties || {}),\n // styles need to be merged\n style: { ...def.properties.style, ...(options.properties.style || {}) }\n },\n geometry: {\n ...def.geometry,\n ...options.geometry\n }\n } as T);\n this.elements.push(o);\n this.layer.refresh();\n this.emit(EVT_ADD, o);\n return o;\n }\n\n public updateStyle(annotation: T, style: Partial<T['properties']['style']>) {\n this.updateAnnotation(annotation, {\n properties: {\n style\n }\n } as Partial<T>);\n }\n\n public updateGeometry(annotation: T, geometry: Partial<T['geometry']>) {\n this.updateAnnotation(annotation, {\n geometry\n } as Partial<T>);\n }\n\n /**\n * @method update\n * Updates an annotation (position, color etc)\n * @param id Id of the annotation to update\n * @param new params of the annotation\n */\n update(id: Id, element: Partial<T>) {\n const target = this.getById(id);\n this.updateAnnotation(target, element);\n }\n\n updateAnnotation(target: T, element: Partial<T>) {\n if (!target) return;\n const id = target.id;\n Object.keys(element).forEach((key) => {\n if (key === 'id') return;\n if (key === 'properties') {\n const properties = element.properties || { style: {} };\n target.properties = {\n ...(target.properties || {}),\n ...(properties || {}),\n style: {\n ...(target.properties.style || {}),\n ...(properties.style || {})\n }\n };\n } else if (key === 'geometry') {\n target.geometry = {\n ...target.geometry,\n ...element.geometry\n };\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n } else target[key] = element[key];\n });\n if (id === this.selectedId) this.refreshEditor();\n this.layer.refresh();\n }\n\n getById(id: Id): T {\n for (let i = 0; i < this.elements.length; i++) {\n const element = this.elements[i];\n if (element.id !== id) continue;\n return element;\n }\n return undefined as unknown as T;\n }\n\n /**\n * @method select\n * @param id id of the element to select\n * Select element, show editor, disable Ogma dragging and fire event\n */\n select(id: Id) {\n const element = this.getById(id);\n if (!element) return;\n this.editor.show();\n this.selectedId = id;\n this.refreshEditor();\n this.layer.refresh();\n this.emit(EVT_SELECT, element);\n }\n\n hover(id: Id) {\n const element = this.getById(id);\n if (!element) return;\n this.editor.show();\n this.hoveredId = id;\n this.refreshEditor();\n this.layer.refresh();\n this.emit(EVT_HOVER, element);\n }\n\n getSelectedFeature() {\n if (this.selectedId === NONE) return null;\n return this.getById(this.selectedId);\n }\n\n unselect() {\n const current = this.getById(this.selectedId);\n if (current) this.emit(EVT_UNSELECT, current);\n this.selectedId = NONE;\n // do not hide editor if there is something hovered\n if (this.hoveredId === NONE) this.editor.hide();\n this.layer.refresh();\n return this;\n }\n\n unhover() {\n const current = this.getById(this.hoveredId);\n this.emit(EVT_UNHOVER, current);\n this.hoveredId = NONE;\n // do not hide editor if there is something selected\n if (this.selectedId === NONE) this.editor.hide();\n this.layer.refresh();\n return this;\n }\n\n /**\n * @method remove\n * @param id Id of the annotation to remove\n * Removes annotation with the given id\n */\n remove(id: Id) {\n const element = this.getById(id);\n if (id === this.hoveredId) this.unhover();\n if (id === this.selectedId) this.unselect();\n this.elements = this.elements.filter((a) => a.id !== id);\n if (element) this.emit(EVT_REMOVE, element);\n this.layer.refresh();\n }\n\n /**\n * @method disableDragging\n * Prevents Ogma from dragging elements or moving the view while dragging an annotation\n */\n public disableDragging() {\n this.ogma.setOptions({\n interactions: {\n drag: { enabled: false },\n pan: { enabled: false }\n },\n detect: {\n nodes: false,\n edges: false,\n nodeTexts: false,\n edgeTexts: false\n }\n });\n }\n\n /**\n * @method restoreDragging\n * restore ogma options as they were before we start dragging an annotation\n */\n public restoreDragging() {\n this.ogma.setOptions(this.ogmaOptions);\n }\n\n public enableDetection() {\n this.shouldDetect = true;\n }\n /**\n * @method disableDetection\n * Disables the hover behaviour, used by controller to avoid hovering\n * arrows while dragging texts and vice versa\n */\n public disableDetection() {\n this.shouldDetect = false;\n }\n\n public refreshLayer() {\n this.layer.refresh();\n }\n\n public getElements() {\n return [...this.elements];\n }\n public abstract refreshEditor(): void;\n public abstract draw(svg: SVGSVGElement): void;\n public abstract cancelDrawing(): void;\n\n public abstract getDefaultOptions(): T;\n public abstract detect(point: Point, margin: number): T | undefined;\n public destroy() {\n this.ogma.events.off(this._onClickMouseMove).off(this._onKeyUp);\n this.layer.destroy();\n }\n}\n","import Ogma, { Point } from '@linkurious/ogma';\nimport Vector2 from 'vector2js';\nimport { createArrow, defaultOptions, defaultStyle } from './defaults';\nimport drawArrow, { getArrowHeight } from './render';\nimport { EVT_DRAG, EVT_DRAG_END, EVT_DRAG_START, NONE } from '../../constants';\nimport { Arrow, ControllerOptions } from '../../types';\nimport {\n createSVGElement,\n getArrowEnd,\n getArrowEndPoints,\n getArrowStart,\n getHandleId,\n setArrowEnd,\n setArrowStart\n} from '../../utils';\nimport Editor from '../base';\n\nconst HANDLE_LINE = 'handle-line';\nconst HANDLE_START = 'handle-start';\nconst HANDLE_END = 'handle-end';\n\n/**\n * @class Arrows\n * Draw and edit arrows\n */\nexport class Arrows extends Editor<Arrow> {\n // active handle id\n private draggedHandle = NONE;\n private start: Point = { x: 0, y: 0 };\n private end: Point = { x: 0, y: 0 };\n private arrow: Arrow = { ...defaultOptions };\n private startX = 0;\n private startY = 0;\n private minArrowHeight = 0;\n private maxArrowHeight = 0;\n private handles: HTMLDivElement[] = [];\n\n constructor(\n ogma: Ogma,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options: Pick<\n Partial<ControllerOptions>,\n 'arrowHandleSize' | 'maxArrowHeight' | 'minArrowHeight'\n > = {}\n ) {\n super(\n ogma,\n `\n <div class=\"arrow-handle\">\n <div id=\"${HANDLE_LINE}\" data-handle-id=\"0\" class=\"handle line\"></div>\n <div id=\"${HANDLE_START}\" data-handle-id=\"1\" class=\"handle\"></div>\n <div id=\"${HANDLE_END}\" data-handle-id=\"2\" class=\"handle\"></div>\n </div>\n `\n );\n\n this.minArrowHeight = options.minArrowHeight || 0;\n this.maxArrowHeight = options.maxArrowHeight || 1e6;\n\n this.handles = Array.prototype.slice.call(\n this.editor.element.querySelectorAll('.arrow-handle>.handle')\n );\n\n // events to move/resize\n this.handles.forEach((handle: HTMLDivElement) =>\n handle.addEventListener('mousedown', this.onHandleMouseDown)\n );\n document.addEventListener('mousemove', this.onMouseMove, true);\n document.addEventListener('mouseup', this.onMouseUp);\n }\n\n private onHandleMouseDown = (evt: MouseEvent) => {\n const res = this.getById(this.selectedId) || this.getById(this.hoveredId);\n if (!res) return;\n\n this.startDragging(res, evt.clientX, evt.clientY);\n this.draggedHandle = getHandleId(evt.target as HTMLDivElement);\n };\n\n /**\n * Start drawing a new arrow, it will also be added as a new annotation\n * @param x\n * @param y\n * @param arrow\n */\n public startDrawing(\n x: number,\n y: number,\n arrow: Arrow = createArrow(x, y, x, y, defaultStyle)\n ) {\n this.add(arrow);\n this.hoveredId = arrow.id;\n const pos = this.ogma.view.graphToScreenCoordinates({ x, y });\n const bb = this.ogma.getContainer()?.getBoundingClientRect() || { left: 0, top: 0 };\n this.startDragging(this.getById(arrow.id), pos.x + bb?.left, pos.y + bb.top);\n this.draggedHandle = 2;\n }\n\n public cancelDrawing(): void {\n if (!this.isDragging) return;\n this.remove(this.arrow.id);\n this.emit(EVT_DRAG_END, this.arrow);\n this.restoreDragging();\n this.isDragging = false;\n this.draggedHandle = NONE;\n }\n\n private startDragging(arrow: Arrow, x: number, y: number) {\n // element could be just hovered at that point, select it\n if (this.selectedId !== arrow.id) this.select(this.hoveredId);\n this.arrow = arrow;\n // remember drag start point and arrow ends poisitions\n this.startX = x;\n this.startY = y;\n\n this.start = getArrowStart(this.arrow);\n this.end = getArrowEnd(this.arrow);\n\n this.disableDragging();\n this.emit(EVT_DRAG_START, this.arrow);\n this.isDragging = true;\n }\n\n private onMouseUp = () => {\n if (this.draggedHandle === -1) return;\n this.restoreDragging();\n this.isDragging = false;\n this.draggedHandle = NONE;\n this.emit(EVT_DRAG_END, this.arrow);\n };\n\n private onMouseMove = (evt: MouseEvent) => {\n if (!this.isDragging || this.draggedHandle === NONE) return;\n\n const handle = this.handles[this.draggedHandle];\n const zoom = this.ogma.view.getZoom();\n const dx = (evt.clientX - this.startX) / zoom;\n const dy = (evt.clientY - this.startY) / zoom;\n\n const isLine = handle.id === HANDLE_LINE;\n const isStart = handle.id === HANDLE_START;\n const isEnd = handle.id === HANDLE_END;\n\n if (isLine || isStart)\n setArrowStart(this.arrow, this.start.x + dx, this.start.y + dy);\n if (isLine || isEnd)\n setArrowEnd(this.arrow, this.end.x + dx, this.end.y + dy);\n\n this.emit(\n EVT_DRAG,\n this.arrow,\n isLine ? 'line' : isStart ? 'start' : 'end'\n );\n this.refreshEditor();\n this.layer.refresh();\n };\n\n public detect(point: Point, margin = 0): Arrow | undefined {\n return this.elements.find((a) => {\n const { start, end } = getArrowEndPoints(a);\n // p is the vector from mouse pointer to the center of the arrow\n const p = new Vector2(point.x, point.y).sub(\n new Vector2((start.x + end.x) / 2, (start.y + end.y) / 2)\n );\n const vec = new Vector2(end.x, end.y).sub(new Vector2(start.x, start.y));\n const width = vec.length();\n const vecN = vec.normalize();\n const height = getArrowHeight(a);\n // check if the cursor is within the bounds of the bounding rectangle\n // of the arrow extended by margin\n return (\n Math.abs(vecN.dot(p)) < width / 2 + margin &&\n Math.abs(vecN.rotateRadians(Math.PI / 2).dot(p)) < height / 2 + margin\n );\n });\n }\n\n public refreshEditor() {\n if (+this.selectedId < 0 && +this.hoveredId < 0) return;\n const arrow =\n this.selectedId !== NONE\n ? this.getById(this.selectedId)\n : this.getById(this.hoveredId);\n const extremities = getArrowEndPoints(arrow);\n const start = this.ogma.view.graphToScreenCoordinates(extremities.start);\n const end = this.ogma.view.graphToScreenCoordinates(extremities.end);\n const scale = Math.min(this.ogma.view.getZoom(), this.maxHandleScale);\n const [lineH, startH, endH] = Array.prototype.slice.call(\n this.editor.element.querySelectorAll('.handle')\n ) as HTMLDivElement[];\n\n startH.style.transform = `translate(${start.x}px, ${start.y}px) translate(-50%, -50%) scale(${scale})`;\n endH.style.transform = `translate(${end.x}px, ${end.y}px) translate(-50%, -50%) scale(${scale}`;\n\n const middle = {\n x: (end.x + start.x) / 2,\n y: (end.y + start.y) / 2\n };\n\n const v = new Vector2(end.x - start.x, end.y - start.y);\n const vn = v.mul(1 / v.length());\n const angle = Math.atan2(vn.y, vn.x);\n\n lineH.style.width = `${v.length()}px`;\n lineH.style.left = `${middle.x}px`;\n lineH.style.top = `${middle.y}px`;\n lineH.style.transform = `translate(-50%, -50%) rotate(${angle}rad)`;\n }\n public getDefaultOptions(): Arrow {\n return defaultOptions;\n }\n public draw(svg: SVGSVGElement): void {\n svg.innerHTML = '';\n const g = createSVGElement<SVGGElement>('g');\n this.elements.forEach((a) =>\n drawArrow(a, g, defaultStyle, this.minArrowHeight, this.maxArrowHeight)\n );\n svg.appendChild(g);\n }\n\n public destroy(): void {\n super.destroy();\n document.removeEventListener('mousemove', this.onMouseMove, true);\n document.removeEventListener('mouseup', this.onMouseUp);\n }\n}\n\nexport {\n defaultOptions as defaultArrowOptions,\n defaultStyle as defaultArrowStyle,\n createArrow\n};\n","import { nanoid as getId } from 'nanoid';\nimport { AnnotationOptions, Text, TextStyle } from '../../types';\n\nexport const defaultStyle: TextStyle = {\n font: 'sans-serif',\n fontSize: '12',\n color: 'black',\n background: '',\n strokeWidth: 1,\n strokeColor: '#000',\n strokeType: 'plain'\n};\n\n//used when adding a new Text\nexport const defaultOptions: Text = {\n id: 0,\n type: 'Feature',\n properties: {\n type: 'text',\n content: '',\n style: { ...defaultStyle }\n },\n geometry: {\n type: 'Polygon',\n coordinates: [\n [\n [0, 0],\n [100, 0],\n [100, 50],\n [0, 50],\n [0, 0]\n ]\n ]\n }\n // position: { x: 0, y: 0 },\n // size: { width: 100, height: 50 }\n};\n\nexport const defaultControllerOptions: AnnotationOptions = {\n handleSize: 3.5,\n placeholder: 'Your text...'\n};\n\nexport const createText = (\n x = 0,\n y = 0,\n width = 100,\n height = 50,\n content = '',\n styles: Partial<TextStyle> = { ...defaultStyle }\n): Text => ({\n id: getId(),\n type: 'Feature',\n properties: {\n type: 'text',\n content,\n style: { ...defaultStyle, ...styles }\n },\n geometry: {\n type: 'Polygon',\n coordinates: [\n [\n [x, y],\n [x + width, y],\n [x + width, y + height],\n [x, y + height],\n [x, y]\n ]\n ]\n }\n});\n","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.Textbox=e():t.Textbox=e()}(this,(()=>(()=>{\"use strict\";var t={d:(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},e={};function r(t){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},r(t)}t.d(e,{default:()=>_t});var n=/^((?:[a-z\\d-]+\\s+)*)([\\d.]+(%|em|px)|(?:x+-)?large|(?:x+-)?small|medium)(?:\\s*\\/\\s*(normal|[\\d.]+(%|px|em)?))?(\\s.+)?$/,i=/\\bsmall-caps\\b/,o=/\\b(?:italic|oblique)\\b/,a=/\\bbold(?:er)?\\b/,l=13.3333333,s={\"xx-small\":9,\"x-small\":10,smaller:13.3333,small:13,medium:16,large:18,larger:19.2,\"x-large\":24,\"xx-large\":32};function u(t){var e=\"\",r=this;return r.style&&\"normal\"!==r.style&&(e+=r.style),r.variant&&\"normal\"!==r.variant&&(e+=(e?\" \":\"\")+r.variant),r.weight&&\"normal\"!==r.weight&&(e+=(e?\" \":\"\")+r.weight),r.size&&(e+=(e?\" \":\"\")+r.size+\"px\",r.height!==r.size&&(e+=\"/\"+r.height+\"px\")),r.family&&(e+=(e?\" \":\"\")+r.family),t&&(e+=\"::\"+r.baseline),t&&(e+=\"::\"+r.color),e}var c={id:\"\",family:\"sans-serif\",height:14,size:12,variant:\"\",style:\"\",weight:\"\",baseline:\"\",color:null,toString:u,valueOf:u};function f(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.exec(t);e.family=(r[6]||\"\").trim();var u=s[r[2]]||parseFloat(r[2]);\"%\"===r[3]?u*=.16:\"em\"===r[3]?u*=16:\"pt\"===r[3]&&(u*=l),e.size=u;var c=parseFloat(r[4]);if(\"normal\"!==c&&\"inherit\"!==c&&c?r[5]&&\"em\"!==r[5]?\"pt\"===r[5]?e.height=c*l:\"%\"===r[5]?e.height=.01*u:e.height=c:e.height=c*u:e.height=Math.round(u*(7/6)),i.test(r[1])&&(e.variant=\"small-caps\"),o.test(r[1])&&(e.style=\"italic\"),a.test(r[1]))e.weight=\"bold\";else{var f=parseInt(/\\b(\\d+)\\b/.exec(r[1]),10);f>=100&&400!==f&&(e.weight=f)}return e}function h(){var t,e,n,i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"12px/14px sans-serif\",o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=14,l=12,s=null,h=null,p=\"\";if(i&&i.nodeType){var g=i&&(i.ownerDocument&&i.ownerDocument.defaultView||i.document&&i||i.defaultView),d=g.getComputedStyle(i,null);t=d.getPropertyValue(\"font-family\")||\"\",l=parseFloat(d.getPropertyValue(\"font-size\")),a=d.getPropertyValue(\"line-height\"),s=d.getPropertyValue(\"font-weight\"),h=d.getPropertyValue(\"font-style\"),p=d.getPropertyValue(\"font-variant\")||\"\"}else if(\"string\"==typeof i){var v=f(i);t=v.family,l=v.size,a=v.height,p=v.variant,h=v.style,s=v.weight}else\"object\"===r(i)&&(t=i.family,l=i.size,a=i.height,p=i.variant,s=i.weight,h=i.style,e=i.baseline,n=i.color);o.size&&o.size<3&&(l*=o.size),a=\"normal\"!==a&&a?parseFloat(a):l*(7/6),o.height&&o.height<3&&(a*=o.height);var m=Object.create(c);return m.family=o.family||t||\"sans-serif\",m.height=null==a?14:a,m.size=null==l?12:l,m.variant=o.variant||p||\"\",m.style=o.style||h||\"\",m.weight=o.weight||s||\"\",m.baseline=e||0,null!=o.baseline&&(m.baseline=o.baseline),m.color=o.color||n||\"\",m.id=u.call(m,!0),m}const p={\"\\n\":.28,\"\\r\":.28,\" \":.28,\" \":.28,\" \":.28,\"\":0,\" \":.5,\" \":1,\" \":.5,\" \":1,\" \":.33,\" \":.25,\" \":.16,\" \":.56,\" \":.28,\" \":.2,\" \":.15,\"\":0,\" \":.16,\" \":.22,\" \":1,\"\\ufeff\":0};var g,d=function(t){var e=\"undefined\"!=typeof OffscreenCanvas&&new OffscreenCanvas(100,100)||t&&t.createElement(\"canvas\");if(e&&e.getContext){var r=e.getContext(\"2d\");if(r&&\"function\"==typeof r.measureText)return function(t,e){return r.font=String(e),r.measureText(t).width}}}(\"undefined\"!=typeof document?document:null)||(g={},function(t,e){if(!g[e]){var r=h(e);g[e]=r,/\\bmonospace\\b/.test(r.family)?r.size*=.6:(r.size*=.45,r.weight&&(r.size*=1.18))}return t.length*g[e].size}),v={},m={trim:!0,collapse:!0};function y(t,e,r){var n=Object.assign({},m,r),i=String(t);if(!i)return 0;if(i in p){var o=e.id+\"/\"+i;return o in v||(v[o]=d(\"_\".concat(i,\"_\"),e)-d(\"__\",e)),v[o]}return n.trim&&n.collapse?n.trim?i=i.trim():n.collapse&&(i=i.replace(/\\s+/g,\" \")):i=i.replace(/\\n/g,\" \"),d(i,e)+e.size*(t.tracking||0)}function b(t){return b=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},b(t)}function w(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,\"prototype\",{writable:!1}),e&&x(t,e)}function x(t,e){return x=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},x(t,e)}function S(t){var e=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var r,n=k(t);if(e){var i=k(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return A(this,r)}}function A(t,e){if(e&&(\"object\"===b(e)||\"function\"==typeof e))return e;if(void 0!==e)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}(t)}function k(t){return k=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},k(t)}function E(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function O(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,(void 0,i=function(t,e){if(\"object\"!==b(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e);if(\"object\"!==b(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(n.key,\"string\"),\"symbol\"===b(i)?i:String(i)),n)}var i}function j(t,e,r){return e&&O(t.prototype,e),r&&O(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),t}var z=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\";E(this,t),this.value=e,this.weight=null,this.style=null,this.font=null,this.href=null,this.sub=!1,this.sup=!1}return j(t,[{key:\"clone\",value:function(){var e=new t(this.value);return e.value=this.value,e.weight=this.weight,e.style=this.style,e.font=this.font,e.href=this.href,e.sub=this.sub,e.sup=this.sup,e}},{key:\"valueOf\",value:function(){return this.value}},{key:\"toString\",value:function(){return this.value}}]),t}(),P=function(t){w(r,t);var e=S(r);function r(){return E(this,r),e.apply(this,arguments)}return j(r)}(z),T=function(t){w(r,t);var e=S(r);function r(){return E(this,r),e.apply(this,arguments)}return j(r)}(z),q=function(t){w(r,t);var e=S(r);function r(){return E(this,r),e.apply(this,arguments)}return j(r)}(z),C=/^[\\n\\r\\t\\x20\\xA0\\u2000-\\u200B\\u205F\\u3000]/,_=/^[^\\n\\r\\t\\u0020\\u2000-\\u200B\\u205F\\u3000]{2,}/,F=/^[\\xA0\\u2011\\u202F\\u2060\\uFEFF]/,I=/^(?:[;\\xAD%?…]|,(?!\\d))/,L=/^[´±°¢£¤$¥\\u2212]/;function B(t,e){!1!==e&&(t=t.trim());for(var r,n,i=[],o=t.charAt(0),a=0,l=1,s=t.length;l<s;l++){r=t.charAt(l),n=t.charAt(l+1);var u=C.test(o),c=C.test(r),f=c||u,h=void 0;if((L.test(r)&&!F.test(o)||I.test(o+n)&&!F.test(r))&&(f=!0),\"-\"!==o&&\"‐\"!==o&&\"–\"!==o&&\"—\"!==o||((h=C.test(t.charAt(l-2)))&&!c&&(f=!1),!h&&_.test(r+n)&&(f=!0)),f){var p=t.slice(a,l);/\\u00AD$/.test(p)?(i.push(new z(p.slice(0,-1))),i.push(new q)):(i.push(new z(p)),i.push(new P)),a=l}o=r}return i.push(new z(t.slice(a))),i}const $={nbsp:\" \",iexcl:\"¡\",cent:\"¢\",pound:\"£\",curren:\"¤\",yen:\"¥\",brvbar:\"¦\",sect:\"§\",uml:\"¨\",copy:\"©\",ordf:\"ª\",laquo:\"«\",not:\"¬\",shy:\"\",reg:\"®\",macr:\"¯\",deg:\"°\",plusmn:\"±\",sup2:\"²\",sup3:\"³\",acute:\"´\",micro:\"µ\",para:\"¶\",middot:\"·\",cedil:\"¸\",sup1:\"¹\",ordm:\"º\",raquo:\"»\",frac14:\"¼\",frac12:\"½\",frac34:\"¾\",iquest:\"¿\",Agrave:\"À\",Aacute:\"Á\",Acirc:\"Â\",Atilde:\"Ã\",Auml:\"Ä\",Aring:\"Å\",AElig:\"Æ\",Ccedil:\"Ç\",Egrave:\"È\",Eacute:\"É\",Ecirc:\"Ê\",Euml:\"Ë\",Igrave:\"Ì\",Iacute:\"Í\",Icirc:\"Î\",Iuml:\"Ï\",ETH:\"Ð\",Ntilde:\"Ñ\",Ograve:\"Ò\",Oacute:\"Ó\",Ocirc:\"Ô\",Otilde:\"Õ\",Ouml:\"Ö\",times:\"×\",Oslash:\"Ø\",Ugrave:\"Ù\",Uacute:\"Ú\",Ucirc:\"Û\",Uuml:\"Ü\",Yacute:\"Ý\",THORN:\"Þ\",szlig:\"ß\",agrave:\"à\",aacute:\"á\",acirc:\"â\",atilde:\"ã\",auml:\"ä\",aring:\"å\",aelig:\"æ\",ccedil:\"ç\",egrave:\"è\",eacute:\"é\",ecirc:\"ê\",euml:\"ë\",igrave:\"ì\",iacute:\"í\",icirc:\"î\",iuml:\"ï\",eth:\"ð\",ntilde:\"ñ\",ograve:\"ò\",oacute:\"ó\",ocirc:\"ô\",otilde:\"õ\",ouml:\"ö\",divide:\"÷\",oslash:\"ø\",ugrave:\"ù\",uacute:\"ú\",ucirc:\"û\",uuml:\"ü\",yacute:\"ý\",thorn:\"þ\",yuml:\"ÿ\",fnof:\"ƒ\",Alpha:\"Α\",Beta:\"Β\",Gamma:\"Γ\",Delta:\"Δ\",Epsilon:\"Ε\",Zeta:\"Ζ\",Eta:\"Η\",Theta:\"Θ\",Iota:\"Ι\",Kappa:\"Κ\",Lambda:\"Λ\",Mu:\"Μ\",Nu:\"Ν\",Xi:\"Ξ\",Omicron:\"Ο\",Pi:\"Π\",Rho:\"Ρ\",Sigma:\"Σ\",Tau:\"Τ\",Upsilon:\"Υ\",Phi:\"Φ\",Chi:\"Χ\",Psi:\"Ψ\",Omega:\"Ω\",alpha:\"α\",beta:\"β\",gamma:\"γ\",delta:\"δ\",epsilon:\"ε\",zeta:\"ζ\",eta:\"η\",theta:\"θ\",iota:\"ι\",kappa:\"κ\",lambda:\"λ\",mu:\"μ\",nu:\"ν\",xi:\"ξ\",omicron:\"ο\",pi:\"π\",rho:\"ρ\",sigmaf:\"ς\",sigma:\"σ\",tau:\"τ\",upsilon:\"υ\",phi:\"φ\",chi:\"χ\",psi:\"ψ\",omega:\"ω\",thetasym:\"ϑ\",upsih:\"ϒ\",piv:\"ϖ\",bull:\"•\",hellip:\"…\",prime:\"′\",Prime:\"″\",oline:\"‾\",frasl:\"⁄\",weierp:\"℘\",image:\"ℑ\",real:\"ℜ\",trade:\"™\",alefsym:\"ℵ\",larr:\"←\",uarr:\"↑\",rarr:\"→\",darr:\"↓\",harr:\"↔\",crarr:\"↵\",lArr:\"⇐\",uArr:\"⇑\",rArr:\"⇒\",dArr:\"⇓\",hArr:\"⇔\",forall:\"∀\",part:\"∂\",exist:\"∃\",empty:\"∅\",nabla:\"∇\",isin:\"∈\",notin:\"∉\",ni:\"∋\",prod:\"∏\",sum:\"∑\",minus:\"−\",lowast:\"∗\",radic:\"√\",prop:\"∝\",infin:\"∞\",ang:\"∠\",and:\"⊥\",or:\"⊦\",cap:\"∩\",cup:\"∪\",int:\"∫\",there4:\"∴\",sim:\"∼\",cong:\"≅\",asymp:\"≈\",ne:\"≠\",equiv:\"≡\",le:\"≤\",ge:\"≥\",sub:\"⊂\",sup:\"⊃\",nsub:\"⊄\",sube:\"⊆\",supe:\"⊇\",oplus:\"⊕\",otimes:\"⊗\",perp:\"⊥\",sdot:\"⋅\",lceil:\"⌈\",rceil:\"⌉\",lfloor:\"⌊\",rfloor:\"⌋\",lang:\"〈\",rang:\"〉\",loz:\"◊\",spades:\"♠\",clubs:\"♣\",hearts:\"♥\",diams:\"♦\",quot:'\"',amp:\"&\",lt:\"<\",gt:\">\",OElig:\"Œ\",oelig:\"œ\",Scaron:\"Š\",scaron:\"š\",Yuml:\"Ÿ\",circ:\"ˆ\",tilde:\"˜\",ensp:\" \",emsp:\" \",thinsp:\" \",zwnj:\"\",zwj:\"\",lrm:\"\",rlm:\"\",ndash:\"–\",mdash:\"—\",lsquo:\"‘\",rsquo:\"’\",sbquo:\"‚\",ldquo:\"“\",rdquo:\"”\",bdquo:\"„\",dagger:\"†\",Dagger:\"‡\",permil:\"‰\",lsaquo:\"‹\",rsaquo:\"›\"};var D=/^[\\n\\r\\x20\\u2000-\\u200B\\u205F\\u3000]/,R=/^<\\/([a-zA-Z0-9]+)([^>]*)>/,U=/^<([a-zA-Z0-9]+)((?:\\s[^=\\s/]+(?:\\s*=\\s*(?:\"[^\"]+\"|'[^']+'|[^>\\\\s]+))?)+)?\\s*(\\/?)>(\\n*)/,M=/^<!--(.+?)-->/,N=/&(?:#(\\d\\d{2,})|#x([\\da-fA-F]{2,})|([a-zA-Z][a-zA-Z1-4]{1,8}));/g,V={b:function(t){t.weight=\"bold\"},strong:function(t){t.weight=\"bold\"},i:function(t){t.style=\"italic\"},em:function(t){t.style=\"italic\"},dfn:function(t){t.style=\"italic\"},cite:function(t){t.style=\"italic\"},code:function(t){t.family=\"monospace\"},kbd:function(t){t.family=\"monospace\"},samp:function(t){t.family=\"monospace\"},var:function(t){t.family=\"monospace\"},tt:function(t){t.family=\"monospace\"},sub:function(t){t.sub=!0},sup:function(t){t.sup=!0}},Z={div:1,li:1,blockquote:2,h1:2,h2:2,h3:2,h4:2,h5:2,h6:2,ul:2,ol:2,hr:2,p:2};function W(t){return t.replace(N,(function(t,e,r,n){if(e||r){var i=e?10:16;return String.fromCharCode(parseInt(e||r,i))}return n in $?$[n]:t}))}function H(t){if(t&&t.length>1){if('\"'===t[0]&&'\"'===t[t.length-1])return t.slice(1,-1);if(\"'\"===t[0]&&\"'\"===t[t.length-1])return t.slice(1,-1)}return t}var X=/^\\s*([^=\\s&]+)(?:\\s*=\\s*(\"[^\"]+\"|'[^']+'|[^>\\s]+))?/;function G(t){var e,r={};if(t){do{if(e=X.exec(t)){var n=W(H(e[2]||\"\")).replace(/[ \\r\\n\\t]+/g,\" \").trim();if(r[e[1]]=n,(t=t.slice(e[0].length)).length&&/^\\S/.test(t[0]))throw new Error(\"Attribute error\")}}while(e&&t.length);if(/\\S/.test(t))throw new Error(\"Attribute error\")}return r}const J={copyright:\"©\",textcopyright:\"©\",dag:\"†\",textdagger:\"†\",ddag:\"‡\",textdaggerdbl:\"‡\",guillemotleft:\"«\",guillemotright:\"»\",guilsinglleft:\"‹\",guilsinglright:\"›\",ldots:\"…\",dots:\"…\",textellipsis:\"…\",lq:\"‘\",P:\"¶\",textparagraph:\"¶\",pounds:\"£\",textsterling:\"£\",quotedblbase:\"„\",quotesinglbase:\"‚\",rq:\"’\",S:\"§\",sim:\"~\",textasciicircum:\"^\",textasciitilde:\"˜\",texttildelow:\"~\",textasteriskcentered:\"*\",textbackslash:\"'\",textbar:\"|\",textbardbl:\"╎\",textbigcircle:\"◯\",textbraceleft:\"{\",textbraceright:\"}\",textbullet:\"•\",textdollar:\"$\",textemdash:\"—\",textendash:\"—\",texteuro:\"€\",eurosym:\"€\",euro:\"€\",textexclamdown:\"¡\",textgreater:\">\",textless:\"<\",textordfeminine:\"ª\",textordmasculine:\"º\",textperiodcentered:\"·\",cdot:\"·\",textquestiondown:\"¿\",textquotedblleft:\"“\",textquotedblright:\"”\",textquoteleft:\"‘\",textquoteright:\"’\",textquotestraightbase:\"‚\",textquotestraightdblbase:\"„\",textregistered:\"®\",textthreequartersemdash:\"-\",texttrademark:\"™\",texttwelveudash:\"-\",textunderscore:\"_\",textvisiblespace:\"␣\",gets:\"←\",textleftarrow:\"←\",to:\"→\",textrightarrow:\"→\",textdegree:\"°\",infty:\"∞\",triangle:\"△\",triangledown:\"▽\",blacktriangle:\"▲\",blacktriangledown:\"▼\",angle:\"∠\",sphericalangle:\"∢\",aleph:\"ℵ\",hbar:\"ħ\",imath:\"𝚤\",jmath:\"𝚥\",ell:\"ℓ\",wp:\"℘\",Re:\"ℜ\",Im:\"ℑ\",mho:\"℧\",prime:\"′\",emptyset:\"∅\",nabla:\"∇\",surd:\"√\",partial:\"∂\",top:\"⟙\",bot:\"⟂\",vdash:\"⟝\",dashv:\"⟞\",forall:\"∀\",exists:\"∃\",nexists:\"∄\",neg:\"¬\",lnot:\"¬\",flat:\"♭\",natural:\"♮\",sharp:\"♯\",backslash:\"\\\\\",Box:\"□\",Diamond:\"♢\",clubsuit:\"♣\",diamondsuit:\"♦\",heartsuit:\"♥\",spadesuit:\"♠\",Join:\"⨝\",blacksquare:\"■\",bigstar:\"★\",diagdown:\"╲\",diagup:\"╱\",blacklozenge:\"⧫\",rfloor:\"⌋\",lfloor:\"⌊\",rceil:\"⌉\",lceil:\"⌈\",rangle:\"⟩\",langle:\"⟨\",sum:\"∑\",int:\"∫\",oint:\"∮\",prod:\"∏\",coprod:\"∏\",bigcap:\"∩\",bigcup:\"∪\",bigsqcup:\"⊔\",bigvee:\"∨\",bigwedge:\"∧\",bigodot:\"⊙\",bigotimes:\"⊗\",bigoplus:\"⊕\",biguplus:\"⊎\",alpha:\"α\",beta:\"β\",chi:\"χ\",delta:\"δ\",epsilon:\"ε\",eta:\"η\",gamma:\"γ\",iota:\"ι\",kappa:\"κ\",lambda:\"λ\",mu:\"μ\",nu:\"ν\",omega:\"ω\",phi:\"φ\",pi:\"π\",psi:\"ψ\",rho:\"ρ\",sigma:\"σ\",tau:\"τ\",theta:\"θ\",upsilon:\"υ\",xi:\"ξ\",zeta:\"ζ\",Alpha:\"Α\",Beta:\"Β\",Chi:\"Χ\",Delta:\"Δ\",Epsilon:\"Ε\",Eta:\"Η\",Gamma:\"Γ\",Iota:\"Ι\",Kappa:\"Κ\",Lambda:\"Λ\",Mu:\"Μ\",Nu:\"Ν\",Omega:\"Ω\",Phi:\"Φ\",Pi:\"Π\",Psi:\"Ψ\",Rho:\"Ρ\",Sigma:\"Σ\",Tau:\"Τ\",Theta:\"Θ\",Upsilon:\"Υ\",Xi:\"Ξ\",Zeta:\"Ζ\",aa:\"å\",AA:\"Å\",ae:\"æ\",AE:\"Æ\",dh:\"ð\",DH:\"Ð\",dj:\"đ\",DJ:\"Đ\",ij:\"ij\",IJ:\"IJ\",l:\"ł\",L:\"Ł\",ng:\"ŋ\",NG:\"Ŋ\",o:\"ø\",O:\"Ø\",oe:\"œ\",OE:\"Œ\",ss:\"ß\",SS:\"SS\",th:\"þ\",TH:\"Þ\"};var K=/^(\\^|_|\\\\[^#$%&~_^\\\\{}()\\s]+)(\\{)?/,Y=/^%[^\\n]+(?:\\n|$)/,Q=/^[^#$%&~_^\\\\{}]+/,tt=/^\\\\([&{}$%#_])/,et=/(?:\\\\[\\\\@,!:;-]|-{2,3}|[!?]`|``?|,,|''?|~|<<|>>)/g,rt={\"---\":\"—\",\"--\":\"–\",\"!`\":\"¡\",\"?`\":\"¿\",\"``\":\"“\",\",,\":\"„\",\"''\":\"”\",\"`\":\"‘\",\"'\":\"’\",\"<<\":\"«\",\">>\":\"»\",\"~\":\" \",\"\\\\-\":\"\",\"\\\\,\":\" \",\"\\\\;\":\" \",\"\\\\:\":\" \",\"\\\\!\":\" \",\"\\\\@\":\"\\ufeff\",\"\\\\\\\\\":\"\\\\newline{}\"},nt={bf:function(t){t.weight=\"bold\"},it:function(t){t.style=\"italic\"},sl:function(t){t.style=\"italic\"},color:function(t,e){t.color=e},href:function(t,e){t.href=e},\"^\":function(t){t.sup=!0},_:function(t){t.sub=!0},par:function(t){this.tokens.push(new T,new T)},newline:function(t){this.tokens.push(new T)},url:function(t,e){this.open_context().href=e,this.add_token(new z(e)),this.close_context()}};nt.textsuperscript=nt[\"^\"],nt.textsubscript=nt._,nt.textsl=nt.sl,nt.mathbf=nt.bf,nt.mathit=nt.it,nt.textbf=nt.bf,nt.textit=nt.it,nt.textcolor=nt.color;var it=/[\\r\\n\\xA0]+/g;function ot(t,e){t.sup&&(t.baseline=.45,t.size=.7),t.sub&&(t.baseline=-.3,t.size=.7);var r=e;return(t.style||t.weight||t.baseline||t.color||t.size||t.family)&&(r=h(e,t)),r}function at(t,e,r){for(var n,i,o=t.width;o+r.width>e&&t.length;)i=(n=t[t.length-1]).width,n.width>r.width?(n.value=n.value.slice(0,-1),n.width=y(n,n.font),o+=n.width):t.pop(),o-=i;t[t.length-1]instanceof q&&t.pop(),n=t[t.length-1]||n||{},r.font=h(r.font,n.bold,n.italic,\"\"),r.href=t.length?n.href:null,r.rel=t.length?n.rel:null,r.target=t.length?n.target:null,t.push(r)}function lt(t){return Math.round(1e6*t)/1e6}function st(t){return function(t){if(Array.isArray(t))return ut(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(t)||function(t,e){if(t){if(\"string\"==typeof t)return ut(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===r&&t.constructor&&(r=t.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(t):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?ut(t,e):void 0}}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function ut(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}var ct={center:\"middle\",right:\"end\"},ft={middle:.5,center:.5,bottom:1,end:1},ht=function(t,e){return!t&&!e||t===e};function pt(t,e){var r=[],n=e.font(),i=n.size,o=n.family,a=e.align(),l=e.createElement();if(t.length){var s=n.height,u=e.valign(),c=e.height()(),f=e.width()(0),h=!isFinite(f)&&1===t.length,p=h?null:e.x(),g=lt(s/i),d=h?null:lt(s/(1.15*i+(s-i)/2));if(ft[u]&&isFinite(c)){var v=\"bottom\"===u?1:.5;d+=(c*v-s*t.length*v)/i}var m=\"justify\"===a,y=0;\"right\"===a?y=f:\"center\"===a&&(y=f/2);for(var b=[],w=\"tspan\",x=null,S=\"\",A=function(){if(S){var t=l(w,x,S);b.push(t)}w=\"tspan\",x=null,S=\"\"},k=0,E=t.length;k<E;k++){var O=\"\",j=\"\",z=0,P=t[k];if(P.length){b=[];for(var q=0,C=0,_=void 0,F=0,I=P.length;F<I;F++){var L=P[F],B=L.font;L.whitespace&&q++,C+=L.width,F&&!L.tracking&&!z&&ht(B.id,O)&&ht(L.class,j)&&ht(_,L.href)?S+=L.value:(A(),S=L.value,x={fontFamily:B.family!==o?B.family:null,fontSize:B.size!==i?B.size:null,fontWeight:B.weight||null,fontStyle:B.style||null,fontVariant:\"normal\"!==B.variant&&B.variant||null,fill:B.color||null,baselineShift:B.baseline?100*B.baseline+\"%\":null,className:L.class||null},z&&(x.dx=lt(z),z=0),L.tracking&&(z=B.size*L.tracking),L.href&&!_?(_=L.href,w=\"a\",x.href=_,x.rel=L.rel,x.target=L.target):_=null,O=B.id,j=L.class)}if(A(),h)r.push.apply(r,st(b));else{var $=null,D=k===E-1||P[P.length-1]instanceof T;m&&P.length>1&&!D&&($=lt((f-C)/q)),r.push(l.apply(void 0,[\"tspan\",{wordSpacing:$,x:p(k)+y,dy:lt(k?g:d)+\"em\"}].concat(st(b))))}}else r.push(l(\"tspan\",{x:p(k),dy:lt(k?g:d)+\"em\"},\" \"))}}return l.apply(void 0,[\"text\",{fontFamily:o,fontSize:i,textAnchor:ct[a]||\"start\"}].concat(r))}var gt={middle:.5,center:.5,bottom:1,end:1};function dt(t,e,r){if(t.length){r.textBaseline=\"middle\";var n=e.font(),i=n.height,o=n.size,a=e.valign(),l=e.height()(),s=e.width()(0),u=e.align(),c=\"justify\"===u,f=.5*i,h=gt[a];if(h&&isFinite(l)){var p=t.length*i;f+=l*h-p*h}t.forEach((function(n,a){var l=e.x()(a),h=a*i+f,p=0,g=0;n.forEach((function(t){t.whitespace&&p++,g+=t.width}));var d=0,v=a===t.length-1||n[n.length-1]instanceof T;c&&n.length>1&&!v&&(d=(s-g)/p),n.forEach((function(t){r.font=t.font;var e=t.font,n=e.baseline?o*-e.baseline+.15*o:0;r.fillStyle=function(t,e){return t.color?t.color:e.href?\"#00C\":\"#000\"}(e,t);var i=0;if(\"right\"===u?i+=s-g:\"center\"===u?i+=s/2-g/2:\"justify\"===u&&(t.whitespace||t instanceof T)&&(l+=d),r.fillText(t.value,l+i,h+n),t.href){r.beginPath(),r.strokeStyle=r.fillStyle;var a=Math.floor(h+.45*o)+.5;r.moveTo(l+i,a),r.lineTo(l+i+t.width,a),r.stroke()}l+=t.width}))}))}}function vt(t){return vt=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},vt(t)}function mt(t){for(var e={},r=0;r<t.length;r++){var n=t[r];\"number\"!=typeof n&&null!=n&&(\"string\"==typeof n?e.text=n:\"function\"==typeof n?e.fn=n:\"object\"===vt(n)&&n._groups?e.d3=n:n&&n.nodeType&&n.getContext?e.ctx=n.getContext(\"2d\"):n&&n.fillText&&n.beginPath?e.ctx=n:n&&(e.text=n))}return e}function yt(t){return yt=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},yt(t)}function bt(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,(void 0,i=function(t,e){if(\"object\"!==yt(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e);if(\"object\"!==yt(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(n.key,\"string\"),\"symbol\"===yt(i)?i:String(i)),n)}var i}var wt=h(),xt=function(t){return\"function\"==typeof t?t:function(){return t}},St=function(){function t(e){if(function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.props={overflow:\"ellipsis\",lineclamp:null,align:\"left\",wordBreak:null,valign:\"top\",width:function(){return 1/0},height:function(){return 1/0},x:function(){return 0},font:null,tAnchor:0,parser:t.defaultparser},e)for(var r in e)\"function\"==typeof this[r]&&this[r](e[r])}var e,r;return e=t,r=[{key:\"linebreak\",value:function(t){var e=this,r=this.props.parser(String(t)),n=this.font(),i=function(t,e,r){if(!t.length)return[];var n=e.height(),i=e.width(),o=e.overflowLine(),a=e.overflowWrap(),l=h(r,!0,!1),s=isFinite(n())?Math.floor(n()/r.height):1/0;if(!n()&&!i(0)||!s)return[];for(var u=0,c=0,f=0,g=[],d=[],v=!1;u<t.length&&c<s;){var m=t[u],b=ot(m,r);if(m.width=y(m,b),m.font=b,m.line=c,m.whitespace=m.value in p,m.value&&(m.value=m.value.replace(it,\" \")),!f&&m.whitespace||v&&m.whitespace);else if(m instanceof T)f=0,d=[],g.push(u+1),c++;else if(m instanceof P||m instanceof q)d.push({index:u,width:f});else if(m.whitespace||f+m.width<i(c))f+=m.width;else if(d.length){var w=void 0,x=void 0;do{x=!0,w=d.pop();var S=t[w.index],A=void 0;S instanceof q&&(A=y(\"-\",S.font),w.width+A>i(c)&&(x=!d.length))}while(!x);g.push(w.index+1),f=0,c++,u=w.index,d=[]}else if(\"break-word\"===a){var k=i(c);if(f+m.width>k){var E=m.clone();do{m.value=m.value.slice(0,-1),m.width=y(m,m.font),f+=m.width}while(m.value&&m.width>k);E.value=E.value.slice(m.value.length),t.splice(u+1,0,new P,E)}g.push(u+1),f=0,c++}else f+=m.width;u++,v=m.whitespace}u!==g[g.length-1]&&g.push(u);var O=0,j=0,C=g.map((function(e){for(var r,n=O;(r=t[n])&&(r.whitespace||!r.value);)n++;for(var i=e,o=null;i>n&&(r=t[i-1])&&(r.whitespace||!(r.value||r instanceof q));)r instanceof T&&(o=r),i--;r instanceof q&&(r.value=\"-\",r.width=y(\"-\",r.font)),O=e;var a=t.slice(n,i).filter((function(t){return t.value}));return o&&a.push(o),a.width=a.reduce((function(t,e){return t+e.width}),0),a.width>j&&(j=a.width),a}));if(C.hasLineOverflow=!1,o){var _=\"ellipsis\"===o?\"…\":o;C.forEach((function(t,e){var n=i(e);if(t.width>n){var o=new z(_);o.font=r,o.width=y(_,l),at(t,n,o),C.hasLineOverflow=!0}}))}var F=\"ellipsis\"===e.overflow()?\"…\":e.overflow();if(F&&u!==t.length){var I=i(C.length-1),L=C[C.length-1],B=new z(F);B.font=r,B.width=y(F,l),at(L,I,B),C.hasOverflow=!0}else C.hasOverflow=!1;return C.font=r,C.width=j,C}(r,this,n);return i.height=i.length*n.height,i.render=function(t){return e.render(i,t)},i.svg=i.render,i.draw=i.render,i}},{key:\"font\",value:function(t){return arguments.length?(this.props.font=h(t),this):this.props.font||h(wt)}},{key:\"overflow\",value:function(t){return arguments.length?(this.props.overflow=String(t),this):this.props.overflow}},{key:\"overflowLine\",value:function(t){return arguments.length?(this.props.lineclamp=String(t),this):this.props.lineclamp}},{key:\"valign\",value:function(t){return arguments.length?(this.props.valign=t,this):this.props.valign}},{key:\"align\",value:function(t){if(!arguments.length)return this.props.align;var e=String(t).toLowerCase();return\"left\"===e||\"start\"===e?(this.props.align=\"left\",this.props.tAnchor=0):\"center\"===e||\"middle\"===e?(this.props.align=\"center\",this.props.tAnchor=-.5):\"end\"===e||\"right\"===e?(this.props.align=\"right\",this.props.tAnchor=-1):\"justify\"===e&&(this.props.align=t,this.props.tAnchor=0),this}},{key:\"overflowWrap\",value:function(t){if(!arguments.length)return this.props.overflowWrap||\"normal\";var e=String(t).toLowerCase();return\"break-word\"===e?this.props.overflowWrap=\"break-word\":\"normal\"!==e&&null!=t||(this.props.overflowWrap=null),this}},{key:\"width\",value:function(t){return arguments.length?(this.props.width=xt(t),this):this.props.width}},{key:\"height\",value:function(t){return arguments.length?(this.props.height=xt(t),this):this.props.height}},{key:\"x\",value:function(t){return arguments.length?(this.props.x=xt(t),this):this.props.x}},{key:\"parser\",value:function(e){if(!arguments.length)return this.props.parser;if(\"string\"==typeof e){var r=t[e]||t[e+\"parser\"];\"function\"==typeof r&&(e=r)}if(\"function\"!=typeof e)throw new Error(\"Unknown parser: \"+e);return this.props.parser=e,this}},{key:\"createElement\",value:function(e){return arguments.length?(this.props.createElement=e,this):this.props.createElement||t.createElement}},{key:\"render\",value:function(){var t=mt(arguments);return\"string\"==typeof t.text&&(t.text=this.linebreak(t.text)),t.ctx?dt(t.text,this,t.ctx):pt(t.text,this)}}],r&&bt(e.prototype,r),Object.defineProperty(e,\"prototype\",{writable:!1}),t}();function At(t){return At=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},At(t)}function kt(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function Et(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,(void 0,i=function(t,e){if(\"object\"!==At(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e);if(\"object\"!==At(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(n.key,\"string\"),\"symbol\"===At(i)?i:String(i)),n)}var i}var Ot=function(t){return\"function\"==typeof t?t:function(){return t}},jt=function(){function t(e){if(function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.props={width:function(){return 1/0},height:function(){return 1/0},rotation:0,vAnchor:0,hAnchor:0},e)for(var r in e)\"function\"==typeof this[r]&&this[r](e[r]);this.render=this.render.bind(this)}var e,r;return e=t,r=[{key:\"anchor\",value:function(t){var e=this.props,r=e.hAnchor,n=e.vAnchor,i=e.width,o=e.height;if(!arguments.length)return[r*i(0),n*o(0)];if(\"string\"==typeof t){var a=this.props;t.toLowerCase().trim().split(/\\s+/).forEach((function(t){\"top\"===t&&(a.vAnchor=-0),\"middle\"===t&&(a.vAnchor=-.5),\"bottom\"===t&&(a.vAnchor=-1),\"left\"===t&&(a.hAnchor=-0),\"center\"===t&&(a.hAnchor=-.5),\"right\"===t&&(a.hAnchor=-1)}))}return this}},{key:\"width\",value:function(t){return arguments.length?(this.props.width=Ot(t),this):this.props.width}},{key:\"height\",value:function(t){return arguments.length?(this.props.height=Ot(t),this):this.props.height}},{key:\"rotate\",value:function(t){return arguments.length?(this.props.rotation=t,this):this.props.rotation}},{key:\"createElement\",value:function(e){return arguments.length?(this.props.createElement=e,this):this.props.createElement||t.createElement}},{key:\"canvas\",value:function(t,e){var r,n=t.getContext?t.getContext(\"2d\"):t;return n.save(),n.rotate(this.rotate()*Math.PI/180),n.translate.apply(n,function(t){if(Array.isArray(t))return kt(t)}(r=this.anchor())||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(r)||function(t,e){if(t){if(\"string\"==typeof t)return kt(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===r&&t.constructor&&(r=t.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(t):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?kt(t,e):void 0}}(r)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),e(n),n.restore(),n}},{key:\"render\",value:function(){var t=mt(arguments);if(t.d3)return t.d3.attr(\"transform\",\"rotate(\".concat(this.rotate(),\") translate(\").concat(this.anchor(),\")\"));if(t.ctx)return this.canvas(t.ctx,t.fn);if(t.text){var e=\"function\"==typeof t.text.render?t.text.render():t.text;return this.createElement()(\"g\",{transform:\"rotate(\".concat(this.rotate(),\") translate(\").concat(this.anchor(),\")\")},e)}}}],r&&Et(e.prototype,r),Object.defineProperty(e,\"prototype\",{writable:!1}),t}(),zt=Object.prototype.hasOwnProperty,Pt={};function Tt(t){return Pt[t]||(Pt[t]=t.replace(/([a-z])([A-Z])/g,(function(t,e,r){return e+\"-\"+r.toLowerCase()}))),Pt[t]}function qt(t,e){if(Array.isArray(e))return e.forEach((function(e){return qt(t,e)}));\"string\"==typeof e&&(e=document.createTextNode(e)),t.appendChild(e)}function Ct(t,e){if(\"undefined\"!=typeof document){var r=\"string\"==typeof t?document.createElementNS(\"http://www.w3.org/2000/svg\",t):t;if(e&&r.setAttribute)for(var n in e)zt.call(e,n)&&null!=e[n]&&r.setAttribute(\"className\"===n?\"class\":Tt(n),e[n]);for(var i=arguments.length,o=new Array(i>2?i-2:0),a=2;a<i;a++)o[a-2]=arguments[a];return null!=o&&o.length&&o.forEach((function(t){qt(r,t)})),r}}St.createElement=Ct,St.textparser=B,St.defaultparser=B,St.htmlparser=function(t){t=String(t||\"\").trim();for(var e,r,n={weight:null,style:null,sub:!1,sup:!1,href:null,color:null,rel:null,target:null},i=[],o=[],a=function(t){for(var e in n)n[e]&&(t[e]=n[e]);i.push(t)},l=function(t){var e=i.length,r=Z[t];if(e&&r){for(var n=e-1;i[n]&&(i[n]instanceof P||D.test(i[n].value));)n--;for(;r&&i[n]&&i[n]instanceof T;)n--,r--;for(;r-- >0;)i.push(new T)}};t.length;){if(e=/^[^<]+/.exec(t))B(W(e[0]),!1).forEach(a);else if(e=M.exec(t));else if(e=R.exec(t))o.length&&(n=o.pop()),l(e[1]);else if(e=U.exec(t)){var s=e[1];l(s),o.push(n),n=Object.create(n),V[s]&&V[s](n,\"\");var u=G(e[2]);\"a\"===s&&(u.href&&(n.href=u.href),u.rel&&(n.rel=u.rel),u.target&&(n.target=u.target)),u.class&&(n.class=n.class?n.class+\" \"+u.class:u.class),u.style&&(r=/(?:^|\\s|;)color\\s*:\\s*([^;\\s\"']+)/.exec(u.style))&&r[1]&&(n.color=r[1]),\"br\"===s&&i.push(new T)}else e=[t.slice(0,1)],a(new z(e[0]));t=t.slice(e[0].length)}for(var c=i[i.length-1];c instanceof T;)i.pop(),c=i[i.length-1];return i},St.latexparser=function(t){t=String(t||\"\").trim();var e=[0];t=t.replace(/\\\\verb,(.*?),/,(function(t,r){return e.push(r),\"\\\\verb,\"+(e.length-1)+\",\"})).replace(/\\\\\\\\\\n/g,(function(){return\"\\\\\\\\\"})).replace(et,(function(t,e,r){return\"\\\\\"===r.charAt(e-1)?t:rt[t]})).replace(/\\n\\s+/g,(function(t){return/\\n/.test(t.slice(1))?\"\\\\par \":t})).replace(/\\\\symbol\\{(\\d+)\\}/,(function(t,e,r,n){return\"\\\\\"===n.charAt(r-1)?t:String.fromCharCode(1*e)})).replace(/(^|[^\\\\])(\\^|_)(\\d|[^{]\\S*)/g,(function(t,e,r,n){return e+r+\"{\"+n+\"}\"})).replace(/\\\\verb,(.*?),/,(function(t,r){return\"\\\\verb,\".concat(e[+r],\",\")}));for(var r,n={weight:null,italic:null,variant:null,sub:!1,sup:!1,href:null},i=[],o=[],a=function(t){for(var e in n)n[e]&&(t[e]=n[e]);return i.push(t),t},l=function(){o.push(n),n=Object.create(n)},s=function(){if(!o.length)throw new Error(\"Unexpected }\");n=o.pop()},u={tokens:i,open_context:l,close_context:s,add_token:a};t.length;){if(r=Q.exec(t))B(r[0],!1).forEach(a);else if(r=tt.exec(t))a(new z(r[1]));else if(r=Y.exec(t));else if(r=/^\\{/.exec(t))l();else if(r=/^\\}/.exec(t))s();else if(r=/^\\$/.exec(t));else if(r=/^\\\\verb,([^,]+),/.exec(t))a(new z(r[1]));else if(r=K.exec(t)){var c=r[1].slice(1)||r[1],f=!!r[2];if(/^(La)?TeX$/i.test(c)){l(),n.family=\"serif\";var h=void 0;\"LaTeX\"===c&&((h=a(new z(\"L\"))).tracking=-.25,(h=a(new z(\"A\"))).size=.7,h.baseline=.3,h.tracking=-.1),(h=a(new z(\"T\"))).tracking=-.17,(h=a(new z(\"E\"))).baseline=-.22,h.tracking=-.13,h=a(new z(\"X\")),s()}else if(c in J)a(new z(J[c])),f&&l();else if(c in nt){var p=[],g=nt[c].length-1,d=void 0;if(g){for(f=!1,t=t.slice(r[0].length-1);g--;){if(!(d=/^\\{([^}]+)\\}/.exec(t)))throw new Error(c+\" is missing an argument\");p.push(d[1]),t=t.slice(d[0].length)}r[0]=/^\\{/.exec(t)?\"{\":\"\",f=!!r[0]}f&&l(),nt[c].apply(u,[n].concat(p))}else console.warn(\"unknown latex command\",c),a(new z(r[1])),f&&l()}else r=[t.slice(0,1)],a(new z(r[0]));t=t.slice(r[0].length)}return i},St.measureText=function(t,e,r){return y(t,h(e),r)},St.Token=z,St.Break=P,St.LineBreak=T,St.SoftHyphen=q,St.Rotator=jt,jt.createElement=Ct;const _t=St;return e.default})()));\n//# sourceMappingURL=textbox.js.map","import Textbox from '@borgar/textbox';\nimport { Text } from '../../types';\nimport { getTextSize } from '../../utils';\n\n/**\n * @function draw\n * @param annotation the annotation to draw\n * @param g the group in which the text should be drawn\n */\nexport default function draw(annotation: Text, g: SVGGElement) {\n // make sure text does not overflow\n const size = getTextSize(annotation);\n const { fontSize, font, padding = 0 } = annotation.properties.style || {};\n\n if (size.width === size.height && size.width === 0) return;\n const box = new Textbox({\n font: `${fontSize}px/${fontSize}px ${font}`.replace(/(px)+/g, 'px'),\n width: size.width - padding * 2,\n height: size.height - padding * 2,\n align: 'left',\n valign: 'top',\n x: 0,\n overflow: 'ellipsis',\n parser: 'html',\n createElement: Textbox.createElement\n });\n\n const lines = box.linebreak(\n annotation.properties.content.replaceAll('\\n', '<br>')\n );\n // Destination canvas is set to the height of the output\n const text = lines.render();\n\n text.setAttribute('transform', `translate(${padding}, ${padding})`);\n g.appendChild(text);\n}\n","import Ogma, { Point } from '@linkurious/ogma';\nimport {\n createText,\n defaultControllerOptions,\n defaultOptions,\n defaultStyle\n} from './defaults';\nimport drawText from './render';\nimport {\n EVT_DRAG,\n EVT_DRAG_END,\n EVT_DRAG_START,\n EVT_UPDATE,\n NONE\n} from '../../constants';\nimport { ControllerOptions, Id, Text } from '../../types';\nimport {\n createSVGElement,\n getHandleId,\n getTextPosition,\n getTextSize,\n setTextBbox\n} from '../../utils';\nimport Editor from '../base';\n\ninterface Rect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nconst minSize = 20;\n\n/**\n * @class Texts\n * Draw, update, edit texts\n */\nexport class Texts extends Editor<Text> {\n private textArea: HTMLTextAreaElement;\n private handleSize: number;\n private rect: Rect = { x: 0, y: 0, width: 0, height: 0 };\n private annotation: Text = { ...defaultOptions };\n private startX = 0;\n private startY = 0;\n private handles: HTMLDivElement[] = [];\n private draggedHandle = NONE;\n private isFocused = false;\n private placeholder = 'Type your text here...';\n\n constructor(\n ogma: Ogma,\n options: Pick<\n Partial<ControllerOptions>,\n 'textHandleSize' | 'textPlaceholder'\n > = {}\n ) {\n super(\n ogma,\n `\n <div class=\"annotation-text-handle\">\n <span class=\"handle line-handle top\" data-handle-id=\"0\"></span>\n <span class=\"handle line-handle bottom\" data-handle-id=\"1\"></span>\n <span class=\"handle line-handle left\" data-handle-id=\"2\"></span>\n <span class=\"handle line-handle right\" data-handle-id=\"3\"></span>\n <span class=\"handle top right point-handle top-right\" data-handle-id=\"4\"></span>\n <span class=\"handle left top point-handle top-left\" data-handle-id=\"5\"></span>\n <span class=\"handle bottom right point-handle bottom-right\" data-handle-id=\"6\"></span>\n <span class=\"handle left bottom left-handle point-handle bottom-left\" data-handle-id=\"7\"></span>\n <textarea wrap=\"off\"></textarea>\n </div>\n `\n );\n this.handleSize = (defaultControllerOptions.handleSize ||\n options.textHandleSize) as number;\n this.placeholder =\n defaultControllerOptions.placeholder || options.textPlaceholder || '';\n\n // hidden text input to edit the text, we swap it with SVG when selected or hovered\n const textArea = (this.textArea =\n this.editor.element.querySelector<HTMLTextAreaElement>('textarea')!);\n textArea.addEventListener('input', this._onInput);\n textArea.addEventListener('focus', this._onFocus);\n textArea.addEventListener('blur', this._onBlur);\n textArea.spellcheck = false;\n\n this.handles = Array.prototype.slice.call(\n this.editor.element.querySelectorAll('.annotation-text-handle > .handle')\n );\n\n // events to move/resize\n this.handles.forEach((handle: HTMLDivElement) =>\n handle.addEventListener('mousedown', this.onHandleMouseDown)\n );\n\n document.addEventListener('mouseup', this.onMouseUp);\n document.addEventListener('mousemove', this.onMouseMove, true);\n // update the width of the controls depending on zoom\n ogma.events.on(['viewChanged', 'zoom'], this.onViewChanged);\n }\n\n private _onFocus = () => {\n if (this.textArea.value === this.placeholder) this.textArea.value = '';\n this.isFocused = true;\n };\n\n private _onBlur = () => {\n this.isFocused = false;\n };\n\n protected _canRemove() {\n return !this.isFocused;\n }\n\n public startDrawing = (\n x: number,\n y: number,\n text = createText(x, y, 0, 0, '', defaultStyle)\n ) => {\n this.add(text);\n const pos = this.ogma.view.graphToScreenCoordinates({ x, y });\n this.select(text.id);\n this.startDragging(this.getById(text.id), pos.x, pos.y);\n this.draggedHandle = 6;\n };\n\n public cancelDrawing = () => {\n if (!this.isDragging) return;\n this.remove(this.annotation.id);\n this.annotation = { ...defaultOptions };\n this.draggedHandle = NONE;\n this.isDragging = false;\n this.emit(EVT_DRAG_END, this.annotation);\n };\n\n private startDragging = (text: Text, clientX: number, clientY: number) => {\n this.annotation = text;\n const position = getTextPosition(this.annotation);\n const size = getTextSize(this.annotation);\n\n this.rect.x = position.x;\n this.rect.y = position.y;\n this.rect.width = size.width;\n this.rect.height = size.height;\n\n this.startX = clientX;\n this.startY = clientY;\n this.disableDragging();\n this.textArea.classList.add('noevents');\n this.textArea.setAttribute('disabled', 'disabled');\n this.emit(EVT_DRAG_START, this.annotation);\n this.isDragging = true;\n };\n\n private onHandleMouseDown = (evt: MouseEvent) => {\n const res = this.getById(this.selectedId) || this.getById(this.hoveredId);\n if (!res) return;\n if (this.selectedId !== res.id) this.select(this.hoveredId);\n\n this.startDragging(res, evt.clientX, evt.clientY);\n this.draggedHandle = getHandleId(evt.target as HTMLDivElement);\n };\n\n private onMouseMove = (evt: MouseEvent) => {\n requestAnimationFrame(() => this._onMouseMove(evt));\n };\n\n private _onMouseMove = (evt: MouseEvent) => {\n if (!this.isDragging) return;\n\n evt.stopPropagation();\n evt.preventDefault();\n\n const handle = this.handles[this.draggedHandle];\n\n const isTop = handle.classList.contains('top');\n const isLeft = handle.classList.contains('left');\n const isRight = handle.classList.contains('right');\n const isBottom = handle.classList.contains('bottom');\n const isLine = handle.classList.contains('line-handle');\n\n const zoom = this.ogma.view.getZoom();\n const dx = (evt.clientX - this.startX) / zoom;\n const dy = (evt.clientY - this.startY) / zoom;\n const x = isLeft || isLine ? this.rect.x + dx : this.rect.x;\n const y = isTop || isLine ? this.rect.y + dy : this.rect.y;\n const width = Math.max(\n this.rect.width + dx * (isLine ? 0 : isLeft ? -1 : isRight ? 1 : 0),\n minSize\n );\n const height = Math.max(\n this.rect.height + dy * (isLine ? 0 : isTop ? -1 : isBottom ? 1 : 0),\n minSize\n );\n setTextBbox(this.annotation, x, y, width, height);\n this.emit(EVT_DRAG, this.annotation, 'text');\n\n this.refreshEditor();\n this.layer.refresh();\n };\n\n private onMouseUp = () => {\n if (!this.isDragging || this.draggedHandle === NONE) return;\n\n this.restoreDragging();\n this.textArea.classList.remove('noevents');\n this.textArea.removeAttribute('disabled');\n this.emit(EVT_DRAG_END, this.annotation);\n this.isDragging = false;\n this.draggedHandle = NONE;\n };\n\n private onViewChanged = () => {\n const w = Math.max(2, this.handleSize / this.ogma.view.getZoom());\n document.documentElement.style.setProperty('--handle-scale', `${1 / w}`);\n\n };\n\n private _onInput = () => {\n const annotation = this.getById(this.selectedId);\n if (!annotation) return;\n // prevent double spaces as it is not handled by the align algo.\n //const selectionCursor = this.textArea.selectionEnd;\n this.textArea.value = this.textArea.value.replace(/ +(?= )/g, '');\n this.textArea.focus();\n //this.textArea.selectionEnd = Math.max(0, selectionCursor - 1);\n annotation.properties.content = this.textArea.value;\n this.emit(EVT_UPDATE, annotation);\n this.layer.refresh();\n };\n\n public detect({ x, y }: Point, margin = 0): Text | undefined {\n // check if the pointer is within the bounding box of one of the texts\n return this.elements.find((a) => {\n const { x: tx, y: ty } = getTextPosition(a);\n const { width, height } = getTextSize(a);\n\n return (\n tx - margin < x &&\n ty - margin < y &&\n tx + width + margin > x &&\n ty + height + margin > y\n );\n });\n }\n\n public draw(svg: SVGSVGElement): void {\n svg.innerHTML = '';\n const styleContent = '';\n this.elements.forEach((annotation, i) => {\n const className = `class${i}`;\n const size = getTextSize(annotation);\n const position = getTextPosition(annotation);\n const id = annotation.id;\n const {\n color,\n fontSize,\n font,\n strokeColor,\n strokeWidth,\n strokeType,\n background\n } = annotation.properties.style || defaultStyle;\n if (\n id === this.selectedId ||\n (this.selectedId === -1 && id === this.hoveredId)\n )\n return;\n const g = createSVGElement<SVGGElement>('g');\n g.setAttribute('fill', `${color}`);\n g.setAttribute('font-size', `${fontSize}`);\n g.setAttribute('font-family', `${font}`);\n\n // rect is used for background and stroke\n const rect = createSVGElement<SVGRectElement>('rect');\n let addRect = false;\n if (strokeType && strokeType !== 'none') {\n addRect = true;\n rect.setAttribute('stroke', strokeColor || 'black');\n rect.setAttribute('stroke-width', `${strokeWidth}`);\n if (strokeType === 'dashed') {\n rect.setAttribute('stroke-dasharray', `5,5`);\n }\n }\n if ((background && background.length) || addRect) {\n addRect = true;\n rect.setAttribute('fill', background || 'transparent');\n }\n if (addRect) {\n rect.setAttribute('width', `${size.width}`);\n rect.setAttribute('height', `${size.height}`);\n }\n g.appendChild(rect);\n drawText(annotation, g);\n g.setAttribute('transform', `translate(${position.x},${position.y})`);\n g.classList.add(className);\n g.setAttribute('data-annotation', `${annotation.id}`);\n g.setAttribute('data-annotation-type', 'text');\n svg.appendChild(g);\n });\n const style = createSVGElement<SVGStyleElement>('style');\n style.innerHTML = styleContent;\n if (!svg.firstChild) return;\n svg.insertBefore(style, svg.firstChild);\n }\n\n public getDefaultOptions(): Text {\n return defaultOptions;\n }\n\n public refreshEditor() {\n if (+this.selectedId < 0 && +this.hoveredId < 0) return;\n const t = this.getById(this.selectedId) || this.getById(this.hoveredId);\n const size = getTextSize(t);\n const position = this.ogma.view.graphToScreenCoordinates(getTextPosition(t));\n const zoom = this.ogma.view.getZoom();\n const {\n font,\n fontSize,\n color,\n background,\n padding = 0\n } = t.properties.style || defaultStyle;\n const scaledFontSize = +(fontSize as string) * zoom;\n this.textArea.value = t.properties.content;\n this.editor.element.style.transform = `translate(${position.x}px, ${position.y}px)`\n + `translate(-50%, -50%)`\n + `translate(${size.width / 2 * zoom}px, ${size.height / 2 * zoom}px)`;\n this.editor.element.style.width = `${size.width * zoom}px`;\n this.editor.element.style.height = `${size.height * zoom}px`;\n this.textArea.style.font = `${scaledFontSize} ${font}`;\n this.textArea.style.fontFamily = font || 'sans-serif';\n this.textArea.style.fontSize = `${scaledFontSize}px`;\n this.textArea.style.padding = `${padding}px`;\n this.textArea.style.lineHeight = `${scaledFontSize}px`;\n\n this.textArea.style.boxSizing = 'border-box';\n this.textArea.style.color = color || 'black';\n this.textArea.style.background = background || 'transparent';\n\n this.textArea.placeholder = this.placeholder;\n\n this.layer.refresh();\n }\n\n select(id: Id): void {\n super.select(id);\n this.textArea.focus();\n }\n\n public destroy(): void {\n super.destroy();\n document.removeEventListener('mouseup', this.onMouseUp);\n document.removeEventListener('mousemove', this.onMouseMove, true);\n // update the width of the controls depending on zoom\n this.ogma.events.off(this.onViewChanged);\n }\n}\n\nexport {\n defaultOptions as defaultTextOptions,\n defaultStyle as defaultTextStyle,\n defaultControllerOptions,\n createText\n};\n","import { Point } from '@linkurious/ogma';\nimport { nanoid as getId } from 'nanoid';\nimport { Arrow, Id, TargetType, Link, Side } from './types';\n\n/**\n * Class that implements linking between annotation arrows and different items.\n * An arrow can be connected to a text or to a node. It supports double indexing\n * so that you could get the arrow by the id of the text or the id of the node\n * or by the id of the arrow id itself.\n * A node or text can be connected to multiple arrows.\n * An arrow can be connected to only one node or text, but on both ends.\n */\nexport class Links {\n private links: Record<Id, Link> = {};\n private linksByTargetId: Record<Id, Id[]> = {};\n private linksByArrowId: Record<Id, { start?: Id; end?: Id }> = {};\n\n public add(\n arrow: Arrow,\n side: Side,\n targetId: Id,\n targetType: TargetType,\n connectionPoint: Point\n ) {\n const id = getId();\n const arrowId = arrow.id;\n // create a link\n const link: Link = {\n id,\n arrow: arrowId,\n target: targetId,\n targetType,\n connectionPoint,\n side\n };\n // add it to the links\n this.links[id] = link;\n // add it to the linksByTargetId\n if (!this.linksByTargetId[targetId]) {\n this.linksByTargetId[targetId] = [];\n }\n this.linksByTargetId[targetId].push(id);\n\n // add it to the linksByArrowId\n if (!this.linksByArrowId[arrowId]) {\n this.linksByArrowId[arrowId] = {};\n }\n this.linksByArrowId[arrowId][side] = id;\n\n // make it serializable\n arrow.properties.link = arrow.properties.link || {};\n arrow.properties.link[side] = {\n id: targetId,\n side,\n type: targetType,\n magnet: connectionPoint\n };\n return this;\n }\n\n public arrowIsLinked(arrowId: Id, side: Side) {\n return !!this.linksByArrowId[arrowId]?.[side];\n }\n\n // remove the link between the arrow and the target by arrow id and side\n public remove(arrow: Arrow, side: Side) {\n const arrowId = arrow.id;\n const id = this.linksByArrowId[arrowId]?.[side];\n delete arrow.properties.link?.[side];\n if (!id) return this;\n const link = this.links[id];\n // remove the link from the links\n delete this.links[id];\n // remove the link from the linksByTargetId\n const targetLinks = this.linksByTargetId[link.target];\n for (let i = 0; i < targetLinks.length; i++) {\n if (targetLinks[i] === id) {\n targetLinks.splice(i, 1);\n break;\n }\n }\n // remove the link from the linksByArrowId\n delete this.linksByArrowId[arrowId][side];\n return this;\n }\n\n getArrowLink(arrowId: Id, side: Side): Link | null {\n const id = this.linksByArrowId[arrowId]?.[side];\n if (!id) return null;\n return this.links[id];\n }\n\n getTargetLinks(targetId: Id): Link[] {\n return this.linksByTargetId[targetId]?.map((id) => this.links[id]) ?? [];\n }\n}\n","import { Point } from '@linkurious/ogma';\nimport type {\n Feature,\n FeatureCollection,\n Geometry,\n GeometryObject,\n LineString,\n Polygon\n} from 'geojson';\nimport {\n EVT_ADD,\n EVT_CANCEL_DRAWING,\n EVT_DRAG,\n EVT_DRAG_END,\n EVT_DRAG_START,\n EVT_HOVER,\n EVT_REMOVE,\n EVT_SELECT,\n EVT_UNHOVER,\n EVT_UNSELECT,\n EVT_UPDATE,\n EVT_LINK\n} from './constants';\n\nexport const isArrow = (\n a: AnnotationFeature<Geometry, AnnotationProps>\n): a is Arrow => a.properties.type === 'arrow';\n\nexport const isText = (\n a: AnnotationFeature<Geometry, AnnotationProps>\n): a is Text => a.properties.type === 'text';\n\nexport const isAnnotationCollection = (\n a: AnnotationFeature<Geometry, AnnotationProps> | FeatureCollection\n): a is AnnotationCollection => a.type === 'FeatureCollection';\n\ntype AnnotationType = 'arrow' | 'text';\n\nexport interface AnnotationProps {\n type: AnnotationType;\n style?: unknown;\n}\n\n// const c: AnnotationCollection = {\n// type: 'FeatureCollection',\n// features: [\n// {\n// type: 'Feature',\n// id: '1',\n// properties: {\n// type: 'text',\n// content: 'Hello world'\n// },\n// geometry: {\n// type: 'Polygon',\n// coordinates: [\n// [\n// [0, 0],\n// [1, 0],\n// [1, 1],\n// [0, 1],\n// [0, 0]\n// ]\n// ]\n// }\n// }\n// ]\n// };\n\nexport type Id = string | number;\n\nexport interface AnnotationFeature<\n G extends GeometryObject = GeometryObject,\n P = AnnotationProps\n> extends Feature<G, P> {\n id: string | number;\n}\n\nexport interface ArrowStyles extends StrokeOptions {\n tail?: Extremity;\n head?: Extremity;\n}\n\ntype ExportedLink = {\n id: Id;\n side: 'start' | 'end';\n type: 'node' | 'text';\n magnet?: Point;\n};\n\nexport interface ArrowProperties extends AnnotationProps {\n type: 'arrow';\n style?: ArrowStyles;\n link?: Partial<Record<Side, ExportedLink>>;\n}\n\nexport type Arrow = AnnotationFeature<LineString, ArrowProperties>;\n\nexport interface AnnotationCollection extends FeatureCollection {\n features: (Arrow | Text)[];\n}\n\nexport type StrokeOptions = {\n strokeType?: 'plain' | 'dashed' | 'none';\n strokeColor?: string;\n strokeWidth?: number;\n};\n\nexport interface TextStyle extends StrokeOptions {\n /** Helvetica, sans-serif... */\n font?: string;\n /** 12px, 1em... */\n fontSize?: string;\n /** text color: #f00, yellow...*/\n color?: string;\n /** background color: empty for transparent #f00, yellow...*/\n background?: string;\n // /** stroke of the box: falsy to none */\n // stroke?: Stroke;\n /** padding around the text */\n padding?: number;\n}\n\nexport interface TextProperties extends AnnotationProps {\n type: 'text';\n /**text to display*/\n content: string;\n style?: TextStyle;\n}\n\nexport type Text = AnnotationFeature<Polygon, TextProperties>;\n\nexport type Stroke = {\n type: 'plain' | 'dashed' | 'none';\n color: string;\n width: number;\n};\n\nexport type StrokeStyle = Stroke;\n\nexport type Extremity = 'none' | 'arrow' | 'arrow-plain';\n\nexport type AnnotationOptions = {\n handleSize: number;\n placeholder: string;\n};\n\nexport type Events<T> = {\n [EVT_HOVER]: (evt: T) => void;\n [EVT_UNHOVER]: (evt: T) => void;\n [EVT_SELECT]: (evt: T) => void;\n [EVT_UNSELECT]: (evt: T) => void;\n [EVT_DRAG_START]: (evt: T) => void;\n [EVT_DRAG]: (evt: T, key: 'line' | 'start' | 'end' | 'text') => void;\n [EVT_DRAG_END]: (evt: T) => void;\n [EVT_REMOVE]: (evt: T) => void;\n [EVT_ADD]: (evt: T) => void;\n [EVT_UPDATE]: (evt: T) => void;\n};\n\nexport type FeatureEvents = {\n /**\n * Event trigerred when selecting an annotation\n * @param evt The annotation selected\n */\n [EVT_SELECT]: (evt: Annotation) => void;\n /**\n * Event trigerred when unselecting an annotation\n * @param evt The annotation unselected\n */\n [EVT_UNSELECT]: (evt: Annotation) => void;\n /**\n * Event trigerred when removing an annotation\n * @param evt The annotation removed\n */\n [EVT_REMOVE]: (evt: Annotation) => void;\n /**\n * Event trigerred when adding an annotation\n * @param evt The annotation added\n */\n [EVT_ADD]: (evt: Annotation) => void;\n [EVT_CANCEL_DRAWING]: () => void;\n /**\n * Event trigerred when updating an annotation\n * @returns The annotation updated\n */\n [EVT_UPDATE]: (evt: Annotation) => void;\n /**\n * Event trigerred when linking an arrow to a text or node\n */\n [EVT_LINK]: (evt: { arrow: Arrow; link: Link; }) => void;\n};\n\nexport type TargetType = 'text' | 'node';\n\nexport type Side = 'start' | 'end';\n\nexport type Link = {\n /** arrow atteched to the text or node */\n arrow: Id;\n /** id of the text the arrow is attached to */\n id: Id;\n\n /** On which end the arrow is tighten to the text */\n side: Side;\n\n /** id of the text or node the arrow is attached to */\n target: Id;\n /** Text or node */\n targetType: TargetType;\n /**\n * On which point relative to topleft corner the arrow is tighten, in case of\n * node, it can be deduced from the arrow itself\n */\n connectionPoint: Point;\n};\n\nexport type ControllerOptions = {\n magnetColor: string;\n /**\n * The radius in which arrows are attracted\n */\n magnetRadius: number;\n /**\n * The margin in which the Texts are detected when looking for magnet points\n */\n detectMargin: number;\n /**\n * Display size of the magnet point\n */\n magnetHandleRadius: number;\n\n /**\n * Placeholder for the text input\n */\n textPlaceholder: string;\n\n /**\n * Size of the text handle\n */\n textHandleSize: number;\n\n /**\n * Size of the arrow handle\n */\n arrowHandleSize: number;\n\n /**\n * Minimum height of the arrow in units\n */\n minArrowHeight: number;\n\n /**\n * Maximum height of the arrow in units\n */\n maxArrowHeight: number;\n};\n\nexport type Annotation = Arrow | Text;\n","import Ogma, {\n CanvasLayer,\n LayoutEndEvent,\n Node,\n NodeList,\n NodesDragProgressEvent,\n Point\n} from '@linkurious/ogma';\nimport EventEmitter from 'eventemitter3';\nimport Vector2 from 'vector2js';\nimport {\n EVT_ADD,\n EVT_CANCEL_DRAWING,\n EVT_DRAG,\n EVT_DRAG_END,\n EVT_DRAG_START,\n EVT_LINK,\n EVT_REMOVE,\n EVT_SELECT,\n EVT_UNSELECT,\n EVT_UPDATE\n} from './constants';\nimport { Arrows } from './Editor/Arrows';\nimport Editor from './Editor/base';\nimport { Texts } from './Editor/Texts';\nimport { Links } from './links';\nimport {\n Annotation,\n AnnotationCollection,\n Arrow,\n ControllerOptions,\n FeatureEvents,\n Id,\n Text,\n isAnnotationCollection,\n isArrow,\n isText,\n Link\n} from './types';\n\nimport {\n getArrowEnd,\n getArrowStart,\n getArrowSide,\n getTextPosition,\n getTextSize,\n setArrowEndPoint,\n getAttachmentPointOnNode\n} from './utils';\n\nconst defaultOptions: ControllerOptions = {\n magnetColor: '#3e8',\n detectMargin: 20,\n magnetHandleRadius: 5,\n magnetRadius: 10,\n textPlaceholder: 'Type here',\n arrowHandleSize: 3.5,\n textHandleSize: 3.5,\n minArrowHeight: 20,\n maxArrowHeight: 30\n};\n\ntype EndType = 'start' | 'end';\nconst ends: EndType[] = ['start', 'end'];\n\n// TODO: move to methods\nconst MAGNETS: Point[] = [\n { x: 0, y: 0 },\n { x: 0.5, y: 0 },\n { x: 1, y: 0 },\n { x: 0, y: 0.5 },\n { x: 1, y: 0.5 },\n { x: 0, y: 1 },\n { x: 0.5, y: 1 },\n { x: 1, y: 1 }\n];\n\ntype MagnetPoint = {\n point: Point;\n magnet: Point;\n};\n\nexport class Control extends EventEmitter<FeatureEvents> {\n private arrows: Arrows;\n private texts: Texts;\n private links = new Links();\n private layer: CanvasLayer;\n private annotations: Editor<Arrow | Text>[];\n private ogma: Ogma;\n private options: ControllerOptions;\n private selected: Annotation | null = null;\n private updateTimeout = 0;\n private hoveredNode: Node | null = null;\n\n private dragged: Arrow | null = null;\n private textToMagnet: Text | undefined = undefined;\n private activeLinks: Link[] = [];\n\n constructor(ogma: Ogma, options: Partial<ControllerOptions> = {}) {\n super();\n this.options = this.setOptions({ ...defaultOptions, ...options });\n this.ogma = ogma;\n this.arrows = new Arrows(ogma, this.options);\n this.texts = new Texts(ogma, this.options);\n this.annotations = [this.arrows, this.texts];\n\n this.annotations.forEach((a) => {\n a.on(EVT_DRAG_START, this._onFeatureDragStart)\n .on(EVT_DRAG, this._onFeatureDrag)\n .on(EVT_DRAG_END, this._onFeatureDragEnd)\n .on(EVT_UPDATE, this.onUpdate)\n .on(EVT_UNSELECT, this._onUnselect)\n .on(EVT_SELECT, this._onSelect)\n .on(EVT_ADD, this._onAdded)\n .on(EVT_REMOVE, this._onRemoved);\n });\n\n this.ogma.events\n .on('nodesDragStart', this._onNodesDragStart)\n .on('nodesDragProgress', this._onNodesDrag)\n .on('layoutEnd', this._onLayoutEnd);\n\n this.layer = ogma.layers.addCanvasLayer(this._render);\n this.layer.moveToBottom();\n }\n\n private _render = (ctx: CanvasRenderingContext2D) => {\n if (!this.dragged || this.textToMagnet === undefined) return;\n ctx.beginPath();\n ctx.fillStyle = 'green';\n const z = this.ogma.view.getZoom();\n MAGNETS.forEach((magnet) => {\n if (!this.textToMagnet) return;\n const size = getTextSize(this.textToMagnet);\n const position = getTextPosition(this.textToMagnet);\n const { x, y } = new Vector2(magnet.x, magnet.y)\n .mul({ x: size.width, y: size.height })\n .add(position);\n ctx.moveTo(x, y);\n ctx.arc(x, y, this.options.magnetHandleRadius / z, 0, Math.PI * 2);\n });\n ctx.fill();\n ctx.closePath();\n };\n\n private _onFeatureDrag = (\n a: Text | Arrow,\n key: EndType | 'line' | 'text'\n ) => {\n const h = key;\n if (isArrow(a) && h === 'line') {\n ['start', 'end']\n .find((side) => {\n const point = side === 'start' ? getArrowStart(a) : getArrowEnd(a);\n const snapped = this._snapToText(a, h as EndType, point);\n return snapped || this._findAndSnapToNode(a, side as EndType, point);\n });\n } else if (isArrow(a) && h !== 'line') {\n const point = h === 'start' ? getArrowStart(a) : getArrowEnd(a);\n const snapped = this._snapToText(a, h as EndType, point);\n // if no text is detected and option is on, we to snap to node\n if (!snapped) this._findAndSnapToNode(a, h as EndType, point);\n } else if (isText(a)) {\n this.activeLinks.forEach(({ arrow: id, side, connectionPoint }) => {\n const arrow = this.getAnnotation(id) as Arrow;\n const size = getTextSize(a);\n const position = getTextPosition(a);\n const pt = new Vector2(connectionPoint!.x, connectionPoint!.y)\n .mul({ x: size.width, y: size.height })\n .add(position);\n arrow.geometry.coordinates[side === 'start' ? 0 : 1] = [pt.x, pt.y];\n });\n if (this.activeLinks.length) this.arrows.refreshLayer();\n }\n this.layer.refresh();\n };\n\n private _onFeatureDragEnd = (a: Text | Arrow) => {\n if (this.dragged !== null && isArrow(a) && getArrowStart(this.dragged)) {\n ends.forEach((side) => {\n const link = this.links.getArrowLink(a.id, side);\n if (link) {\n this.emit(EVT_LINK, {\n arrow: a,\n link: this.links.getArrowLink(a.id, side)!\n });\n }\n });\n }\n if (isText(a) || isArrow(a)) this.onUpdate(a);\n\n this.dragged = null;\n this.activeLinks = [];\n this.textToMagnet = undefined;\n this.annotations.forEach((o) => o.enableDetection());\n this.layer.refresh();\n };\n\n private _onFeatureDragStart = (d: Arrow | Text) => {\n this.textToMagnet = undefined;\n if (isArrow(d)) this.dragged = d as Arrow;\n else if (isText(d))\n this.activeLinks.push(...this.links.getTargetLinks(d.id));\n this.annotations.forEach((a) => {\n const selected = a.getSelectedFeature();\n if (selected && selected !== d) a.unhover().unselect();\n a.disableDetection();\n });\n };\n\n private _onNodesDragStart = () => {\n this.arrows.unhover().unselect();\n this.texts.unhover().unselect();\n };\n\n private _onNodesDrag = (evt: NodesDragProgressEvent<unknown, unknown>) => {\n const { dx, dy } = evt;\n this._moveNodes(evt.nodes, dx, dy);\n };\n\n private _onLayoutEnd = (evt: LayoutEndEvent) => {\n evt.ids.forEach((id, i) => {\n const links = this.links.getTargetLinks(id);\n links.forEach(link => {\n const arrow = this.getAnnotation(link.arrow) as Arrow;\n const side = link.side;\n const otherSide = getArrowSide(\n arrow,\n side === 'start' ? 'end' : 'start'\n );\n // @ts-ignore\n const point = evt.positions.current[i];\n const radius = this.ogma.getNode(id)!.getAttribute('radius');\n const anchor = getAttachmentPointOnNode(otherSide, point, +radius);\n setArrowEndPoint(arrow, side, anchor.x, anchor.y);\n });\n });\n this.arrows.refreshLayer();\n this.texts.refreshLayer();\n };\n\n private _moveNodes(nodes: NodeList, dx: number, dy: number) {\n nodes.forEach((node) => {\n const links = this.links.getTargetLinks(node.getId());\n const pos = node.getPosition();\n links.forEach((link) => {\n const arrow = this.getAnnotation(link.arrow) as Arrow;\n const side = link.side;\n const otherSide = getArrowSide(\n arrow,\n side === 'start' ? 'end' : 'start'\n );\n\n let anchor = pos; // graph space\n const r = +node.getAttribute('radius');\n const eps = 1e-6;\n if (\n link.connectionPoint.x - (pos.x - dx) > eps ||\n link.connectionPoint.y - (pos.y - dy) > eps\n ) {\n anchor = getAttachmentPointOnNode(otherSide, pos, r);\n }\n setArrowEndPoint(arrow, side, anchor.x, anchor.y);\n });\n });\n this.arrows.refreshLayer();\n }\n\n private _snapToText(arrow: Arrow, side: EndType, point: Point) {\n const text = this.texts.detect(point, this.options.detectMargin);\n this.links.remove(arrow, side);\n if (!text) return false;\n this.textToMagnet = text;\n const anchor = this.findMagnetPoint(MAGNETS, text, point);\n if (anchor) {\n setArrowEndPoint(arrow, side, anchor.point.x, anchor.point.y);\n this.links.add(arrow, side, text.id, 'text', anchor.magnet);\n return true;\n }\n return false;\n }\n\n private _findAndSnapToNode(arrow: Arrow, side: EndType, point: Point) {\n const screenPoint = this.ogma.view.graphToScreenCoordinates(point);\n const element = this.ogma.view.getElementAt(screenPoint);\n this.links.remove(arrow, side);\n if (element && element.isNode) {\n this.hoveredNode = element;\n this.hoveredNode.setSelected(true);\n // if close to the node border, snap to it\n this._snapToNode(arrow, side, element, screenPoint);\n } else {\n if (this.hoveredNode) this.hoveredNode.setSelected(false);\n this.hoveredNode = null;\n }\n }\n\n private _snapToNode(\n arrow: Arrow,\n side: EndType,\n node: Node,\n screenPoint: Point\n ) {\n const pos = node.getPositionOnScreen();\n const r = +node.getAttribute('radius');\n const rpx = r * this.ogma.view.getZoom();\n const dx = screenPoint.x - pos.x;\n const dy = screenPoint.y - pos.y;\n const dist = Math.sqrt(dx * dx + dy * dy);\n const nodeCenter = node.getPosition();\n\n // clever snapping, center if close to center, otherwise snap\n // to border if close to it. Currently just somple way\n if (dist < rpx + this.options.detectMargin) {\n let anchor = nodeCenter; // graph space\n if (dist > rpx / 2) {\n const otherEnd = getArrowSide(arrow, side === 'end' ? 'start' : 'end');\n anchor = getAttachmentPointOnNode(otherEnd, anchor, r);\n }\n setArrowEndPoint(arrow, side, anchor.x, anchor.y);\n this.links.add(arrow, side, node.getId(), 'node', anchor);\n }\n // TODO: handle the other endpoint, if it's connected to a node\n }\n\n private _onAdded = (annotation: Annotation) => {\n this.emit(EVT_ADD, annotation);\n };\n\n private _onRemoved = (annotation: Annotation) => {\n this.emit(EVT_REMOVE, annotation);\n };\n\n private _onUnselect = (annotation: Annotation) => {\n this.selected = null;\n this.emit(EVT_UNSELECT, annotation);\n };\n\n private _onSelect = (annotation: Annotation) => {\n if (this.selected === annotation) return;\n this.selected = annotation;\n this.emit(EVT_SELECT, this.selected);\n };\n\n /**\n * @returns the currently selected annotation\n */\n public getSelected() {\n return this.selected;\n }\n\n private findMagnetPoint(magnets: Point[], textToMagnet: Text, point: Point) {\n let res: MagnetPoint | undefined;\n for (const magnet of magnets) {\n const size = getTextSize(textToMagnet);\n const position = getTextPosition(textToMagnet);\n const mPoint = new Vector2(magnet.x, magnet.y)\n .mul({ x: size.width, y: size.height })\n .add(position);\n const dist = mPoint.sub(point).length();\n const scaledRadius = this.options.magnetRadius * this.ogma.view.getZoom();\n if (dist < Math.max(scaledRadius, this.options.magnetHandleRadius)) {\n res = {\n point: mPoint,\n magnet\n };\n break;\n }\n }\n return res;\n }\n\n /**\n * Set the options for the controller\n * @param options new Options\n * @returns the updated options\n */\n public setOptions(options: Partial<ControllerOptions> = {}) {\n this.options = {\n ...(this.options || {}),\n ...options\n } as ControllerOptions;\n return this.options;\n }\n /**\n * Selects the annotation with the given id\n * @param id the id of the annotation to select\n */\n public select(id: Id): this {\n const annotation = this.getAnnotations().features.find((a) => a.id === id);\n if (!annotation) return this;\n if (isArrow(annotation)) this.arrows.select(annotation.id);\n else if (isText(annotation)) this.texts.select(annotation.id);\n return this;\n }\n /**\n * Unselects the currently selected annotation\n */\n public unselect(): this {\n if (!this.selected) return this;\n if (isArrow(this.selected)) this.arrows.unselect();\n else if (isText(this.selected)) this.texts.unselect();\n return this;\n }\n /**\n * Add an annotation to the controller\n * @param annotation The annotation to add\n */\n public add(annotation: Arrow | Text | AnnotationCollection): this {\n if (isAnnotationCollection(annotation)) {\n annotation.features.forEach((f) =>\n this.add(f as unknown as Arrow | Text)\n );\n return this;\n }\n switch (annotation.properties.type) {\n case 'text':\n this.texts.add(annotation as unknown as Text);\n break;\n // more to follow\n default:\n this.arrows.add(annotation as unknown as Arrow);\n this.loadLink(annotation as unknown as Arrow);\n break;\n }\n return this;\n }\n /**\n * Remove an annotation or an array of annotations from the controller\n * @param annotation The annotation(s) to remove\n */\n public remove(annotation: Arrow | Text | AnnotationCollection): this {\n if (isAnnotationCollection(annotation)) {\n annotation.features.forEach((f) =>\n this.remove(f as unknown as Arrow | Text)\n );\n return this;\n } else if (isArrow(annotation)) {\n this.links.remove(annotation, 'start');\n this.links.remove(annotation, 'end');\n this.arrows.remove(annotation.id);\n } else {\n this.texts.remove(annotation.id);\n }\n return this;\n }\n private loadLink(arrow: Arrow) {\n if (!arrow.properties.link) return;\n for (const side of ends) {\n const link = arrow.properties.link[side];\n if (!link) continue;\n const targetText = this.getAnnotation(link.id);\n if (targetText) {\n this.links.add(arrow, side, link.id, link.type, link.magnet!);\n } else {\n const targetNode = this.ogma.getNode(link.id);\n if (!targetNode) continue;\n this.links.add(arrow, side, link.id, link.type, link.magnet!);\n }\n }\n }\n /**\n * Start adding an arrow (add it, and give control to the user)\n * @param x coord of the first point\n * @param y coord of the first point\n * @param arrow The arrow to add\n */\n public startArrow(x: number, y: number, arrow?: Arrow) {\n this.cancelDrawing();\n this.arrows.startDrawing(x, y, arrow);\n }\n /**\n * Start adding a text (add it, and give control to the user)\n * @param x coord of the top left point\n * @param y coord of the top left point\n * @param text The text to add\n */\n public startText(x: number, y: number, text?: Text) {\n this.cancelDrawing();\n this.texts.startDrawing(x, y, text);\n }\n /**\n * Cancel drawing on the current frame\n */\n public cancelDrawing() {\n this.annotations.forEach((o) => o.cancelDrawing());\n this.emit(EVT_CANCEL_DRAWING);\n }\n /**\n * Triggers the update event on the annotation\n * @param annotation The annotation updated\n */\n public onUpdate = (annotation: Annotation) => {\n cancelAnimationFrame(this.updateTimeout);\n this.updateTimeout = requestAnimationFrame(() =>\n this._onUpdate(annotation)\n );\n };\n\n private _onUpdate = (annotation: Annotation) => {\n this.emit(EVT_UPDATE, annotation);\n };\n\n /**\n * Update the style of the annotation with the given id\n * @param id The id of the annotation to update\n * @param style The new style\n */\n public updateStyle<A extends Annotation>(\n id: Id,\n style: A['properties']['style']\n ): this {\n const annotation = this.getAnnotations().features.find((a) => a.id === id);\n if (!annotation) return this;\n if (isArrow(annotation)) this.arrows.updateStyle(annotation, style);\n else if (isText(annotation)) this.texts.updateStyle(annotation, style);\n this.onUpdate(annotation);\n return this;\n }\n\n /**\n * \n * @returns the annotations in the controller\n */\n public getAnnotations() {\n const collection: AnnotationCollection = {\n type: 'FeatureCollection',\n features: []\n };\n this.annotations.forEach((editor) => {\n collection.features = [...collection.features, ...editor.getElements()];\n });\n return collection;\n }\n /**\n * Retrieve the annotation with the given id\n * @param id the id of the annotation to get\n * @returns The annotation with the given id\n */\n public getAnnotation(id: Id) {\n return this.getAnnotations().features.find((a) => a.id === id);\n }\n /**\n * Destroy the controller and its elements\n */\n public destroy() {\n this.annotations.forEach((o) => o.destroy());\n this.layer.destroy();\n }\n}\n"],"names":["name","definition","module","Vector","PI2","radToDeg","degToRad","smartRound","num","vectorsDistance","p1","p2","dx","dy","vectorsAngle","P1","P2","wrap","deltaY","deltaX","ret","x","y","radian","degree","rad","str","parts","arr","vector","other","degrees","radians","ca","sa","by","val","scalar","min","max","func","format","nanoid","size","id","byte","defaultStyle","defaultOptions","createArrow","x0","y0","x1","y1","styles","getId","SVG_NS","createSVGElement","tag","getTextBbox","t","updateTextBbox","getTextSize","bbox","getTextPosition","setTextBbox","width","height","getArrowStart","a","getArrowSide","side","getArrowEnd","setArrowStart","setArrowEnd","getArrowEndPoints","setArrowEndPoint","getHandleId","handle","getAnnotationsBounds","annotations","getCoordinatesDump","acc","coord","gj","coords","dump","part","poly","points","g","f","getAttachmentPointOnNode","start","nodeCenter","nodeRadius","angle","getArrowHeight","arrow","end","Vec2","vec","strokeW","_a","drawExt","point","type","delta","pt","draw","minArrowHeight","maxArrowHeight","tail","head","strokeColor","strokeWidth","b","tipLength","path","filled","headD","tailD","d","NONE","EVT_DRAG","EVT_DRAG_START","EVT_DRAG_END","EVT_SELECT","EVT_UNSELECT","EVT_HOVER","EVT_UNHOVER","EVT_REMOVE","EVT_ADD","EVT_CANCEL_DRAWING","EVT_UPDATE","EVT_LINK","has","prefix","Events","EE","fn","context","once","addListener","emitter","event","listener","evt","clearEvent","EventEmitter","names","events","handlers","i","l","ee","listeners","a1","a2","a3","a4","a5","len","args","length","j","Editor","eventEmmitter","ogma","editorHtml","__publicField","element","svg","options","def","o","annotation","style","geometry","target","key","properties","current","HANDLE_LINE","HANDLE_START","HANDLE_END","Arrows","res","zoom","isLine","isStart","isEnd","pos","bb","margin","p","Vector2","vecN","extremities","scale","lineH","startH","endH","middle","v","vn","drawArrow","defaultControllerOptions","createText","content","e","this","r","n","_t","s","u","c","h","m","w","S","k","A","E","O","z","P","T","q","C","_","F","I","L","B","$","D","R","U","M","N","V","Z","W","H","X","G","J","K","Y","Q","tt","et","rt","nt","it","ot","at","lt","st","ut","ct","ft","ht","gt","dt","vt","mt","yt","bt","wt","xt","St","At","kt","Et","Ot","jt","zt","Pt","Tt","qt","Ct","fontSize","font","padding","text","Textbox","minSize","Texts","clientX","clientY","position","isTop","isLeft","isRight","isBottom","textArea","tx","ty","styleContent","className","color","strokeType","background","rect","addRect","drawText","scaledFontSize","Links","targetId","targetType","connectionPoint","arrowId","link","_b","targetLinks","isArrow","isText","isAnnotationCollection","ends","MAGNETS","Control","ctx","magnet","selected","otherSide","radius","anchor","nodes","node","links","eps","screenPoint","rpx","dist","otherEnd","magnets","textToMagnet","mPoint","scaledRadius","collection","editor"],"mappings":"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I,IAAI,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,IAAI,KAAK,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,QAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,OAAO,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,QAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,OAAO,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,IAAI,MAAM,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAA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","x_google_ignoreList":[0,1,6,10]}
|