pts 0.10.8 → 0.10.11

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap cf5c6d35c9eb5a530ce1","webpack:///./src/Pt.ts","webpack:///./src/Util.ts","webpack:///./src/Op.ts","webpack:///./src/Num.ts","webpack:///./src/LinearAlgebra.ts","webpack:///./src/Bound.ts","webpack:///./src/Form.ts","webpack:///./src/Space.ts","webpack:///./src/Dom.ts","webpack:///./src/Typography.ts","webpack:///./src/Canvas.ts","webpack:///./src/Color.ts","webpack:///./src/Create.ts","webpack:///./src/Svg.ts","webpack:///./src/UI.ts","webpack:///./src/_module.ts"],"names":[],"mappings":"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,GAAG,EAAC,EAAE,EAAC,GAAG;IAC3E,GAAG,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG;IACxE,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG;IAC1E,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE;IAC3E,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC;IACxE,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG;IACxE,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAE,EAAE,EAAC,EAA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","file":"pts.module.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"pts\"] = factory();\n\telse\n\t\troot[\"pts\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 15);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap cf5c6d35c9eb5a530ce1","// Source code licensed under Apache License 2.0. \r\n// Copyright © 2017 William Ngan. (https://github.com/williamngan/pts)\r\n\r\n\r\nimport {Util, Const} from \"./Util\";\r\nimport {Geom, Num} from \"./Num\";\r\nimport {Vec, Mat} from \"./LinearAlgebra\";\r\n\r\n\r\nexport interface IPt {\r\n x?:number;\r\n y?:number;\r\n z?:number;\r\n w?:number;\r\n}\r\n\r\nexport var PtBaseArray = Float32Array;\r\nexport type GroupLike = Group | Pt[];\r\nexport type PtLike = Pt | Float32Array | number[];\r\n\r\n\r\n/**\r\n * Pt is a subclass of Float32Array with additional properties and functions to support vector and geometric calculations.\r\n * See [Pt guide](../../guide/Pt-0200.html) for details\r\n */\r\nexport class Pt extends PtBaseArray implements IPt, Iterable<number> {\r\n\r\n protected _id:string;\r\n\r\n /**\r\n * Create a Pt. If no parameter is provided, this will instantiate a Pt with 2 dimensions [0, 0]. \r\n * \r\n * Note that `new Pt(3)` will only instantiate Pt with length of 3 (ie, same as `new Float32Array(3)` ). If you need a Pt with 1 dimension of value 3, use `new Pt([3])`.\r\n * @example `new Pt()`, `new Pt(1,2,3,4,5)`, `new Pt([1,2])`, `new Pt({x:0, y:1})`, `new Pt(pt)`\r\n * @param args a list of numeric parameters, an array of numbers, or an object with {x,y,z,w} properties\r\n */\r\n constructor(...args) {\r\n if (args.length === 1 && typeof args[0] == \"number\") {\r\n super( args[0] ); // init with the TypedArray's length. Needed this in order to make \".map\", \".slice\" etc work.\r\n } else {\r\n super( (args.length>0) ? Util.getArgs(args) : [0,0] );\r\n } \r\n }\r\n\r\n static make( dimensions:number, defaultValue:number=0, randomize:boolean=false ):Pt {\r\n let p = new PtBaseArray(dimensions);\r\n if (defaultValue) p.fill( defaultValue );\r\n if (randomize) {\r\n for (let i=0, len=p.length; i<len; i++) {\r\n p[i] = p[i]*Math.random();\r\n }\r\n }\r\n return new Pt( p );\r\n }\r\n\r\n get id():string { return this._id; }\r\n set id( s:string ) { this._id = s; }\r\n\r\n get x():number { return this[0]; }\r\n get y():number { return this[1]; }\r\n get z():number { return this[2]; }\r\n get w():number { return this[3]; }\r\n\r\n set x( n:number ) { this[0] = n; }\r\n set y( n:number ) { this[1] = n; }\r\n set z( n:number ) { this[2] = n; }\r\n set w( n:number ) { this[3] = n; }\r\n \r\n\r\n /**\r\n * Clone this Pt\r\n */\r\n clone():Pt {\r\n return new Pt( this );\r\n }\r\n\r\n\r\n /**\r\n * Check if another Pt is equal to this Pt, within a threshold\r\n * @param p another Pt to compare with\r\n * @param threshold a threshold value within which the two Pts are considered equal. Default is 0.000001.\r\n */\r\n equals( p:PtLike, threshold=0.000001 ):boolean {\r\n for (let i=0, len=this.length; i<len; i++) {\r\n if ( Math.abs(this[i]-p[i]) > threshold ) return false;\r\n }\r\n return true;\r\n }\r\n\r\n\r\n /**\r\n * Update the values of this Pt\r\n * @param args a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n to( ...args ):this {\r\n let p = Util.getArgs( args );\r\n for (let i=0, len=Math.min(this.length, p.length); i<len; i++) {\r\n this[i] = p[i];\r\n }\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Like `to()` but returns a new Pt\r\n * @param args a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n $to( ...args ):Pt {\r\n return this.clone().to( ...args );\r\n }\r\n\r\n\r\n /**\r\n * Update the values of this Pt to point at a specific angle\r\n * @param radian target angle in radian\r\n * @param magnitude Optional magnitude if known. If not provided, it'll calculate and use this Pt's magnitude.\r\n * @param anchorFromPt If `true`, translate to new position from current position. Default is `false` which update the position from origin (0,0);\r\n */\r\n toAngle( radian:number, magnitude?:number, anchorFromPt:boolean=false ):this {\r\n let m = (magnitude!=undefined) ? magnitude : this.magnitude();\r\n let change = [Math.cos(radian)*m, Math.sin(radian)*m];\r\n return (anchorFromPt) ? this.add( change ) : this.to( change );\r\n }\r\n\r\n\r\n /**\r\n * Create an operation using this Pt, passing this Pt into a custom function's first parameter. See the [Op guide](../../guide/Op-0400.html) for details.\r\n * For example: `let myOp = pt.op( fn ); let result = myOp( [1,2,3] );`\r\n * @param fn any function that takes a Pt as its first parameter\r\n * @returns a resulting function that takes other parameters required in `fn`\r\n */\r\n op( fn:(p1:PtLike, ...rest:any[]) => any ): ( ...rest:any[] ) => any {\r\n let self = this;\r\n return ( ...params:any[] ) => {\r\n return fn( self, ...params );\r\n };\r\n }\r\n\r\n\r\n /**\r\n * This combines a series of operations into an array. See `op()` for details.\r\n * For example: `let myOps = pt.ops([fn1, fn2, fn3]); let results = myOps.map( (op) => op([1,2,3]) );`\r\n * @param fns an array of functions for `op`\r\n * @returns an array of resulting functions\r\n */\r\n ops( fns:((p1:PtLike, ...rest:any[]) => any)[] ): (( ...rest:any[] ) => any)[] {\r\n let _ops = [];\r\n for (let i=0, len=fns.length; i<len; i++) {\r\n _ops.push( this.op( fns[i] ) );\r\n }\r\n return _ops;\r\n }\r\n\r\n\r\n /**\r\n * Take specific dimensional values from this Pt and create a new Pt\r\n * @param axis a string such as \"xy\" (use Const.xy) or an array to specify index for two dimensions\r\n */\r\n $take( axis:string|number[] ):Pt {\r\n let p = [];\r\n for (let i=0, len=axis.length; i<len; i++) {\r\n p.push( this[axis[i]] || 0 );\r\n }\r\n return new Pt(p);\r\n }\r\n\r\n\r\n /**\r\n * Concatenate this Pt with addition dimensional values and return as a new Pt\r\n * @param args a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n $concat( ...args ):Pt {\r\n return new Pt( this.toArray().concat( Util.getArgs( args ) ) );\r\n }\r\n\r\n\r\n /**\r\n * Add scalar or vector values to this Pt\r\n * @param args a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n add(...args): this { \r\n (args.length === 1 && typeof args[0] == \"number\") ? Vec.add( this, args[0] ) : Vec.add( this, Util.getArgs(args) );\r\n return this; \r\n }\r\n\r\n\r\n /**\r\n * Like `add`, but returns result as a new Pt\r\n */\r\n $add(...args): Pt { return this.clone().add(...args); }\r\n\r\n\r\n /**\r\n * Subtract scalar or vector values from this Pt\r\n * @param args a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n subtract(...args): this { \r\n (args.length === 1 && typeof args[0] == \"number\") ? Vec.subtract( this, args[0] ) : Vec.subtract( this, Util.getArgs(args) );\r\n return this; \r\n }\r\n\r\n\r\n /**\r\n * Like `subtract`, but returns result as a new Pt\r\n */\r\n $subtract(...args): Pt { return this.clone().subtract(...args); }\r\n\r\n\r\n /**\r\n * Multiply scalar or vector values (as element-wise) with this Pt.\r\n * @param args a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n multiply(...args): this { \r\n (args.length === 1 && typeof args[0] == \"number\") ? Vec.multiply( this, args[0] ) : Vec.multiply( this, Util.getArgs(args) );\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Like `multiply`, but returns result as a new Pt\r\n */\r\n $multiply(...args): Pt { return this.clone().multiply(...args); }\r\n\r\n\r\n /**\r\n * Divide this Pt over scalar or vector values (as element-wise)\r\n * @param args a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n divide(...args): this { \r\n (args.length === 1 && typeof args[0] == \"number\") ? Vec.divide( this, args[0] ) : Vec.divide( this, Util.getArgs(args) );\r\n return this; \r\n }\r\n\r\n\r\n /**\r\n * Like `divide`, but returns result as a new Pt\r\n */\r\n $divide(...args): Pt { return this.clone().divide(...args); }\r\n\r\n\r\n /**\r\n * Get the sqaured distance (magnitude) of this Pt from origin\r\n */\r\n magnitudeSq():number { return Vec.dot( this, this ); }\r\n\r\n\r\n /**\r\n * Get the distance (magnitude) of this Pt from origin\r\n */\r\n magnitude():number { return Vec.magnitude( this ); }\r\n\r\n\r\n /**\r\n * Convert to a unit vector, which is a normalized vector whose magnitude equals 1.\r\n * @param magnitude Optional: if the magnitude is known, pass it as a parameter to avoid duplicate calculation.\r\n */\r\n unit( magnitude:number=undefined ):Pt {\r\n Vec.unit( this, magnitude );\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Get a unit vector from this Pt\r\n */\r\n $unit( magnitude:number=undefined ):Pt { return this.clone().unit( magnitude ); }\r\n\r\n\r\n /**\r\n * Dot product of this Pt and another Pt\r\n * @param args a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n dot( ...args ):number { return Vec.dot( this, Util.getArgs(args) ); }\r\n\r\n\r\n /**\r\n * 2D Cross product of this Pt and another Pt. Return results as a new Pt.\r\n * @param args a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n cross2D( ...args ):number { return Vec.cross2D( this, Util.getArgs(args) ); }\r\n\r\n \r\n /**\r\n * 3D Cross product of this Pt and another Pt. Return results as a new Pt.\r\n * @param args a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n $cross( ...args ): Pt { return Vec.cross( this, Util.getArgs( args ) ); }\r\n\r\n\r\n /**\r\n * Calculate vector projection of this Pt on another Pt. Returns result as a new Pt.\r\n * @param p a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n $project( p:Pt ):Pt {\r\n let m = p.magnitude();\r\n let a = this.$unit();\r\n let b = p.$divide(m);\r\n let dot = a.dot( b );\r\n return a.multiply( m * dot );\r\n }\r\n\r\n\r\n /**\r\n * Absolute values for all values in this pt\r\n */\r\n abs():Pt {\r\n Vec.abs( this );\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Get a new Pt with absolute values of this Pt\r\n */\r\n $abs():Pt {\r\n return this.clone().abs();\r\n }\r\n\r\n\r\n /**\r\n * Floor values for all values in this pt\r\n */\r\n floor():Pt {\r\n Vec.floor( this );\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Get a new Pt with floor values of this Pt\r\n */\r\n $floor():Pt {\r\n return this.clone().floor();\r\n }\r\n\r\n\r\n /**\r\n * Ceil values for all values in this pt\r\n */\r\n ceil():Pt {\r\n Vec.ceil( this );\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Get a new Pt with ceil values of this Pt\r\n */\r\n $ceil():Pt {\r\n return this.clone().ceil();\r\n }\r\n\r\n\r\n /**\r\n * Round values for all values in this pt\r\n */\r\n round():Pt {\r\n Vec.round( this );\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Get a new Pt with round values of this Pt\r\n */\r\n $round():Pt {\r\n return this.clone().round();\r\n }\r\n\r\n\r\n /**\r\n * Find the minimum value across all dimensions in this Pt\r\n * @returns an object with `value` and `index` which returns the minimum value and its dimensional index\r\n */\r\n minValue():{value:number, index:number} {\r\n return Vec.min( this );\r\n }\r\n\r\n\r\n /**\r\n * Find the maximum value across all dimensions in this Pt\r\n * @returns an object with `value` and `index` which returns the maximum value and its dimensional index\r\n */\r\n maxValue():{value:number, index:number} {\r\n return Vec.max( this );\r\n }\r\n\r\n\r\n /**\r\n * Get a new Pt that has the minimum dimensional values of this Pt and another Pt\r\n * @param args a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n $min( ...args ):Pt {\r\n let p = Util.getArgs( args );\r\n let m = this.clone();\r\n for (let i=0, len=Math.min( this.length, p.length ); i<len; i++) {\r\n m[i] = Math.min( this[i], p[i] );\r\n }\r\n return m;\r\n }\r\n\r\n\r\n /**\r\n * Get a new Pt that has the maximum dimensional values of this Pt and another Pt\r\n * @param args a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n $max( ...args ):Pt {\r\n let p = Util.getArgs( args );\r\n let m = this.clone();\r\n for (let i=0, len=Math.min( this.length, p.length ); i<len; i++) {\r\n m[i] = Math.max( this[i], p[i] );\r\n }\r\n return m;\r\n }\r\n \r\n\r\n /**\r\n * Get angle of this vector from origin\r\n * @param axis a string such as \"xy\" (use Const.xy) or an array to specify index for two dimensions\r\n */\r\n angle( axis:string|number[]=Const.xy ):number {\r\n return Math.atan2( this[axis[1]], this[axis[0]] );\r\n }\r\n\r\n\r\n /**\r\n * Get the angle between this and another Pt\r\n * @param p the other Pt\r\n * @param axis a string such as \"xy\" (use Const.xy) or an array to specify index for two dimensions\r\n */\r\n angleBetween( p:Pt, axis:string|number[]=Const.xy ):number {\r\n return Geom.boundRadian( this.angle(axis) ) - Geom.boundRadian( p.angle(axis) );\r\n }\r\n\r\n\r\n /**\r\n * Scale this Pt from origin or from an anchor point\r\n * @param scale scale ratio\r\n * @param anchor optional anchor point to scale from\r\n */\r\n scale( scale:number|number[]|PtLike, anchor?:PtLike ) { \r\n Geom.scale( this, scale, anchor || Pt.make( this.length, 0) );\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Rotate this Pt from origin or from an anchor point in 2D\r\n * @param angle rotate angle\r\n * @param anchor optional anchor point to scale from\r\n * @param axis optional string such as \"yz\" to specify a 2D plane\r\n */\r\n rotate2D( angle:number, anchor?:PtLike, axis?:string ) { \r\n Geom.rotate2D( this, angle, anchor || Pt.make( this.length, 0), axis );\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Shear this Pt from origin or from an anchor point in 2D\r\n * @param shear shearing value which can be a number or an array of 2 numbers\r\n * @param anchor optional anchor point to scale from\r\n * @param axis optional string such as \"yz\" to specify a 2D plane\r\n */\r\n shear2D( scale:number|number[]|PtLike, anchor?:PtLike, axis?:string) {\r\n Geom.shear2D( this, scale, anchor || Pt.make( this.length, 0), axis );\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Reflect this Pt along a 2D line\r\n * @param line a Group of 2 Pts that defines a line for reflection\r\n * @param axis optional axis such as \"yz\" to define a 2D plane of reflection\r\n */\r\n reflect2D( line:GroupLike, axis?:string):this {\r\n Geom.reflect2D( this, line, axis );\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * A string representation of this Pt: \"Pt(1, 2, 3)\"\r\n */\r\n toString():string {\r\n return `Pt(${ this.join(\", \")})`;\r\n }\r\n\r\n\r\n /**\r\n * Convert this Pt to a javascript Array\r\n */\r\n toArray():number[] {\r\n return [].slice.call( this );\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * A Group is a subclass of Array. It should onnly contain Pt instances. You can think of it as an array of arrays (Float32Arrays to be specific).\r\n * See [Group guide](../../guide/Group-0300.html) for details\r\n */\r\nexport class Group extends Array<Pt> {\r\n\r\n protected _id:string;\r\n \r\n constructor(...args:Pt[]) {\r\n super(...args);\r\n }\r\n\r\n get id():string { return this._id; }\r\n set id( s:string ) { this._id = s; }\r\n\r\n /** The first Pt in this group */\r\n get p1():Pt { return this[0]; }\r\n\r\n /** The second Pt in this group */\r\n get p2():Pt { return this[1]; }\r\n\r\n /** The third Pt in this group */\r\n get p3():Pt { return this[2]; }\r\n\r\n /** The forth Pt in this group */\r\n get p4():Pt { return this[3]; }\r\n\r\n /** The last Pt in this group */\r\n get q1():Pt { return this[this.length-1]; }\r\n\r\n /** The second-last Pt in this group */\r\n get q2():Pt { return this[this.length-2]; }\r\n\r\n /** The third-last Pt in this group */\r\n get q3():Pt { return this[this.length-3]; }\r\n\r\n /** The forth-last Pt in this group */\r\n get q4():Pt { return this[this.length-4]; }\r\n\r\n \r\n\r\n\r\n /**\r\n * Depp clone this group and its Pts\r\n */\r\n clone():Group {\r\n let group = new Group(); \r\n for (let i=0, len=this.length; i<len; i++) {\r\n group.push( this[i].clone() );\r\n }\r\n return group;\r\n }\r\n\r\n\r\n /**\r\n * Convert an array of numeric arrays into a Group of Pts\r\n * @param list an array of numeric arrays\r\n * @example `Group.fromArray( [[1,2], [3,4], [5,6]] )`\r\n */\r\n static fromArray( list:PtLike[] ):Group {\r\n let g = new Group();\r\n for (let i=0, len=list.length; i<len; i++) {\r\n let p = (list[i] instanceof Pt) ? list[i] as Pt : new Pt(list[i]);\r\n g.push( p );\r\n }\r\n return g;\r\n }\r\n\r\n\r\n /**\r\n * Convert an array of Pts into a Group.\r\n * @param list an array of Pts\r\n */\r\n static fromPtArray( list:GroupLike ):Group {\r\n return Group.from( list ) as Group;\r\n }\r\n\r\n\r\n /**\r\n * Split this Group into an array of sub-groups\r\n * @param chunkSize number of items per sub-group\r\n * @param stride forward-steps after each sub-group\r\n * @param loopBack if `true`, always go through the array till the end and loop back to the beginning to complete the segments if needed\r\n */\r\n split( chunkSize:number, stride?:number, loopBack:boolean=false ):Group[] {\r\n let sp = Util.split( this, chunkSize, stride, loopBack );\r\n return sp as Group[];\r\n }\r\n\r\n\r\n /**\r\n * Insert a Pt into this group\r\n * @param pts Another group of Pts\r\n * @param index the index position to insert into\r\n */\r\n insert( pts:GroupLike, index=0 ):this {\r\n Group.prototype.splice.apply( this, [index, 0, ...pts] );\r\n return this;\r\n }\r\n \r\n\r\n /**\r\n * Like Array's splice function, with support for negative index and a friendlier name.\r\n * @param index start index, which can be negative (where -1 is at index 0, -2 at index 1, etc)\r\n * @param count number of items to remove\r\n * @returns The items that are removed. \r\n */\r\n remove( index=0, count:number=1 ):Group {\r\n let param = (index<0) ? [index*-1 - 1, count] : [index, count];\r\n return Group.prototype.splice.apply( this, param );\r\n }\r\n\r\n\r\n /**\r\n * Split this group into an array of sub-group segments\r\n * @param pts_per_segment number of Pts in each segment\r\n * @param stride forward-step to take\r\n * @param loopBack if `true`, always go through the array till the end and loop back to the beginning to complete the segments if needed\r\n */\r\n segments( pts_per_segment:number=2, stride:number=1, loopBack:boolean=false ):Group[] { \r\n return this.split(pts_per_segment, stride, loopBack); \r\n }\r\n\r\n\r\n /**\r\n * Get all the line segments (ie, edges in a graph) of this group\r\n */\r\n lines():Group[] { return this.segments(2, 1); }\r\n\r\n\r\n /**\r\n * Find the centroid of this group's Pts, which is the average middle point.\r\n */\r\n centroid(): Pt {\r\n return Geom.centroid( this );\r\n }\r\n\r\n \r\n /**\r\n * Find the rectangular bounding box of this group's Pts.\r\n * @returns a Group of 2 Pts representing the top-left and bottom-right of the rectangle\r\n */\r\n boundingBox():Group {\r\n return Geom.boundingBox( this );\r\n }\r\n\r\n\r\n /**\r\n * Anchor all the Pts in this Group using a target Pt as origin. (ie, subtract all Pt with the target anchor to get a relative position). All the Pts' values will be updated.\r\n * @param ptOrIndex a Pt, or a numeric index to target a specific Pt in this Group\r\n */\r\n anchorTo( ptOrIndex:PtLike|number=0 ) { Geom.anchor( this, ptOrIndex, \"to\" ); }\r\n\r\n\r\n /**\r\n * Anchor all the Pts in this Group by its absolute position from a target Pt. (ie, add all Pt with the target anchor to get an absolute position). All the Pts' values will be updated.\r\n * @param ptOrIndex a Pt, or a numeric index to target a specific Pt in this Group\r\n */\r\n anchorFrom( ptOrIndex:PtLike|number=0 ) { Geom.anchor( this, ptOrIndex, \"from\" ); }\r\n\r\n\r\n /**\r\n * Create an operation using this Group, passing this Group into a custom function's first parameter. See the [Op guide](../../guide/Op-0400.html) for details.\r\n * For example: `let myOp = group.op( fn ); let result = myOp( [1,2,3] );`\r\n * @param fn any function that takes a Group as its first parameter\r\n * @returns a resulting function that takes other parameters required in `fn`\r\n */\r\n op( fn:(g1:GroupLike, ...rest:any[]) => any ): ( ...rest:any[] ) => any {\r\n let self = this;\r\n return ( ...params:any[] ) => {\r\n return fn( self, ...params );\r\n };\r\n }\r\n\r\n\r\n /**\r\n * This combines a series of operations into an array. See `op()` for details.\r\n * For example: `let myOps = pt.ops([fn1, fn2, fn3]); let results = myOps.map( (op) => op([1,2,3]) );`\r\n * @param fns an array of functions for `op`\r\n * @returns an array of resulting functions\r\n */\r\n ops( fns:((g1:GroupLike, ...rest:any[]) => any)[] ): (( ...rest:any[] ) => any)[] {\r\n let _ops = [];\r\n for (let i=0, len=fns.length; i<len; i++) {\r\n _ops.push( this.op( fns[i] ) );\r\n }\r\n return _ops;\r\n }\r\n\r\n\r\n /**\r\n * Get an interpolated point on the line segments defined by this Group\r\n * @param t a value between 0 to 1 usually\r\n */\r\n interpolate( t:number ):Pt {\r\n t = Num.clamp( t, 0, 1 );\r\n let chunk = this.length-1;\r\n let tc = 1/(this.length-1);\r\n let idx = Math.floor( t / tc );\r\n return Geom.interpolate( this[idx], this[ Math.min( this.length-1, idx+1)], (t - idx*tc) * chunk );\r\n }\r\n\r\n\r\n /**\r\n * Move every Pt's position by a specific amount. Same as `add`.\r\n * @param args a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n moveBy( ...args ):this {\r\n return this.add( ...args );\r\n }\r\n\r\n /**\r\n * Move the first Pt in this group to a specific position, and move all the other Pts correspondingly\r\n * @param args a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n moveTo( ...args ):this {\r\n let d = new Pt( Util.getArgs(args) ).subtract( this[0] );\r\n this.moveBy( d );\r\n return this; \r\n }\r\n\r\n\r\n /**\r\n * Scale this group's Pts from an anchor point. Default anchor point is the first Pt in this group.\r\n * @param scale scale ratio\r\n * @param anchor optional anchor point to scale from\r\n */\r\n scale( scale:number|number[]|PtLike, anchor?:PtLike ):this { \r\n for (let i=0, len=this.length; i<len; i++) {\r\n Geom.scale( this[i], scale, anchor || this[0] );\r\n }\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Rotate this group's Pt from an anchor point in 2D. Default anchor point is the first Pt in this group.\r\n * @param angle rotate angle\r\n * @param anchor optional anchor point to scale from\r\n * @param axis optional string such as \"yz\" to specify a 2D plane\r\n */\r\n rotate2D( angle:number, anchor?:PtLike, axis?:string ):this { \r\n for (let i=0, len=this.length; i<len; i++) {\r\n Geom.rotate2D( this[i], angle, anchor || this[0], axis );\r\n } \r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Shear this group's Pt from an anchor point in 2D. Default anchor point is the first Pt in this group.\r\n * @param shear shearing value which can be a number or an array of 2 numbers\r\n * @param anchor optional anchor point to scale from\r\n * @param axis optional string such as \"yz\" to specify a 2D plane\r\n */\r\n shear2D( scale:number|number[]|PtLike, anchor?:PtLike, axis?:string):this {\r\n for (let i=0, len=this.length; i<len; i++) {\r\n Geom.shear2D( this[i], scale, anchor || this[0], axis );\r\n }\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Reflect this group's Pts along a 2D line. Default anchor point is the first Pt in this group.\r\n * @param line a Group of 2 Pts that defines a line for reflection\r\n * @param axis optional axis such as \"yz\" to define a 2D plane of reflection\r\n */\r\n reflect2D( line:GroupLike, axis?:string):this {\r\n for (let i=0, len=this.length; i<len; i++) {\r\n Geom.reflect2D( this[i], line, axis );\r\n }\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Sort this group's Pts by values in a specific dimension\r\n * @param dim dimensional index\r\n * @param desc if true, sort descending. Default is false (ascending)\r\n */\r\n sortByDimension( dim:number, desc:boolean=false ):this {\r\n return this.sort( (a, b) => (desc) ? b[dim] - a[dim] : a[dim] - b[dim] );\r\n }\r\n\r\n\r\n /**\r\n * Update each Pt in this Group with a Pt function\r\n * @param ptFn string name of an existing Pt function. Note that the function must return Pt.\r\n * @param args arguments for the function specified in ptFn\r\n */\r\n forEachPt( ptFn:string, ...args ):this {\r\n if (!this[0][ptFn]) {\r\n Util.warn( `${ptFn} is not a function of Pt` );\r\n return this;\r\n }\r\n for (let i=0, len=this.length; i<len; i++) {\r\n this[i] = this[i][ptFn]( ...args );\r\n }\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Add scalar or vector values to this group's Pts.\r\n * @param args a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n add( ...args ):this {\r\n return this.forEachPt( \"add\", ...args );\r\n }\r\n\r\n\r\n /**\r\n * Subtract scalar or vector values from this group's Pts.\r\n * @param args a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n subtract( ...args ):this {\r\n return this.forEachPt( \"subtract\", ...args );\r\n }\r\n\r\n\r\n /**\r\n * Multiply scalar or vector values (as element-wise) with this group's Pts.\r\n * @param args a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n multiply( ...args ):this {\r\n return this.forEachPt( \"multiply\", ...args );\r\n }\r\n \r\n\r\n /**\r\n * Divide this group's Pts over scalar or vector values (as element-wise)\r\n * @param args a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n divide( ...args ):this {\r\n return this.forEachPt( \"divide\", ...args );\r\n }\r\n\r\n\r\n /**\r\n * Apply this group as a matrix and calculate matrix addition\r\n * @param g a scalar number, an array of numeric arrays, or a group of Pt\r\n * @returns a new Group\r\n */\r\n $matrixAdd( g:GroupLike|number[][]|number ):Group {\r\n return Mat.add( this, g );\r\n }\r\n\r\n\r\n /**\r\n * Apply this group as a matrix and calculate matrix multiplication\r\n * @param g a scalar number, an array of numeric arrays, or a Group of K Pts, each with N dimensions (K-rows, N-columns) -- or if transposed is true, then N Pts with K dimensions\r\n * @param transposed (Only applicable if it's not elementwise multiplication) If true, then a and b's columns should match (ie, each Pt should have the same dimensions). Default is `false`.\r\n * @param elementwise if true, then the multiplication is done element-wise. Default is `false`.\r\n * @returns If not elementwise, this will return a new Group with M Pt, each with N dimensions (M-rows, N-columns).\r\n */\r\n $matrixMultiply( g:GroupLike|number, transposed:boolean=false, elementwise:boolean=false ):Group {\r\n return Mat.multiply( this, g, transposed , elementwise);\r\n }\r\n\r\n\r\n /**\r\n * Zip one slice of an array of Pt. Imagine the Pts are organized in rows, then this function will take the values in a specific column.\r\n * @param idx index to zip at\r\n * @param defaultValue a default value to fill if index out of bound. If not provided, it will throw an error instead.\r\n */\r\n zipSlice( index:number, defaultValue:number|boolean = false ):Pt {\r\n return Mat.zipSlice( this, index, defaultValue );\r\n }\r\n\r\n /**\r\n * Zip a group of Pt. eg, [[1,2],[3,4],[5,6]] => [[1,3,5],[2,4,6]]\r\n * @param defaultValue a default value to fill if index out of bound. If not provided, it will throw an error instead.\r\n * @param useLongest If true, find the longest list of values in a Pt and use its length for zipping. Default is false, which uses the first item's length for zipping.\r\n */\r\n $zip( defaultValue:number|boolean = undefined, useLongest=false ):Group {\r\n return Mat.zip( this, defaultValue, useLongest );\r\n }\r\n\r\n\r\n /**\r\n * Get a string representation of this group\r\n */\r\n toString():string {\r\n return \"Group[ \"+ this.reduce( (p, c) => p+c.toString()+\" \", \"\" )+\" ]\";\r\n }\r\n\r\n\r\n}\n\n\n// WEBPACK FOOTER //\n// ./~/tslint-loader??ref--0!./src/Pt.ts","// Source code licensed under Apache License 2.0.\r\n// Copyright © 2017 William Ngan. (https://github.com/williamngan/pts)\r\n\r\n\r\nimport {Group} from \"./Pt\";\r\n\r\n\r\n/**\r\n * Various constant values for enumerations and calculations\r\n */\r\nexport const Const = {\r\n xy: \"xy\",\r\n yz: \"yz\",\r\n xz: \"xz\",\r\n xyz: \"xyz\",\r\n\r\n horizontal: 0,\r\n vertical: 1,\r\n\r\n /* represents identical point or value */\r\n identical: 0,\r\n\r\n /* represents right position or direction */\r\n right: 4,\r\n\r\n /* represents bottom right position or direction */\r\n bottom_right: 5,\r\n\r\n /* represents bottom position or direction */\r\n bottom: 6,\r\n\r\n /* represents bottom left position or direction */\r\n bottom_left: 7,\r\n\r\n /* represents left position or direction */\r\n left: 8,\r\n\r\n /* represents top left position or direction */\r\n top_left: 1,\r\n\r\n /* represents top position or direction */\r\n top: 2,\r\n\r\n /* represents top right position or direction */\r\n top_right: 3,\r\n\r\n /* represents an arbitrary very small number. It is set as 0.0001 here. */\r\n epsilon : 0.0001,\r\n\r\n /* represents Number.MAX_VALUE */\r\n max: Number.MAX_VALUE,\r\n\r\n /* represents Number.MIN_VALUE */\r\n min: Number.MIN_VALUE,\r\n\r\n /* pi radian (180 deg) */\r\n pi: Math.PI,\r\n\r\n /* two pi radian (360deg) */\r\n two_pi : 6.283185307179586,\r\n\r\n /* half pi radian (90deg) */\r\n half_pi : 1.5707963267948966,\r\n\r\n /* pi/4 radian (45deg) */\r\n quarter_pi : 0.7853981633974483,\r\n\r\n /* pi/180: 1 degree in radian */\r\n one_degree: 0.017453292519943295,\r\n\r\n /* multiply this constant with a radian to get a degree */\r\n rad_to_deg: 57.29577951308232,\r\n\r\n /* multiply this constant with a degree to get a radian */\r\n deg_to_rad: 0.017453292519943295,\r\n\r\n /* Gravity acceleration (unit: m/s^2) and gravity force (unit: Newton) on 1kg of mass. */\r\n gravity: 9.81,\r\n\r\n /* 1 Newton: 0.10197 Kilogram-force */\r\n newton: 0.10197,\r\n\r\n /* Gaussian constant (1 / Math.sqrt(2 * Math.PI)) */\r\n gaussian: 0.3989422804014327\r\n\r\n};\r\n\r\n\r\n/**\r\n * Util provides various helper functions\r\n */\r\nexport class Util {\r\n\r\n static warnLevel:\"error\"|\"warn\"|\"default\" = \"default\";\r\n\r\n /**\r\n * Convert different kinds of parameters (arguments, array, object) into an array of numbers\r\n * @param args a list of numbers, an array of number, or an object with {x,y,z,w} properties\r\n */\r\n static getArgs( args:any[] ):Array<number> {\r\n if (args.length<1) return [];\r\n\r\n let pos = [];\r\n \r\n let isArray = Array.isArray( args[0] ) || ArrayBuffer.isView( args[0] );\r\n \r\n // positional arguments: x,y,z,w,...\r\n if (typeof args[0] === 'number') {\r\n pos = Array.prototype.slice.call( args );\r\n\r\n // as an object of {x, y?, z?, w?}\r\n } else if (typeof args[0] === 'object' && !isArray ) {\r\n let a = [\"x\", \"y\", \"z\", \"w\"];\r\n let p = args[0];\r\n for (let i=0; i<a.length; i++) {\r\n if ( (p.length && i>=p.length) || !(a[i] in p) ) break; // check for length and key exist\r\n pos.push( p[ a[i] ] );\r\n }\r\n\r\n // as an array of values\r\n } else if (isArray) {\r\n pos = [].slice.call( args[0] );\r\n }\r\n \r\n return pos;\r\n }\r\n\r\n\r\n /**\r\n * Send a warning message based on Util.warnLevel global setting. This allows you to dynamically set whether minor errors should be thrown or printed in console or muted.\r\n * @param message any error or warning message\r\n * @param defaultReturn optional return value\r\n */\r\n static warn( message:string=\"error\", defaultReturn:any=undefined ):any {\r\n if (Util.warnLevel == \"error\") {\r\n throw new Error( message );\r\n } else if (Util.warnLevel == \"warn\") {\r\n console.warn( message );\r\n }\r\n return defaultReturn;\r\n \r\n }\r\n\r\n\r\n static randomInt( range:number, start:number=0 ) {\r\n return Math.floor( Math.random()*range ) + start;\r\n }\r\n\r\n /**\r\n * Split an array into chunks of sub-array\r\n * @param pts an array \r\n * @param size chunk size, ie, number of items in a chunk\r\n * @param stride optional parameter to \"walk through\" the array in steps\r\n * @param loopBack if `true`, always go through the array till the end and loop back to the beginning to complete the segments if needed\r\n */\r\n static split( pts:any[], size:number, stride?:number, loopBack:boolean=false ):any[][] {\r\n let st = stride || size;\r\n let chunks = [];\r\n for (let i=0; i<pts.length; i++) {\r\n if (i*st+size > pts.length) {\r\n if (loopBack) {\r\n let g = pts.slice(i*st);\r\n g = g.concat( pts.slice( 0, (i*st+size)%size ) );\r\n chunks.push( g );\r\n } else {\r\n break;\r\n }\r\n } else {\r\n chunks.push( pts.slice(i*st, i*st+size ) );\r\n }\r\n }\r\n return chunks;\r\n }\r\n\r\n\r\n /**\r\n * Flatten an array of arrays such as Group[] to a flat Array or Group\r\n * @param pts an array, usually an array of Groups\r\n * @param flattenAsGroup a boolean to specify whether the return type should be a Group or Array. Default is `true` which returns a Group.\r\n */\r\n static flatten( pts:any[], flattenAsGroup:boolean=true ) {\r\n let arr = (flattenAsGroup) ? new Group() : new Array();\r\n return arr.concat.apply(arr, pts);\r\n }\r\n\r\n\r\n /**\r\n * Given two arrays of object<T>, and a function that operate on two object<T>, return an array of T \r\n * @param a an array of object<T>, eg [ Group, Group, ... ]\r\n * @param b another array of object<T>\r\n * @param op a function that takes two parameters (a, b) and returns a T\r\n */\r\n static combine<T>( a:T[], b:T[], op:(a:T, b:T) => T ):T[] {\r\n let result = [];\r\n for (let i=0, len=a.length; i<len; i++) {\r\n for (let k=0, lenB=b.length; k<lenB; k++) {\r\n result.push( op(a[i], b[k]) );\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * Zip arrays. eg, [[1,2],[3,4],[5,6]] => [[1,3,5],[2,4,6]]\r\n * @param arrays an array of arrays \r\n */\r\n static zip( ...arrays:Array<any>[] ) {\r\n let z = [];\r\n for (let i=0, len=arrays[0].length; i<len; i++) {\r\n let p = [];\r\n for (let k=0; k<arrays.length; k++) {\r\n p.push( arrays[k][i] );\r\n }\r\n z.push( p );\r\n }\r\n return z;\r\n }\r\n\r\n\r\n /**\r\n * Create a convenient stepper. This returns a function which you can call repeatedly to step a counter.\r\n * @param max Maximum of the stepper range. The resulting stepper will return (min to max-1) values.\r\n * @param min Minimum of the stepper range. Default is 0.\r\n * @param stride Stride of the step. Default is 1.\r\n * @param callback An optional callback function( step ), which will be called each tiem when stepper function is called.\r\n * @example `let counter = stepper(100); let c = counter(); c = counter(); ...`\r\n * @returns a function which will increment the stepper and return its value at each call.\r\n */\r\n static stepper( max:number, min:number=0, stride:number=1, callback?:(n:number) => void ):(() => number) {\r\n let c = min;\r\n return function() {\r\n c += stride;\r\n if (c >= max) {\r\n c = min + (c-max);\r\n }\r\n if (callback) callback(c);\r\n return c;\r\n };\r\n }\r\n\r\n\r\n /**\r\n * A convenient way to step through a range. Same as `for (i=0; i<range; i++)`, except this also stores the resulting return values at each step and return them as an array.\r\n * @param range a range to step through\r\n * @param fn a callback function(index). If this function returns a value, it will be stored at each step\r\n * @returns an array of returned values at each step \r\n */\r\n static forRange( fn:(index:number) => any, range:number, start:number=0, step:number=1 ):any[] {\r\n let temp = [];\r\n for (let i=start, len=range; i<len; i+=step) {\r\n temp[i] = fn(i);\r\n }\r\n return temp;\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./~/tslint-loader??ref--0!./src/Util.ts","// Source code licensed under Apache License 2.0. \n// Copyright © 2017 William Ngan. (https://github.com/williamngan/pts)\n\n\nimport {Util} from \"./Util\";\nimport {Geom, Num} from \"./Num\";\nimport {Pt, PtLike, Group, GroupLike} from \"./Pt\";\nimport {Mat} from \"./LinearAlgebra\";\n\n\nlet _errorLength = (obj, param:number|string=\"expected\") => Util.warn( \"Group's length is less than \"+param, obj );\nlet _errorOutofBound = (obj, param:number|string=\"\") => Util.warn( `Index ${param} is out of bound in Group`, obj );\n\n\n/**\n * Line class provides static functions to create and operate on lines. A line is usually represented as a Group of 2 Pts.\n * You can use the static function as-is, or apply the `op` method in Group or Pt to many of these functions.\n * See [Op guide](../../guide/Op-0400.html) for details.\n */\nexport class Line {\n\n /**\n * Create a line by \"drawing\" from an anchor point, given an angle and a magnitude\n * @param anchor an anchor Pt\n * @param angle an angle in radian\n * @param magnitude magnitude of the line\n * @return a Group of 2 Pts representing a line segement\n */\n static fromAngle( anchor:PtLike, angle:number, magnitude:number ):Group {\n let g = new Group( new Pt(anchor), new Pt(anchor) );\n g[1].toAngle( angle, magnitude, true );\n return g;\n }\n\n\n /**\n * Calculate the slope of a line\n * @param p1 line's first end point\n * @param p2 line's second end point\n */\n static slope( p1:PtLike|number[], p2:PtLike|number[] ):number {\n return (p2[0] - p1[0] === 0) ? undefined : (p2[1] - p1[1]) / (p2[0] - p1[0]);\n }\n\n\n /**\n * Calculate the slope and xy intercepts of a line\n * @param p1 line's first end point\n * @param p2 line's second end point\n * @returns an object with `slope`, `xi`, `yi` properties \n */\n static intercept( p1:PtLike|number[], p2:PtLike|number[] ):{ slope:number, xi:number, yi:number } {\n if (p2[0] - p1[0] === 0) {\n return undefined;\n } else {\n let m = (p2[1] - p1[1]) / (p2[0] - p1[0]);\n let c = p1[1] - m * p1[0];\n return { slope: m, yi: c, xi: (m===0) ? undefined : -c/m };\n }\n }\n\n\n /**\n * Given a 2D path and a point, find whether the point is on left or right side of the line\n * @param line a Group of at least 2 Pts\n * @param pt a Pt\n * @returns a negative value if on left and a positive value if on right. If collinear, then the return value is 0.\n */\n static sideOfPt2D( line:GroupLike, pt:PtLike ):number {\n return (line[1][0] - line[0][0]) * (pt[1] - line[0][1]) - (pt[0] - line[0][0]) * (line[1][1] - line[0][1]);\n }\n\n\n /**\n * Check if three Pts are collinear, ie, on the same straight path.\n * @param p1 first Pt\n * @param p2 second Pt\n * @param p3 third Pt\n * @param threshold a threshold where a smaller value means higher precision threshold for the straight line. Default is 0.01.\n */\n static collinear( p1:PtLike|number[], p2:PtLike|number[], p3:PtLike|number[], threshold:number=0.01 ):boolean {\n // Use cross product method\n let a = new Pt(0,0,0).to(p1).$subtract( p2 );\n let b = new Pt(0,0,0).to(p1).$subtract( p3 ); \n return a.$cross( b ).divide(1000).equals( new Pt(0,0,0), threshold );\n }\n\n\n /**\n * Get magnitude of a line segment\n * @param line a Group of at least 2 Pts\n */\n static magnitude( line:GroupLike ):number {\n return (line.length >= 2) ? line[1].$subtract( line[0] ).magnitude() : 0;\n }\n\n\n /**\n * Get squared magnitude of a line segment\n * @param line a Group of at least 2 Pts\n */\n static magnitudeSq( line:GroupLike ):number {\n return (line.length >= 2) ? line[1].$subtract( line[0] ).magnitudeSq() : 0;\n }\n\n\n /**\n * Find a point on a line that is perpendicular (shortest distance) to a target point\n * @param pt a target Pt \n * @param ln a group of Pts that defines a line\n * @param asProjection if true, this returns the projection vector instead. Default is false.\n * @returns a Pt on the line that is perpendicular to the target Pt, or a projection vector if `asProjection` is true.\n */\n static perpendicularFromPt( line:GroupLike, pt:PtLike|number[], asProjection:boolean=false ):Pt {\n if (line[0].equals(line[1])) return undefined;\n let a = line[0].$subtract( line[1] );\n let b = line[1].$subtract( pt );\n let proj = b.$subtract( a.$project( b ) );\n\n return (asProjection) ? proj : proj.$add( pt );\n }\n\n\n /**\n * Given a line and a point, find the shortest distance from the point to the line\n * @param line a Group of 2 Pts\n * @param pt a Pt\n * @see `Line.perpendicularFromPt`\n */\n static distanceFromPt( line:GroupLike, pt:PtLike|number[] ):number {\n return Line.perpendicularFromPt( line, pt, true ).magnitude();\n }\n\n\n /**\n * Given two lines as rays (infinite lines), find their intersection point if any.\n * @param la a Group of 2 Pts representing a ray\n * @param lb a Group of 2 Pts representing a ray\n * @returns an intersection Pt or undefined if no intersection\n */\n static intersectRay2D( la:GroupLike, lb:GroupLike ):Pt {\n\n let a = Line.intercept( la[0], la[1] );\n let b = Line.intercept( lb[0], lb[1] );\n\n let pa = la[0];\n let pb = lb[0];\n\n if (a == undefined) {\n if (b == undefined) return undefined;\n // one of them is vertical line, while the other is not, so they will intersect\n let y1 = -b.slope * (pb[0] - pa[0]) + pb[1]; // -slope * x + y\n return new Pt( pa[0], y1 );\n\n } else {\n // diff slope, or b slope is vertical line\n if (b == undefined) {\n let y1 = -a.slope * (pa[0] - pb[0]) + pa[1];\n return new Pt( pb[0], y1 );\n\n } else if (b.slope != a.slope) {\n let px = (a.slope * pa[0] - b.slope * pb[0] + pb[1] - pa[1]) / (a.slope - b.slope);\n let py = a.slope * ( px - pa[0] ) + pa[1];\n return new Pt( px, py );\n \n } else {\n if (a.yi == b.yi) { // exactly along the same path\n return new Pt( pa[0], pa[1] );\n } else {\n return undefined;\n }\n }\n }\n }\n\n\n /**\n * Given two line segemnts, find their intersection point if any.\n * @param la a Group of 2 Pts representing a line segment\n * @param lb a Group of 2 Pts representing a line segment\n * @returns an intersection Pt or undefined if no intersection\n */\n static intersectLine2D( la:GroupLike, lb:GroupLike ):Pt {\n let pt = Line.intersectRay2D( la, lb );\n return ( pt && Geom.withinBound( pt, la[0], la[1] ) && Geom.withinBound(pt, lb[0], lb[1]) ) ? pt : undefined;\n }\n\n\n /**\n * Given a line segemnt and a ray (infinite line), find their intersection point if any.\n * @param line a Group of 2 Pts representing a line segment\n * @param ray a Group of 2 Pts representing a ray\n * @returns an intersection Pt or undefined if no intersection\n */\n static intersectLineWithRay2D( line:GroupLike, ray:GroupLike ):Pt {\n let pt = Line.intersectRay2D( line, ray );\n return ( pt && Geom.withinBound( pt, line[0], line[1] )) ? pt : undefined;\n }\n\n\n /**\n * Given a line segemnt and a ray (infinite line), find its intersection point(s) with a polygon.\n * @param lineOrRay a Group of 2 Pts representing a line or ray\n * @param poly a Group of Pts representing a polygon\n * @param sourceIsRay a boolean value to treat the line as a ray (infinite line). Default is `false`.\n */\n static intersectPolygon2D( lineOrRay:GroupLike, poly:GroupLike[], sourceIsRay:boolean=false ):Group {\n let fn = sourceIsRay ? Line.intersectLineWithRay2D : Line.intersectLine2D; \n let pts = new Group();\n for (let i=0, len=poly.length; i<len; i++) {\n let d = fn( poly[i], lineOrRay );\n if (d) pts.push( d ); \n }\n return (pts.length > 0) ? pts : undefined;\n } \n\n\n /**\n * Get two intersection Pts of a ray with a 2D grid point\n * @param ray a ray specified by 2 Pts\n * @param gridPt a Pt on the grid\n * @returns a group of two intersecting Pts. The first one is horizontal intersection and the second one is vertical intersection.\n */\n static intersectGridWithRay2D( ray:GroupLike, gridPt:PtLike|number[] ):Group {\n let t = Line.intercept( new Pt( ray[0] ).subtract( gridPt ), new Pt( ray[1] ).subtract( gridPt ) );\n let g = new Group();\n if (t && t.xi) g.push( new Pt( gridPt[0] + t.xi, gridPt[1] ) );\n if (t && t.yi) g.push( new Pt( gridPt[0], gridPt[1] + t.yi ) );\n return g;\n } \n\n\n /**\n * Get two intersection Pts of a line segment with a 2D grid point\n * @param ray a ray specified by 2 Pts\n * @param gridPt a Pt on the grid\n * @returns a group of two intersecting Pts. The first one is horizontal intersection and the second one is vertical intersection.\n */\n static intersectGridWithLine2D( line:GroupLike, gridPt:PtLike|number[] ):Group {\n let g = Line.intersectGridWithRay2D( line, gridPt );\n let gg = new Group();\n for (let i=0, len=g.length; i<len; i++) {\n if ( Geom.withinBound( g[i], line[0], line[1] ) ) gg.push( g[i] );\n }\n return gg;\n }\n\n\n /**\n * Quick way to check rectangle intersection. \n * For more optimized implementation, store the rectangle's sides separately (eg, `Rectangle.sides()`) and use `Polygon.intersect2D()`.\n * @param line a Group representing a line\n * @param rect a Group representing a rectangle\n */\n static intersectRect2D( line:GroupLike, rect:GroupLike ):Group {\n return Rectangle.intersectRect2D( Line.toRect(line), rect );\n }\n\n\n /**\n * Get evenly distributed points on a line\n * @param line a Group representing a line\n * @param num number of points to get\n */\n static subpoints( line:GroupLike|number[][], num:number ) {\n let pts = new Group();\n for (let i=1; i<=num; i++) {\n pts.push( Geom.interpolate( line[0], line[1], i/(num+1) ) );\n }\n return pts;\n }\n\n\n /**\n * Crop this line by a circle or rectangle at end point.\n * @param line line to crop\n * @param size size of circle or rectangle as Pt\n * @param index line's end point index, ie, 0 = start and 1 = end.\n * @param cropAsCircle a boolean to specify whether the `size` parameter should be treated as circle. Default is `true`.\n * @return an intersecting point on the line that can be used for cropping.\n */\n static crop( line:GroupLike, size:PtLike, index:number=0, cropAsCircle:boolean=true ):Pt {\n let tdx = (index === 0) ? 1 : 0;\n let ls = line[tdx].$subtract( line[index] );\n if (ls[0] === 0 || size[0] === 0) return line[index];\n\n if (cropAsCircle) {\n let d = ls.unit().multiply( size[1] );\n return line[index].$add( d );\n\n } else {\n let rect = Rectangle.fromCenter( line[index], size );\n let sides = Rectangle.sides( rect );\n let sideIdx = 0;\n\n if ( Math.abs( ls[1]/ls[0] ) > Math.abs( size[1]/size[0] ) ) {\n sideIdx = (ls[1] < 0) ? 0 : 2;\n } else {\n sideIdx = (ls[0] < 0) ? 3 : 1;\n }\n return Line.intersectRay2D( sides[sideIdx], line );\n\n }\n }\n\n /**\n * Create an marker arrow or line, placed at an end point of this line\n * @param line line to place marker\n * @param size size of the marker as Pt\n * @param graphic either \"arrow\" or \"line\"\n * @param atTail a boolean, if `true`, the marker will be positioned at tail of the line (ie, index = 1). Default is `true`.\n * @returns a Group that defines the marker's shape\n */\n static marker( line:GroupLike, size:PtLike, graphic:string=(\"arrow\"||\"line\"), atTail:boolean=true ):Group {\n let h = atTail ? 0 : 1;\n let t = atTail ? 1 : 0;\n let unit = line[h].$subtract( line[t] );\n if (unit.magnitudeSq() === 0) return new Group();\n unit.unit();\n \n let ps = Geom.perpendicular( unit ).multiply( size[0] ).add( line[t] );\n if (graphic == \"arrow\") {\n ps.add( unit.$multiply( size[1]) );\n return new Group( line[t], ps[0], ps[1] );\n } else {\n return new Group( ps[0], ps[1] );\n }\n\n }\n\n /**\n * Convert this line to a rectangle representation\n * @param line a Group representing a line\n */\n static toRect( line:GroupLike ) {\n return new Group( line[0].$min( line[1] ), line[0].$max( line[1] ) );\n }\n\n}\n\n\n\n/**\n * Rectangle class provides static functions to create and operate on rectangles. A rectangle is usually represented as a Group of 2 Pts, marking the top-left and bottom-right corners of the rectangle.\n * You can use the static function as-is, or apply the `op` method in Group or Pt to many of these functions.\n * See [Op guide](../../guide/Op-0400.html) for details.\n */\nexport class Rectangle {\n\n /**\n * Same as `Rectangle.fromTopLeft`\n */\n static from( topLeft:PtLike|number[], widthOrSize:number|PtLike, height?:number ):Group {\n return Rectangle.fromTopLeft( topLeft, widthOrSize, height );\n }\n\n\n /**\n * Create a rectangle given a top-left position and a size\n * @param topLeft top-left point\n * @param widthOrSize width as a number, or a Pt that defines its size\n * @param height optional height as a number\n */\n static fromTopLeft( topLeft:PtLike|number[], widthOrSize:number|PtLike, height?:number ):Group {\n let size = (typeof widthOrSize == \"number\") ? [widthOrSize, (height||widthOrSize) ] : widthOrSize;\n return new Group(new Pt(topLeft), new Pt(topLeft).add( size ) );\n }\n\n\n /**\n * Create a rectangle given a center position and a size\n * @param topLeft top-left point\n * @param widthOrSize width as a number, or a Pt that defines its size\n * @param height optional height as a number\n */\n static fromCenter( center:PtLike|number[], widthOrSize:number|PtLike, height?:number ):Group {\n let half = (typeof widthOrSize == \"number\") ? [ widthOrSize/2, (height||widthOrSize)/2 ] : new Pt(widthOrSize).divide(2);\n return new Group(new Pt(center).subtract(half), new Pt(center).add(half));\n }\n\n\n /**\n * Convert this rectangle to a circle that fits within the rectangle\n * @returns a Group that represents a circle\n * @see `Circle`\n */\n static toCircle( pts:GroupLike ):Group {\n return Circle.fromRect( pts );\n }\n\n \n /**\n * Create a square that either fits within or encloses a rectangle\n * @param pts a Group of 2 Pts representing a rectangle\n * @param enclose if `true`, the square will enclose the rectangle. Default is `false`, which will fit the square inside the rectangle.\n */\n static toSquare( pts:GroupLike, enclose=false ):Group {\n let s = Rectangle.size( pts );\n let m = (enclose) ? s.maxValue().value : s.minValue().value;\n return Rectangle.fromCenter( Rectangle.center(pts), m, m );\n }\n\n\n /**\n * Get the size of this rectangle as a Pt\n * @param pts a Group of 2 Pts representing a Rectangle\n */\n static size( pts:GroupLike ):Pt {\n return pts[0].$max( pts[1] ).subtract( pts[0].$min( pts[1] ) );\n }\n\n\n /**\n * Get the center of this rectangle \n * @param pts a Group of 2 Pts representing a Rectangle\n */\n static center( pts:GroupLike ):Pt {\n let min = pts[0].$min( pts[1] );\n let max = pts[0].$max( pts[1] );\n return min.add( max.$subtract( min ).divide( 2 ) );\n }\n\n\n /**\n * Get the 4 corners of this rectangle as a Group\n * @param rect a Group of 2 Pts representing a Rectangle\n */\n static corners( rect:GroupLike ):Group {\n let p0 = rect[0].$min(rect[1]);\n let p2 = rect[0].$max(rect[1]);\n return new Group(p0, new Pt(p2.x, p0.y), p2, new Pt(p0.x, p2.y));\n }\n\n\n /**\n * Get the 4 sides of this rectangle as an array of 4 Groups\n * @param rect a Group of 2 Pts representing a Rectangle\n * @returns an array of 4 Groups, each of which represents a line segment\n */\n static sides( rect:GroupLike ):Group[] {\n let [p0, p1, p2, p3] = Rectangle.corners( rect );\n return [\n new Group( p0, p1 ), new Group( p1, p2 ),\n new Group( p2, p3 ), new Group( p3, p0 )\n ];\n }\n\n \n /**\n * Same as `Rectangle.sides`\n */\n static lines( rect:GroupLike ): Group[] {\n return Rectangle.sides( rect );\n }\n \n\n /**\n * Given an array of rectangles, get a rectangle that bounds all of them\n * @param rects an array of Groups that represent rectangles\n * @returns the bounding rectangle as a Group\n */\n static boundingBox( rects:GroupLike[] ):Group {\n let merged = Util.flatten( rects, false );\n let min = Pt.make( 2, Number.MAX_VALUE );\n let max = Pt.make( 2, Number.MIN_VALUE );\n\n // calculate min max in a single pass\n for (let i=0, len=merged.length; i<len; i++) {\n for (let k=0; k<2; k++) {\n min[k] = Math.min( min[k], merged[i][k] );\n max[k] = Math.max( max[k], merged[i][k] );\n }\n }\n return new Group( min, max );\n }\n\n\n /**\n * Convert this rectangle into a Group representing a polygon\n * @param rect a Group of 2 Pts representing a Rectangle\n */\n static polygon( rect:GroupLike ):Group {\n return Rectangle.corners( rect );\n }\n\n\n /**\n * Subdivide a rectangle into 4 rectangles, one for each quadrant\n * @param rect a Group of 2 Pts representing a Rectangle\n * @returns an array of 4 Groups of rectangles\n */\n static quadrants( rect:GroupLike, center?:PtLike ):Group[] {\n let corners = Rectangle.corners( rect );\n let _center = (center!=undefined) ? new Pt(center) : Rectangle.center( rect );\n return corners.map( (c) => new Group(c, _center).boundingBox() );\n }\n\n\n /**\n * Subdivde a rectangle into 2 rectangles, by row or by column\n * @param rect Group of 2 Pts representing a Rectangle\n * @param ratio a value between 0 to 1 to indicate the split ratio\n * @param asRows if `true`, split into 2 rows. Default is `false` which splits into 2 columns.\n * @returns an array of 2 Groups of rectangles\n */\n static halves( rect:GroupLike, ratio:number=0.5, asRows:boolean=false ):Group[] {\n let min = rect[0].$min( rect[1] );\n let max = rect[0].$max( rect[1] );\n let mid = (asRows) ? Num.lerp( min[1], max[1], ratio ) : Num.lerp( min[0], max[0], ratio );\n return (asRows) \n ? [new Group( min, new Pt(max[0],mid) ), new Group( new Pt(min[0],mid), max )]\n : [new Group( min, new Pt(mid,max[1]) ), new Group( new Pt(mid,min[1]), max )];\n }\n\n\n /**\n * Check if a point is within a rectangle\n * @param rect a Group of 2 Pts representing a Rectangle\n * @param pt the point to check\n */\n static withinBound( rect:GroupLike, pt:PtLike ):boolean {\n return Geom.withinBound( pt, rect[0], rect[1] );\n }\n\n\n /**\n * Check if a rectangle is within the bounds of another rectangle\n * @param rect1 a Group of 2 Pts representing a rectangle\n * @param rect2 a Group of 2 Pts representing a rectangle\n */\n static hasIntersectRect2D( rect1:GroupLike, rect2:GroupLike ):boolean {\n let pts = Rectangle.corners( rect1 );\n for (let i=0, len=pts.length; i<len; i++) {\n if (Geom.withinBound( pts[i], rect2[0], rect2[1])) return true;\n }\n return false;\n }\n\n\n /**\n * Quick way to check rectangle intersection. \n * For more optimized implementation, store the rectangle's sides separately (eg, `Rectangle.sides()`) and use `Polygon.intersect2D()`.\n * @param rect1 a Group of 2 Pts representing a rectangle\n * @param rect2 a Group of 2 Pts representing a rectangle\n */\n static intersectRect2D( rect1:GroupLike, rect2:GroupLike ):Group {\n return Util.flatten(\n Polygon.intersect2D( Rectangle.sides( rect1 ), Rectangle.sides( rect2 ) )\n );\n }\n\n}\n\n\n\n/**\n * Circle class provides static functions to create and operate on circles. A circle is usually represented as a Group of 2 Pts, where the first Pt specifies the center, and the second Pt specifies the radius.\n * You can use the static function as-is, or apply the `op` method in Group or Pt to many of these functions.\n * See [Op guide](../../guide/Op-0400.html) for details.\n */\nexport class Circle {\n \n\n /**\n * Create a circle that either fits within or encloses a rectangle\n * @param pts a Group of 2 Pts representing a rectangle\n * @param enclose if `true`, the circle will enclose the rectangle. Default is `false`, which will fit the circle inside the rectangle.\n */\n static fromRect( pts:GroupLike, enclose=false ):Group {\n let r = 0;\n let min = r = Rectangle.size( pts ).minValue().value / 2;\n if (enclose) {\n let max = Rectangle.size( pts ).maxValue().value / 2;\n r = Math.sqrt( min*min + max*max );\n } else {\n r = min;\n }\n return new Group( Rectangle.center( pts ), new Pt(r, r) );\n }\n\n\n /**\n * Create a circle based on a center point and a radius\n * @param pt center point of circle\n * @param radius radius of circle\n */\n static fromCenter( pt:PtLike, radius:number ):Group {\n return new Group( new Pt(pt), new Pt(radius, radius) );\n }\n\n\n /**\n * Check if a point is within a circle\n * @param pts a Group of 2 Pts representing a circle\n * @param pt the point to checks\n * @param threshold an optional small number to set threshold. Default is 0.\n */\n static withinBound( pts:GroupLike, pt:PtLike, threshold:number=0 ):boolean {\n let d = pts[0].$subtract( pt );\n return d.dot(d) + threshold < pts[1].x * pts[1].x;\n }\n\n\n /**\n * Get the intersection points between a circle and a ray (infinite line)\n * @param pts a Group of 2 Pts representing a circle\n * @param ray a Group of 2 Pts representing a ray \n * @returns a Group of intersection points, or an empty Group if no intersection is found\n */\n static intersectRay2D( pts:GroupLike, ray:GroupLike ):Group {\n let d = ray[0].$subtract( ray[1] );\n let f = pts[0].$subtract( ray[0] );\n\n let a = d.dot( d );\n let b = f.dot( d );\n let c = f.dot( f ) - pts[1].x * pts[1].x;\n let p = b/a;\n let q = c/a;\n let disc = p * p - q; // discriminant\n\n if (disc < 0) {\n return new Group();\n } else {\n let discSqrt = Math.sqrt( disc );\n\n let t1 = -p + discSqrt;\n let p1 = ray[0].$subtract( d.$multiply( t1 ) );\n if (disc === 0) return new Group( p1 );\n\n let t2 = -p - discSqrt;\n let p2 = ray[0].$subtract( d.$multiply( t2 ) );\n return new Group( p1, p2 );\n }\n }\n\n\n /**\n * Get the intersection points between a circle and a line segment\n * @param pts a Group of 2 Pts representing a circle\n * @param ray a Group of 2 Pts representing a line\n * @returns a Group of intersection points, or an empty Group if no intersection is found\n */\n static intersectLine2D( pts:GroupLike, line:GroupLike ):Group {\n let ps = Circle.intersectRay2D( pts, line );\n let g = new Group();\n if (ps.length > 0) {\n for (let i=0, len=ps.length; i<len; i++) {\n if (Rectangle.withinBound( line, ps[i] )) g.push( ps[i] );\n }\n }\n return g;\n }\n\n\n /**\n * Get the intersection points between two circles\n * @param pts a Group of 2 Pts representing a circle\n * @param circle a Group of 2 Pts representing a circle\n * @returns a Group of intersection points, or an empty Group if no intersection is found\n */\n static intersectCircle2D( pts:GroupLike, circle:GroupLike ):Group {\n let dv = circle[0].$subtract( pts[0] );\n let dr2 = dv.magnitudeSq();\n let dr = Math.sqrt( dr2 );\n\n let ar = pts[1].x;\n let br = circle[1].x;\n let ar2 = ar * ar;\n let br2 = br * br;\n\n\n if ( dr > ar + br ) { // not intersected\n return new Group();\n } else if ( dr < Math.abs( ar - br ) ) { // completely enclosed\n return new Group( pts[0].clone() );\n } else {\n let a = (ar2 - br2 + dr2) / (2 * dr);\n let h = Math.sqrt( ar2 - a*a );\n let p = dv.$multiply( a/dr ).add( pts[0] );\n return new Group( \n new Pt( p.x + h*dv.y/dr, p.y - h*dv.x/dr ),\n new Pt( p.x - h*dv.y/dr, p.y + h*dv.x/dr )\n );\n }\n }\n\n\n /**\n * Quick way to check rectangle intersection with a circle. \n * For more optimized implementation, store the rectangle's sides separately (eg, `Rectangle.sides()`) and use `Polygon.intersect2D()`.\n * @param pts a Group of 2 Pts representing a circle\n * @param rect a Group of 2 Pts representing a rectangle\n * @returns a Group of intersection points, or an empty Group if no intersection is found\n */\n static intersectRect2D( pts:GroupLike, rect:GroupLike ):Group {\n let sides = Rectangle.sides( rect );\n let g = [];\n for (let i=0, len=sides.length; i<len; i++) {\n let ps = Circle.intersectLine2D( pts, sides[i] );\n if (ps.length > 0) g.push( ps );\n }\n return Util.flatten( g );\n }\n\n\n /**\n * Convert this cirlce to a rectangle that encloses this circle\n * @param pts a Group of 2 Pts representing a circle\n */\n static toRect( pts:GroupLike ):Group {\n let r = pts[1][0];\n return new Group( pts[0].$subtract( r ), pts[0].$add( r ) );\n }\n\n\n /**\n * Convert this cirlce to a rectangle that fits within this circle\n * @param pts a Group of 2 Pts representing a circle\n */\n static toInnerRect( pts:GroupLike ):Group {\n let r = pts[1][0];\n let half = Math.sqrt(r*r)/2;\n return new Group( pts[0].$subtract(half), pts[0].$add( half ) );\n }\n\n\n /**\n * Convert this cirlce to a triangle that fits within this circle\n * @param pts a Group of 2 Pts representing a circle\n */\n static toInnerTriangle( pts:GroupLike ):Group {\n let ang = -Math.PI/2;\n let inc = Math.PI * 2/3;\n let g = new Group();\n for (let i=0; i<3; i++) {\n g.push( pts[0].clone().toAngle( ang, pts[1][0], true ) );\n ang += inc;\n }\n return g;\n }\n\n}\n\n\n\n/**\n * Triangle class provides static functions to create and operate on trianges. A triange is usually represented as a Group of 3 Pts.\n * You can use the static function as-is, or apply the `op` method in Group or Pt to many of these functions.\n * See [Op guide](../../guide/Op-0400.html) for details.\n */\nexport class Triangle {\n \n /**\n * Create a triangle from a rectangle. The triangle will be isosceles, with the bottom of the rectangle as its base.\n * @param rect a Group of 2 Pts representing a rectangle\n */\n static fromRect( rect:GroupLike ):Group {\n let top = rect[0].$add( rect[1] ).divide(2);\n top.y = rect[0][1];\n let left = rect[1].clone();\n left.x = rect[0][0];\n return new Group( top, rect[1].clone(), left );\n }\n\n\n /**\n * Create a triangle that fits within a circle\n * @param circle a Group of 2 Pts representing a circle\n */\n static fromCircle( circle:GroupLike ):Group {\n return Circle.toInnerTriangle( circle );\n }\n\n\n /**\n * Create an equilateral triangle based on a center point and a size\n * @param pt the center point\n * @param size size is the magnitude of lines from center to the triangle's vertices, like a \"radius\".\n */\n static fromCenter( pt:PtLike, size:number ):Group {\n return Triangle.fromCircle( Circle.fromCenter( pt, size ) );\n }\n\n\n /**\n * Get the medial, which is an inner triangle formed by connecting the midpoints of this triangle's sides\n * @param pts a Group of Pts\n * @returns a Group representing a medial triangle\n */\n static medial( pts:GroupLike ):Group {\n if (pts.length < 3) return _errorLength( new Group(), 3 );\n return Polygon.midpoints( pts, true );\n }\n\n\n /**\n * Given a point of the triangle, the opposite side is the side which the point doesn't touch.\n * @param pts a Group of Pts\n * @param index a Pt on the triangle group\n * @returns a Group that represents a line of the opposite side\n */\n static oppositeSide( pts:GroupLike, index:number ):Group {\n if (pts.length < 3) return _errorLength( new Group(), 3 );\n if (index === 0) {\n return Group.fromPtArray( [pts[1], pts[2]] );\n } else if (index === 1) {\n return Group.fromPtArray( [pts[0], pts[2]] );\n } else {\n return Group.fromPtArray( [pts[0], pts[1]] );\n }\n }\n\n /**\n * Get a triangle's altitude, which is a line from a triangle's point to its opposite side, and perpendicular to its opposite side.\n * @param pts a Group of Pts\n * @param index a Pt on the triangle group\n * @returns a Group that represents the altitude line\n */\n static altitude( pts:GroupLike, index:number ):Group {\n let opp = Triangle.oppositeSide( pts, index );\n if (opp.length > 1) {\n return new Group( pts[index], Line.perpendicularFromPt( opp, pts[index] ) ); \n } else {\n return new Group();\n }\n }\n\n /**\n * Get orthocenter, which is the intersection point of a triangle's 3 altitudes (the 3 lines that are perpendicular to its 3 opposite sides).\n * @param pts a Group of Pts\n * @returns the orthocenter as a Pt\n */\n static orthocenter( pts:GroupLike ):Pt {\n if (pts.length < 3) return _errorLength( undefined, 3 );\n let a = Triangle.altitude( pts, 0 );\n let b = Triangle.altitude( pts, 1 );\n return Line.intersectRay2D( a, b );\n }\n\n /**\n * Get incenter, which is the center point of its inner circle, and also the intersection point of its 3 angle bisector lines (each of which cuts one of the 3 angles in half).\n * @param pts a Group of Pts\n * @returns the incenter as a Pt\n */\n static incenter( pts:GroupLike ):Pt {\n if (pts.length < 3) return _errorLength( undefined, 3 );\n let a = Polygon.bisector( pts, 0 ).add( pts[0] );\n let b = Polygon.bisector( pts, 1 ).add( pts[1] );\n return Line.intersectRay2D( new Group(pts[0], a), new Group(pts[1], b) );\n }\n\n /**\n * Get an interior circle, which is the largest circle completed enclosed by this triangle\n * @param pts a Group of Pts\n * @param center Optional parameter if the incenter is already known. Otherwise, leave it empty and the incenter will be calculated\n */\n static incircle( pts:GroupLike, center?:Pt ):Group {\n let c = (center) ? center : Triangle.incenter( pts );\n let area = Polygon.area( pts );\n let perim = Polygon.perimeter( pts, true );\n let r = 2 * area / perim.total;\n return Circle.fromCenter( c, r );\n }\n\n /**\n * Get circumcenter, which is the intersection point of its 3 perpendicular bisectors lines ( each of which divides a side in half and is perpendicular to the side)\n * @param pts a Group of Pts\n * @returns the circumcenter as a Pt\n */\n static circumcenter( pts:GroupLike ):Pt {\n let md = Triangle.medial( pts );\n let a = [ md[0], Geom.perpendicular( pts[0].$subtract( md[0] )).p1.$add( md[0] ) ];\n let b = [ md[1], Geom.perpendicular( pts[1].$subtract( md[1] )).p1.$add( md[1] ) ];\n return Line.intersectRay2D( a, b );\n } \n\n /**\n * Get circumcenter, which is the intersection point of its 3 perpendicular bisectors lines ( each of which divides a side in half and is perpendicular to the side)\n * @param pts a Group of Pts\n * @param center Optional parameter if the circumcenter is already known. Otherwise, leave it empty and the circumcenter will be calculated \n */\n static circumcircle( pts:GroupLike, center?:Pt ):Group {\n let c = (center) ? center : Triangle.circumcenter( pts );\n let r = pts[0].$subtract( c ).magnitude();\n return Circle.fromCenter( c, r );\n }\n}\n\n\n\n/**\n * Polygon class provides static functions to create and operate on polygons. A polygon is usually represented as a Group of 3 or more Pts.\n * You can use the static function as-is, or apply the `op` method in Group or Pt to many of these functions.\n * See [Op guide](../../guide/Op-0400.html) for details.\n */\nexport class Polygon {\n\n /**\n * Get the centroid of a polygon, which is the average of all its points.\n * @param pts a Group of Pts representing a polygon\n */\n static centroid( pts:GroupLike ):Pt {\n return Geom.centroid( pts );\n }\n\n /**\n * Get the line segments in this polygon\n * @param pts a Group of Pts\n * @param closePath a boolean to specify whether the polygon should be closed (ie, whether the final segment should be counted).\n * @returns an array of Groups which has 2 Pts in each group\n */\n static lines( pts:GroupLike, closePath:boolean=false ):Group[] {\n if (pts.length < 2) return _errorLength( new Group(), 2 );\n let sp = Util.split( pts, 2, 1 );\n if (closePath) sp.push( new Group( pts[pts.length-1], pts[0]) );\n return sp.map( (g) => g as Group );\n }\n\n /**\n * Get a new polygon group that is derived from midpoints in this polygon\n * @param pts a Group of Pts\n * @param closePath a boolean to specify whether the polygon should be closed (ie, whether the final segment should be counted).\n * @param t a value between 0 to 1 for interpolation. Default to 0.5 which will get the middle point.\n */\n static midpoints( pts:GroupLike, closePath:boolean=false, t:number=0.5 ):Group {\n if (pts.length < 2) return _errorLength( new Group(), 2 );\n let sides = Polygon.lines( pts, closePath );\n let mids = sides.map( (s) => Geom.interpolate( s[0], s[1], t) );\n return mids as Group;\n }\n\n /**\n * Given a Pt in the polygon group, the adjacent sides are the two sides which the Pt touches.\n * @param pts a group of Pts\n * @param index the target Pt\n * @param closePath a boolean to specify whether the polygon should be closed (ie, whether the final segment should be counted).\n */\n static adjacentSides( pts:GroupLike, index:number, closePath:boolean=false ):Group[] {\n if (pts.length < 2) return _errorLength( new Group(), 2 );\n if (index < 0 || index >= pts.length) return _errorOutofBound( new Group(), index );\n\n let gs = [];\n let left = index-1;\n if (closePath && left < 0) left = pts.length-1;\n if (left >= 0) gs.push( new Group( pts[index], pts[left]) );\n\n let right = index+1;\n if (closePath && right > pts.length-1) right = 0;\n if (right <= pts.length-1) gs.push( new Group( pts[index], pts[right]) );\n\n return gs;\n }\n\n\n /**\n * Get a bisector which is a line that split between two sides of a polygon equally. \n * @param pts a group of Pts\n * @param index the Pt in the polygon to bisect from\n * @param closePath a boolean to specify whether the polygon should be closed (ie, whether the final segment should be counted).\n * @returns a bisector Pt that's a normalized unit vector\n */\n static bisector( pts:GroupLike, index:number ):Pt {\n \n let sides = Polygon.adjacentSides( pts, index, true );\n if (sides.length >= 2) {\n let a = sides[0][1].$subtract( sides[0][0] ).unit();\n let b = sides[1][1].$subtract( sides[1][0] ).unit();\n return a.add( b ).divide( 2 ); \n } else {\n return undefined;\n }\n\n }\n \n\n /**\n * Find the perimeter of this polygon, ie, the lengths of its sides.\n * @param pts a group of Pts\n * @param closePath a boolean to specify whether the polygon should be closed (ie, whether the final segment should be counted).\n * @returns an object with `total` length, and `segments` which is a Pt that stores each segment's length\n */\n static perimeter( pts:GroupLike, closePath:boolean=false ):{total:number, segments:Pt} {\n if (pts.length < 2) return _errorLength( new Group(), 2 );\n let lines = Polygon.lines( pts, closePath );\n let mag = 0;\n let p = Pt.make( lines.length, 0 );\n\n for (let i=0, len=lines.length; i<len; i++) {\n let m = Line.magnitude( lines[i] );\n mag += m;\n p[i] = m;\n }\n\n return {\n total: mag,\n segments: p\n };\n }\n\n \n /**\n * Find the area of a *convex* polygon.\n * @param pts a group of Pts\n */\n static area( pts:GroupLike ) {\n if (pts.length < 3) return _errorLength( new Group(), 3 );\n // determinant\n let det = (a, b) => a[0] * b[1] - a[1] * b[0];\n\n let area = 0;\n for (let i=0, len=pts.length; i<len; i++) {\n if (i < pts.length-1) {\n area += det( pts[i], pts[i+1]);\n } else { \n area += det( pts[i], pts[0] );\n }\n }\n return Math.abs( area/2 );\n }\n\n /**\n * Get a convex hull of the point set using Melkman's algorithm\n * (Reference: http://geomalgorithms.com/a12-_hull-3.html)\n * @param pts a group of Pt\n * @param sorted a boolean value to indicate if the group is pre-sorted by x position. Default is false.\n * @returns a group of Pt that defines the convex hull polygon\n */\n static convexHull( pts:GroupLike, sorted:boolean=false ): Group {\n if (pts.length < 3) return _errorLength( new Group(), 3 );\n\n if (!sorted) {\n pts = pts.slice();\n pts.sort( (a,b) => a[0]-b[0] );\n } \n\n // check if is on left of ray a-b\n let left = (a, b, c) => {\n return (b[0] - a[0]) * (c[1] - a[1]) - (c[0] - a[0]) * (b[1] - a[1]) > 0;\n };\n \n // double end queue\n let dq = [];\n let bot = pts.length - 2;\n let top = bot + 3;\n dq[bot] = pts[2];\n dq[top] = pts[2];\n\n // first 3 pt as counter-clockwise triangle\n if ( left( pts[0], pts[1], pts[2]) ) {\n dq[bot+1] = pts[0];\n dq[bot+2] = pts[1];\n } else {\n dq[bot+1] = pts[1];\n dq[bot+2] = pts[0];\n }\n\n // remaining pts\n for (let i=3, len=pts.length; i<len; i++) {\n let pt = pts[i];\n \n // if inside the hull\n if ( left( dq[bot], dq[bot+1], pt ) && left(dq[top-1], dq[top], pt)) {\n continue;\n }\n\n // rightmost tangent\n while ( !left(dq[bot], dq[bot+1], pt)) { bot += 1; }\n bot -= 1;\n dq[bot] = pt;\n \n // leftmost tangent\n while ( !left( dq[top-1], dq[top], pt)) { top -= 1; }\n top += 1;\n dq[top] = pt;\n }\n\n let hull = new Group();\n for (let h=0; h<(top-bot); h++) {\n hull.push( dq[bot+h] );\n }\n\n return hull;\n\n }\n\n\n /**\n * Find intersection points of 2 polygons\n * @param poly a Group representing a polygon\n * @param linesOrRays an array of Groups representing lines\n * @param sourceIsRay a boolean value to treat the line as a ray (infinite line). Default is `false`.\n */\n static intersect2D( poly:GroupLike[], linesOrRays:GroupLike[], sourceIsRay:boolean=false):Group[] {\n let groups = [];\n for (let i=0, len=linesOrRays.length; i<len; i++) {\n let _ip = Line.intersectPolygon2D( linesOrRays[i], poly, sourceIsRay );\n if (_ip) groups.push( _ip );\n }\n return groups;\n }\n\n\n /**\n * Given a point in the polygon as an origin, get an array of lines that connect all the remaining points to the origin point.\n * @param pts a Group representing a polygon\n * @param originIndex the origin point's index in the polygon\n */\n static network( pts:GroupLike, originIndex:number=0 ):Group[] {\n let g = [];\n for (let i=0, len=pts.length; i<len; i++) {\n if (i != originIndex) g.push( new Group( pts[originIndex], pts[i] ) );\n }\n return g;\n }\n\n\n /**\n * Given a target Pt, find a Pt in a Group that's nearest to it.\n * @param pts a Group of Pt\n * @param pt Pt to check\n * @returns an index in the pts indicating the nearest Pt, or -1 if none found\n */\n static nearestPt( pts:GroupLike, pt:PtLike ):number {\n let _near = Number.MAX_VALUE;\n let _item = -1;\n for (let i=0, len=pts.length; i<len; i++) {\n let d = pts[i].$subtract( pt ).magnitudeSq();\n if (d < _near) {\n _near = d;\n _item = i;\n }\n }\n return _item;\n }\n\n\n /**\n * Get a bounding box for each polygon group, as well as a union bounding-box for all groups\n * @param polys an array of Groups, or an array of Pt arrays\n */\n static toRects( poly:GroupLike[] ):GroupLike[] {\n let boxes = poly.map( (g) => Geom.boundingBox(g) );\n let merged = Util.flatten( boxes, false );\n boxes.unshift( Geom.boundingBox( merged ) );\n return boxes;\n }\n\n}\n\n\n\n/**\n * Curve class provides static functions to interpolate curves. A curve is usually represented as a Group of 3 control points.\n * You can use the static function as-is, or apply the `op` method in Group or Pt to many of these functions.\n * See [Op guide](../../guide/Op-0400.html) for details.\n */\nexport class Curve {\n\n /**\n * Get a precalculated coefficients per step\n * @param steps number of steps\n */\n static getSteps( steps:number ):Group {\n let ts = new Group();\n for (let i=0; i<=steps; i++) {\n let t = i/steps;\n ts.push( new Pt(t*t*t, t*t, t, 1) );\n }\n return ts;\n }\n\n /**\n * Given an index for the starting position in a Pt group, get the control and/or end points of a curve segment\n * @param pts a group of Pt\n * @param index start index in `pts` array. Default is 0.\n * @param copyStart an optional boolean value to indicate if the start index should be used twice. Default is false.\n * @returns a group of 4 Pts\n */\n static controlPoints( pts:GroupLike, index:number=0, copyStart:boolean=false):Group {\n if (index > pts.length-1) return new Group();\n let _index = (i) => (i < pts.length-1) ? i : pts.length-1;\n\n let p0 = pts[index];\n index = (copyStart) ? index : index+1;\n\n // get points based on index\n return new Group(\n p0, pts[ _index(index++) ],\n pts[ _index(index++) ], pts[ _index(index++) ]\n );\n }\n\n /**\n * Calulcate weighted sum to get the interpolated points\n * @param ctrls anchors\n * @param params parameters\n */\n static _calcPt( ctrls:GroupLike, params:PtLike ):Pt {\n let x = ctrls.reduce( (a, c, i) => a + c.x*params[i], 0 );\n let y = ctrls.reduce( (a, c, i) => a + c.y*params[i], 0 );\n if (ctrls[0].length > 2) {\n let z = ctrls.reduce( (a, c, i) => a + c.z*params[i], 0 );\n return new Pt( x, y, z );\n }\n return new Pt( x, y );\n }\n\n /**\n * Create a Catmull-Rom curve. Catmull-Rom is a kind of Cardinal curve with smooth-looking curve.\n * @param pts a group of anchor Pt\n * @param steps the number of line segments per curve. Defaults to 10 steps.\n * @returns a curve as a group of interpolated Pt\n */\n static catmullRom( pts:GroupLike, steps:number=10 ):Group {\n if (pts.length < 2) return new Group();\n\n let ps = new Group();\n let ts = Curve.getSteps( steps );\n\n // use first point twice\n let c = Curve.controlPoints( pts, 0, true );\n for (let i=0; i<=steps; i++) {\n ps.push( Curve.catmullRomStep( ts[i], c ) );\n }\n\n let k = 0;\n while ( k < pts.length-2 ) {\n let cp = Curve.controlPoints( pts, k );\n if (cp.length > 0) {\n for (let i=0; i<=steps; i++) {\n ps.push( Curve.catmullRomStep( ts[i], cp ) );\n }\n k++;\n }\n }\n\n return ps;\n }\n\n\n /**\n * Interpolate to get a point on Catmull-Rom curve\n * @param step the coefficients [t*t*t, t*t, t, 1]\n * @param ctrls a group of anchor Pts\n * @return an interpolated Pt on the curve\n */\n static catmullRomStep( step:Pt, ctrls:GroupLike ):Pt {\n /*\n * Basis Matrix (http://mrl.nyu.edu/~perlin/courses/fall2002/hw/12.html)\n * [-0.5, 1.5, -1.5, 0.5],\n * [ 1 , -2.5, 2 ,-0.5],\n * [-0.5, 0 , 0.5, 0 ],\n * [ 0 , 1 , 0 , 0 ]\n */\n\n let m = new Group(\n new Pt(-0.5, 1, -0.5, 0),\n new Pt(1.5, -2.5, 0, 1),\n new Pt(-1.5, 2, 0.5, 0),\n new Pt( 0.5, -0.5, 0, 0 )\n );\n\n return Curve._calcPt( ctrls, Mat.multiply( [step], m, true )[0] );\n }\n\n /**\n * Create a Cardinal spline curve\n * @param pts a group of anchor Pt\n * @param steps the number of line segments per curve. Defaults to 10 steps.\n * @param tension optional value between 0 to 1 to specify a \"tension\". Default to 0.5 which is the tension for Catmull-Rom curve.\n * @returns a curve as a group of interpolated Pt\n */\n static cardinal( pts:GroupLike, steps:number=10, tension=0.5 ):Group {\n if (pts.length < 2) return new Group();\n\n let ps = new Group();\n let ts = Curve.getSteps( steps );\n\n // use first point twice\n let c = Curve.controlPoints( pts, 0, true );\n for (let i=0; i<=steps; i++) {\n ps.push( Curve.cardinalStep( ts[i], c, tension ) );\n }\n\n let k = 0;\n while ( k < pts.length-2 ) {\n let cp = Curve.controlPoints( pts, k );\n if (cp.length > 0) {\n for (let i=0; i<=steps; i++) {\n ps.push( Curve.cardinalStep( ts[i], cp, tension ) );\n }\n k++;\n }\n }\n\n return ps;\n }\n\n /**\n * Interpolate to get a point on Catmull-Rom curve\n * @param step the coefficients [t*t*t, t*t, t, 1]\n * @param ctrls a group of anchor Pts\n * @param tension optional value between 0 to 1 to specify a \"tension\". Default to 0.5 which is the tension for Catmull-Rom curve\n * @return an interpolated Pt on the curve\n */\n static cardinalStep( step:Pt, ctrls:GroupLike, tension:number=0.5 ):Pt {\n /*\n * Basis Matrix (http://algorithmist.wordpress.com/2009/10/06/cardinal-splines-part-4/)\n * [ -s 2-s s-2 s ]\n * [ 2s s-3 3-2s -s ]\n * [ -s 0 s 0 ]\n * [ 0 1 0 0 ]\n */\n\n let m = new Group(\n new Pt( -1, 2, -1, 0),\n new Pt( -1, 1, 0, 0),\n new Pt( 1, -2, 1, 0),\n new Pt( 1, -1, 0, 0)\n );\n\n let h = Mat.multiply( [step], m, true )[0].multiply( tension );\n let h2 = (2*step[0] - 3*step[1] + 1);\n let h3 = -2*step[0] + 3*step[1];\n\n let pt = Curve._calcPt( ctrls, h );\n\n pt.x += h2*ctrls[1].x + h3*ctrls[2].x;\n pt.y += h2*ctrls[1].y + h3*ctrls[2].y;\n if (pt.length > 2) pt.z += h2*ctrls[1].z + h3*ctrls[2].z;\n\n return pt;\n }\n\n\n /**\n * Create a Bezier curve. In a cubic bezier curve, the first and 4th anchors are end-points, and 2nd and 3rd anchors are control-points.\n * @param pts a group of anchor Pt\n * @param steps the number of line segments per curve. Defaults to 10 steps.\n * @returns a curve as a group of interpolated Pt\n */\n static bezier( pts:GroupLike, steps:number=10 ) {\n\n if (pts.length < 4) return new Group();\n\n let ps = new Group();\n let ts = Curve.getSteps( steps );\n\n let k = 0;\n while ( k < pts.length-3 ) {\n let c = Curve.controlPoints( pts, k );\n if (c.length > 0) {\n for (let i=0; i<=steps; i++) {\n ps.push( Curve.bezierStep( ts[i], c ) );\n }\n\n // go to the next set of point, but assume current end pt is next start pt\n k+=3;\n }\n }\n\n return ps;\n }\n\n /**\n * Interpolate to get a point on a cubic Bezier curve\n * @param step the coefficients [t*t*t, t*t, t, 1]\n * @param ctrls a group of anchor Pts\n * @return an interpolated Pt on the curve\n */\n static bezierStep( step:Pt, ctrls:GroupLike ) {\n /*\n * Bezier basis matrix\n * [ -1, 3, -3, 1 ]\n * [ 3, -6, 3, 0 ]\n * [ -3, 3, 0, 0 ]\n * [ 1, 0, 0, 0 ]\n */\n\n let m = new Group(\n new Pt( -1, 3, -3, 1),\n new Pt( 3, -6, 3, 0),\n new Pt( -3, 3, 0, 0),\n new Pt( 1, 0, 0, 0)\n );\n\n return Curve._calcPt( ctrls, Mat.multiply( [step], m, true )[0] );\n }\n\n /**\n * Create a B-spline curve\n * @param pts a group of anchor Pt\n * @param steps the number of line segments per curve. Defaults to 10 steps.\n * @param tension optional value between 0 to n to specify a \"tension\". Default is 1 which is the usual tension.\n * @returns a curve as a group of interpolated Pt\n */\n static bspline( pts:GroupLike, steps:number=10, tension:number=1 ):Group {\n if (pts.length < 2) return new Group();\n\n let ps = new Group();\n let ts = Curve.getSteps( steps );\n\n\n let k = 0;\n while ( k < pts.length-3 ) {\n let c = Curve.controlPoints( pts, k );\n if (c.length > 0) {\n if (tension !== 1) {\n for (let i=0; i<=steps; i++) {\n ps.push( Curve.bsplineTensionStep( ts[i], c, tension ) );\n }\n } else {\n for (let i=0; i<=steps; i++) {\n ps.push( Curve.bsplineStep( ts[i], c ) );\n }\n }\n k++;\n }\n }\n\n return ps;\n }\n\n /**\n * Interpolate to get a point on a B-spline curve\n * @param step the coefficients [t*t*t, t*t, t, 1]\n * @param ctrls a group of anchor Pts\n * @return an interpolated Pt on the curve\n */ \n static bsplineStep( step:Pt, ctrls:GroupLike ):Pt {\n /*\n * Basis matrix:\n * [ -1.0/6.0, 3.0/6.0, -3.0/6.0, 1.0/6.0 ],\n * [ 3.0/6.0, -6.0/6.0, 3.0/6.0, 0.0 ],\n * [ -3.0/6.0, 0.0, 3.0/6.0, 0.0 ],\n * [ 1.0/6.0, 4.0/6.0, 1.0/6.0, 0.0 ]\n */\n\n let m = new Group(\n new Pt( -0.16666666666666666, 0.5, -0.5, 0.16666666666666666),\n new Pt( 0.5, -1, 0, 0.6666666666666666),\n new Pt( -0.5, 0.5, 0.5, 0.16666666666666666),\n new Pt( 0.16666666666666666, 0, 0, 0)\n );\n\n return Curve._calcPt( ctrls, Mat.multiply( [step], m, true )[0] );\n }\n\n /**\n * Interpolate to get a point on a B-spline curve\n * @param step the coefficients [t*t*t, t*t, t, 1]\n * @param ctrls a group of anchor Pts\n * @param tension optional value between 0 to n to specify a \"tension\". Default to 1 which is the usual tension.\n * @return an interpolated Pt on the curve\n */ \n static bsplineTensionStep( step:Pt, ctrls:GroupLike, tension:number=1 ):Pt {\n /*\n * Basis matrix:\n * [ -1/6a, 2 - 1.5a, 1.5a - 2, 1/6a ]\n * [ 0.5a, 2a-3, 3-2.5a 0 ]\n * [ -0.5a, 0, 0.5a, 0 ]\n * [ 1/6a, 1 - 1/3a, 1/6a, 0 ]\n */\n\n let m = new Group(\n new Pt( -0.16666666666666666, 0.5, -0.5, 0.16666666666666666),\n new Pt( -1.5, 2, 0, -0.3333333333333333),\n new Pt( 1.5, -2.5, 0.5, 0.16666666666666666),\n new Pt( 0.16666666666666666, 0, 0, 0)\n );\n\n let h = Mat.multiply( [step], m, true )[0].multiply( tension );\n let h2 = (2*step[0] - 3*step[1] + 1);\n let h3 = -2*step[0] + 3*step[1];\n\n let pt = Curve._calcPt( ctrls, h );\n\n pt.x += h2*ctrls[1].x + h3*ctrls[2].x;\n pt.y += h2*ctrls[1].y + h3*ctrls[2].y;\n if (pt.length > 2) pt.z += h2*ctrls[1].z + h3*ctrls[2].z;\n\n return pt;\n } \n\n}\n\n\n// WEBPACK FOOTER //\n// ./~/tslint-loader??ref--0!./src/Op.ts","// Source code licensed under Apache License 2.0. \n// Copyright © 2017 William Ngan. (https://github.com/williamngan/pts)\n\n\nimport { Const } from \"./Util\";\nimport { Curve } from \"./Op\";\nimport { Pt, PtLike, Group, GroupLike } from \"./Pt\";\nimport { Vec, Mat } from \"./LinearAlgebra\";\n\n/**\n * Num class provides various helper functions for basic numeric operations\n */\nexport class Num {\n\n /**\n * Check if two numbers are equal or almost equal within a threshold\n * @param a number a\n * @param b number b\n * @param threshold a threshold within which the two numbers are considered equal\n */\n static equals( a:number, b:number, threshold=0.00001 ):boolean {\n return Math.abs( a-b ) < threshold;\n }\n\n\n /**\n * Linear interpolation\n * @param a start value\n * @param b end value\n * @param t usually a value between 0 to 1\n */\n static lerp( a:number, b:number, t:number ):number {\n return (1 - t) * a + t * b;\n }\n\n\n /**\n * Clamp values between min and max\n * @param val value to clamp\n * @param min min value\n * @param max max value\n */\n static clamp( val:number, min:number, max:number ):number {\n return Math.max(min, Math.min(max, val));\n }\n\n\n /**\n * Different from Num.clamp in that the value out-of-bound will be \"looped back\" to the other end.\n * @param val value to bound\n * @param min min value\n * @param max max value\n * @example `boundValue(361, 0, 360)` will return 1\n */\n static boundValue( val:number, min:number, max:number ):number {\n let len = Math.abs(max - min);\n let a = val % len;\n\n if (a > max) a -= len;\n else if (a < min) a += len;\n\n return a;\n }\n\n\n /**\n * Check if a value is within \n * @param p \n * @param a \n * @param b \n */\n static within( p:number, a:number, b:number ):boolean {\n return p >= Math.min(a, b) && p <= Math.max(a, b);\n }\n\n\n /**\n * Get a random number within a range\n * @param a range value 1\n * @param b range value 2\n */\n static randomRange( a:number, b:number = 0 ):number {\n let r = (a > b) ? (a - b) : (b - a);\n return a + Math.random() * r;\n }\n\n\n /**\n * Normalize a value within a range\n * @param n the value to normalize\n * @param a range value 1\n * @param b range value 1\n */\n static normalizeValue(n:number, a:number, b:number):number {\n let min = Math.min(a, b);\n let max = Math.max(a, b);\n return (n - min) / (max - min);\n }\n\n\n /**\n * Sum a group of numeric arrays\n * @param pts an array of numeric arrays\n * @returns a array of sums\n */\n static sum(pts: GroupLike|number[][]): Pt {\n let c = new Pt( pts[0] );\n for (let i = 1, len = pts.length; i < len; i++) {\n Vec.add(c, pts[i]);\n }\n return c;\n }\n\n\n /**\n * Sum a group of numeric arrays\n * @param pts an array of numeric arrays\n * @returns a array of sums\n */\n static average(pts: GroupLike|number[][]): Pt {\n return Num.sum(pts).divide(pts.length);\n }\n\n\n /**\n * Given a value between 0 to 1, returns a value that cycles between 0 -> 1 -> 0 using sine method.\n * @param t a value between 0 to 1\n * @return a value between 0 to 1\n */\n static cycle( t:number ):number {\n return (Math.sin( Math.PI * 2 * t ) + 1) / 2;\n }\n\n\n /** \n * Map a value from one range to another\n * @param n a value in the first range\n * @param currMin lower bound of the first range\n * @param currMax upper bound of the first range\n * @param targetMin lower bound of the second range\n * @param targetMax upper bound of the second range\n * @returns a remapped value in the second range\n */\n static mapToRange(n:number, currA, currB, targetA, targetB) {\n if (currA == currB) throw new Error(\"[currMin, currMax] must define a range that is not zero\");\n let min = Math.min(targetA, targetB);\n let max = Math.max(targetA, targetB);\n return Num.normalizeValue(n, currA, currB) * (max - min) + min;\n }\n}\n\n\n\n/**\n * Geom class provides various helper functions for basic geometric operations\n */\nexport class Geom {\n\n /**\n * Bound an angle between 0 to 360 degrees\n */\n static boundAngle( angle:number ):number {\n return Num.boundValue(angle, 0, 360);\n }\n\n\n /**\n * Bound a radian between 0 to 2-PI\n */\n static boundRadian( angle:number ):number {\n return Num.boundValue(angle, 0, Const.two_pi);\n }\n\n\n /**\n * Convert an angle in degree to radian\n */\n static toRadian( angle:number ):number {\n return angle * Const.deg_to_rad;\n }\n\n\n /**\n * Convert an angle in radian to degree\n */\n static toDegree( radian:number ):number {\n return radian * Const.rad_to_deg;\n }\n\n\n /**\n * Get a bounding box for a set of Pts\n * @param pts a Group or an array of Pts\n * @return a Group of two Pts, representing the top-left and bottom-right corners.\n */\n static boundingBox( pts:GroupLike ): Group {\n let minPt = pts.reduce((a: Pt, p: Pt) => a.$min(p));\n let maxPt = pts.reduce((a: Pt, p: Pt) => a.$max(p));\n return new Group(minPt, maxPt);\n }\n\n\n /**\n * Get a centroid (the average middle point) for a set of Pts\n * @param pts a Group or an array of Pts\n * @return a centroid Pt \n */\n static centroid( pts:GroupLike|number[][] ):Pt {\n return Num.average(pts);\n }\n\n\n /**\n * Given an anchor Pt, rebase all Pts in this group either to or from this anchor base.\n * @param pts a Group or array of Pt\n * @param ptOrIndex an index for the Pt array, or an external Pt\n * @param direction \"to\" (subtract all Pt with this anchor base) or \"from\" (add all Pt from this anchor base)\n */\n static anchor( pts:GroupLike, ptOrIndex:PtLike|number=0, direction:(\"to\"|\"from\")=\"to\") {\n let method = (direction == \"to\") ? \"subtract\" : \"add\";\n for (let i = 0, len = pts.length; i < len; i++) {\n if (typeof ptOrIndex == \"number\") {\n if (ptOrIndex !== i) pts[i][method](pts[ptOrIndex]);\n } else {\n pts[i][method](ptOrIndex);\n }\n }\n }\n\n\n /**\n * Get an interpolated (or extrapolated) value between two Pts\n * @param a first Pt\n * @param b second Pt\n * @param t a value between 0 to 1 to interpolate, or any other value to extrapolate\n * @returns interpolated point as a new Pt\n */\n static interpolate( a:Pt|number[], b:Pt|number[], t:number=0.5 ):Pt {\n let len = Math.min(a.length, b.length);\n let d = Pt.make(len);\n for (let i = 0; i < len; i++) {\n d[i] = a[i] * (1 - t) + b[i] * t;\n }\n return d;\n }\n\n\n /**\n * Find two Pt that are perpendicular to this Pt (2D)\n * @param axis a string such as \"xy\" (use Const.xy) or an array to specify index for two dimensions\n * @returns an array of two Pt that are perpendicular to this Pt\n */\n static perpendicular( pt:PtLike, axis:string|number[]=Const.xy ):Group {\n let y = axis[1];\n let x = axis[0];\n\n let p = new Pt(pt);\n let pa = new Pt(p);\n pa[x] = -p[y];\n pa[y] = p[x];\n let pb = new Pt(p);\n pb[x] = p[y];\n pb[y] = -p[x];\n\n return new Group(pa, pb);\n }\n\n\n /**\n * Check if two Pts (vectors) are perpendicular to each other \n */\n static isPerpendicular( p1:PtLike, p2:PtLike ):boolean {\n return new Pt(p1).dot(p2) === 0;\n }\n\n\n /**\n * Check if a Pt is within the rectangular boundary defined by two Pts\n * @param pt the Pt to check\n * @param boundPt1 boundary Pt 1\n * @param boundPt2 boundary Pt 2\n */\n static withinBound( pt:PtLike|number[], boundPt1:PtLike|number[], boundPt2:PtLike|number[] ):boolean {\n for (let i = 0, len = Math.min(pt.length, boundPt1.length, boundPt2.length); i < len; i++) {\n if (!Num.within(pt[i], boundPt1[i], boundPt2[i])) return false;\n }\n return true;\n }\n\n\n /**\n * Sort the Pts so that their edges will form a non-overlapping polygon\n * Ref: https://stackoverflow.com/questions/6989100/sort-points-in-clockwise-order\n * @param pts an array of Pts\n */\n static sortEdges( pts:GroupLike ):GroupLike {\n\n let bounds = Geom.boundingBox( pts );\n let center = bounds[1].add(bounds[0]).divide(2);\n \n let fn = ( a:Pt, b:Pt ):number => {\n if (a.length < 2 || b.length < 2) throw new Error( \"Pt dimension cannot be less than 2\");\n\n let da = a.$subtract( center );\n let db = b.$subtract( center );\n \n if (da[0] >= 0 && db[0] < 0) return 1;\n if (da[0] < 0 && db[0] >= 0) return -1;\n if (da[0] == 0 && db[0] == 0) {\n if (da[1] >= 0 || db[1] >= 0)\n return (da[1] > db[1]) ? 1 : -1;\n return (db[1] > da[1]) ? 1 : -1;\n }\n\n // compute the cross product of vectors (center -> a) x (center -> b)\n let det = da.cross2D( db );\n if (det < 0) return 1;\n if (det > 0) return -1;\n \n // points a and b are on the same line from the center\n // check which point is closer to the center\n return (da[0]*da[0] + da[1]*da[1] > db[0]*db[0] + db[1]*db[1]) ? 1 : -1;\n };\n\n return pts.sort( fn );\n }\n\n\n /**\n * Scale a Pt or a Group of Pts\n * @param ps a Pt or a Group of Pts\n * @param scale scale value\n * @param anchor optional anchor point to scale from\n */\n static scale( ps:Pt|GroupLike, scale:number|number[]|PtLike, anchor?:PtLike ):Geom {\n let pts = (!Array.isArray(ps)) ? [ps] : ps;\n let scs = (typeof scale == \"number\") ? Pt.make(pts[0].length, scale) : scale;\n if (!anchor) anchor = Pt.make(pts[0].length, 0);\n\n for (let i = 0, len = pts.length; i < len; i++) {\n let p = pts[i];\n for (let k = 0, lenP = p.length; k < lenP; k++) {\n p[k] = (anchor && anchor[k]) ? anchor[k] + (p[k] - anchor[k]) * scs[k] : p[k] * scs[k];\n }\n }\n\n return Geom;\n }\n\n\n /**\n * Rotate a Pt or a Group of Pts in 2D space\n * @param ps a Pt or a Group of Pts\n * @param angle rotate angle\n * @param anchor optional anchor point to rotate from\n * @param axis optional axis such as \"yz\" to define a 2D plane of rotation\n */\n static rotate2D( ps:Pt|GroupLike, angle:number, anchor?:PtLike, axis?:string ):Geom {\n let pts = (!Array.isArray(ps)) ? [ps] : ps;\n let fn = (anchor) ? Mat.rotateAt2DMatrix : Mat.rotate2DMatrix;\n if (!anchor) anchor = Pt.make(pts[0].length, 0);\n let cos = Math.cos(angle);\n let sin = Math.sin(angle);\n\n for (let i = 0, len = pts.length; i < len; i++) {\n let p = (axis) ? pts[i].$take(axis) : pts[i];\n p.to(Mat.transform2D(p, fn(cos, sin, anchor)));\n }\n\n return Geom;\n }\n\n\n /**\n * Shear a Pt or a Group of Pts in 2D space\n * @param ps a Pt or a Group of Pts\n * @param scale shearing value which can be a number or an array of 2 numbers\n * @param anchor optional anchor point to shear from\n * @param axis optional axis such as \"yz\" to define a 2D plane of shearing\n */\n static shear2D( ps:Pt|GroupLike, scale:number|number[]|PtLike, anchor?:PtLike, axis?:string):Geom {\n let pts = (!Array.isArray(ps)) ? [ps] : ps;\n let s = (typeof scale == \"number\") ? [scale, scale] : scale;\n if (!anchor) anchor = Pt.make(pts[0].length, 0);\n let fn = (anchor) ? Mat.shearAt2DMatrix : Mat.shear2DMatrix;\n let tanx = Math.tan(s[0]);\n let tany = Math.tan(s[1]);\n\n for (let i = 0, len = pts.length; i < len; i++) {\n let p = (axis) ? pts[i].$take(axis) : pts[i];\n p.to(Mat.transform2D(p, fn(tanx, tany, anchor)));\n }\n\n return Geom;\n }\n\n\n /**\n * Reflect a Pt or a Group of Pts along a 2D line\n * @param ps a Pt or a Group of Pts\n * @param line a Group of 2 Pts that defines a line for reflection\n * @param axis optional axis such as \"yz\" to define a 2D plane of reflection\n */\n static reflect2D( ps:Pt|GroupLike, line:GroupLike, axis?:string ):Geom {\n let pts = (!Array.isArray(ps)) ? [ps] : ps;\n\n for (let i = 0, len = pts.length; i < len; i++) {\n let p = (axis) ? pts[i].$take(axis) : pts[i];\n p.to(Mat.transform2D(p, Mat.reflectAt2DMatrix(line[0], line[1])));\n }\n\n return Geom;\n }\n\n\n /**\n * Generate a sine and cosine lookup table\n * @returns an object with 2 tables (array of 360 values) and 2 functions to get sin/cos given a radian parameter. { sinTable:Float64Array, cosTable:Float64Array, sin:(rad)=>number, cos:(rad)=>number }\n */\n static cosTable() {\n let cos = new Float64Array(360);\n\n for (let i = 0; i < 360; i++) cos[i] = Math.cos(i * Math.PI / 180);\n let find = (rad:number) => cos[Math.floor(Geom.boundAngle(Geom.toDegree(rad)))];\n\n return { table: cos, cos: find };\n }\n\n /**\n * Generate a sine and cosine lookup table\n * @returns an object with 2 tables (array of 360 values) and 2 functions to get sin/cos given a radian parameter. { sinTable:Float64Array, cosTable:Float64Array, sin:(rad)=>number, cos:(rad)=>number }\n */\n static sinTable() {\n let sin = new Float64Array(360);\n\n for (let i = 0; i < 360; i++) sin[i] = Math.sin(i * Math.PI / 180);\n let find = (rad:number) => sin[Math.floor(Geom.boundAngle(Geom.toDegree(rad)))];\n\n return { table: sin, sin: find };\n }\n}\n\n\n\n/**\n * Shaping provides various shaping/easing functions to interpolate a value non-linearly.\n */\nexport class Shaping {\n\n /**\n * Linear mapping\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n */\n static linear(t:number, c:number = 1):number {\n return c * t;\n }\n\n /** \n * Quadratic in, adapted from Robert Penner's [easing functions](http://robertpenner.com/easing/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n */\n static quadraticIn(t:number, c:number = 1):number {\n return c * t * t;\n }\n\n /** \n * Quadratic out, adapted from Robert Penner's [easing functions](http://robertpenner.com/easing/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n */\n static quadraticOut(t:number, c:number = 1):number {\n return -c * t * (t - 2);\n }\n\n /** \n * Quadratic in-out, adapted from Robert Penner's [easing functions](http://robertpenner.com/easing/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n */\n static quadraticInOut(t:number, c:number = 1):number {\n let dt = t * 2;\n return (t < 0.5) ? c / 2 * t * t * 4 : -c / 2 * ((dt - 1) * (dt - 3) - 1);\n }\n\n /** \n * Cubic in, adapted from Robert Penner's [easing functions](http://robertpenner.com/easing/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n */\n static cubicIn(t:number, c:number = 1):number {\n return c * t * t * t;\n }\n\n /** \n * Cubic out, adapted from Robert Penner's [easing functions](http://robertpenner.com/easing/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n */\n static cubicOut(t:number, c:number = 1):number {\n let dt = t - 1;\n return c * (dt * dt * dt + 1);\n }\n\n /** \n * Cubic in-out, adapted from Robert Penner's [easing functions](http://robertpenner.com/easing/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n */\n static cubicInOut(t:number, c:number = 1):number {\n let dt = t * 2;\n return (t < 0.5) ? c / 2 * dt * dt * dt : c / 2 * ((dt - 2) * (dt - 2) * (dt - 2) + 2);\n }\n\n /** \n * Exponential ease In, adapted from Golan Levin's [polynomial shapers](http://www.flong.com/texts/code/shapers_poly/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n * @parma p a value between 0 to 1 to control the curve. Default is 0.25.\n */\n static exponentialIn(t:number, c:number = 1, p:number = 0.25):number {\n return c * Math.pow(t, 1 / p);\n }\n\n /** \n * Exponential ease out, adapted from Golan Levin's [polynomial shapers](http://www.flong.com/texts/code/shapers_poly/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n * @parma p a value between 0 to 1 to control the curve. Default is 0.25.\n */\n static exponentialOut(t:number, c:number = 1, p:number = 0.25):number {\n return c * Math.pow(t, p);\n }\n\n /** \n * Sinuous in, adapted from Robert Penner's [easing functions](http://robertpenner.com/easing/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n */\n static sineIn(t:number, c:number = 1):number {\n return -c * Math.cos(t * Const.half_pi) + c;\n }\n\n /** \n * Sinuous out, adapted from Robert Penner's [easing functions](http://robertpenner.com/easing/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n */\n static sineOut(t:number, c:number = 1):number {\n return c * Math.sin(t * Const.half_pi);\n }\n\n /** \n * Sinuous in-out, adapted from Robert Penner's [easing functions](http://robertpenner.com/easing/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n */\n static sineInOut(t:number, c:number = 1):number {\n return -c / 2 * (Math.cos(Math.PI * t) - 1);\n }\n\n /** \n * A faster way to approximate cosine ease in-out using Blinn-Wyvill Approximation. Adapated from Golan Levin's [polynomial shaping](http://www.flong.com/texts/code/shapers_poly/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n */\n static cosineApprox(t:number, c:number = 1) {\n let t2 = t * t;\n let t4 = t2 * t2;\n let t6 = t4 * t2;\n return c * (4 * t6 / 9 - 17 * t4 / 9 + 22 * t2 / 9);\n }\n\n /** \n * Circular in, adapted from Robert Penner's [easing functions](http://robertpenner.com/easing/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n */\n static circularIn(t:number, c:number = 1):number {\n return -c * (Math.sqrt(1 - t * t) - 1);\n }\n\n /** \n * Circular out, adapted from Robert Penner's [easing functions](http://robertpenner.com/easing/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n */\n static circularOut(t:number, c:number = 1):number {\n let dt = t - 1;\n return c * Math.sqrt(1 - dt * dt);\n }\n\n /** \n * Circular in-out, adapted from Robert Penner's [easing functions](http://robertpenner.com/easing/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n */\n static circularInOut(t:number, c:number = 1):number {\n let dt = t * 2;\n return (t < 0.5) ? -c / 2 * (Math.sqrt(1 - dt * dt) - 1) : c / 2 * (Math.sqrt(1 - (dt - 2) * (dt - 2)) + 1);\n }\n\n /** \n * Elastic in, adapted from Robert Penner's [easing functions](http://robertpenner.com/easing/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n * @parma p elastic parmeter between 0 to 1. The lower the number, the more elastic it will be. Default is 0.7.\n */\n static elasticIn(t:number, c:number = 1, p:number = 0.7):number {\n let dt = t - 1;\n let s = (p / Const.two_pi) * 1.5707963267948966;\n return c * (-Math.pow(2, 10 * dt) * Math.sin((dt - s) * Const.two_pi / p));\n }\n\n /** \n * Elastic out, adapted from Robert Penner's [easing functions](http://robertpenner.com/easing/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n * @parma p elastic parmeter between 0 to 1. The lower the number, the more elastic it will be. Default is 0.7.\n */\n static elasticOut(t:number, c:number = 1, p:number = 0.7):number {\n let s = (p / Const.two_pi) * 1.5707963267948966;\n return c * (Math.pow(2, -10 * t) * Math.sin((t - s) * Const.two_pi / p)) + c;\n }\n\n /** \n * Elastic in-out, adapted from Robert Penner's [easing functions](http://robertpenner.com/easing/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n * @parma p elastic parmeter between 0 to 1. The lower the number, the more elastic it will be. Default is 0.6.\n */\n static elasticInOut(t:number, c:number = 1, p:number = 0.6):number {\n let dt = t * 2;\n let s = (p / Const.two_pi) * 1.5707963267948966;\n if (t < 0.5) {\n dt -= 1;\n return c * (-0.5 * (Math.pow(2, 10 * dt) * Math.sin((dt - s) * Const.two_pi / p)));\n } else {\n dt -= 1;\n return c * (0.5 * (Math.pow(2, -10 * dt) * Math.sin((dt - s) * Const.two_pi / p))) + c;\n }\n }\n\n /** \n * Bounce in, adapted from Robert Penner's [easing functions](http://robertpenner.com/easing/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n */\n static bounceIn(t:number, c:number = 1):number {\n return c - Shaping.bounceOut((1 - t), c);\n }\n\n /** \n * Bounce out, adapted from Robert Penner's [easing functions](http://robertpenner.com/easing/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n */\n static bounceOut(t:number, c:number = 1) {\n if (t < (1 / 2.75)) {\n return c * (7.5625 * t * t);\n } else if (t < (2 / 2.75)) {\n t -= 1.5 / 2.75;\n return c * (7.5625 * t * t + 0.75);\n } else if (t < (2.5 / 2.75)) {\n t -= 2.25 / 2.75;\n return c * (7.5625 * t * t + 0.9375);\n } else {\n t -= 2.625 / 2.75;\n return c * (7.5625 * t * t + 0.984375);\n }\n }\n\n /** \n * Bounce in-out, adapted from Robert Penner's [easing functions](http://robertpenner.com/easing/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n */\n static bounceInOut(t:number, c:number = 1):number {\n return (t < 0.5) ? Shaping.bounceIn(t * 2, c) / 2 : Shaping.bounceOut(t * 2 - 1, c) / 2 + c / 2;\n }\n\n /** \n * Sigmoid curve changes its shape adapted from the input value, but always returns a value between 0 to 1.\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n * @parma p the larger the value, the \"steeper\" the curve will be. Default is 10.\n */\n static sigmoid(t:number, c:number = 1, p:number = 10):number {\n let d = p * (t - 0.5);\n return c / (1 + Math.exp(-d));\n }\n\n /** \n * The Logistic Sigmoid is a useful curve. Adapted from Golan Levin's [shaping function](http://www.flong.com/texts/code/shapers_exp/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n * @parma p a parameter between 0 to 1 to control the steepness of the curve. Higher is steeper. Default is 0.7.\n */\n static logSigmoid(t:number, c:number = 1, p:number = 0.7):number {\n p = Math.max(Const.epsilon, Math.min(1 - Const.epsilon, p));\n p = 1 / (1 - p);\n\n let A = 1 / (1 + Math.exp(((t - 0.5) * p * -2)));\n let B = 1 / (1 + Math.exp(p));\n let C = 1 / (1 + Math.exp(-p));\n return c * (A - B) / (C - B);\n }\n\n\n /** \n * An exponential seat curve. Adapted from Golan Levin's [shaping functions](http://www.flong.com/texts/code/shapers_exp/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n * @parma p a parameter between 0 to 1 to control the steepness of the curve. Higher is steeper. Default is 0.5.\n */\n static seat(t:number, c:number = 1, p:number = 0.5):number {\n if ((t < 0.5)) {\n return c * (Math.pow(2 * t, 1 - p)) / 2;\n } else {\n return c * (1 - (Math.pow(2 * (1 - t), 1 - p)) / 2);\n }\n }\n\n\n /** \n * Quadratic bezier curve. Adapted from Golan Levin's [shaping functions](http://www.flong.com/texts/code/shapers_exp/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n * @parma p1 a Pt object specifying the first control Pt, or a value specifying the control Pt's x position (its y position will default to 0.5). Default is `Pt(0.95, 0.95)\n */\n static quadraticBezier(t:number, c:number = 1, p:number|PtLike=[0.05, 0.95] ):number {\n let a:number = (typeof p != \"number\") ? p[0] : p;\n let b:number = (typeof p != \"number\") ? p[1] : 0.5;\n let om2a = 1 - 2 * a;\n if (om2a === 0) {\n om2a = Const.epsilon;\n }\n let d = (Math.sqrt(a * a + om2a * t) - a) / om2a;\n return c * ((1 - 2 * b) * (d * d) + (2 * b) * d);\n }\n\n\n /** \n * Cubic bezier curve. This reuses the bezier functions in Curve class.\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n * @parma p1` a Pt object specifying the first control Pt. Default is `Pt(0.1, 0.7).\n * @parma p2` a Pt object specifying the second control Pt. Default is `Pt(0.9, 0.2).\n */\n static cubicBezier(t:number, c:number = 1, p1:PtLike=[0.1, 0.7], p2:PtLike=[0.9, 0.2] ):number {\n let curve = new Group( new Pt(0, 0), new Pt(p1), new Pt(p2), new Pt(1, 1) );\n return c * Curve.bezierStep(new Pt(t*t*t, t*t, t, 1), Curve.controlPoints(curve)).y;\n }\n\n\n /** \n * Give a Pt, draw a quadratic curve that will pass through that Pt as closely as possible. Adapted from Golan Levin's [shaping functions](http://www.flong.com/texts/code/shapers_poly/)\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n * @parma p1` a Pt object specifying the Pt to pass through. Default is `Pt(0.2, 0.35)\n */\n static quadraticTarget(t:number, c:number = 1, p1:PtLike = [0.2, 0.35]):number {\n let a = Math.min(1 - Const.epsilon, Math.max( Const.epsilon, p1[0] ));\n let b = Math.min(1, Math.max( 0, p1[1] ));\n let A = (1 - b) / (1 - a) - (b / a);\n let B = (A * (a * a) - b) / a;\n let y = A * (t * t) - B * t;\n return c * Math.min(1, Math.max(0, y));\n }\n\n\n /** \n * Step function is a simple jump from 0 to 1 at a specific Pt in time\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n * @parma p usually a value between 0 to 1, which specify the Pt to \"jump\". Default is 0.5 which is in the middle.\n */\n static cliff(t:number, c:number = 1, p:number = 0.5):number {\n return (t > p) ? c : 0;\n }\n\n /** \n * Convert any shaping functions into a series of steps\n * @parma fn the original shaping function\n * @parma steps the number of steps\n * @parma t a value between 0 to 1\n * @parma c the value to shape, default is 1\n * @parma args optional paramters to pass to original function\n */\n static step(fn: Function, steps:number, t:number, c:number, ...args:any[]) {\n let s = 1 / steps;\n let tt = Math.floor(t / s) * s;\n return fn(tt, c, ...args);\n }\n\n}\n\n\n/**\n * Range object keeps track of a Group of n-dimensional Pts to provide its minimum, maximum, and magnitude in each dimension. \n * It also provides convenient functions such as mapping the Group to another range.\n */\nexport class Range {\n\n protected _source:Group;\n protected _max:Pt;\n protected _min:Pt;\n protected _mag:Pt;\n protected _dims:number = 0;\n\n\n /**\n * Construct a Range instance for a Group of Pts, \n * @param g a Group or an array of Pts\n */\n constructor( g:GroupLike ) {\n this._source = Group.fromPtArray( g );\n this.calc();\n }\n\n /**\n * Get this Range's maximum values per dimension\n */\n get max():Pt { return this._max.clone(); }\n \n /**\n * Get this Range's minimum values per dimension\n */\n get min():Pt { return this._min.clone(); }\n \n /**\n * Get this Range's magnitude in each dimension\n */\n get magnitude():Pt { return this._mag.clone(); }\n\n\n /**\n * Go through the group and find its min and max values.\n * Usually you don't need to call this function directly.\n */\n calc():this {\n if (!this._source) return;\n let dims = this._source[0].length;\n this._dims = dims;\n let max = new Pt( dims );\n let min = new Pt( dims );\n let mag = new Pt( dims );\n\n for (let i=0; i<dims; i++) {\n max[i] = Const.min;\n min[i] = Const.max;\n mag[i] = 0;\n\n let s = this._source.zipSlice( i );\n for (let k=0, len=s.length; k<len; k++) {\n max[i] = Math.max( max[i], s[k] );\n min[i] = Math.min( min[i], s[k] );\n mag[i] = max[i] - min[i];\n }\n }\n\n this._max = max;\n this._min = min;\n this._mag = mag;\n return this;\n }\n\n\n /**\n * Map this Range to another range of values\n * @param min target range's minimum value\n * @param max target range's maximum value\n * @param exclude Optional boolean array where `true` means excluding the conversion in that specific dimension.\n */\n mapTo( min:number, max:number, exclude?:boolean[] ):Group {\n let target = new Group();\n for (let i=0, len=this._source.length; i<len; i++) {\n let g = this._source[i];\n let n = new Pt( this._dims );\n for (let k=0; k<this._dims; k++) {\n n[k] = (exclude && exclude[k]) ? g[k] : Num.mapToRange( g[k], this._min[k], this._max[k], min, max ); \n }\n target.push( n ); \n }\n return target;\n }\n\n\n /**\n * Add more Pts to this Range and recalculate its min and max values\n * @param g a Group or an array of Pts to append to this Range\n * @param update Optional. Set the parameter to `false` if you want to append without immediately updating this Range's min and max values. Default is `true`.\n */\n append( g:GroupLike, update:boolean=true ):this {\n if (g[0].length !== this._dims) throw new Error(`Dimensions don't match. ${this._dims} dimensions in Range and ${g[0].length} provided in parameter. `);\n this._source = this._source.concat( g ) as Group;\n if (update) this.calc();\n return this;\n }\n\n\n /**\n * Create a number of evenly spaced \"ticks\" that span this Range's min and max value.\n * @param count number of subdivision. For example, 10 subdivision will return 11 tick values, which include first(min) and last(max) values.\n */\n ticks( count:number ):Group {\n let g = new Group();\n for (let i=0; i<=count; i++) {\n let p = new Pt( this._dims );\n for (let k=0, len=this._max.length; k<len; k++) {\n p[k] = Num.lerp( this._min[k], this._max[k], i/count );\n }\n g.push( p );\n }\n return g;\n }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./~/tslint-loader??ref--0!./src/Num.ts","// Source code licensed under Apache License 2.0. \n// Copyright © 2017 William Ngan. (https://github.com/williamngan/pts)\n\n\nimport {Pt, PtLike, GroupLike, Group} from \"./Pt\";\nimport {Line} from \"./Op\";\n\n\n/**\n * Vec provides static function for vector operations. It's not yet optimized but good enough to use.\n */\nexport class Vec {\n\n /**\n * Add b to vector `a`\n * @returns vector `a`\n */\n static add( a:PtLike, b:PtLike|number ):PtLike {\n if (typeof b == \"number\") {\n for (let i=0, len=a.length; i<len; i++) a[i] += b;\n } else {\n for (let i=0, len=a.length; i<len; i++) a[i] += b[i] || 0;\n }\n return a;\n }\n\n /**\n * Subtract `b` from vector `a`\n * @returns vector `a`\n */\n static subtract( a:PtLike, b:PtLike|number ):PtLike {\n if (typeof b == \"number\") {\n for (let i=0, len=a.length; i<len; i++) a[i] -= b;\n } else {\n for (let i=0, len=a.length; i<len; i++) a[i] -= b[i] || 0;\n }\n return a;\n }\n\n /**\n * Multiply `b` with vector `a`\n * @returns vector `a`\n */\n static multiply( a:PtLike, b:PtLike|number ):PtLike {\n if (typeof b == \"number\") {\n for (let i=0, len=a.length; i<len; i++) a[i] *= b;\n } else {\n if (a.length != b.length) {\n throw new Error(`Cannot do element-wise multiply since the array lengths don't match: ${a.toString()} multiply-with ${b.toString()}`);\n }\n for (let i=0, len=a.length; i<len; i++) a[i] *= b[i];\n }\n return a;\n }\n\n\n /**\n * Divide `a` over `b`\n * @returns vector `a`\n */\n static divide( a:PtLike, b:PtLike|number ):PtLike {\n if (typeof b == \"number\") {\n if (b === 0) throw new Error(\"Cannot divide by zero\");\n for (let i=0, len=a.length; i<len; i++) a[i] /= b;\n } else {\n if (a.length != b.length) {\n throw new Error(`Cannot do element-wise divide since the array lengths don't match. ${a.toString()} divide-by ${b.toString()}`);\n }\n for (let i=0, len=a.length; i<len; i++) a[i] /= b[i];\n }\n return a;\n }\n\n\n /**\n * Dot product of `a` and `b`\n */\n static dot( a:PtLike, b:PtLike ):number {\n if (a.length != b.length) throw new Error(\"Array lengths don't match\");\n let d = 0;\n for (let i=0, len=a.length; i<len; i++) {\n d += a[i]*b[i];\n }\n return d;\n } \n\n \n /**\n * 2D cross product of `a` and `b`\n */\n static cross2D( a:PtLike, b:PtLike ):number {\n return a[0]*b[1] - a[1]*b[0];\n }\n\n /**\n * 3D Cross product of `a` and `b`\n */\n static cross( a:PtLike, b:PtLike ):Pt {\n return new Pt( (a[1]*b[2] - a[2]*b[1]), (a[2]*b[0] - a[0]*b[2]), (a[0]*b[1] - a[1]*b[0]) );\n }\n\n\n /**\n * Magnitude of `a`\n */\n static magnitude( a:PtLike ):number {\n return Math.sqrt( Vec.dot( a, a ) );\n }\n\n\n /**\n * Unit vector of `a`. If magnitude of `a` is already known, pass it in the second paramter to optimize calculation.\n */\n static unit( a:PtLike, magnitude:number=undefined ):PtLike {\n let m = (magnitude===undefined) ? Vec.magnitude(a) : magnitude;\n if (m===0) throw new Error(\"Cannot calculate unit vector because magnitude is 0\");\n return Vec.divide( a, m );\n }\n\n\n /**\n * Set `a` to its absolute value in each dimension\n * @returns vector `a`\n */\n static abs( a:PtLike ):PtLike {\n return Vec.map( a, Math.abs );\n }\n\n\n /**\n * Set `a` to its floor value in each dimension\n * @returns vector `a`\n */\n static floor( a:PtLike ):PtLike {\n return Vec.map( a, Math.floor );\n }\n\n\n /**\n * Set `a` to its ceiling value in each dimension\n * @returns vector `a`\n */\n static ceil( a:PtLike ):PtLike {\n return Vec.map( a, Math.ceil );\n }\n\n\n /**\n * Set `a` to its rounded value in each dimension\n * @returns vector `a`\n */\n static round( a:PtLike ):PtLike {\n return Vec.map( a, Math.round );\n }\n\n \n /**\n * Find the max value within a vector's dimensions\n * @returns an object with `value` and `index` that specifies the max value and its corresponding dimension.\n */\n static max( a:PtLike ):{value, index} {\n let m = Number.MIN_VALUE;\n let index = 0;\n for (let i=0, len=a.length; i<len; i++) {\n m = Math.max( m, a[i] );\n if (m === a[i]) index = i;\n }\n return {value: m, index: index};\n }\n\n\n /**\n * Find the min value within a vector's dimensions\n * @returns an object with `value` and `index` that specifies the min value and its corresponding dimension.\n */\n static min( a:PtLike ):{value, index} {\n let m = Number.MAX_VALUE;\n let index = 0;\n for (let i=0, len=a.length; i<len; i++) {\n m = Math.min( m, a[i] );\n if (m === a[i]) index = i;\n }\n return {value: m, index: index};\n }\n\n\n /**\n * Sum all the dimensions' values\n */\n static sum( a:PtLike ):number {\n let s = 0;\n for (let i=0, len=a.length; i<len; i++) s += a[i];\n return s;\n }\n\n\n /**\n * Given a mapping function, update `a`'s value in each dimension\n * @returns vector `a`\n */\n static map( a:PtLike, fn:(n:number, index:number, arr) => number ):PtLike {\n for (let i=0, len=a.length; i<len; i++) {\n a[i] = fn( a[i], i, a );\n }\n return a;\n }\n \n}\n\n\n/**\n * Mat provides static function for matrix operations. It's not yet optimized but good enough to use.\n */\nexport class Mat {\n\n /**\n * Matrix additions. Matrices should have the same rows and columns.\n * @param a a group of Pt\n * @param b a scalar number, an array of numeric arrays, or a group of Pt\n * @returns a group with the same rows and columns as a and b\n */\n static add( a:GroupLike, b:GroupLike|number[][]|number ):Group {\n if ( typeof b != \"number\" ) {\n if (a[0].length != b[0].length) throw new Error(\"Cannot add matrix if rows' and columns' size don't match.\");\n if (a.length != b.length) throw new Error(\"Cannot add matrix if rows' and columns' size don't match.\");\n }\n\n let g = new Group();\n let isNum = typeof b == \"number\"; \n for (let i=0, len=a.length; i<len; i++) {\n g.push( a[i].$add( (isNum) ? b : b[i] ) );\n }\n\n return g;\n }\n\n\n /**\n * Matrix multiplication\n * @param a a Group of M Pts, each with K dimensions (M-rows, K-columns)\n * @param b a scalar number, an array of numeric arrays, or a Group of K Pts, each with N dimensions (K-rows, N-columns) -- or if transposed is true, then N Pts with K dimensions\n * @param transposed (Only applicable if it's not elementwise multiplication) If true, then a and b's columns should match (ie, each Pt should have the same dimensions). Default is `false`.\n * @param elementwise if true, then the multiplication is done element-wise. Default is `false`.\n * @returns If not elementwise, this will return a group with M Pt, each with N dimensions (M-rows, N-columns).\n */\n static multiply( a:GroupLike, b:GroupLike|number[][]|number, transposed:boolean=false, elementwise:boolean=false ):Group {\n \n let g = new Group();\n\n if (typeof b != \"number\") {\n\n if (elementwise) {\n if (a.length != b.length) throw new Error(\"Cannot multiply matrix element-wise because the matrices' sizes don't match.\");\n for (let ai = 0, alen = a.length; ai < alen; ai++) {\n g.push( a[ai].$multiply( b[ai] ) );\n }\n\n } else {\n \n if (!transposed && a[0].length != b.length) throw new Error(\"Cannot multiply matrix if rows in matrix-a don't match columns in matrix-b.\");\n if (transposed && a[0].length != b[0].length) throw new Error(\"Cannot multiply matrix if transposed and the columns in both matrices don't match.\");\n\n if (!transposed) b = Mat.transpose( b );\n\n for (let ai = 0, alen = a.length; ai < alen; ai++) {\n let p = Pt.make( b.length, 0 );\n for (let bi = 0, blen = b.length; bi < blen; bi++) {\n p[bi] = Vec.dot( a[ai], b[bi] );\n }\n g.push(p);\n }\n }\n\n } else {\n for (let ai = 0, alen = a.length; ai < alen; ai++) {\n g.push( a[ai].$multiply(b) );\n }\n }\n\n return g;\n }\n\n\n /**\n * Zip one slice of an array of Pt. Imagine the Pts are organized in rows, then this function will take the values in a specific column.\n * @param g a group of Pt\n * @param idx index to zip at\n * @param defaultValue a default value to fill if index out of bound. If not provided, it will throw an error instead.\n */\n static zipSlice( g:GroupLike|number[][], index:number, defaultValue:number|boolean = false ):Pt {\n let z = [];\n for (let i=0, len=g.length; i<len; i++) {\n if (g[i].length-1 < index && defaultValue === false) throw `Index ${index} is out of bounds`;\n z.push( g[i][index] || defaultValue );\n }\n return new Pt(z);\n }\n\n\n /**\n * Zip a group of Pt. eg, [[1,2],[3,4],[5,6]] => [[1,3,5],[2,4,6]]\n * @param g a group of Pt\n * @param defaultValue a default value to fill if index out of bound. If not provided, it will throw an error instead.\n * @param useLongest If true, find the longest list of values in a Pt and use its length for zipping. Default is false, which uses the first item's length for zipping.\n */\n static zip( g:GroupLike|number[][], defaultValue:number|boolean = false, useLongest=false ):Group {\n let ps = new Group();\n let len:number = (useLongest) ? (g as Array<number[]|Pt>).reduce( (a,b) => Math.max(a, b.length), 0 ) : g[0].length;\n for (let i=0; i<len; i++) {\n ps.push( Mat.zipSlice( g, i, defaultValue ) );\n }\n return ps;\n }\n\n\n /**\n * Same as `zip` function\n */\n static transpose( g:GroupLike|number[][], defaultValue:number|boolean = false, useLongest=false ):Group {\n return Mat.zip( g, defaultValue, useLongest );\n }\n\n\n /**\n * Transform a 2D point given a 2x3 or 3x3 matrix\n * @param pt a Pt to be transformed\n * @param m 2x3 or 3x3 matrix\n * @returns a new transformed Pt\n */\n static transform2D( pt:PtLike, m:GroupLike|number[][] ):Pt {\n let x = pt[0] * m[0][0] + pt[1] * m[1][0] + m[2][0];\n let y = pt[0] * m[0][1] + pt[1] * m[1][1] + m[2][1];\n return new Pt(x, y);\n }\n\n\n /**\n * Get a scale matrix for use in `transform2D`\n */\n static scale2DMatrix( x:number, y:number ):GroupLike {\n return new Group(\n new Pt( x, 0, 0 ),\n new Pt( 0, y, 0 ),\n new Pt( 0, 0, 1 )\n );\n }\n\n\n /**\n * Get a rotate matrix for use in `transform2D`\n */\n static rotate2DMatrix( cosA:number, sinA:number ):GroupLike {\n return new Group(\n new Pt( cosA, sinA, 0 ),\n new Pt( -sinA, cosA, 0, ),\n new Pt( 0, 0, 1 )\n );\n }\n\n\n /**\n * Get a shear matrix for use in `transform2D`\n */\n static shear2DMatrix( tanX:number, tanY:number ):GroupLike {\n return new Group(\n new Pt( 1, tanX, 0 ),\n new Pt( tanY, 1, 0 ),\n new Pt( 0, 0, 1 )\n );\n }\n\n\n /**\n * Get a translate matrix for use in `transform2D`\n */\n static translate2DMatrix( x:number, y:number ):GroupLike {\n return new Group(\n new Pt( 1, 0, 0 ),\n new Pt( 0, 1, 0 ),\n new Pt( x, y, 1 )\n );\n }\n\n\n /**\n * Get a matrix to scale a point from an origin point. For use in `transform2D`\n */\n static scaleAt2DMatrix( sx:number, sy:number, at:PtLike ):GroupLike {\n let m = Mat.scale2DMatrix(sx, sy);\n m[2][0] = -at[0]*sx + at[0];\n m[2][1] = -at[1]*sy + at[1];\n return m;\n }\n\n\n /**\n * Get a matrix to rotate a point from an origin point. For use in `transform2D`\n */\n static rotateAt2DMatrix( cosA:number, sinA:number, at:PtLike ):GroupLike {\n let m = Mat.rotate2DMatrix(cosA, sinA);\n m[2][0] = at[0]*(1-cosA) + at[1]*sinA;\n m[2][1] = at[1]*(1-cosA) - at[0]*sinA;\n return m;\n }\n\n\n /**\n * Get a matrix to shear a point from an origin point. For use in `transform2D`\n */\n static shearAt2DMatrix( tanX:number, tanY:number, at:PtLike ):GroupLike {\n let m = Mat.shear2DMatrix(tanX, tanY);\n m[2][0] = -at[1]*tanY;\n m[2][1] = -at[0]*tanX;\n return m;\n }\n\n\n /**\n * Get a matrix to reflect a point along a line. For use in `transform2D`\n * @param p1 first end point to define the reflection line\n * @param p1 second end point to define the reflection line\n */\n static reflectAt2DMatrix( p1:PtLike, p2:PtLike ) {\n let intercept = Line.intercept( p1, p2 );\n \n if (intercept == undefined) {\n return [\n new Pt( [-1, 0, 0] ),\n new Pt( [0, 1, 0] ),\n new Pt( [p1[0]+p2[0], 0, 1] ) \n ];\n } else {\n\n let yi = intercept.yi;\n let ang2 = Math.atan( intercept.slope ) * 2;\n let cosA = Math.cos( ang2 );\n let sinA = Math.sin( ang2 );\n \n return [\n new Pt( [cosA, sinA, 0] ),\n new Pt( [sinA, -cosA, 0] ),\n new Pt( [-yi*sinA, yi + yi*cosA, 1] )\n ];\n }\n }\n\n \n}\n\n\n// WEBPACK FOOTER //\n// ./~/tslint-loader??ref--0!./src/LinearAlgebra.ts","// Source code licensed under Apache License 2.0. \r\n// Copyright © 2017 William Ngan. (https://github.com/williamngan/pts)\r\n\r\n\r\nimport {Pt, IPt, Group, GroupLike} from \"./Pt\";\r\n\r\n/**\r\n * Bound is a subclass of Group that represents a rectangular boundary.\r\n * It includes some convenient properties such as `x`, `y`, bottomRight`, `center`, and `size`. \r\n */\r\nexport class Bound extends Group implements IPt {\r\n\r\n protected _center:Pt = new Pt();\r\n protected _size:Pt = new Pt();\r\n protected _topLeft:Pt = new Pt();\r\n protected _bottomRight:Pt = new Pt();\r\n protected _inited = false;\r\n\r\n \r\n /**\r\n * Create a Bound. This is similar to the Group constructor.\r\n * @param args a list of Pt as parameters\r\n */\r\n constructor( ...args:Pt[] ) {\r\n super(...args);\r\n this.init();\r\n }\r\n\r\n\r\n /**\r\n * Create a Bound from a [ClientRect](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect) object.\r\n * @param rect an object has top/left/bottom/right/width/height properties\r\n * @returns a Bound object\r\n */\r\n static fromBoundingRect( rect:ClientRect ):Bound {\r\n let b = new Bound( new Pt( rect.left||0, rect.top||0 ), new Pt( rect.right||0, rect.bottom||0 ) );\r\n if (rect.width && rect.height) b.size = new Pt(rect.width, rect.height);\r\n return b;\r\n }\r\n\r\n static fromGroup( g:GroupLike ):Bound {\r\n if (g.length < 2) throw new Error( \"Cannot create a Bound from a group that has less than 2 Pt\" );\r\n return new Bound( g[0], g[g.length-1] );\r\n }\r\n\r\n\r\n /**\r\n * Initiate the bound's properties.\r\n */\r\n protected init() {\r\n if (this.p1) {\r\n this._size = this.p1.clone();\r\n this._inited = true;\r\n } \r\n if (this.p1 && this.p2) {\r\n let a = this.p1;\r\n let b = this.p2;\r\n this.topLeft = a.$min(b);\r\n this._bottomRight = a.$max(b);\r\n this._updateSize();\r\n this._inited = true;\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Clone this bound and return a new one\r\n */\r\n clone():Bound {\r\n return new Bound( this._topLeft.clone(), this._bottomRight.clone() );\r\n }\r\n\r\n \r\n /**\r\n * Recalculte size and center\r\n */\r\n protected _updateSize() {\r\n this._size = this._bottomRight.$subtract( this._topLeft ).abs();\r\n this._updateCenter();\r\n }\r\n\r\n\r\n /**\r\n * Recalculate center\r\n */\r\n protected _updateCenter() {\r\n this._center = this._size.$multiply(0.5).add( this._topLeft );\r\n }\r\n\r\n\r\n /**\r\n * Recalculate based on top-left position and size\r\n */\r\n protected _updatePosFromTop() {\r\n this._bottomRight = this._topLeft.$add( this._size );\r\n this._updateCenter();\r\n }\r\n\r\n\r\n /**\r\n * Recalculate based on bottom-right position and size\r\n */\r\n protected _updatePosFromBottom() {\r\n this._topLeft = this._bottomRight.$subtract( this._size );\r\n this._updateCenter();\r\n }\r\n\r\n\r\n /**\r\n * Recalculate based on center position and size\r\n */\r\n protected _updatePosFromCenter() {\r\n let half = this._size.$multiply(0.5);\r\n this._topLeft = this._center.$subtract( half );\r\n this._bottomRight = this._center.$add( half );\r\n }\r\n\r\n\r\n get size():Pt { return new Pt(this._size); }\r\n set size(p: Pt) { \r\n this._size = new Pt(p); \r\n this._updatePosFromTop();\r\n }\r\n \r\n\r\n get center():Pt { return new Pt(this._center); }\r\n set center( p:Pt ) {\r\n this._center = new Pt(p);\r\n this._updatePosFromCenter();\r\n }\r\n\r\n\r\n get topLeft():Pt { return new Pt(this._topLeft); }\r\n set topLeft( p:Pt ) {\r\n this._topLeft = new Pt(p);\r\n this[0] = this._topLeft;\r\n this._updateSize();\r\n }\r\n\r\n\r\n get bottomRight():Pt { return new Pt(this._bottomRight); }\r\n set bottomRight( p:Pt ) {\r\n this._bottomRight = new Pt(p);\r\n this[1] = this._bottomRight;\r\n this._updateSize();\r\n }\r\n\r\n\r\n get width():number { return (this._size.length > 0) ? this._size.x : 0; }\r\n set width( w:number ) {\r\n this._size.x = w;\r\n this._updatePosFromTop();\r\n }\r\n\r\n\r\n get height():number { return (this._size.length > 1) ? this._size.y : 0; }\r\n set height( h:number ) {\r\n this._size.y = h;\r\n this._updatePosFromTop();\r\n }\r\n\r\n\r\n get depth():number { return (this._size.length > 2) ? this._size.z : 0; }\r\n set depth( d:number ) {\r\n this._size.z = d;\r\n this._updatePosFromTop();\r\n }\r\n \r\n\r\n get x():number { return this.topLeft.x; }\r\n get y():number { return this.topLeft.y; }\r\n get z():number { return this.topLeft.z; }\r\n\r\n\r\n get inited():boolean { return this._inited; }\r\n\r\n /**\r\n * If the Group elements are changed, call this function to update the Bound's properties.\r\n * It's preferable to change the topLeft/bottomRight etc properties instead of changing the Group array directly.\r\n */\r\n update() {\r\n this._topLeft = this[0];\r\n this._bottomRight = this[1];\r\n this._updateSize();\r\n return this;\r\n }\r\n\r\n\r\n}\n\n\n// WEBPACK FOOTER //\n// ./~/tslint-loader??ref--0!./src/Bound.ts","// Source code licensed under Apache License 2.0. \r\n// Copyright © 2017 William Ngan. (https://github.com/williamngan/pts)\r\n\r\n\r\nimport {Pt, PtLike, GroupLike} from \"./Pt\";\r\nimport {Util} from \"./Util\";\r\n\r\n\r\n/**\r\n* Form is an abstract class that represents a form that's used in a Space for expressions.\r\n*/\r\nexport abstract class Form {\r\n \r\n protected _ready:boolean = false;\r\n \r\n /**\r\n * get whether the Form has received the Space's rendering context\r\n */\r\n get ready():boolean { return this._ready; }\r\n\r\n\r\n /**\r\n * Check number of items in a Group against a required number\r\n * @param pts \r\n */\r\n static _checkSize( pts:GroupLike|number[][], required:number=2 ):boolean {\r\n if (pts.length < required) {\r\n Util.warn( \"Requires 2 or more Pts in this Group.\" );\r\n return false;\r\n } \r\n return true;\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n/**\r\n* VisualForm is an abstract class that represents a form that can be used to express Pts visually.\r\n* For example, CanvasForm is an implementation of VisualForm that draws on CanvasSpace which represents a html canvas.\r\n*/\r\nexport abstract class VisualForm extends Form {\r\n \r\n \r\n protected _filled = true;\r\n get filled():boolean { return this._filled; }\r\n set filled( b:boolean ) { this._filled = b; }\r\n \r\n protected _stroked = true;\r\n get stroked():boolean { return this._stroked; }\r\n set stroked( b:boolean ) { this._stroked = b; }\r\n \r\n protected _font:Font = new Font( 14, \"sans-serif\");\r\n get currentFont():Font { return this._font; }\r\n \r\n \r\n protected _multiple( groups:GroupLike[], shape:string, ...rest ):this {\r\n if (!groups) return this;\r\n for (let i=0, len=groups.length; i<len; i++) {\r\n this[shape]( groups[i], ...rest );\r\n }\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * Abstract reset style\r\n */\r\n abstract reset(): this;\r\n \r\n \r\n /**\r\n * Set fill color (not implemented)\r\n */\r\n fill( c:string|boolean ):this {\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * Set current fill style and without stroke.\r\n * @example `form.fillOnly(\"#F90\")`, `form.fillOnly(\"rgba(0,0,0,.5\")`\r\n * @param c fill color which can be as color, gradient, or pattern. (See [canvas documentation](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/fillStyle))\r\n */\r\n fillOnly( c:string|boolean ):this {\r\n this.stroke( false );\r\n return this.fill( c );\r\n }\r\n \r\n \r\n /**\r\n * Set stroke style (not implemented)\r\n */\r\n stroke( c:string|boolean, width?:number, linejoin?:string, linecap?:string ):this {\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * Set current stroke style and without fill.\r\n * @example `form.strokeOnly(\"#F90\")`, `form.strokeOnly(\"#000\", 0.5, 'round', 'square')`\r\n * @param c stroke color which can be as color, gradient, or pattern. (See [canvas documentation](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/strokeStyle)\r\n */\r\n strokeOnly( c:string|boolean, width?:number, linejoin?:string, linecap?:string ):this {\r\n this.fill( false );\r\n return this.stroke( c, width, linejoin, linecap );\r\n }\r\n \r\n /**\r\n * Abstract point drawing\r\n * @param p a Pt object\r\n * @param radius radius of the point. Default is 5.\r\n * @param shape The shape of the point. Defaults to \"square\", but it can be \"circle\" or a custom shape function in your own implementation.\r\n * @example `form.point( p )`, `form.point( p, 10, \"circle\" )`\r\n */\r\n abstract point( p:PtLike, radius:number, shape:string ):this;\r\n \r\n \r\n /**\r\n * Draw multiple points at once\r\n * @param pts an array of Pt or an array of number arrays\r\n * @param radius radius of the point. Default is 5.\r\n * @param shape The shape of the point. Defaults to \"square\", but it can be \"circle\" or a custom shape function in your own implementation.\r\n */\r\n points( pts:GroupLike|number[][], radius:number, shape:string ): this {\r\n if (!pts) return;\r\n for (let i=0, len=pts.length; i<len; i++) {\r\n this.point( pts[i], radius, shape );\r\n }\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * Abstract circle drawing\r\n * @param pts usually a Group of 2 Pts, but it can also take an array of two numeric arrays [ [position], [size] ]\r\n * @see [`Circle.fromCenter`](./_op_.circle.html#frompt)\r\n */\r\n abstract circle( pts:GroupLike|number[][] ):this;\r\n \r\n \r\n \r\n /**\r\n * Draw multiple circles at once\r\n * @param groups an array of Groups that defines multiple circles\r\n */\r\n circles( groups:GroupLike[] ):this {\r\n return this._multiple( groups, \"circle\" );\r\n }\r\n \r\n \r\n /**\r\n * Draw multiple squares at once\r\n * @param groups an array of Groups that defines multiple circles\r\n */\r\n squares( groups:GroupLike[] ):this {\r\n return this._multiple( groups, \"square\" );\r\n }\r\n \r\n \r\n /**\r\n * Abstract arc drawing\r\n * @param pt center position\r\n * @param radius radius of the arc circle\r\n * @param startAngle start angle of the arc\r\n * @param endAngle end angle of the arc\r\n * @param cc an optional boolean value to specify if it should be drawn clockwise (`false`) or counter-clockwise (`true`). Default is clockwise.\r\n */\r\n abstract arc( pt:PtLike, radius:number, startAngle:number, endAngle:number, cc?:boolean ):this;\r\n \r\n \r\n /**\r\n * Abstract a line or polyline drawing\r\n * @param pts a Group of multiple Pts, or an array of multiple numeric arrays\r\n */\r\n abstract line( pts:GroupLike|number[][] ):this;\r\n \r\n \r\n /**\r\n * Draw multiple lines at once\r\n * @param groups An array of Groups of Pts\r\n */\r\n lines( groups:GroupLike[] ):this {\r\n return this._multiple( groups, \"line\" );\r\n }\r\n \r\n \r\n /**\r\n * Abstract polygon drawing\r\n * @param pts a Group of multiple Pts, or an array of multiple numeric arrays\r\n */\r\n abstract polygon( pts:GroupLike|number[][] ):this;\r\n \r\n \r\n /**\r\n * Draw multiple polygons at once\r\n * @param groups An array of Groups of Pts\r\n */\r\n polygons( groups:GroupLike[] ):this {\r\n return this._multiple( groups, \"polygon\" );\r\n }\r\n \r\n \r\n \r\n /**\r\n * Abstract rectangle drawing\r\n * @param pts usually a Group of 2 Pts specifying the top-left and bottom-right positions. Alternatively it can be an array of numeric arrays.\r\n */\r\n abstract rect( pts:number[][]|Pt[] ):this;\r\n \r\n \r\n /**\r\n * Draw multiple rectangles at once\r\n * @param groups An array of Groups of Pts\r\n */\r\n rects( groups:GroupLike[] ):this {\r\n return this._multiple( groups, \"rect\" );\r\n }\r\n \r\n \r\n /**\r\n * Abstract text rendering\r\n * @param `pt` a Pt or numeric array to specify the anchor point\r\n * @param `txt` text\r\n * @param `maxWidth` specify a maximum width per line\r\n */\r\n abstract text( pt:PtLike, txt:string, maxWidth?:number): this;\r\n \r\n \r\n /**\r\n * Abstract font setting\r\n * @param sizeOrFont either a number to specify font-size, or a `Font` object to specify all font properties\r\n * @param weight Optional font-weight string such as \"bold\"\r\n * @param style Optional font-style string such as \"italic\"\r\n * @param lineHeight Optional line-height number suchas 1.5\r\n * @param family Optional font-family such as \"Helvetica, sans-serif\"\r\n * @see `Font` class\r\n * @example `form.font( myFont )`, `form.font(14, \"bold\")`\r\n */\r\n abstract font( sizeOrFont:number|Font, weight?:string, style?:string, lineHeight?:number, family?:string ):this;\r\n}\r\n\r\n\r\n\r\n/**\r\n* Font class lets you create a specific font style with properties for its size and style\r\n*/\r\nexport class Font {\r\n public size:number;\r\n public lineHeight:number;\r\n public face:string;\r\n public style:string;\r\n public weight:string;\r\n \r\n /**\r\n * Create a font style\r\n * @param size font size. Defaults is 12px.\r\n * @param face Optional font-family, use css-like string such as \"Helvetica\" or \"Helvetica, sans-serif\". Default is \"sans-serif\".\r\n * @param weight Optional font weight such as \"bold\". Default is \"\" (none).\r\n * @param style Optional font style such as \"italic\". Default is \"\" (none).\r\n * @param lineHeight Optional line height. Default is 1.5.\r\n * @example `new Font(12, \"Frutiger, sans-serif\", \"bold\", \"underline\", 1.5)`\r\n */\r\n constructor( size:number=12, face:string=\"sans-serif\", weight:string=\"\", style:string=\"\", lineHeight:number=1.5 ) {\r\n this.size = size;\r\n this.face = face;\r\n this.style = style;\r\n this.weight = weight;\r\n this.lineHeight = lineHeight;\r\n }\r\n \r\n /**\r\n * Get a string representing the font style, in css-like string such as \"italic bold 12px/1.5 sans-serif\"\r\n */\r\n get value():string { return `${this.style} ${this.weight} ${this.size}px/${this.lineHeight} ${this.face}`; }\r\n \r\n \r\n /**\r\n * Get a string representing the font style, in css-like string such as \"italic bold 12px/1.5 sans-serif\"\r\n */\r\n toString():string { return this.value; }\r\n \r\n}\n\n\n// WEBPACK FOOTER //\n// ./~/tslint-loader??ref--0!./src/Form.ts","// Source code licensed under Apache License 2.0. \r\n// Copyright © 2017 William Ngan. (https://github.com/williamngan/pts)\r\n\r\n\r\nimport {Bound} from \"./Bound\";\r\nimport {Pt, IPt} from \"./Pt\";\r\nimport {Form} from \"./Form\";\r\nimport {UIPointerActions as UIA} from \"./UI\";\r\n\r\nexport type AnimateFunction = ( time?:number, frameTime?:number, currentSpace?:any ) => void;\r\n\r\n\r\n/**\r\n* Interface of a \"player\" object that can be added into a Space\r\n*/\r\nexport interface IPlayer {\r\n animateID?: string;\r\n animate?:AnimateFunction;\r\n resize?( size:IPt, evt?:Event ): undefined;\r\n action?( type:string, px:number, py:number, evt:Event );\r\n start?( bound:Bound, space:Space );\r\n}\r\n\r\nexport interface ISpacePlayers { \r\n [key: string]: IPlayer;\r\n}\r\n\r\nexport interface ITimer {\r\n prev: number;\r\n diff: number;\r\n end: number;\r\n}\r\n\r\n\r\n/**\r\n* Space is an abstract class that represents a general context for expressing Pts.\r\n* See [Space guide](../../guide/Space-0500.html) for details.\r\n*/\r\nexport abstract class Space {\r\n \r\n id: string = \"space\";\r\n protected bound: Bound = new Bound();\r\n \r\n protected _time: ITimer = { prev: 0, diff: 0, end: -1 };\r\n protected players:ISpacePlayers = {};\r\n protected playerCount = 0;\r\n protected _ctx:any;\r\n \r\n private _animID:number = -1;\r\n \r\n private _pause:boolean = false;\r\n private _refresh:boolean = undefined;\r\n private _renderFunc: (context:any, self:Space) => null;\r\n \r\n protected _pointer:Pt = new Pt();\r\n\r\n protected _isReady = false;\r\n protected _playing = false;\r\n \r\n \r\n /**\r\n * Set whether the rendering should be repainted on each frame\r\n * @param b a boolean value to set whether to repaint each frame\r\n */\r\n refresh( b:boolean ):this {\r\n this._refresh = b;\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * Add an IPlayer to this space. An IPlayer can define the following callback functions: \r\n * - `animate( time, ftime, space )`\r\n * - `start(bound, space)` \r\n * - `resize( size, event )`\r\n * - `action( type, x, y, event )` \r\n * Subclasses of Space may define other callback functions.\r\n * @param player an IPlayer object with animate function, or simply a function(time, ftime){}\r\n */\r\n add( p:IPlayer|AnimateFunction ):this {\r\n let player:IPlayer = (typeof p == \"function\") ? { animate: p } : p;\r\n \r\n let k = this.playerCount++;\r\n let pid = this.id + k;\r\n \r\n this.players[pid] = player;\r\n player.animateID = pid;\r\n if (player.resize && this.bound.inited) player.resize( this.bound ); \r\n \r\n // if _refresh is not set, set it to true\r\n if (this._refresh === undefined) this._refresh = true;\r\n \r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * Remove a player from this Space\r\n * @param player an IPlayer that has an `animateID` property\r\n */\r\n remove( player:IPlayer ):this {\r\n delete this.players[ player.animateID ];\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * Remove all players from this Space\r\n */\r\n removeAll():this {\r\n this.players = {};\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * Main play loop. This implements window.requestAnimationFrame and calls it recursively. \r\n * Override this `play()` function to implemenet your own animation loop.\r\n * @param time current time\r\n */\r\n play( time=0 ):this {\r\n \r\n this._animID = requestAnimationFrame( this.play.bind(this) );\r\n if (this._pause) return this;\r\n \r\n this._time.diff = time - this._time.prev;\r\n this._time.prev = time;\r\n \r\n try {\r\n this.playItems( time );\r\n } catch (err) {\r\n cancelAnimationFrame( this._animID );\r\n this._playing = false;\r\n throw err;\r\n }\r\n \r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * Replay the animation after `stop()`. This resets the end-time counter.\r\n * You may also use `pause()` and `resume()` for temporary pause.\r\n */\r\n replay() {\r\n this._time.end = -1;\r\n this.play();\r\n }\r\n \r\n \r\n /**\r\n * Main animate function. This calls all the items to perform\r\n * @param time current time\r\n */\r\n protected playItems( time: number ) {\r\n\r\n this._playing = true;\r\n \r\n // clear before draw if refresh is true\r\n if (this._refresh) this.clear();\r\n \r\n // animate all players\r\n if (this._isReady) {\r\n for (let k in this.players) {\r\n if (this.players[k].animate) this.players[k].animate( time, this._time.diff, this );\r\n }\r\n }\r\n \r\n // stop if time ended\r\n if (this._time.end >= 0 && time > this._time.end) {\r\n cancelAnimationFrame( this._animID );\r\n this._playing = false;\r\n }\r\n }\r\n \r\n \r\n /**\r\n * Pause the animation\r\n * @param toggle a boolean value to set if this function call should be a toggle (between pause and resume)\r\n */\r\n pause( toggle=false ):this {\r\n this._pause = (toggle) ? !this._pause : true;\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * Resume the pause animation\r\n */\r\n resume():this {\r\n this._pause = false;\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * Specify when the animation should stop: immediately, after a time period, or never stops.\r\n * @param t a value in millisecond to specify a time period to play before stopping, or `-1` to play forever, or `0` to end immediately. Default is 0 which will stop the animation immediately.\r\n */\r\n stop( t=0 ):this {\r\n this._time.end = t;\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * Play animation loop, and then stop after `duration` time has passed.\r\n * @param duration a value in millisecond to specify a time period to play before stopping, or `-1` to play forever\r\n */\r\n playOnce( duration=5000 ):this {\r\n this.play();\r\n this.stop( duration );\r\n return this;\r\n }\r\n \r\n /**\r\n * Custom rendering\r\n * @param context rendering context\r\n */\r\n protected render( context:any ):this {\r\n if (this._renderFunc) this._renderFunc( context, this );\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * Set a custom rendering `function(graphics_context, canvas_space)` if needed\r\n */\r\n set customRendering( f:(context:any, self:Space) => null ) { this._renderFunc = f; }\r\n get customRendering():(context:any, self:Space) => null { return this._renderFunc; }\r\n \r\n\r\n /**\r\n * Get a boolean to indicate whether the animation is playing\r\n */\r\n get isPlaying():boolean { return this._playing; }\r\n\r\n\r\n /**\r\n * Get this space's bounding box\r\n */\r\n get outerBound():Bound { return this.bound.clone(); }\r\n \r\n \r\n /**\r\n * The bounding box of the canvas\r\n */\r\n public get innerBound():Bound { return new Bound( Pt.make( this.size.length, 0 ), this.size.clone() ); }\r\n \r\n \r\n /**\r\n * Get the size of this bounding box as a Pt\r\n */\r\n get size():Pt { return this.bound.size.clone(); }\r\n \r\n \r\n /**\r\n * Get the size of this bounding box as a Pt\r\n */\r\n get center():Pt { return this.size.divide(2); }\r\n \r\n \r\n /**\r\n * Get width of canvas\r\n */\r\n get width():number { return this.bound.width; }\r\n \r\n \r\n /**\r\n * Get height of canvas\r\n */\r\n get height():number { return this.bound.height; }\r\n \r\n \r\n /**\r\n * Resize the space\r\n * @param w `width or an IPt object\r\n * @param h height\r\n */\r\n abstract resize( b:IPt, evt?:Event ):this;\r\n \r\n \r\n /**\r\n * clear all contents in the space\r\n */\r\n abstract clear( ):this;\r\n \r\n \r\n /**\r\n * Get a default form for drawing in this space\r\n */\r\n abstract getForm():Form;\r\n \r\n}\r\n\r\nexport type TouchPointsKey = \"touches\" | \"changedTouches\" | \"targetTouches\";\r\n\r\nexport interface MultiTouchElement {\r\n addEventListener( evt:any, callback:Function );\r\n removeEventListener( evt:any, callback:Function );\r\n}\r\n\r\nexport abstract class MultiTouchSpace extends Space {\r\n \r\n // track mouse dragging\r\n protected _pressed = false;\r\n protected _dragged = false;\r\n \r\n protected _hasMouse = false;\r\n protected _hasTouch = false;\r\n \r\n // accept subclasses that implements addEventListener, removeEventListener, dispatchEvent\r\n protected _canvas:EventTarget;\r\n \r\n /**\r\n * Get the mouse or touch pointer that stores the last action\r\n */\r\n public get pointer():Pt {\r\n let p = this._pointer.clone();\r\n p.id = this._pointer.id;\r\n return p;\r\n }\r\n \r\n /**\r\n * Bind event listener in canvas element. You can also use `bindMouse` or `bindTouch` to bind mouse or touch events conveniently.\r\n * @param evt an event string such as \"mousedown\"\r\n * @param callback callback function for this event\r\n */\r\n bindCanvas(evt:string, callback:EventListener) {\r\n this._canvas.addEventListener( evt, callback );\r\n }\r\n \r\n \r\n /**\r\n * Unbind a callback from the event listener\r\n * @param evt an event string such as \"mousedown\"\r\n * @param callback callback function to unbind\r\n */\r\n unbindCanvas(evt:string, callback:EventListener) {\r\n this._canvas.removeEventListener( evt, callback );\r\n }\r\n \r\n \r\n /**\r\n * A convenient method to bind (or unbind) all mouse events in canvas element. All \"players\" added to this space that implements an `action` callback property will receive mouse event callbacks. The types of mouse actions are defined by UIPointerActions constants: \"up\", \"down\", \"move\", \"drag\", \"drop\", \"over\", and \"out\". See `Space`'s `add()` function for more details.\r\n * @param _bind a boolean value to bind mouse events if set to `true`. If `false`, all mouse events will be unbound. Default is true.\r\n * @see Space`'s [`add`](./_space_.space.html#add) function\r\n */\r\n bindMouse( _bind:boolean=true ):this {\r\n if ( _bind) {\r\n this.bindCanvas( \"mousedown\", this._mouseDown.bind(this) );\r\n this.bindCanvas( \"mouseup\", this._mouseUp.bind(this) );\r\n this.bindCanvas( \"mouseover\", this._mouseOver.bind(this) );\r\n this.bindCanvas( \"mouseout\", this._mouseOut.bind(this) );\r\n this.bindCanvas( \"mousemove\", this._mouseMove.bind(this) );\r\n this._hasMouse = true;\r\n } else {\r\n this.unbindCanvas( \"mousedown\", this._mouseDown.bind(this) );\r\n this.unbindCanvas( \"mouseup\", this._mouseUp.bind(this) );\r\n this.unbindCanvas( \"mouseover\", this._mouseOver.bind(this) );\r\n this.unbindCanvas( \"mouseout\", this._mouseOut.bind(this) );\r\n this.unbindCanvas( \"mousemove\", this._mouseMove.bind(this) );\r\n this._hasMouse = false;\r\n }\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * A convenient method to bind (or unbind) all touch events in canvas element. All \"players\" added to this space that implements an `action` callback property will receive mouse event callbacks. The types of mouse actions are: \"up\", \"down\", \"move\", \"drag\", \"drop\", \"over\", and \"out\". \r\n * @param _bind a boolean value to bind touch events if set to `true`. If `false`, all mouse events will be unbound. Default is true.\r\n * @see Space`'s [`add`](./_space_.space.html#add) function\r\n */\r\n bindTouch( _bind:boolean=true ):this {\r\n if (_bind) {\r\n this.bindCanvas( \"touchstart\", this._mouseDown.bind(this) );\r\n this.bindCanvas( \"touchend\", this._mouseUp.bind(this) );\r\n this.bindCanvas( \"touchmove\", this._touchMove.bind(this) );\r\n this.bindCanvas( \"touchcancel\", this._mouseOut.bind(this) );\r\n this._hasTouch = true;\r\n } else {\r\n this.unbindCanvas( \"touchstart\", this._mouseDown.bind(this) );\r\n this.unbindCanvas( \"touchend\", this._mouseUp.bind(this) );\r\n this.unbindCanvas( \"touchmove\", this._touchMove.bind(this) );\r\n this.unbindCanvas( \"touchcancel\", this._mouseOut.bind(this) );\r\n this._hasTouch = false;\r\n }\r\n return this;\r\n }\r\n \r\n \r\n \r\n \r\n /**\r\n * A convenient method to convert the touch points in a touch event to an array of `Pt`.\r\n * @param evt a touch event which contains touches, changedTouches, and targetTouches list\r\n * @param which a string to select a touches list: \"touches\", \"changedTouches\", or \"targetTouches\". Default is \"touches\"\r\n * @return an array of Pt, whose origin position (0,0) is offset to the top-left of this space\r\n */\r\n touchesToPoints( evt:TouchEvent, which:TouchPointsKey=\"touches\" ): Pt[] {\r\n if (!evt || !evt[which]) return [];\r\n let ts = [];\r\n for (var i=0; i<evt[which].length; i++) {\r\n let t = evt[which].item(i);\r\n ts.push( new Pt( t.pageX - this.bound.topLeft.x, t.pageY - this.bound.topLeft.y ) );\r\n }\r\n return ts;\r\n }\r\n \r\n \r\n /**\r\n * Go through all the `players` and call its `action` callback function\r\n * @param type an UIPointerActions constant or string: \"up\", \"down\", \"move\", \"drag\", \"drop\", \"over\", and \"out\"\r\n * @param evt mouse or touch event\r\n */\r\n protected _mouseAction( type:string, evt:MouseEvent|TouchEvent ) {\r\n let px = 0, py = 0;\r\n \r\n if (evt instanceof MouseEvent) {\r\n for (let k in this.players) {\r\n if (this.players.hasOwnProperty(k)) {\r\n let v = this.players[k];\r\n px = evt.pageX - this.outerBound.x;\r\n py = evt.pageY - this.outerBound.y;\r\n if (v.action) v.action( type, px, py, evt );\r\n }\r\n }\r\n } else {\r\n for (let k in this.players) {\r\n if (this.players.hasOwnProperty(k)) {\r\n let v = this.players[k];\r\n let c = evt.changedTouches && evt.changedTouches.length > 0;\r\n let touch = evt.changedTouches.item(0);\r\n px = (c) ? touch.pageX - this.outerBound.x : 0;\r\n py = (c) ? touch.pageY - this.outerBound.y : 0;\r\n if (v.action) v.action( type, px, py, evt );\r\n }\r\n }\r\n }\r\n if (type) {\r\n this._pointer.to( px, py );\r\n this._pointer.id = type;\r\n }\r\n }\r\n \r\n \r\n /**\r\n * MouseDown handler\r\n * @param evt \r\n */\r\n protected _mouseDown( evt:MouseEvent|TouchEvent ) {\r\n this._mouseAction( UIA.down, evt );\r\n this._pressed = true;\r\n return false;\r\n }\r\n \r\n \r\n /**\r\n * MouseUp handler\r\n * @param evt \r\n */\r\n protected _mouseUp( evt:MouseEvent|TouchEvent ) {\r\n this._mouseAction( UIA.up, evt );\r\n if (this._dragged) this._mouseAction( UIA.down, evt );\r\n this._pressed = false;\r\n this._dragged = false;\r\n return false;\r\n }\r\n \r\n \r\n /**\r\n * MouseMove handler\r\n * @param evt \r\n */\r\n protected _mouseMove( evt:MouseEvent|TouchEvent ) {\r\n this._mouseAction( UIA.move, evt );\r\n if (this._pressed) {\r\n this._dragged = true;\r\n this._mouseAction( UIA.drag, evt );\r\n }\r\n return false;\r\n }\r\n \r\n \r\n /**\r\n * MouseOver handler\r\n * @param evt \r\n */\r\n protected _mouseOver( evt:MouseEvent|TouchEvent ) {\r\n this._mouseAction( UIA.over, evt );\r\n return false;\r\n }\r\n \r\n \r\n /**\r\n * MouseOut handler\r\n * @param evt \r\n */\r\n protected _mouseOut( evt:MouseEvent|TouchEvent ) {\r\n this._mouseAction( UIA.out, evt );\r\n if (this._dragged) this._mouseAction( UIA.drop, evt );\r\n this._dragged = false;\r\n return false;\r\n }\r\n \r\n \r\n /**\r\n * TouchMove handler\r\n * @param evt \r\n */\r\n protected _touchMove( evt:TouchEvent) {\r\n this._mouseMove(evt);\r\n evt.preventDefault();\r\n return false;\r\n }\r\n \r\n}\n\n\n// WEBPACK FOOTER //\n// ./~/tslint-loader??ref--0!./src/Space.ts","// Source code licensed under Apache License 2.0. \n// Copyright © 2017 William Ngan. (https://github.com/williamngan/pts)\n\n\nimport {MultiTouchSpace, IPlayer} from './Space';\nimport {Form, VisualForm, Font} from \"./Form\";\nimport {Bound} from './Bound';\nimport {Util} from './Util';\nimport {Pt, PtLike, GroupLike} from './Pt';\n\n\n/**\n * A type that represents the current context for an DOMForm\n */\nexport type DOMFormContext = {\n group:Element, groupID:string, groupCount:number,\n currentID:string,\n currentClass?:string,\n style:object,\n font:string, fontSize:number, fontFamily:string\n};\n\n\n/**\n * A Space for DOM elements\n */\nexport class DOMSpace extends MultiTouchSpace {\n \n protected _canvas:HTMLElement|SVGElement;\n protected _container:Element;\n \n id: string = \"domspace\";\n protected _autoResize = true;\n protected _bgcolor = \"#e1e9f0\";\n protected _css = {};\n \n \n /**\n * Create a DOMSpace which represents a Space for DOM elements\n * @param elem Specify an element by its \"id\" attribute as string, or by the element object itself. Use css to customize its appearance if needed.\n * @param callback an optional callback `function(boundingBox, spaceElement)` to be called when canvas is appended and ready. Alternatively, a \"ready\" event will also be fired from the element when it's appended, which can be traced with `spaceInstance.canvas.addEventListener(\"ready\")`\n * @example `new DOMSpace( \"#myElementID\" )`\n */\n constructor( elem:string|Element, callback?:Function) {\n super();\n \n var _selector:Element = null;\n var _existed = false;\n this.id = \"pts\";\n \n // check element or element id string\n if ( elem instanceof Element ) {\n _selector = elem;\n this.id = \"pts_existing_space\";\n } else {\n _selector = document.querySelector( <string>elem );\n _existed = true;\n this.id = elem.substr(1);\n }\n \n // if selector is not defined, create a canvas\n if (!_selector) { \n this._container = DOMSpace.createElement( \"div\", \"pts_container\" );\n this._canvas = DOMSpace.createElement( \"div\", \"pts_element\" ) as HTMLElement;\n this._container.appendChild( this._canvas );\n document.body.appendChild( this._container );\n _existed = false;\n \n } else {\n this._canvas = _selector as HTMLElement;\n this._container = _selector.parentElement;\n }\n \n // no mutation observer, so we set a timeout for ready event\n setTimeout( this._ready.bind( this, callback ), 50 );\n\n }\n \n \n /**\n * Helper function to create a DOM element\n * @param elem element tag name\n * @param id element id attribute\n * @param appendTo Optional, if specified, the created element will be appended to this element\n */\n static createElement( elem:string=\"div\", id:string, appendTo?:Element ):Element {\n let d = document.createElement( elem );\n if (id) d.setAttribute( \"id\", id );\n if (appendTo && appendTo.appendChild) appendTo.appendChild( d );\n return d;\n \n }\n \n \n /**\n * Handle callbacks after element is mounted in DOM\n * @param callback \n */\n private _ready( callback:Function ) {\n if (!this._container) throw new Error(`Cannot initiate #${this.id} element`);\n \n this._isReady = true;\n \n this._resizeHandler( null );\n this.clear( this._bgcolor );\n this._canvas.dispatchEvent( new Event(\"ready\") );\n \n \n for (let k in this.players) {\n if (this.players.hasOwnProperty(k)) {\n if (this.players[k].start) this.players[k].start( this.bound.clone(), this );\n }\n }\n \n this._pointer = this.center;\n\n this.refresh(false); // No need to clear and redraw for every frame in DOM\n \n if (callback) callback( this.bound, this._canvas );\n }\n \n \n /**\n * Set up various options for DOMSpace. The `opt` parameter is an object with the following fields. This is usually set during instantiation, eg `new DOMSpace(...).setup( { opt } )`\n * @param opt an object with optional settings, as follows.\n * @param opt.bgcolor a hex or rgba string to set initial background color of the canvas, or use `false` or \"transparent\" to set a transparent background. You may also change it later with `clear()` \n * @param opt.resize a boolean to set whether `<canvas>` size should auto resize to match its container's size. You can also set it manually with `autoSize()` \n * @example `space.setup({ bgcolor: \"#f00\", resize: true })`\n */\n setup( opt:{bgcolor?:string, resize?:boolean} ):this {\n if (opt.bgcolor) {\n this._bgcolor = opt.bgcolor;\n }\n \n this.autoResize = (opt.resize != undefined) ? opt.resize : false;\n \n return this;\n }\n \n\n /**\n * Not implemented. See SVGSpace and HTMLSpace for implementation\n */\n getForm():Form {\n return null;\n }\n \n /**\n * Set whether the canvas element should resize when its container is resized. \n * @param auto a boolean value indicating if auto size is set\n */\n set autoResize( auto:boolean ) {\n this._autoResize = auto;\n if (auto) {\n window.addEventListener( 'resize', this._resizeHandler.bind(this) );\n } else {\n delete this._css['width'];\n delete this._css['height'];\n window.removeEventListener( 'resize', this._resizeHandler.bind(this) );\n }\n }\n get autoResize(): boolean { return this._autoResize; }\n \n \n /**\n * This overrides Space's `resize` function. It's used as a callback function for window's resize event and not usually called directly. You can keep track of resize events with `resize: (bound ,evt)` callback in your player objects (See `Space`'s `add()` function). \n * @param b a Bound object to resize to\n * @param evt Optionally pass a resize event\n */\n resize( b:Bound, evt?:Event):this {\n \n this.bound = b;\n this.styles( {width: `${b.width}px`, height: `${b.height}px`}, true );\n\n for (let k in this.players) {\n if (this.players.hasOwnProperty(k)) {\n let p = this.players[k];\n if (p.resize) p.resize( this.bound, evt);\n }\n };\n \n return this;\n }\n \n \n /**\n * Window resize handling\n * @param evt \n */\n protected _resizeHandler( evt:Event ) {\n \n let b = Bound.fromBoundingRect( this._container.getBoundingClientRect() );\n\n if (this._autoResize) {\n this.styles( {width: \"100%\", height: \"100%\"}, true );\n } else {\n this.styles( {width: `${b.width}px`, height: `${b.height}px`}, true );\n }\n\n this.resize( b, evt );\n \n }\n \n \n /**\n * Get this DOM element\n */\n get element():Element {\n return this._canvas;\n }\n \n \n /**\n * Get the parent DOM element that contains this DOM element\n */\n get parent():Element {\n return this._container;\n }\n \n \n /**\n * A property to indicate if the Space is ready\n */\n get ready():boolean { return this._isReady; }\n \n \n /**\n * Clear the element's contents, and ptionally set a new backgrounc color. Overrides Space's `clear` function.\n * @param bg Optionally specify a custom background color in hex or rgba string, or \"transparent\". If not defined, it will use its `bgcolor` property as background color to clear the canvas.\n */\n clear( bg?:string ):this {\n if (bg) this.background = bg;\n this._canvas.innerHTML = \"\";\n return this;\n } \n \n \n /**\n * Set a background color on the container element\n @param bg background color as hex or rgba string\n */\n set background( bg:string ) {\n this._bgcolor = bg;\n (this._container as HTMLElement).style.backgroundColor = this._bgcolor;\n }\n get background():string { return this._bgcolor; }\n \n \n /**\n * Add or update a style definition, and optionally update that style in the Element\n * @param key style name\n * @param val style value\n * @param update a boolean to update the element's style immediately if set to `true`. Default is `false`.\n */\n style( key:string, val:string, update:boolean=false ):this {\n this._css[key] = val;\n if (update) this._canvas.style[key] = val;\n return this;\n }\n \n \n /**\n * Add of update a list of style definitions, and optionally update those styles in the Element\n * @param styles a key-value objects of style definitions \n * @param update a boolean to update the element's style immediately if set to `true`. Default is `false`.\n * @return this\n */\n styles( styles:object, update:boolean=false ):this {\n for (let k in styles) {\n if ( styles.hasOwnProperty(k) ) this.style( k, styles[k], update );\n }\n return this;\n }\n \n \n /**\n * A static helper function to add or update Element attributes\n * @param elem Element to update\n * @param data an object with key-value pairs\n * @returns this DOM element \n */\n static setAttr( elem:Element, data:object ):Element {\n for (let k in data) {\n if (data.hasOwnProperty(k)) {\n elem.setAttribute( k, data[k] );\n }\n }\n return elem;\n }\n \n \n /**\n * A static helper function to compose an inline style string from a object of styles\n * @param elem Element to update\n * @param data an object with key-value pairs\n * @exmaple DOMSpace.getInlineStyles( {width: \"100px\", \"font-size\": \"10px\"} ); // returns \"width: 100px; font-size: 10px\"\n */\n static getInlineStyles( data:object ):string {\n let str = \"\";\n for (let k in data) {\n if (data.hasOwnProperty(k)) {\n if (data[k]) str += `${k}: ${data[k]}; `;\n }\n }\n return str;\n }\n \n}\n\n\n/**\n * HTMLSpace. Note that this is currently experimental and may change in future.\n */\nexport class HTMLSpace extends DOMSpace {\n\n /**\n * Get a new `HTMLForm` for drawing\n * @see `HTMLForm`\n */\n getForm():Form {\n return new HTMLForm( this );\n }\n\n /**\n * A static function to add a DOM element inside a node. Usually you don't need to use this directly. See methods in `DOMForm` instead.\n * @param parent the parent element, or `null` to use current `<svg>` as parent.\n * @param name a string of element name, such as `rect` or `circle`\n * @param id id attribute of the new element\n * @param autoClass add a class based on the id (from char 0 to index of \"-\"). Default is true.\n */\n static htmlElement( parent:Element, name:string, id?:string, autoClass:boolean=true ):HTMLElement {\n \n if (!parent || !parent.appendChild ) throw new Error( \"parent is not a valid DOM element\" );\n \n let elem = document.querySelector(`#${id}`);\n if (!elem) {\n elem = document.createElement( name );\n elem.setAttribute( \"id\", id );\n \n if (autoClass) elem.setAttribute( \"class\",id.substring(0, id.indexOf(\"-\")) );\n parent.appendChild( elem );\n }\n return elem as HTMLElement;\n }\n\n\n /**\n * Remove an item from this Space\n * @param item a player item with an auto-assigned `animateID` property\n */\n remove( player:IPlayer ):this {\n let temp = this._container.querySelectorAll( \".\"+HTMLForm.scopeID( player ) );\n \n temp.forEach( (el:Element) => { \n el.parentNode.removeChild( el );\n });\n \n return super.remove( player );\n }\n \n \n /**\n * Remove all items from this Space\n */\n removeAll():this {\n this._container.innerHTML = \"\";\n return super.removeAll();\n }\n}\n\n\n/**\n * Form for HTMLSpace. Note that this is currently experimental and may change in future.\n */\nexport class HTMLForm extends VisualForm {\n\n protected _ctx:DOMFormContext = {\n group: null,\n groupID: \"pts\",\n groupCount: 0,\n currentID: \"pts0\",\n currentClass: \"\",\n style: {\n \"filled\": true,\n \"stroked\": true,\n \"background\": \"#f03\",\n \"border-color\": \"#fff\",\n \"color\": \"#000\",\n \"border-width\": \"1px\",\n \"border-radius\": \"0\",\n \"border-style\": \"solid\",\n \"position\": \"absolute\",\n \"top\": 0,\n \"left\": 0,\n \"width\": 0,\n \"height\": 0\n },\n font: \"11px sans-serif\",\n fontSize: 11,\n fontFamily: \"sans-serif\"\n };\n\n static groupID:number = 0;\n static domID:number = 0;\n \n protected _space:HTMLSpace;\n protected _ready:boolean = false;\n \n constructor( space:HTMLSpace ) {\n super();\n this._space = space;\n \n this._space.add( { start: () => {\n this._ctx.group = this._space.element;\n this._ctx.groupID = \"pts_dom_\"+(HTMLForm.groupID++);\n this._ready = true;\n }} );\n }\n \n get space():HTMLSpace { return this._space; }\n\n\n /**\n * Update a style in _ctx context or throw an Erorr if the style doesn't exist\n * @param k style key\n * @param v style value\n * @param unit Optional unit like 'px' to append to value\n */\n protected styleTo( k, v, unit:string='' ) { \n if (this._ctx.style[k] === undefined) throw new Error(`${k} style property doesn't exist`);\n this._ctx.style[k] = `${v}${unit}`; \n }\n\n\n /**\n * Set current fill style. Provide a valid color string or `false` to specify no fill color.\n * @example `form.fill(\"#F90\")`, `form.fill(\"rgba(0,0,0,.5\")`, `form.fill(false)`\n * @param c fill color\n */\n fill( c:string|boolean ):this {\n if (typeof c == \"boolean\") {\n this.styleTo( \"filled\", c );\n if (!c) this.styleTo( \"background\", \"transparent\" );\n } else {\n this.styleTo( \"filled\", true );\n this.styleTo( \"background\", c );\n }\n return this;\n }\n\n /**\n * Set current stroke style. Provide a valid color string or `false` to specify no stroke color.\n * @example `form.stroke(\"#F90\")`, `form.stroke(\"rgba(0,0,0,.5\")`, `form.stroke(false)`, `form.stroke(\"#000\", 0.5, 'round', 'square')`\n * @param c stroke color which can be as color, gradient, or pattern. (See [canvas documentation](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/strokeStyle))\n * @param width Optional value (can be floating point) to set line width\n * @param linejoin not implemented in HTMLForm\n * @param linecap not implemented in HTMLForm\n */\n stroke( c:string|boolean, width?:number, linejoin?:string, linecap?:string ):this {\n if (typeof c == \"boolean\") {\n this.styleTo( \"stroked\", c );\n if (!c) this.styleTo(\"border-width\", 0);\n } else {\n this.styleTo( \"stroked\", true );\n this.styleTo( \"border-color\", c );\n this.styleTo( \"border-width\", (width || 1)+\"px\" );\n }\n return this;\n }\n\n\n /**\n * Set current text color style. Provide a valid color string.\n * @example `form.fill(\"#F90\")`, `form.fill(\"rgba(0,0,0,.5\")`, `form.fill(false)`\n * @param c fill color\n */\n fillText( c:string ):this {\n this.styleTo( \"color\", c );\n return this;\n }\n\n\n /**\n * Add custom class to the created element\n * @param c custom class name or `false` to reset it\n * @example `form.fill(\"#f00\").cls(\"myClass\").rects(r)` `form.cls(false).circles(c)`\n */\n cls( c:string|boolean ) {\n if (typeof c == \"boolean\") {\n this._ctx.currentClass = \"\";\n } else {\n this._ctx.currentClass = c;\n }\n return this;\n }\n \n\n /**\n * Set the current font \n * @param sizeOrFont either a number to specify font-size, or a `Font` object to specify all font properties\n * @param weight Optional font-weight string such as \"bold\"\n * @param style Optional font-style string such as \"italic\"\n * @param lineHeight Optional line-height number suchas 1.5\n * @param family Optional font-family such as \"Helvetica, sans-serif\"\n * @example `form.font( myFont )`, `form.font(14, \"bold\")`\n */\n font( sizeOrFont:number|Font, weight?:string, style?:string, lineHeight?:number, family?:string ):this {\n if (typeof sizeOrFont == \"number\") {\n \n this._font.size = sizeOrFont;\n if (family) this._font.face = family;\n if (weight) this._font.weight = weight;\n if (style) this._font.style = style;\n if (lineHeight) this._font.lineHeight = lineHeight;\n this._ctx.font = this._font.value;\n \n } else {\n this._font = sizeOrFont;\n }\n return this;\n }\n\n /**\n * Reset the context's common styles to this form's styles. This supports using multiple forms on the same canvas context.\n */\n reset():this {\n this._ctx.style = {\n \"filled\": true, \"stroked\": true,\n \"background\": \"#f03\", \"border-color\": \"#fff\",\n \"border-width\": \"1px\"\n };\n\n this._font = new Font( 14, \"sans-serif\");\n this._ctx.font = this._font.value;\n\n return this;\n }\n\n /**\n * Set this form's group scope by an ID, and optionally define the group's parent element. A group scope keeps track of elements by their generated IDs, and updates their properties as needed. See also `scope()`.\n * @param group_id a string to use as prefix for the group's id. For example, group_id \"hello\" will create elements with id like \"hello-1\", \"hello-2\", etc\n * @param group Optional DOM element to define this group's parent element\n * @returns this form's context\n */\n updateScope( group_id:string, group?:Element ):object {\n this._ctx.group = group;\n this._ctx.groupID = group_id;\n this._ctx.groupCount = 0;\n this.nextID();\n return this._ctx;\n }\n \n\n /**\n * Set the current group scope to an item added into space, in order to keep track of any point, circle, etc created within it. The item must have an `animateID` property, so that elements created within the item will have generated IDs like \"item-{animateID}-{count}\".\n * @param item a \"player\" item that's added to space (see `space.add(...)`) and has an `animateID` property\n * @returns this form's context\n */\n scope( item:IPlayer ) {\n if (!item || item.animateID == null ) throw new Error(\"item not defined or not yet added to Space\");\n return this.updateScope( HTMLForm.scopeID( item ), this.space.element );\n }\n \n \n /**\n * Get next available id in the current group\n * @returns an id string\n */\n nextID():string {\n this._ctx.groupCount++;\n this._ctx.currentID = `${this._ctx.groupID}-${this._ctx.groupCount}`;\n return this._ctx.currentID;\n }\n \n\n /**\n * A static function to generate an ID string based on a context object\n * @param ctx a context object for an HTMLForm\n */\n static getID( ctx ):string {\n return ctx.currentID || `p-${HTMLForm.domID++}`;\n }\n\n\n /**\n * A static function to generate an ID string for a scope, based on a \"player\" item in the Space\n * @param item a \"player\" item that's added to space (see `space.add(...)`) and has an `animateID` property\n */\n static scopeID( item:IPlayer ):string {\n return `item-${item.animateID}`;\n }\n \n \n /**\n * A static function to help adding style object to an element. This put all styles into `style` attribute instead of individual attributes, so that the styles can be parsed by Adobe Illustrator.\n * @param elem A DOM element to add to\n * @param styles an object of style properties\n * @example `HTMLForm.style(elem, {fill: \"#f90\", stroke: false})`\n * @returns DOM element \n */\n static style( elem:Element, styles:object):Element {\n let st = [];\n\n if ( !styles[\"filled\"] ) st.push( \"background: none\");\n if ( !styles[\"stroked\"] ) st.push( \"border: none\");\n \n for (let k in styles) {\n if ( styles.hasOwnProperty(k) && k != \"filled\" && k != \"stroked\" ) {\n let v = styles[k];\n if (v) {\n if ( !styles[\"filled\"] && k.indexOf('background') === 0 ) {\n continue;\n } else if ( !styles[\"stroked\"] && k.indexOf('border-width') === 0 ) {\n continue;\n } else {\n st.push( `${k}: ${v}` );\n }\n }\n }\n }\n \n return HTMLSpace.setAttr( elem, {style: st.join(\";\")} );\n }\n\n /**\n * A helper function to set top, left, width, height of DOM element\n * @param x left position\n * @param y top position\n * @param w width\n * @param h height\n */\n static rectStyle( ctx:DOMFormContext, pt:PtLike, size:PtLike ):DOMFormContext {\n ctx.style[\"left\"] = pt[0]+\"px\"; \n ctx.style[\"top\"] = pt[1]+\"px\"; \n ctx.style[\"width\"] = size[0]+\"px\"; \n ctx.style[\"height\"] = size[1]+\"px\"; \n return ctx;\n }\n \n /**\n * Draws a point\n * @param ctx a context object of HTMLForm\n * @param pt a Pt object or numeric array\n * @param radius radius of the point. Default is 5.\n * @param shape The shape of the point. Defaults to \"square\", but it can be \"circle\" or a custom shape function in your own implementation.\n * @example `HTMLForm.point( p )`, `HTMLForm.point( p, 10, \"circle\" )`\n */\n static point( ctx:DOMFormContext, pt:PtLike, radius:number=5, shape:string=\"square\" ):Element {\n if (shape === \"circle\") {\n return HTMLForm.circle( ctx, pt, radius );\n } else {\n return HTMLForm.square( ctx, pt, radius );\n }\n }\n\n\n /**\n * Draws a point\n * @param p a Pt object\n * @param radius radius of the point. Default is 5.\n * @param shape The shape of the point. Defaults to \"square\", but it can be \"circle\" or a custom shape function in your own implementation.\n * @example `form.point( p )`, `form.point( p, 10, \"circle\" )`\n */\n point( pt:PtLike, radius:number=5, shape:string=\"square\" ):this {\n this.nextID();\n if (shape == \"circle\") this.styleTo(\"border-radius\", \"100%\");\n HTMLForm.point( this._ctx, pt, radius, shape );\n return this;\n }\n\n \n /**\n * A static function to draw a circle\n * @param ctx a context object of HTMLForm\n * @param pt center position of the circle\n * @param radius radius of the circle\n */\n static circle( ctx:DOMFormContext, pt:PtLike, radius:number=10 ):Element {\n let elem = HTMLSpace.htmlElement( ctx.group, \"div\", HTMLForm.getID(ctx) );\n HTMLSpace.setAttr( elem, {class: `pts-form pts-circle ${ctx.currentClass}` });\n HTMLForm.rectStyle( ctx, new Pt(pt).$subtract( radius ), new Pt(radius*2, radius*2) );\n HTMLForm.style( elem, ctx.style );\n return elem;\n } \n\n\n /**\n * Draw a circle\n * @param pts usually a Group of 2 Pts, but it can also take an array of two numeric arrays [ [position], [size] ]\n * @see [`Circle.fromCenter`](./_op_.circle.html#frompt)\n */\n circle( pts:GroupLike|number[][] ):this {\n this.nextID();\n this.styleTo(\"border-radius\", \"100%\");\n HTMLForm.circle( this._ctx, pts[0], pts[1][0] );\n return this;\n }\n\n\n /**\n * A static function to draw a square \n * @param ctx a context object of HTMLForm\n * @param pt center position of the square\n * @param halfsize half size of the square\n */\n static square( ctx:DOMFormContext, pt:PtLike, halfsize:number ) {\n let elem = HTMLSpace.htmlElement( ctx.group, \"div\", HTMLForm.getID(ctx) );\n HTMLSpace.setAttr( elem, {class: `pts-form pts-square ${ctx.currentClass}` });\n HTMLForm.rectStyle( ctx, new Pt(pt).$subtract( halfsize ), new Pt(halfsize*2, halfsize*2) );\n HTMLForm.style( elem, ctx.style );\n return elem;\n }\n \n\n /**\n * Draw a square, given a center and its half-size\n * @param pt center Pt\n * @param halfsize half-size\n */\n square( pt:PtLike, halfsize:number ):this {\n this.nextID();\n HTMLForm.square( this._ctx, pt, halfsize );\n return this;\n } \n\n\n /**\n * A static function to draw a rectangle\n * @param ctx a context object of HTMLForm\n * @param pts usually a Group of 2 Pts specifying the top-left and bottom-right positions. Alternatively it can be an array of numeric arrays.\n */\n static rect( ctx:DOMFormContext, pts:GroupLike|number[][] ):Element {\n if (!this._checkSize( pts)) return;\n\n let elem = HTMLSpace.htmlElement( ctx.group, \"div\", HTMLForm.getID(ctx) ); \n HTMLSpace.setAttr( elem, { class: `pts-form pts-rect ${ctx.currentClass}` });\n HTMLForm.rectStyle( ctx, pts[0], pts[1] );\n HTMLForm.style( elem, ctx.style );\n return elem;\n }\n\n\n /**\n * Draw a rectangle\n * @param pts usually a Group of 2 Pts specifying the top-left and bottom-right positions. Alternatively it can be an array of numeric arrays.\n */\n rect( pts:number[][]|Pt[] ):this {\n this.nextID();\n this.styleTo( \"border-radius\", \"0\" );\n HTMLForm.rect( this._ctx, pts );\n return this;\n }\n\n\n /**\n * A static function to draw text\n * @param ctx a context object of HTMLForm\n * @param `pt` a Point object to specify the anchor point\n * @param `txt` a string of text to draw\n * @param `maxWidth` specify a maximum width per line\n */\n static text( ctx:DOMFormContext, pt:PtLike, txt:string ):Element {\n let elem = HTMLSpace.htmlElement( ctx.group, \"div\", HTMLForm.getID(ctx) );\n \n HTMLSpace.setAttr( elem, {\n position: 'absolute',\n class: `pts-form pts-text ${ctx.currentClass}`,\n left: pt[0],\n top: pt[1],\n });\n \n elem.textContent = txt;\n HTMLForm.style( elem, ctx.style );\n \n return elem;\n }\n\n /**\n * Draw text on canvas\n * @param `pt` a Pt or numeric array to specify the anchor point\n * @param `txt` text\n * @param `maxWidth` specify a maximum width per line\n */\n text( pt:PtLike, txt:string ): this {\n this.nextID();\n HTMLForm.text( this._ctx, pt, txt );\n return this;\n }\n \n\n /**\n * A convenient way to draw some text on canvas for logging or debugging. It'll be draw on the top-left of the canvas as an overlay.\n * @param txt text\n */\n log( txt ):this {\n this.fill(\"#000\").stroke(\"#fff\", 0.5).text( [10,14], txt ); \n return this;\n }\n \n\n /**\n * Arc is not implemented in HTMLForm\n */\n arc( pt:PtLike, radius:number, startAngle:number, endAngle:number, cc?:boolean ):this {\n Util.warn( \"arc is not implemented in HTMLForm\" );\n return this;\n }\n\n\n /**\n * Line is not implemented in HTMLForm\n */\n line( pts:GroupLike|number[][] ):this {\n Util.warn( \"line is not implemented in HTMLForm\" );\n return this;\n }\n\n\n /**\n * Polygon is not implemented in HTMLForm\n * @param pts \n */\n polygon( pts:GroupLike|number[][] ):this {\n Util.warn( \"polygon is not implemented in HTMLForm\" );\n return this;\n }\n}\n\n\n\n\n\n// WEBPACK FOOTER //\n// ./~/tslint-loader??ref--0!./src/Dom.ts","// Source code licensed under Apache License 2.0.\n// Copyright © 2017 William Ngan. (https://github.com/williamngan/pts)\n\n\nimport {Pt, GroupLike} from \"./Pt\";\n\n/** Various functions to support typography */\nexport class Typography {\n\n /**\n * Create a heuristic text width estimate function. It will be less accurate but faster.\n * @param fn a reference function that can measure text width accurately\n * @param samples a list of string samples. Default is [\"M\", \"n\", \".\"]\n * @param distribution a list of the samples' probability distribution. Default is [0.06, 0.8, 0.14].\n * @return a function that can estimate text width\n */\n static textWidthEstimator( fn:(string) => number, samples:string[] = [\"M\", \"n\", \".\"], distribution:number[] = [0.06, 0.8, 0.14] ):(string) => number {\n let m = samples.map( fn );\n let avg = new Pt(distribution).dot( m );\n return (str:string) => str.length * avg;\n }\n\n\n /**\n * Truncate text to fit width\n * @param fn a function that can measure text width\n * @param str text to truncate\n * @param width width to fit\n * @param tail text to indicate overflow such as \"...\". Default is empty \"\".\n */\n static truncate( fn:(string) => number, str:string, width:number, tail:string=\"\" ):[string, number] {\n let trim = Math.floor( str.length * Math.min( 1, width / (fn(str)*1.1) ) );\n if (trim < str.length) {\n trim = Math.max( 0, trim - tail.length );\n return [str.substr(0, trim) + tail, trim];\n } else {\n return [str, str.length];\n }\n }\n\n\n /**\n * Get a function to scale font size proportionally to text box size changes.\n * @param box Initial box as a Group\n * @param ratio font-size change ratio. Default is 1.\n * @returns a function where input parameter is a new box, and returns the new font size value\n */\n static fontSizeToBox( box:GroupLike, ratio:number=1 ) {\n let h = (box[1][1] - box[0][1]);\n let f = ratio * h;\n return function( b:GroupLike ) {\n let nh = (b[1][1] - b[0][1]) / h;\n return f * nh;\n };\n }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./~/tslint-loader??ref--0!./src/Typography.ts","// Source code licensed under Apache License 2.0. \r\n// Copyright © 2017 William Ngan. (https://github.com/williamngan/pts)\r\n\r\n\r\nimport {MultiTouchSpace} from './Space';\r\nimport {VisualForm, Font} from \"./Form\";\r\nimport {Bound} from './Bound';\r\nimport {Pt, PtLike, GroupLike, Group} from \"./Pt\";\r\nimport {Const} from \"./Util\";\r\nimport {Typography as Typo} from \"./Typography\";\r\nimport { Rectangle } from './Op';\r\n\r\n\r\nexport interface PtsCanvasRenderingContext2D extends CanvasRenderingContext2D {\r\n webkitBackingStorePixelRatio?:number;\r\n mozBackingStorePixelRatio?:number;\r\n msBackingStorePixelRatio?:number;\r\n oBackingStorePixelRatio?:number;\r\n backingStorePixelRatio?:number;\r\n}\r\n\r\n\r\n/**\r\n* CanvasSpace is an implementation of the abstract class Space. It represents a space for HTML Canvas.\r\n* Learn more about the concept of Space in [this guide](..guide/Space-0500.html)\r\n*/\r\nexport class CanvasSpace extends MultiTouchSpace {\r\n \r\n protected _canvas:HTMLCanvasElement;\r\n protected _container:Element;\r\n\r\n protected _pixelScale = 1;\r\n protected _autoResize = true;\r\n protected _bgcolor = \"#e1e9f0\";\r\n protected _ctx:PtsCanvasRenderingContext2D;\r\n \r\n protected _offscreen = false;\r\n protected _offCanvas:HTMLCanvasElement;\r\n protected _offCtx:PtsCanvasRenderingContext2D;\r\n\r\n protected _initialResize = false;\r\n \r\n\r\n \r\n /**\r\n * Create a CanvasSpace which represents a HTML Canvas Space\r\n * @param elem Specify an element by its \"id\" attribute as string, or by the element object itself. An element can be an existing `<canvas>`, or a `<div>` container in which a new `<canvas>` will be created. If left empty, a `<div id=\"pt_container\"><canvas id=\"pt\" /></div>` will be added to DOM. Use css to customize its appearance if needed.\r\n * @param callback an optional callback `function(boundingBox, spaceElement)` to be called when canvas is appended and ready. Alternatively, a \"ready\" event will also be fired from the `<canvas>` element when it's appended, which can be traced with `spaceInstance.canvas.addEventListener(\"ready\")`\r\n * @example `new CanvasSpace( \"#myElementID\" )`\r\n */\r\n constructor( elem:string|Element, callback?:Function) {\r\n super();\r\n \r\n var _selector:Element = null;\r\n var _existed = false;\r\n this.id = \"pt\";\r\n \r\n // check element or element id string\r\n if ( elem instanceof Element ) {\r\n _selector = elem;\r\n this.id = \"pts_existing_space\";\r\n } else {;\r\n _selector = document.querySelector( <string>elem );\r\n _existed = true;\r\n this.id = elem;\r\n }\r\n \r\n // if selector is not defined, create a canvas\r\n if (!_selector) { \r\n this._container = this._createElement( \"div\", this.id+\"_container\" );\r\n this._canvas = this._createElement( \"canvas\", this.id ) as HTMLCanvasElement;\r\n this._container.appendChild( this._canvas );\r\n document.body.appendChild( this._container );\r\n _existed = false;\r\n \r\n // if selector is element but not canvas, create a canvas inside it\r\n } else if (_selector.nodeName.toLowerCase() != \"canvas\") { \r\n this._container = _selector;\r\n this._canvas = this._createElement( \"canvas\", this.id+\"_canvas\" ) as HTMLCanvasElement;\r\n this._container.appendChild( this._canvas );\r\n this._initialResize = true;\r\n \r\n // if selector is an existing canvas\r\n } else {\r\n this._canvas = _selector as HTMLCanvasElement;\r\n this._container = _selector.parentElement;\r\n this._autoResize = false;\r\n }\r\n \r\n // if size is known then set it immediately\r\n // if (_existed) {\r\n // let b = this._container.getBoundingClientRect();\r\n // this.resize( Bound.fromBoundingRect(b) );\r\n // }\r\n \r\n // no mutation observer, so we set a timeout for ready event\r\n setTimeout( this._ready.bind( this, callback ), 100 );\r\n \r\n // store canvas 2d rendering context\r\n this._ctx = this._canvas.getContext('2d');\r\n \r\n }\r\n \r\n \r\n /**\r\n * Helper function to create a DOM element\r\n * @param elem element tag name\r\n * @param id element id attribute\r\n */\r\n protected _createElement( elem=\"div\", id ) {\r\n let d = document.createElement( elem );\r\n d.setAttribute(\"id\", id);\r\n return d;\r\n }\r\n \r\n \r\n /**\r\n * Handle callbacks after element is mounted in DOM\r\n * @param callback \r\n */\r\n private _ready( callback:Function ) {\r\n if (!this._container) throw new Error(`Cannot initiate #${this.id} element`);\r\n \r\n this._isReady = true;\r\n \r\n this._resizeHandler( null );\r\n\r\n this.clear( this._bgcolor );\r\n this._canvas.dispatchEvent( new Event(\"ready\") );\r\n \r\n for (let k in this.players) {\r\n if (this.players.hasOwnProperty(k)) {\r\n if (this.players[k].start) this.players[k].start( this.bound.clone(), this );\r\n }\r\n }\r\n \r\n this._pointer = this.center;\r\n this._initialResize = false; // unset\r\n \r\n if (callback) callback( this.bound, this._canvas );\r\n }\r\n \r\n \r\n /**\r\n * Set up various options for CanvasSpace. The `opt` parameter is an object with the following fields. This is usually set during instantiation, eg `new CanvasSpace(...).setup( { opt } )`\r\n * @param opt an object with optional settings, as follows.\r\n * @param opt.bgcolor a hex or rgba string to set initial background color of the canvas, or use `false` or \"transparent\" to set a transparent background. You may also change it later with `clear()` \r\n * @param opt.resize a boolean to set whether `<canvas>` size should auto resize to match its container's size. You can also set it manually with `autoSize()` \r\n * @param opt.retina a boolean to set if device pixel scaling should be used. This may make drawings on retina displays look sharper but may reduce performance slightly. Default is `true`. \r\n * @param opt.offscreen a boolean to set if a duplicate canvas should be created for offscreen rendering. Default is `false`. \r\n * @example `space.setup({ bgcolor: \"#f00\", retina: true, resize: true })`\r\n */\r\n setup( opt:{bgcolor?:string, resize?:boolean, retina?:boolean, offscreen?:boolean} ):this {\r\n if (opt.bgcolor) this._bgcolor = opt.bgcolor;\r\n \r\n this.autoResize = (opt.resize != undefined) ? opt.resize : false;\r\n \r\n if (opt.retina !== false) {\r\n let r1 = window.devicePixelRatio || 1;\r\n let r2 = this._ctx.webkitBackingStorePixelRatio || this._ctx.mozBackingStorePixelRatio || this._ctx.msBackingStorePixelRatio || this._ctx.oBackingStorePixelRatio || this._ctx.backingStorePixelRatio || 1; \r\n this._pixelScale = r1/r2;\r\n }\r\n \r\n if (opt.offscreen) {\r\n this._offscreen = true;\r\n this._offCanvas = this._createElement( \"canvas\", this.id+\"_offscreen\" ) as HTMLCanvasElement;\r\n this._offCtx = this._offCanvas.getContext('2d');\r\n } else {\r\n this._offscreen = false;\r\n }\r\n \r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * Set whether the canvas element should resize when its container is resized. \r\n * @param auto a boolean value indicating if auto size is set\r\n */\r\n set autoResize( auto ) {\r\n this._autoResize = auto;\r\n if (auto) {\r\n window.addEventListener( 'resize', this._resizeHandler.bind(this) );\r\n } else {\r\n window.removeEventListener( 'resize', this._resizeHandler.bind(this) );\r\n }\r\n }\r\n get autoResize(): boolean { return this._autoResize; }\r\n \r\n \r\n /**\r\n * This overrides Space's `resize` function. It's used as a callback function for window's resize event and not usually called directly. You can keep track of resize events with `resize: (bound ,evt)` callback in your player objects (See `Space`'s `add()` function). \r\n * @param b a Bound object to resize to\r\n * @param evt Optionally pass a resize event\r\n */\r\n resize( b:Bound, evt?:Event):this {\r\n \r\n this.bound = b;\r\n\r\n this._canvas.width = this.bound.size.x * this._pixelScale;\r\n this._canvas.height = this.bound.size.y * this._pixelScale;\r\n this._canvas.style.width = Math.floor(this.bound.size.x) + \"px\";\r\n this._canvas.style.height = Math.floor(this.bound.size.y) + \"px\";\r\n \r\n if (this._offscreen) {\r\n this._offCanvas.width = this.bound.size.x * this._pixelScale;\r\n this._offCanvas.height = this.bound.size.y * this._pixelScale;\r\n // this._offCanvas.style.width = Math.floor(this.bound.size.x) + \"px\";\r\n // this._offCanvas.style.height = Math.floor(this.bound.size.y) + \"px\";\r\n }\r\n \r\n if (this._pixelScale != 1) {\r\n this._ctx.scale( this._pixelScale, this._pixelScale );\r\n this._ctx.translate( 0.5, 0.5);\r\n \r\n if (this._offscreen) {\r\n this._offCtx.scale( this._pixelScale, this._pixelScale );\r\n this._offCtx.translate( 0.5, 0.5); \r\n }\r\n }\r\n \r\n for (let k in this.players) {\r\n if (this.players.hasOwnProperty(k)) {\r\n let p = this.players[k];\r\n if (p.resize) p.resize( this.bound, evt);\r\n }\r\n };\r\n \r\n this.render( this._ctx );\r\n\r\n // if it's a valid resize event and space is not playing, repaint the canvas once\r\n if (evt && !this.isPlaying) this.playOnce( 0 ); \r\n \r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * Window resize handling\r\n * @param evt \r\n */\r\n protected _resizeHandler( evt:Event ) {\r\n let b = (this._autoResize || this._initialResize) ? this._container.getBoundingClientRect() : this._canvas.getBoundingClientRect();\r\n\r\n if (b) {\r\n let box = Bound.fromBoundingRect(b);\r\n \r\n // Need to compute offset from window scroll. See outerBound calculation in Space's _mouseAction \r\n box.center = box.center.add( window.pageXOffset, window.pageYOffset ); \r\n this.resize( box, evt );\r\n }\r\n }\r\n \r\n\r\n /**\r\n * Set a background color for this canvas. Alternatively, you may use `clear()` function.\r\n @param bg background color as hex or rgba string\r\n */\r\n set background( bg:string ) { this._bgcolor = bg; }\r\n get background():string { return this._bgcolor; }\r\n\r\n \r\n /**\r\n * `pixelScale` property returns a number that let you determine if the screen is \"retina\" (when value >= 2)\r\n */\r\n public get pixelScale():number {\r\n return this._pixelScale;\r\n }\r\n \r\n \r\n /**\r\n * Check if an offscreen canvas is created\r\n */\r\n public get hasOffscreen():boolean {\r\n return this._offscreen;\r\n }\r\n \r\n \r\n /**\r\n * Get the rendering context of offscreen canvas (if created via `setup()`)\r\n */\r\n public get offscreenCtx():PtsCanvasRenderingContext2D { return this._offCtx; }\r\n \r\n \r\n /**\r\n * Get the offscreen canvas element\r\n */\r\n public get offscreenCanvas():HTMLCanvasElement { return this._offCanvas; }\r\n \r\n \r\n\r\n \r\n /**\r\n * Get a new `CanvasForm` for drawing\r\n * @see `CanvasForm`\r\n */\r\n public getForm():CanvasForm { return new CanvasForm(this); }\r\n \r\n \r\n /**\r\n * Get the html canvas element\r\n */\r\n get element():HTMLCanvasElement {\r\n return this._canvas;\r\n }\r\n \r\n \r\n /**\r\n * Get the parent element that contains the canvas element\r\n */\r\n get parent():Element {\r\n return this._container;\r\n }\r\n\r\n\r\n /**\r\n * A property to indicate if the Space is ready\r\n */\r\n get ready():boolean { \r\n return this._isReady; \r\n }\r\n \r\n \r\n /**\r\n * Get the rendering context of canvas\r\n */\r\n public get ctx():PtsCanvasRenderingContext2D { return this._ctx; }\r\n \r\n \r\n \r\n /**\r\n * Clear the canvas with its background color. Overrides Space's `clear` function.\r\n * @param bg Optionally specify a custom background color in hex or rgba string, or \"transparent\". If not defined, it will use its `bgcolor` property as background color to clear the canvas.\r\n */\r\n clear( bg?:string ):this {\r\n \r\n if (bg) this._bgcolor = bg;\r\n let lastColor = this._ctx.fillStyle;\r\n \r\n if (this._bgcolor && this._bgcolor != \"transparent\") {\r\n this._ctx.fillStyle = this._bgcolor;\r\n this._ctx.fillRect( -1, -1, this._canvas.width+1, this._canvas.height+1 );\r\n } else {\r\n this._ctx.clearRect( -1, -1, this._canvas.width+1, this._canvas.height+1 );\r\n }\r\n \r\n this._ctx.fillStyle = lastColor;\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * Similiar to `clear()` but clear the offscreen canvas instead\r\n * @param bg Optionally specify a custom background color in hex or rgba string, or \"transparent\". If not defined, it will use its `bgcolor` property as background color to clear the canvas.\r\n */\r\n clearOffscreen( bg?:string ):this {\r\n if (this._offscreen) {\r\n if (bg) {\r\n this._offCtx.fillStyle = bg;\r\n this._offCtx.fillRect( -1, -1, this._canvas.width+1, this._canvas.height+1 );\r\n } else {\r\n this._offCtx.clearRect( -1, -1, this._offCanvas.width+1, this._offCanvas.height+1 );\r\n }\r\n }\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * Main animation function. Call `Space.playItems`.\r\n * @param time current time\r\n */\r\n protected playItems( time: number ) {\r\n if (this._isReady) {\r\n this._ctx.save();\r\n if (this._offscreen) this._offCtx.save();\r\n super.playItems( time );\r\n this._ctx.restore();\r\n if (this._offscreen) this._offCtx.restore();\r\n this.render( this._ctx );\r\n }\r\n }\r\n \r\n \r\n\r\n}\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n* CanvasForm is an implementation of abstract class VisualForm. It provide methods to express Pts on CanvasSpace. \r\n* You may extend CanvasForm to implement your own expressions for CanvasSpace.\r\n*/\r\nexport class CanvasForm extends VisualForm {\r\n \r\n protected _space:CanvasSpace;\r\n protected _ctx:CanvasRenderingContext2D; \r\n protected _estimateTextWidth:(string) => number;\r\n\r\n /** \r\n * store common styles so that they can be restored to canvas context when using multiple forms. See `reset()`.\r\n */\r\n protected _style = {\r\n fillStyle: \"#f03\", strokeStyle:\"#fff\", \r\n lineWidth: 1, lineJoin: \"bevel\", lineCap: \"butt\",\r\n };\r\n \r\n \r\n /**\r\n * Create a new CanvasForm. You may also use `space.getForm()` to get the default form.\r\n * @param space an instance of CanvasSpace\r\n */\r\n constructor( space:CanvasSpace ) {\r\n super();\r\n this._space = space;\r\n \r\n this._space.add( { start: () => {\r\n this._ctx = this._space.ctx;\r\n this._ctx.fillStyle = this._style.fillStyle;\r\n this._ctx.strokeStyle = this._style.strokeStyle; \r\n this._ctx.lineJoin = \"bevel\";\r\n this._ctx.font = this._font.value;\r\n this._ready = true;\r\n }} );\r\n }\r\n \r\n \r\n /**\r\n * get the CanvasSpace instance that this form is associated with\r\n */\r\n get space():CanvasSpace { return this._space; }\r\n \r\n\r\n /**\r\n * Toggle whether to draw on offscreen canvas (if offscreen is set in CanvasSpace)\r\n * @param off if `true`, draw on offscreen canvas instead of the visible canvas. Default is `true`\r\n * @param clear optionally provide a valid color string to fill a bg color. see CanvasSpace's `clearOffscreen` function.\r\n */\r\n useOffscreen( off:boolean=true, clear:boolean|string=false ) {\r\n if (clear) this._space.clearOffscreen( (typeof clear == \"string\") ? clear : null );\r\n this._ctx = (this._space.hasOffscreen && off) ? this._space.offscreenCtx : this._space.ctx;\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * Render the offscreen canvas's content on the visible canvas\r\n * @param offset Optional offset on the top-left position when drawing on the visible canvas\r\n */\r\n renderOffscreen( offset:PtLike=[0,0] ) {\r\n if (this._space.hasOffscreen) {\r\n this._space.ctx.drawImage( \r\n this._space.offscreenCanvas, offset[0], offset[1], this._space.width, this._space.height );\r\n }\r\n }\r\n \r\n \r\n /**\r\n * Set current fill style. Provide a valid color string or `false` to specify no fill color.\r\n * @example `form.fill(\"#F90\")`, `form.fill(\"rgba(0,0,0,.5\")`, `form.fill(false)`\r\n * @param c fill color which can be as color, gradient, or pattern. (See [canvas documentation](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/fillStyle))\r\n */\r\n fill( c:string|boolean ):this {\r\n if (typeof c == \"boolean\") {\r\n this.filled = c;\r\n } else {\r\n this.filled = true;\r\n this._style.fillStyle = c;\r\n this._ctx.fillStyle = c;\r\n }\r\n return this;\r\n }\r\n \r\n \r\n \r\n /**\r\n * Set current stroke style. Provide a valid color string or `false` to specify no stroke color.\r\n * @example `form.stroke(\"#F90\")`, `form.stroke(\"rgba(0,0,0,.5\")`, `form.stroke(false)`, `form.stroke(\"#000\", 0.5, 'round', 'square')`\r\n * @param c stroke color which can be as color, gradient, or pattern. (See [canvas documentation](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/strokeStyle))\r\n * @param width Optional value (can be floating point) to set line width\r\n * @param linejoin Optional string to set line joint style. Can be \"miter\", \"bevel\", or \"round\".\r\n * @param linecap Optional string to set line cap style. Can be \"butt\", \"round\", or \"square\".\r\n */\r\n stroke( c:string|boolean, width?:number, linejoin?:string, linecap?:string ):this {\r\n if (typeof c == \"boolean\") {\r\n this.stroked = c;\r\n } else {\r\n this.stroked = true;\r\n this._style.strokeStyle = c;\r\n this._ctx.strokeStyle = c;\r\n if (width) {\r\n this._ctx.lineWidth = width;\r\n this._style.lineWidth = width;\r\n }\r\n if (linejoin) {\r\n this._ctx.lineJoin = linejoin;\r\n this._style.lineJoin = linejoin;\r\n }\r\n if (linecap) {\r\n this._ctx.lineCap = linecap;\r\n this._style.lineCap = linecap;\r\n }\r\n }\r\n return this;\r\n }\r\n \r\n \r\n \r\n /**\r\n * Set the current font \r\n * @param sizeOrFont either a number to specify font-size, or a `Font` object to specify all font properties\r\n * @param weight Optional font-weight string such as \"bold\"\r\n * @param style Optional font-style string such as \"italic\"\r\n * @param lineHeight Optional line-height number suchas 1.5\r\n * @param family Optional font-family such as \"Helvetica, sans-serif\"\r\n * @example `form.font( myFont )`, `form.font(14, \"bold\")`\r\n */\r\n font( sizeOrFont:number|Font, weight?:string, style?:string, lineHeight?:number, family?:string ):this {\r\n if (typeof sizeOrFont == \"number\") {\r\n \r\n this._font.size = sizeOrFont;\r\n if (family) this._font.face = family;\r\n if (weight) this._font.weight = weight;\r\n if (style) this._font.style = style;\r\n if (lineHeight) this._font.lineHeight = lineHeight;\r\n this._ctx.font = this._font.value;\r\n \r\n } else {\r\n this._font = sizeOrFont;\r\n }\r\n\r\n // If using estimate, reapply it when font changes.\r\n if (this._estimateTextWidth) this.fontWidthEstimate( true );\r\n\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Set whether to use ctx.measureText or a faster but less accurate heuristic function.\r\n * @param estimate `true` to use heuristic function, or `false` to use ctx.measureText\r\n */\r\n fontWidthEstimate( estimate:boolean=true ):this {\r\n this._estimateTextWidth = (estimate) ? Typo.textWidthEstimator( ((c:string) => this._ctx.measureText(c).width) ) : undefined;\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Get the width of this text. It will return an actual measurement or an estimate based on `fontWidthEstimate` setting. Default is an actual measurement using canvas context's measureText.\r\n * @param c a string of text contents\r\n */\r\n getTextWidth(c:string):number {\r\n return (!this._estimateTextWidth) ? this._ctx.measureText(c).width : this._estimateTextWidth( c );\r\n }\r\n\r\n\r\n /**\r\n * Truncate text to fit width\r\n * @param str text to truncate\r\n * @param width width to fit\r\n * @param tail text to indicate overflow such as \"...\". Default is empty \"\".\r\n */\r\n protected _textTruncate( str:string, width:number, tail:string=\"\" ):[string, number] {\r\n return Typo.truncate( this.getTextWidth.bind(this), str, width, tail );\r\n }\r\n\r\n\r\n /**\r\n * Align text within a rectangle box\r\n * @param box a Group that defines a rectangular box\r\n * @param vertical a string that specifies the vertical alignment in the box: \"top\", \"bottom\", \"middle\", \"start\", \"end\"\r\n * @param offset Optional offset from the edge (like padding)\r\n * @param center Optional center position \r\n */\r\n protected _textAlign( box:GroupLike, vertical:string, offset?:PtLike, center?:Pt ):Pt {\r\n if (!center) center = Rectangle.center( box );\r\n var px = box[0][0];\r\n if (this._ctx.textAlign == \"end\" || this._ctx.textAlign == \"right\") {\r\n px = box[1][0];\r\n } else if (this._ctx.textAlign == \"center\" || this._ctx.textAlign == \"middle\") {\r\n px = center[0];\r\n }\r\n\r\n var py = center[1];\r\n if (vertical == \"top\" || vertical == \"start\") {\r\n py = box[0][1];\r\n } else if (vertical == \"end\" || vertical == \"bottom\") {\r\n py = box[1][1];\r\n }\r\n\r\n return (offset) ? new Pt( px+offset[0], py+offset[1] ) : new Pt(px, py);\r\n }\r\n \r\n \r\n /**\r\n * Reset the rendering context's common styles to this form's styles. This supports using multiple forms on the same canvas context.\r\n */\r\n reset():this {\r\n for (let k in this._style) {\r\n if (this._style.hasOwnProperty(k)) {\r\n this._ctx[k] = this._style[k];\r\n }\r\n }\r\n this._font = new Font();\r\n this._ctx.font = this._font.value;\r\n return this;\r\n }\r\n \r\n \r\n protected _paint() {\r\n if (this._filled) this._ctx.fill();\r\n if (this._stroked) this._ctx.stroke();\r\n }\r\n \r\n \r\n /**\r\n * Draws a point\r\n * @param p a Pt object\r\n * @param radius radius of the point. Default is 5.\r\n * @param shape The shape of the point. Defaults to \"square\", but it can be \"circle\" or a custom shape function in your own implementation.\r\n * @example `form.point( p )`, `form.point( p, 10, \"circle\" )`\r\n */\r\n point( p:PtLike, radius:number=5, shape:string=\"square\" ):this {\r\n if (!p) return;\r\n if (!CanvasForm[shape]) throw new Error(`${shape} is not a static function of CanvasForm`);\r\n \r\n CanvasForm[shape]( this._ctx, p, radius );\r\n this._paint();\r\n \r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * A static function to draw a circle\r\n * @param ctx canvas rendering context\r\n * @param pt center position of the circle\r\n * @param radius radius of the circle\r\n */\r\n static circle( ctx:CanvasRenderingContext2D, pt:PtLike, radius:number=10 ) {\r\n if (!pt) return;\r\n ctx.beginPath();\r\n ctx.arc( pt[0], pt[1], radius, 0, Const.two_pi, false );\r\n ctx.closePath();\r\n }\r\n \r\n \r\n /**\r\n * Draw a circle\r\n * @param pts usually a Group of 2 Pts, but it can also take an array of two numeric arrays [ [position], [size] ]\r\n * @see [`Circle.fromCenter`](./_op_.circle.html#frompt)\r\n */\r\n circle( pts:GroupLike|number[][] ):this {\r\n CanvasForm.circle( this._ctx, pts[0], pts[1][0] );\r\n this._paint();\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * A static function to draw an arc.\r\n * @param ctx canvas rendering context\r\n * @param pt center position \r\n * @param radius radius of the arc circle\r\n * @param startAngle start angle of the arc\r\n * @param endAngle end angle of the arc\r\n * @param cc an optional boolean value to specify if it should be drawn clockwise (`false`) or counter-clockwise (`true`). Default is clockwise.\r\n */\r\n static arc( ctx:CanvasRenderingContext2D, pt:PtLike, radius:number, startAngle:number, endAngle:number, cc?:boolean ) {\r\n if (!pt) return;\r\n ctx.beginPath();\r\n ctx.arc( pt[0], pt[1], radius, startAngle, endAngle, cc );\r\n }\r\n \r\n \r\n /**\r\n * Draw an arc.\r\n * @param pt center position\r\n * @param radius radius of the arc circle\r\n * @param startAngle start angle of the arc\r\n * @param endAngle end angle of the arc\r\n * @param cc an optional boolean value to specify if it should be drawn clockwise (`false`) or counter-clockwise (`true`). Default is clockwise.\r\n */\r\n arc( pt:PtLike, radius:number, startAngle:number, endAngle:number, cc?:boolean ):this {\r\n CanvasForm.arc( this._ctx, pt, radius, startAngle, endAngle, cc );\r\n this._paint();\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * A static function to draw a square \r\n * @param ctx canvas rendering context\r\n * @param pt center position of the square\r\n * @param halfsize half size of the square\r\n */\r\n static square( ctx:CanvasRenderingContext2D, pt:PtLike, halfsize:number ) {\r\n if (!pt) return;\r\n let x1 = pt[0]-halfsize;\r\n let y1 = pt[1]-halfsize;\r\n let x2 = pt[0]+halfsize;\r\n let y2 = pt[1]+halfsize;\r\n \r\n // faster than using `rect`\r\n ctx.beginPath();\r\n ctx.moveTo( x1, y1 );\r\n ctx.lineTo( x1, y2 );\r\n ctx.lineTo( x2, y2 );\r\n ctx.lineTo( x2, y1 );\r\n ctx.closePath();\r\n }\r\n \r\n \r\n /**\r\n * Draw a square, given a center and its half-size\r\n * @param pt center Pt\r\n * @param halfsize half-size\r\n */\r\n square( pt:PtLike, halfsize:number ) {\r\n CanvasForm.square( this._ctx, pt, halfsize );\r\n this._paint();\r\n return this;\r\n }\r\n\r\n \r\n /**\r\n * A static function to draw a line\r\n * @param ctx canvas rendering context\r\n * @param pts a Group of multiple Pts, or an array of multiple numeric arrays\r\n */\r\n static line( ctx:CanvasRenderingContext2D, pts:GroupLike|number[][] ) {\r\n if (pts.length<2) return;\r\n ctx.beginPath();\r\n ctx.moveTo( pts[0][0], pts[0][1] );\r\n for (let i=1, len=pts.length; i<len; i++) {\r\n if (pts[i]) ctx.lineTo( pts[i][0], pts[i][1] );\r\n }\r\n }\r\n \r\n \r\n /**\r\n * Draw a line or polyline\r\n * @param pts a Group of multiple Pts, or an array of multiple numeric arrays\r\n */\r\n line( pts:GroupLike|number[][] ):this {\r\n CanvasForm.line( this._ctx, pts );\r\n this._paint();\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * A static function to draw polygon\r\n * @param ctx canvas rendering context\r\n * @param pts a Group of multiple Pts, or an array of multiple numeric arrays\r\n */\r\n static polygon( ctx:CanvasRenderingContext2D, pts:GroupLike|number[][] ) {\r\n if (pts.length<2) return;\r\n ctx.beginPath();\r\n ctx.moveTo( pts[0][0], pts[0][1] );\r\n for (let i=1, len=pts.length; i<len; i++) {\r\n if (pts[i]) ctx.lineTo( pts[i][0], pts[i][1] );\r\n }\r\n ctx.closePath();\r\n }\r\n \r\n \r\n /**\r\n * Draw a polygon\r\n * @param pts a Group of multiple Pts, or an array of multiple numeric arrays\r\n */\r\n polygon( pts:GroupLike|number[][] ):this {\r\n CanvasForm.polygon( this._ctx, pts );\r\n this._paint();\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * A static function to draw a rectangle\r\n * @param ctx canvas rendering context\r\n * @param pts usually a Group of 2 Pts specifying the top-left and bottom-right positions. Alternatively it can be an array of numeric arrays.\r\n */\r\n static rect( ctx:CanvasRenderingContext2D, pts:GroupLike|number[][] ) {\r\n if (pts.length<2) return;\r\n ctx.beginPath();\r\n ctx.moveTo( pts[0][0], pts[0][1] );\r\n ctx.lineTo( pts[0][0], pts[1][1] );\r\n ctx.lineTo( pts[1][0], pts[1][1] );\r\n ctx.lineTo( pts[1][0], pts[0][1] );\r\n ctx.closePath();\r\n }\r\n \r\n \r\n /**\r\n * Draw a rectangle\r\n * @param pts usually a Group of 2 Pts specifying the top-left and bottom-right positions. Alternatively it can be an array of numeric arrays.\r\n */\r\n rect( pts:number[][]|Pt[] ):this {\r\n CanvasForm.rect( this._ctx, pts );\r\n this._paint();\r\n return this;\r\n }\r\n \r\n \r\n /**\r\n * A static function to draw text\r\n * @param ctx canvas rendering context\r\n * @param `pt` a Point object to specify the anchor point\r\n * @param `txt` a string of text to draw\r\n * @param `maxWidth` specify a maximum width per line\r\n */\r\n static text( ctx:CanvasRenderingContext2D, pt:PtLike, txt:string, maxWidth?:number ) {\r\n if (!pt) return;\r\n ctx.fillText( txt, pt[0], pt[1], maxWidth );\r\n }\r\n \r\n \r\n /**\r\n * Draw text on canvas\r\n * @param `pt` a Pt or numeric array to specify the anchor point\r\n * @param `txt` text\r\n * @param `maxWidth` specify a maximum width per line\r\n */\r\n text( pt:PtLike, txt:string, maxWidth?:number): this {\r\n CanvasForm.text( this._ctx, pt, txt, maxWidth );\r\n return this;\r\n }\r\n \r\n\r\n /**\r\n * Fit a single-line text in a rectangular box\r\n * @param box a rectangle box defined by a Group\r\n * @param txt string of text\r\n * @param tail text to indicate overflow such as \"...\". Default is empty \"\".\r\n * @param verticalAlign \"top\", \"middle\", or \"bottom\" to specify vertical alignment inside the box\r\n * @param overrideBaseline If `true`, use the corresponding baseline as verticalAlign. If `false`, use the current canvas context's textBaseline setting. Default is `true`.\r\n */\r\n textBox( box:GroupLike, txt:string, verticalAlign:string=\"middle\", tail:string=\"\", overrideBaseline:boolean=true): this {\r\n if (overrideBaseline) this._ctx.textBaseline = verticalAlign;\r\n let size = Rectangle.size( box );\r\n let t = this._textTruncate( txt, size[0], tail );\r\n this.text( this._textAlign( box, verticalAlign ), t[0] );\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Fit multi-line text in a rectangular box. Note that this will also set canvas context's textBaseline to \"top\".\r\n * @param box a rectangle box defined by a Group\r\n * @param txt string of text\r\n * @param lineHeight line height as a ratio of font size. Default is 1.2.\r\n * @param verticalAlign \"top\", \"middle\", or \"bottom\" to specify vertical alignment inside the box\r\n * @param crop a boolean to specify whether to crop text when overflowing\r\n */\r\n paragraphBox( box:GroupLike, txt:string, lineHeight:number=1.2, verticalAlign:string=\"top\", crop:boolean=true ):this {\r\n let size = Rectangle.size( box );\r\n this._ctx.textBaseline = \"top\"; // override textBaseline\r\n \r\n let lstep = this._font.size * lineHeight;\r\n\r\n // find next lines recursively\r\n let nextLine = (sub:string, buffer:string[]=[], cc:number=0 ) => {\r\n if (!sub) return buffer;\r\n if (crop && cc*lstep > size[1]-lstep*2) return buffer;\r\n if (cc>10000) throw new Error(\"max recursion reached (10000)\");\r\n\r\n let t = this._textTruncate( sub, size[0], \"\" );\r\n\r\n // new line\r\n let newln = t[0].indexOf(\"\\n\");\r\n if (newln >= 0) {\r\n buffer.push( t[0].substr(0, newln) );\r\n return nextLine( sub.substr( newln+1 ), buffer, cc+1 ); \r\n }\r\n\r\n // word wrap\r\n let dt = t[0].lastIndexOf( \" \" ) + 1;\r\n if ( dt <= 0 || t[1] === sub.length ) dt = undefined;\r\n let line = t[0].substr(0, dt );\r\n buffer.push( line );\r\n\r\n return (t[1] <= 0 || t[1] === sub.length) ? buffer : nextLine( sub.substr( (dt || t[1]) ), buffer, cc+1 );\r\n };\r\n\r\n let lines = nextLine( txt ); // go through all lines\r\n let lsize = lines.length * lstep; // total height\r\n let lbox = box;\r\n \r\n\r\n if (verticalAlign == \"middle\" || verticalAlign == \"center\") {\r\n let lpad = (size[1] - lsize) / 2; \r\n if (crop) lpad = Math.max( 0, lpad ); \r\n lbox = new Group( box[0].$add(0, lpad), box[1].$subtract(0, lpad) );\r\n } else if (verticalAlign == \"bottom\") {\r\n lbox = new Group( box[0].$add( 0, size[1]-lsize ), box[1] );\r\n } else {\r\n lbox = new Group( box[0], box[0].$add(size[0], lsize) );\r\n }\r\n\r\n let center = Rectangle.center( lbox );\r\n for (let i=0, len=lines.length; i<len; i++) {\r\n this.text( this._textAlign( lbox, \"top\", [0, i*lstep], center ), lines[i] );\r\n }\r\n\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Set text alignment and baseline (eg, vertical-align)\r\n * @param alignment Canvas' textAlign option: \"left\", \"right\", \"center\", \"start\", or \"end\"\r\n * @param baseline Canvas' textBaseline option: \"top\", \"hanging\", \"middle\", \"alphabetic\", \"ideographic\", \"bottom\". For convenience, you can also use \"center\" (same as \"middle\"), and \"baseline\" (same as \"alphabetic\")\r\n */\r\n alignText( alignment:string=\"left\", baseline:string=\"alphabetic\") {\r\n if (baseline == \"center\") baseline = \"middle\";\r\n if (baseline == \"baseline\") baseline = \"alphabetic\";\r\n this._ctx.textAlign = alignment;\r\n this._ctx.textBaseline = baseline;\r\n return this;\r\n }\r\n\r\n \r\n /**\r\n * A convenient way to draw some text on canvas for logging or debugging. It'll be draw on the top-left of the canvas as an overlay.\r\n * @param txt text\r\n */\r\n log( txt ):this {\r\n let w = this._ctx.measureText( txt ).width + 20;\r\n this.stroke(false).fill(\"rgba(0,0,0,.4)\").rect( [[0,0], [w, 20]] );\r\n this.fill(\"#fff\").text( [10,14], txt ); \r\n return this;\r\n }\r\n \r\n }\n\n\n// WEBPACK FOOTER //\n// ./~/tslint-loader??ref--0!./src/Canvas.ts","// Source code licensed under Apache License 2.0. \n// Copyright © 2017 William Ngan. (https://github.com/williamngan/pts)\n\n\nimport {Pt, Group, PtLike} from \"./Pt\";\nimport {Util} from \"./Util\";\nimport {Num, Geom} from \"./Num\";\n\nexport type ColorType = \"rgb\"|\"hsl\"|\"hsb\"|\"lab\"|\"lch\"|\"luv\"|\"xyz\";\n\n\n/**\n * Color is a subclass of Pt. You can think of a color as a point in a color space. The Color class provides support for many color spaces.\n */\nexport class Color extends Pt {\n\n // XYZ property for Standard Observer 2deg, Daylight/sRGB illuminant D65\n private static D65:PtLike = new Pt(95.047, 100, 108.883, 1);\n\n protected _mode:ColorType = \"rgb\";\n private _isNorm:boolean = false;\n\n /**\n * Value range for each color space\n */\n static ranges:{ [name: string]: Group } = {\n rgb: new Group( new Pt(0,255), new Pt(0,255), new Pt(0,255) ),\n hsl: new Group( new Pt(0,360), new Pt(0,1), new Pt(0,1) ),\n hsb: new Group( new Pt(0,360), new Pt(0,1), new Pt(0,1) ),\n lab: new Group( new Pt(0,100), new Pt(-128,127), new Pt(-128, 127) ),\n lch: new Group( new Pt(0,100), new Pt(0,100), new Pt(0,360) ),\n luv: new Group( new Pt(0,100), new Pt(-134,220), new Pt(-140,122) ),\n xyz: new Group( new Pt(0,100), new Pt(0,100), new Pt(0,100) )\n };\n\n /**\n * Create a Color. Same as creating a Pt.\n * @param args Pt-like parameters which can be a list of numeric parameters, an array of numbers, or an object with {x,y,z,w} properties\n */\n constructor( ...args ) {\n super( ...args );\n }\n\n\n /**\n * Create a Color object with defaults to 4 dimensions\n * @param args Pt-like parameters which can be a list of numeric parameters, an array of numbers, or an object with {x,y,z,w} properties\n */\n static from( ...args ):Color {\n let p = [1,1,1,1];\n let c = Util.getArgs( args );\n for (let i=0, len=p.length; i<len; i++) {\n if (i < c.length) p[i] = c[i];\n }\n return new Color( p );\n }\n\n\n /**\n * Convert a rgb hex string like #FF0000 or #F00 to a Color object\n * @param hex a hex string, with optional '#' prefix\n */\n static fromHex( hex:string ):Color {\n\n if (hex[0] == \"#\") hex = hex.substr(1); // remove '#' if needed\n if (hex.length <= 3) {\n let fn = (i) => hex[i]||\"F\";\n hex = `${fn(0)}${fn(0)}${fn(1)}${fn(1)}${fn(2)}${fn(2)}`;\n }\n\n let alpha = 1;\n if (hex.length === 8) {\n alpha = hex.substr(6) && 0xFF / 255;\n hex = hex.substring( 0, 6 );\n }\n\n let hexVal = parseInt( hex, 16 );\n return new Color( hexVal >> 16, hexVal >> 8 & 0xFF, hexVal & 0xFF, alpha );\n\n }\n\n\n /**\n * Create RGB Color\n * @param args Pt-like parameters which can be a list of numeric parameters, an array of numbers, or an object with {x,y,z,w} properties.\n */\n static rgb( ...args ):Color { return Color.from( ...args ).toMode( \"rgb\" ); }\n \n /**\n * Create HSL Color\n * @param args Pt-like parameters which can be a list of numeric parameters, an array of numbers, or an object with {x,y,z,w} properties.\n */\n static hsl( ...args ):Color { return Color.from( ...args ).toMode( \"hsl\" ); }\n\n /**\n * Create HSB Color\n * @param args Pt-like parameters which can be a list of numeric parameters, an array of numbers, or an object with {x,y,z,w} properties.\n */\n static hsb( ...args ):Color { return Color.from( ...args ).toMode( \"hsb\" ); }\n \n /**\n * Create LAB Color\n * @param args Pt-like parameters which can be a list of numeric parameters, an array of numbers, or an object with {x,y,z,w} properties.\n */\n static lab( ...args ):Color { return Color.from( ...args ).toMode( \"lab\" ); }\n\n /**\n * Create LCH Color\n * @param args Pt-like parameters which can be a list of numeric parameters, an array of numbers, or an object with {x,y,z,w} properties.\n */\n static lch( ...args ):Color { return Color.from( ...args ).toMode( \"lch\" ); }\n\n /**\n * Create LUV Color\n * @param args Pt-like parameters which can be a list of numeric parameters, an array of numbers, or an object with {x,y,z,w} properties.\n */\n static luv( ...args ):Color { return Color.from( ...args ).toMode( \"luv\" ); }\n\n /**\n * Create XYZ Color\n * @param args Pt-like parameters which can be a list of numeric parameters, an array of numbers, or an object with {x,y,z,w} properties.\n */\n static xyz( ...args ):Color { return Color.from( ...args ).toMode( \"xyz\" ); }\n\n\n /**\n * Get a Color object whose values are the maximum of its mode\n * @param mode a mode string such as \"rgb\" or \"lab\"\n * @example Color.maxValue(\"rgb\") will return a rgb Color object with values (255,255,255)\n */\n static maxValues( mode:string ):Pt { return Color.ranges[mode].zipSlice(1).$take([0,1,2]); }\n\n\n /**\n * Get a hex string such as \"#FF0000\". Same as `toString(\"hex\")`\n */\n public get hex():string { return this.toString(\"hex\"); }\n \n /**\n * Get a rgb string such as \"rgb(255,0,0)\". Same as `toString(\"rgb\")`\n */\n public get rgb():string { return this.toString(\"rgb\"); }\n\n /**\n * Get a rgba string such as \"rgb(255,0,0,0.5)\". Same as `toString(\"rgba\")`\n */\n public get rgba():string { return this.toString(\"rgba\"); }\n \n\n /**\n * Clone this Color\n */\n clone():Color {\n let c = new Color( this );\n c.toMode( this._mode );\n return c;\n }\n\n /**\n * Convert this color from current color space to another color space\n * @param mode a ColorType string: \"rgb\" \"hsl\" \"hsb\" \"lab\" \"lch\" \"luv\" \"xyz\";\n * @param convert if `true`, convert this Color to the new color space specified in `mode`. Default is `false`, which only sets the color mode without converting color values.\n */\n toMode( mode:ColorType, convert:boolean=false ):this { \n \n if (convert) {\n let fname = this._mode.toUpperCase()+\"to\"+mode.toUpperCase(); \n if (Color[fname]) {\n this.to( Color[fname]( this, this._isNorm, this._isNorm ) );\n } else {\n throw new Error( \"Cannot convert color with \"+fname);\n }\n }\n\n this._mode = mode; \n return this;\n }\n\n\n /**\n * Get this Color's mode\n */\n get mode():ColorType { return this._mode; }\n\n\n // rgb\n get r():number { return this[0]; }\n set r( n:number ) { this[0] = n; }\n\n get g():number { return this[1]; }\n set g( n:number ) { this[1] = n; }\n\n get b():number { return this[1]; }\n set b( n:number ) { this[2] = n; }\n\n // hsl, hsb\n get h():number { return (this._mode == \"lch\") ? this[2] : this[0]; }\n set h( n:number ) { \n let i = (this._mode == \"lch\") ? 2 : 0; \n this[i] = n;\n }\n\n get s():number { return this[1]; }\n set s( n:number ) { this[1] = n; }\n\n get l():number { return (this._mode == \"hsl\") ? this[2] : this[0]; }\n set l( n:number ) { \n let i = (this._mode == \"hsl\") ? 2 : 0; \n this[i] = n;\n }\n\n // lab, lch, luv\n get a():number { return this[1]; }\n set a( n:number ) { this[1] = n; }\n\n get c():number { return this[1]; }\n set c( n:number ) { this[1] = n; }\n\n get u():number { return this[1]; }\n set u( n:number ) { this[1] = n; }\n\n get v():number { return this[1]; }\n set v( n:number ) { this[2] = n; }\n\n\n /**\n * Get alpha value\n */\n get alpha():number { return (this.length > 3) ? this[3] : 1; }\n\n\n /**\n * Normalize the color values to between 0 to 1, or revert it back to the min/max values in current color mode\n * @param toNorm a boolean value specifying whether to normalize (`true`) or revert (`false`)\n */\n normalize( toNorm:boolean=true ):Color {\n if (this._isNorm == toNorm) return this;\n\n let ranges = Color.ranges[ this._mode ];\n \n for (let i=0; i<3; i++) {\n this[i] = (!toNorm) \n ? Num.mapToRange( this[i], 0, 1, ranges[i][0], ranges[i][1] ) \n : Num.mapToRange( this[i], ranges[i][0], ranges[i][1], 0, 1 );\n }\n \n this._isNorm = toNorm;\n\n return this;\n }\n\n\n /**\n * Like `normalize()` but returns as a new Color\n * @param toNorm a boolean value specifying whether to normalize (`true`) or revert (`false`)\n * @returns new Color\n */\n $normalize( toNorm:boolean=true ):Color { return this.clone().normalize( toNorm ); }\n\n\n /**\n * Convert this Color to a string. It can be used to get a hex or rgb string for use in rendering\n * @param format \"hex\", \"rgb\", \"rgba\", or \"mode\" which means using current color mode label. Default is \"mode\".\n */\n toString( format:(\"hex\"|\"rgb\"|\"rgba\"|\"mode\")=\"mode\" ):string {\n if (format == \"hex\") {\n let _hex = (n:number) => {\n let s = Math.floor(n).toString(16);\n return (s.length < 2) ? '0'+s : s;\n };\n return `#${_hex(this[0])}${_hex(this[1])}${_hex(this[2])}`;\n\n } else if (format == \"rgba\") {\n return `rgba(${Math.floor(this[0])},${Math.floor(this[1])},${Math.floor(this[2])},${this.alpha}`;\n\n } else if (format == \"rgb\") { \n return `rgb(${Math.floor(this[0])},${Math.floor(this[1])},${Math.floor(this[2])}`;\n\n } else {\n return `${this._mode}(${this[0]},${this[1]},${this[2]},${this.alpha})`;\n }\n }\n\n\n /**\n * Convert RGB to HSL\n * @param rgb a RGB Color\n * @param normalizedInput a boolean specifying whether input color is normalized. Default is not normalized: `false`.\n * @param normalizedOutput a boolean specifying whether output color shoud be normalized. Default is not normalized: `false`.\n * @returns a new HSL Color\n */\n static RGBtoHSL( rgb:Color, normalizedInput:boolean=false, normalizedOutput:boolean=false):Color {\n let [r,g,b] = (!normalizedInput) ? rgb.$normalize() : rgb;\n\n let max = Math.max( r, g, b );\n let min = Math.min( r, g, b );\n let h = (max+min)/2;\n let s = h;\n let l = h;\n\n if (max == min) {\n h = 0;\n s = 0; // achromatic\n } else {\n let d = max - min;\n s = (l > 0.5) ? d / (2 - max - min) : d / (max + min);\n\n h = 0;\n if (max === r) {\n h = (g - b) / d + ( (g < b) ? 6 : 0 );\n } else if (max === g) {\n h = (b - r) / d + 2;\n } else if (max === b) {\n h = (r - g) / d + 4;\n }\n }\n\n return Color.hsl( ((normalizedOutput) ? h/60 : h*60), s, l, rgb.alpha );\n }\n\n /**\n * Convert HSL to RGB\n * @param hsl a HSL Color\n * @param normalizedInput a boolean specifying whether input color is normalized. Default is not normalized: `false`.\n * @param normalizedOutput a boolean specifying whether output color shoud be normalized. Default is not normalized: `false`.\n * @returns a new RGB Color\n */\n static HSLtoRGB( hsl:Color, normalizedInput:boolean=false, normalizedOutput:boolean=false):Color {\n let [h, s, l] = hsl;\n if (!normalizedInput) h = h/360;\n \n if (s == 0) return Color.rgb( l*255, l*255, l*255, hsl.alpha );\n\n let q = (l <= 0.5) ? l * (1 + s) : l + s - (l * s);\n let p = 2 * l - q;\n\n let convert = (t) => {\n t = (t < 0) ? t + 1 : (t > 1) ? t - 1 : t;\n if (t * 6 < 1) {\n return p + (q - p) * t * 6;\n } else if (t * 2 < 1) {\n return q;\n } else if (t * 3 < 2) {\n return p + (q - p) * ((2 / 3) - t) * 6;\n } else {\n return p;\n }\n };\n\n let sc = (normalizedOutput) ? 1 : 255; \n \n return Color.rgb( \n sc * convert( ( h + 1/3 ) ),\n sc * convert( h ),\n sc * convert( ( h - 1/3 ) ),\n hsl.alpha\n );\n\n }\n \n /**\n * Convert RGB to HSB\n * @param rgb a RGB Color\n * @param normalizedInput a boolean specifying whether input color is normalized. Default is not normalized: `false`.\n * @param normalizedOutput a boolean specifying whether output color shoud be normalized. Default is not normalized: `false`.\n * @returns a new HSB Color\n */\n static RGBtoHSB( rgb:Color, normalizedInput:boolean=false, normalizedOutput:boolean=false):Color {\n let [r,g,b] = (!normalizedInput) ? rgb.$normalize() : rgb;\n\n let max = Math.max( r, g, b );\n let min = Math.min( r, g, b );\n let d = max - min;\n let h = 0;\n let s = (max === 0) ? 0 : d/max;\n let v = max;\n\n if (max != min) {\n if (max === r) {\n h = (g - b) / d + ( (g < b) ? 6 : 0 );\n } else if (max === g) {\n h = (b - r) / d + 2;\n } else if (max === b) {\n h = (r - g) / d + 4;\n }\n }\n\n return Color.hsb( ((normalizedOutput) ? h/60 : h*60), s, v, rgb.alpha );\n }\n\n\n /**\n * Convert HSB to RGB\n * @param hsb a HSB Color\n * @param normalizedInput a boolean specifying whether input color is normalized. Default is not normalized: `false`.\n * @param normalizedOutput a boolean specifying whether output color shoud be normalized. Default is not normalized: `false`.\n * @returns a new RGB Color\n */\n static HSBtoRGB( hsb:Color, normalizedInput:boolean=false, normalizedOutput:boolean=false):Color {\n let [h, s, v] = hsb;\n if (!normalizedInput) h = h/360;\n\n let i = Math.floor( h * 6 );\n let f = h * 6 - i;\n let p = v * (1 - s);\n let q = v * (1 - f * s);\n let t = v * (1 - (1 - f) * s);\n \n let pick = [\n [v, t, p], [q, v, p], [p, v, t],\n [p, q, v], [t, p, v], [v, p, q] \n ];\n let c = pick[ i%6 ];\n \n let sc = (normalizedOutput) ? 1 : 255; \n\n return Color.rgb( \n sc * c[0],\n sc * c[1],\n sc * c[2],\n hsb.alpha\n );\n }\n\n /**\n * Convert RGB to LAB\n * @param rgb a RGB Color\n * @param normalizedInput a boolean specifying whether input color is normalized. Default is not normalized: `false`.\n * @param normalizedOutput a boolean specifying whether output color shoud be normalized. Default is not normalized: `false`.\n * @returns a new LAB Color\n */\n static RGBtoLAB( rgb:Color, normalizedInput:boolean=false, normalizedOutput:boolean=false):Color {\n let c = (normalizedInput) ? rgb.$normalize( false ) : rgb;\n return Color.XYZtoLAB( Color.RGBtoXYZ(c), false, normalizedOutput );\n }\n\n\n /**\n * Convert LAB to RGB\n * @param lab a LAB Color\n * @param normalizedInput a boolean specifying whether input color is normalized. Default is not normalized: `false`.\n * @param normalizedOutput a boolean specifying whether output color shoud be normalized. Default is not normalized: `false`.\n * @returns a new RGB Color\n */\n static LABtoRGB( lab:Color, normalizedInput:boolean=false, normalizedOutput:boolean=false):Color {\n let c = (normalizedInput) ? lab.$normalize( false ) : lab;\n return Color.XYZtoRGB( Color.LABtoXYZ( c ), false, normalizedOutput );\n }\n\n\n /**\n * Convert RGB to LCH\n * @param rgb a RGB Color\n * @param normalizedInput a boolean specifying whether input color is normalized. Default is not normalized: `false`.\n * @param normalizedOutput a boolean specifying whether output color shoud be normalized. Default is not normalized: `false`.\n * @returns a new LCH Color\n */\n static RGBtoLCH( rgb:Color, normalizedInput:boolean=false, normalizedOutput:boolean=false):Color {\n let c = (normalizedInput) ? rgb.$normalize( false ) : rgb;\n return Color.LABtoLCH( Color.RGBtoLAB(c), false, normalizedOutput );\n }\n \n\n /**\n * Convert LCH to RGB\n * @param lch a LCH Color\n * @param normalizedInput a boolean specifying whether input color is normalized. Default is not normalized: `false`.\n * @param normalizedOutput a boolean specifying whether output color shoud be normalized. Default is not normalized: `false`.\n * @returns a new RGB Color\n */\n static LCHtoRGB( lch:Color, normalizedInput:boolean=false, normalizedOutput:boolean=false):Color {\n let c = (normalizedInput) ? lch.$normalize( false ) : lch;\n return Color.LABtoRGB( Color.LCHtoLAB(c), false, normalizedOutput );\n }\n\n\n /**\n * Convert RGB to LUV\n * @param rgb a RGB Color\n * @param normalizedInput a boolean specifying whether input color is normalized. Default is not normalized: `false`.\n * @param normalizedOutput a boolean specifying whether output color shoud be normalized. Default is not normalized: `false`.\n * @returns a new LUV Color\n */\n static RGBtoLUV( rgb:Color, normalizedInput:boolean=false, normalizedOutput:boolean=false):Color {\n let c = (normalizedInput) ? rgb.$normalize( false ) : rgb;\n return Color.XYZtoLUV( Color.RGBtoXYZ(c), false, normalizedOutput );\n }\n\n\n /**\n * Convert LUV to RGB\n * @param rgb a RGB Color\n * @param normalizedInput a boolean specifying whether input color is normalized. Default is not normalized: `false`.\n * @param normalizedOutput a boolean specifying whether output color shoud be normalized. Default is not normalized: `false`.\n * @returns a new RGB Color\n */\n static LUVtoRGB( luv:Color, normalizedInput:boolean=false, normalizedOutput:boolean=false):Color {\n let c = (normalizedInput) ? luv.$normalize( false ) : luv;\n return Color.XYZtoRGB( Color.LUVtoXYZ( c ), false, normalizedOutput );\n }\n\n\n /**\n * Convert RGB to XYZ\n * @param rgb a RGB Color\n * @param normalizedInput a boolean specifying whether input color is normalized. Default is not normalized: `false`.\n * @param normalizedOutput a boolean specifying whether output color shoud be normalized. Default is not normalized: `false`.\n * @returns a new XYZ Color\n */\n static RGBtoXYZ( rgb:Color, normalizedInput:boolean=false, normalizedOutput:boolean=false):Color {\n let c = (!normalizedInput) ? rgb.$normalize() : rgb.clone();\n\n for (let i=0; i<3; i++) {\n c[i] = ( c[i] > 0.04045 ) ? Math.pow( (c[i]+0.055)/1.055, 2.4 ) : c[i]/12.92;\n if (!normalizedOutput) c[i] = c[i] * 100;\n }\n\n let cc = Color.xyz(\n c[0] * 0.4124564 + c[1] * 0.3575761 + c[2] * 0.1804375,\n c[0] * 0.2126729 + c[1] * 0.7151522 + c[2] * 0.0721750,\n c[0] * 0.0193339 + c[1] * 0.1191920 + c[2] * 0.9503041,\n rgb.alpha\n );\n\n return (normalizedOutput) ? cc.normalize() : cc;\n }\n\n\n /**\n * Convert XYZ to RGB\n * @param xyz a XYZ Color\n * @param normalizedInput a boolean specifying whether input color is normalized. Default is not normalized: `false`.\n * @param normalizedOutput a boolean specifying whether output color shoud be normalized. Default is not normalized: `false`.\n * @returns a new RGB Color\n */\n static XYZtoRGB( xyz:Color, normalizedInput:boolean=false, normalizedOutput:boolean=false):Color {\n let [x,y,z] = (!normalizedInput) ? xyz.$normalize() : xyz;\n\n let rgb = [\n x * 3.2404542 + y * -1.5371385 + z * -0.4985314,\n x * -0.9692660 + y * 1.8760108 + z * 0.0415560,\n x * 0.0556434 + y * -0.2040259 + z * 1.0572252\n ];\n\n // convert xyz to rgb. Note that not all colors are visible in rgb, so here we bound rgb between 0 to 1\n for (let i=0; i<3; i++) {\n rgb[i] = (rgb[i]<0) ? 0 : ( rgb[i] > 0.0031308 ) ? (1.055 * Math.pow(rgb[i], 1/2.4) - 0.055) : (12.92 * rgb[i]);\n rgb[i] = Math.max( 0, Math.min( 1, rgb[i] ));\n if (!normalizedOutput) rgb[i] = Math.round( rgb[i] * 255 );\n }\n\n let cc = Color.rgb( rgb[0], rgb[1], rgb[2], xyz.alpha );\n return (normalizedOutput) ? cc.normalize() : cc;\n }\n\n\n /**\n * Convert XYZ to LAB\n * @param xyz a XYZ Color\n * @param normalizedInput a boolean specifying whether input color is normalized. Default is not normalized: `false`.\n * @param normalizedOutput a boolean specifying whether output color shoud be normalized. Default is not normalized: `false`.\n * @returns a new LAB Color\n */\n static XYZtoLAB( xyz:Color, normalizedInput:boolean=false, normalizedOutput:boolean=false):Color {\n let c = (normalizedInput) ? xyz.$normalize(false) : xyz.clone();\n\n // adjust for D65 \n c.divide( Color.D65 );\n\n let fn = (n)=> ( n > 0.008856 ) ? Math.pow(n, 1/3) : (7.787 * n) + 16/116;\n let cy = fn( c[1] );\n\n let cc = Color.lab(\n (116 * cy) - 16,\n 500 * (fn(c[0]) - cy),\n 200 * (cy - fn(c[2])),\n xyz.alpha\n );\n return (normalizedOutput) ? cc.normalize() : cc;\n }\n\n /**\n * Convert LAB to XYZ\n * @param lab a LAB Color\n * @param normalizedInput a boolean specifying whether input color is normalized. Default is not normalized: `false`.\n * @param normalizedOutput a boolean specifying whether output color shoud be normalized. Default is not normalized: `false`.\n * @returns a new XYZ Color\n */\n static LABtoXYZ( lab:Color, normalizedInput:boolean=false, normalizedOutput:boolean=false):Color {\n let c = (normalizedInput) ? lab.$normalize(false) : lab;\n let y = (c[0] + 16) / 116;\n let x = (c[1] / 500) + y;\n let z = y - c[2]/200;\n\n let fn = (n) => {\n let nnn = n*n*n;\n return ( nnn > 0.008856 ) ? nnn : ( n - 16 / 116 ) / 7.787;\n };\n\n let d = Color.D65;\n\n // adjusted\n let cc = Color.xyz(\n // Math.max(0, Math.min( 100, d[0] * fn(x) )),\n // Math.max(0, Math.min( 100, d[1] * fn(y) )),\n // Math.max(0, Math.min( 100, d[2] * fn(z) )),\n Math.max( 0, d[0] * fn(x) ),\n Math.max( 0, d[1] * fn(y) ),\n Math.max( 0, d[2] * fn(z) ),\n lab.alpha\n );\n\n return (normalizedOutput) ? cc.normalize() : cc;\n }\n\n\n /**\n * Convert XYZ to LUV\n * @param xyz a XYZ Color\n * @param normalizedInput a boolean specifying whether input color is normalized. Default is not normalized: `false`.\n * @param normalizedOutput a boolean specifying whether output color shoud be normalized. Default is not normalized: `false`.\n * @returns a new LUV Color\n */\n static XYZtoLUV( xyz:Color, normalizedInput:boolean=false, normalizedOutput:boolean=false):Color {\n let [x,y,z] = (normalizedInput) ? xyz.$normalize(false) : xyz;\n let u = (4 * x) / (x + (15 * y) + (3 * z));\n let v = (9 * y) / (x + (15 * y) + (3 * z));\n\n y = y / 100;\n y = ( y > 0.008856 ) ? Math.pow( y, 1/3 ) : ( 7.787 * y + 16 / 116 );\n\n let refU = (4 * Color.D65[0]) / (Color.D65[0] + (15 * Color.D65[1]) + ( 3 * Color.D65[2]));\n let refV = (9 * Color.D65[1]) / (Color.D65[0] + (15 * Color.D65[1]) + ( 3 * Color.D65[2]));\n\n let L = (116 * y) - 16;\n return Color.luv(\n L, 13*L*(u - refU), 13*L*(v - refV), xyz.alpha\n );\n }\n\n\n /**\n * Convert LUV to XYZ\n * @param luv a LUV Color\n * @param normalizedInput a boolean specifying whether input color is normalized. Default is not normalized: `false`.\n * @param normalizedOutput a boolean specifying whether output color shoud be normalized. Default is not normalized: `false`.\n * @returns a new XYZ Color\n */\n static LUVtoXYZ( luv:Color, normalizedInput:boolean=false, normalizedOutput:boolean=false):Color {\n let [l,u,v] = (normalizedInput) ? luv.$normalize(false) : luv;\n let y = ( l + 16 ) / 116;\n let cubeY = y*y*y;\n y = (cubeY > 0.008856) ? cubeY : (y - 16/116) / 7.787;\n\n let refU = (4 * Color.D65[0]) / ( Color.D65[0] + (15 * Color.D65[1]) + (3 * Color.D65[2]) );\n let refV = (9 * Color.D65[1]) / ( Color.D65[0] + (15 * Color.D65[1]) + (3 * Color.D65[2]) );\n\n u = u / (13 * l) + refU;\n v = v / (13 * l) + refV;\n\n y = y * 100;\n let x = -1*(9 * y * u)/((u-4)*v - u*v);\n let z = (9 * y - (15 * v * y) - (v * x))/(3 * v);\n\n return Color.xyz( x, y, z, luv.alpha );\n }\n\n\n /**\n * Convert LAB to LCH\n * @param lab a LAB Color\n * @param normalizedInput a boolean specifying whether input color is normalized. Default is not normalized: `false`.\n * @param normalizedOutput a boolean specifying whether output color shoud be normalized. Default is not normalized: `false`.\n * @returns a new LCH Color\n */\n static LABtoLCH( lab:Color, normalizedInput:boolean=false, normalizedOutput:boolean=false):Color {\n let c = (normalizedInput) ? lab.$normalize(false) : lab;\n let h = Geom.toDegree( Geom.boundRadian( Math.atan2( c[2], c[1] ) ) ); // 0 to 360 degrees\n return Color.lch(\n c[0], Math.sqrt( c[1]*c[1]+c[2]*c[2] ), h, lab.alpha\n );\n }\n\n\n /**\n * Convert LCH to LAB\n * @param lch a LCH Color\n * @param normalizedInput a boolean specifying whether input color is normalized. Default is not normalized: `false`.\n * @param normalizedOutput a boolean specifying whether output color shoud be normalized. Default is not normalized: `false`.\n * @returns a new LAB Color\n */\n static LCHtoLAB( lch:Color, normalizedInput:boolean=false, normalizedOutput:boolean=false):Color {\n let c = (normalizedInput) ? lch.$normalize(false) : lch;\n let rad = Geom.toRadian( c[2] );\n return Color.lab(\n c[0], Math.cos( rad ) * c[1], Math.sin( rad ) * c[1], lch.alpha\n );\n }\n\n\n}\n\n\n// WEBPACK FOOTER //\n// ./~/tslint-loader??ref--0!./src/Color.ts","// Source code licensed under Apache License 2.0. \r\n// Copyright © 2017 William Ngan. (https://github.com/williamngan/pts)\r\n\r\n\r\nimport {Pt, Group, PtLike, GroupLike} from \"./Pt\";\r\nimport {Line, Triangle} from \"./Op\";\r\nimport {Bound} from \"./Bound\";\r\nimport {Const} from \"./Util\";\r\nimport {Num, Geom} from \"./Num\";\r\nimport {Vec} from \"./LinearAlgebra\";\r\n\r\n\r\n/**\r\n * The `Create` class provides various convenient functions to create structures or shapes. \r\n */\r\nexport class Create {\r\n \r\n\r\n /**\r\n * Create a set of random points inside a bounday\r\n * @param bound the rectangular boundary\r\n * @param count number of random points to create\r\n * @param dimensions number of dimensions in each point\r\n */\r\n static distributeRandom( bound:Bound, count:number, dimensions:number=2 ):Group {\r\n let pts = new Group();\r\n for (let i=0; i<count; i++) {\r\n let p = [ bound.x + Math.random()*bound.width ];\r\n if (dimensions>1) p.push( bound.y + Math.random()*bound.height, );\r\n if (dimensions>2) p.push( bound.z + Math.random()*bound.depth );\r\n pts.push( new Pt( p ) );\r\n }\r\n return pts;\r\n }\r\n\r\n\r\n /**\r\n * Create a set of points that distribute evenly on a line\r\n * @param line a Group representing a line\r\n * @param count number of points to create\r\n */\r\n static distributeLinear( line:GroupLike, count:number ):Group {\r\n let ln = Line.subpoints( line, count-2 );\r\n ln.unshift( line[0] );\r\n ln.push( line[line.length-1] );\r\n return ln;\r\n }\r\n \r\n\r\n /**\r\n * Create an evenly distributed set of points (like a grid of points) inside a boundary.\r\n * @param bound the rectangular boundary\r\n * @param columns number of columns\r\n * @param rows number of rows\r\n * @param orientation a Pt or number array to specify where the point should be inside a cell. Default is [0.5, 0.5] which places the point in the middle.\r\n * @returns a Group of Pts\r\n */\r\n static gridPts( bound:Bound, columns:number, rows:number, orientation:PtLike=[0.5, 0.5] ):Group {\r\n if (columns === 0 || rows === 0) throw new Error(\"grid columns and rows cannot be 0\");\r\n let unit = bound.size.$subtract(1).$divide( columns, rows );\r\n let offset = unit.$multiply( orientation );\r\n let g = new Group();\r\n for (let r=0; r<rows; r++) {\r\n for (let c=0; c<columns; c++) {\r\n g.push( bound.topLeft.$add( unit.$multiply(c, r) ).add( offset ) );\r\n }\r\n }\r\n return g;\r\n \r\n }\r\n\r\n /**\r\n * Create a grid inside a boundary\r\n * @param bound the rectangular boundary\r\n * @param columns number of columns\r\n * @param rows number of rows\r\n * @returns an array of Groups, where each group represents a rectangular cell\r\n */\r\n static gridCells( bound:Bound, columns:number, rows:number ):Group[] {\r\n if (columns === 0 || rows === 0) throw new Error(\"grid columns and rows cannot be 0\");\r\n let unit = bound.size.$subtract(1).divide( columns, rows ); // subtract 1 to fill whole border of rectangles\r\n let g = [];\r\n for (let r=0; r<rows; r++) {\r\n for (let c=0; c<columns; c++) {\r\n g.push( new Group(\r\n bound.topLeft.$add( unit.$multiply(c, r) ),\r\n bound.topLeft.$add( unit.$multiply(c, r).add( unit ) )\r\n ));\r\n }\r\n }\r\n return g;\r\n }\r\n\r\n\r\n /**\r\n * Create a set of Pts around a circular path\r\n * @param center circle center\r\n * @param radius circle radius\r\n * @param count number of Pts to create\r\n */\r\n static radialPts( center:PtLike, radius:number, count:number ):Group {\r\n let g = new Group();\r\n let a = Const.two_pi/count;\r\n for (let i=0; i<count; i++) {\r\n g.push( new Pt(center).toAngle( a*i - Const.half_pi, radius, true ) );\r\n }\r\n return g;\r\n }\r\n\r\n\r\n /**\r\n * Given a group of Pts, return a new group of `Noise` Pts.\r\n * @param pts a Group or an array of Pts\r\n * @param dx small increment value in x dimension\r\n * @param dy small increment value in y dimension\r\n * @param rows Optional row count to generate 2D noise\r\n * @param columns Optional column count to generate 2D noise\r\n */\r\n static noisePts( pts:GroupLike, dx=0.01, dy=0.01, rows=0, columns=0 ):Group {\r\n let seed = Math.random();\r\n let g = new Group();\r\n for (let i=0, len=pts.length; i<len; i++) {\r\n let np = new Noise( pts[i] );\r\n let r = (rows && rows > 0) ? Math.floor(i/rows) : i;\r\n let c = (columns && columns > 0) ? i%columns : i;\r\n np.initNoise( dx*c, dy*r );\r\n np.seed( seed );\r\n g.push( np );\r\n }\r\n return g;\r\n }\r\n\r\n\r\n /**\r\n * Create a Delaunay Group. Use the `.delaunay()` and `.voronoi()` functions in the returned group to generate tessellations.\r\n * @param pts a Group or an array of Pts\r\n * @returns an instance of the Delaunay class\r\n */\r\n static delaunay( pts:GroupLike ):Delaunay {\r\n return Delaunay.from( pts ) as Delaunay;\r\n }\r\n \r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Perlin noise gradient indices\r\n */\r\nconst grad3 = [\r\n [1,1, 0], [-1,1, 0], [1,-1,0], [-1,-1,0],\r\n [1,0, 1], [-1, 0, 1], [1,0,-1], [-1,0,-1],\r\n [0, 1,1], [ 0,-1,1], [0,1,-1], [ 0,-1,-1]\r\n];\r\n\r\n\r\n/**\r\n * Perlin noise permutation table\r\n */ \r\nconst permTable = [151,160,137,91,90,15,\r\n 131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,\r\n 190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,\r\n 88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139,48,27,166,\r\n 77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,\r\n 102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196,\r\n 135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,\r\n 5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,\r\n 223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,172,9,\r\n 129,22,39,253,9,98,108,110,79,113,224,232,178,185,112,104,218,246,97,228,\r\n 251,34,242,193,238,210,144,12,191,179,162,241, 81,51,145,235,249,14,239,107,\r\n 49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,\r\n 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180\r\n];\r\n\r\n\r\n/**\r\n * A class to generate Perlin noise. Currently it implements a basic 2D noise. More to follow.\r\n * Based on https://gist.github.com/banksean/304522\r\n */\r\nexport class Noise extends Pt {\r\n\r\n protected perm:number[] = [];\r\n private _n:Pt = new Pt(0.01, 0.01);\r\n\r\n /**\r\n * Create a Noise Pt that's capable of generating noise\r\n * @param args a list of numeric parameters, an array of numbers, or an object with {x,y,z,w} properties\r\n */\r\n constructor(...args) {\r\n super( ...args );\r\n\r\n // For easier index wrapping, double the permutation table length\r\n this.perm = permTable.concat( permTable );\r\n }\r\n\r\n\r\n /**\r\n * Set the initial noise values\r\n * @param args a list of numeric parameters, an array of numbers, or an object with {x,y,z,w} properties\r\n * @example `noise.initNoise( 0.01, 0.1 )`\r\n */\r\n initNoise( ...args ) {\r\n this._n = new Pt( ...args );\r\n }\r\n\r\n\r\n /**\r\n * Add a small increment to the noise values\r\n * @param x step in x dimension\r\n * @param y step in y dimension\r\n */\r\n step( x=0, y=0 ) {\r\n this._n.add( x, y );\r\n }\r\n\r\n /**\r\n * Specify a seed for this Noise\r\n * @param s seed value\r\n */\r\n seed( s ) {\r\n if (s > 0 && s < 1) s *= 65536;\r\n \r\n s = Math.floor(s);\r\n if (s < 256)s |= s << 8;\r\n\r\n for (let i=0; i<255; i++) {\r\n let v = (i & 1) ? permTable[i] ^ (s & 255) : permTable[i] ^ ((s>>8) & 255);\r\n this.perm[i] = this.perm[i + 256] = v;\r\n }\r\n }\r\n \r\n \r\n /**\r\n * Generate a 2D Perlin noise value\r\n */\r\n noise2D() {\r\n \r\n let i = Math.floor( this._n[0] ) % 255;\r\n let j = Math.floor( this._n[1] ) % 255;\r\n let x = (this._n[0] % 255) - i;\r\n let y = (this._n[1] % 255) - j;\r\n\r\n let n00 = Vec.dot(grad3[ (i+this.perm[j]) % 12 ], [x, y, 0] );\r\n let n01 = Vec.dot(grad3[ (i+this.perm[j+1]) % 12 ], [x, y-1, 0] );\r\n let n10 = Vec.dot(grad3[ (i+1+this.perm[j]) % 12 ], [x-1, y, 0] );\r\n let n11 = Vec.dot(grad3[ (i+1+this.perm[j+1]) % 12 ], [x-1, y-1, 0] );\r\n\r\n let _fade = (f) => f*f*f*(f*(f*6-15)+10);\r\n let tx = _fade(x);\r\n return Num.lerp( Num.lerp(n00, n10, tx), Num.lerp(n01, n11, tx), _fade(y) );\r\n }\r\n \r\n\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * A DelaunayShape is an object with 3 indices, a Triangle Group and a Circle Group.\r\n */\r\nexport type DelaunayShape = {i:number, j:number, k:number, triangle:GroupLike, circle:Group };\r\nexport type DelaunayMesh = {[key:string]:DelaunayShape}[];\r\n\r\n\r\n/**\r\n * Delaunay is a Group of Pts that can generate Delaunay and Voronoi tessellations. The triangulation algorithm is ported from [Pt](https://github.com/williamngan/pt)\r\n * This implementation is based on [Paul Bourke's algorithm](http://paulbourke.net/papers/triangulate/)\r\n * with reference to its [javascript implementation by ironwallaby](https://github.com/ironwallaby/delaunay)\r\n */\r\nexport class Delaunay extends Group {\r\n\r\n private _mesh:DelaunayMesh = [];\r\n\r\n /**\r\n * Generate Delaunay triangles. This function also caches the mesh that is used to generate Voronoi tessellation in `voronoi()`.\r\n * @param triangleOnly if true, returns an array of triangles in Groups, otherwise return the whole DelaunayShape\r\n * @returns an array of Groups or an array of DelaunayShapes `{i, j, k, triangle, circle}` which records the indices of the vertices, and the calculated triangles and circumcircles\r\n */\r\n delaunay( triangleOnly:boolean=true ):GroupLike[]|DelaunayShape[] {\r\n if (this.length < 3) return [];\r\n\r\n this._mesh = [];\r\n\r\n let n = this.length;\r\n\r\n // sort the points and store the sorted index\r\n let indices:number[] = [];\r\n for (let i=0; i<n; i++) indices[i] = i;\r\n indices.sort( (i,j) => this[j][0] - this[i][0] );\r\n\r\n // duplicate the points list and add super triangle's points to it\r\n let pts = this.slice();\r\n let st = this._superTriangle();\r\n pts = pts.concat( st );\r\n\r\n // arrays to store edge buffer and opened triangles\r\n let opened:DelaunayShape[] = [ this._circum( n, n+1, n+2, st) ];\r\n let closed:DelaunayShape[] = [];\r\n let tris:GroupLike[] = [];\r\n\r\n // Go through each point using the sorted indices\r\n for (let i=0, len=indices.length; i<len; i++) {\r\n let c = indices[i];\r\n let edges:number[] = [];\r\n let j = opened.length;\r\n if (!this._mesh[c]) this._mesh[c] = {};\r\n\r\n // Go through each opened triangles\r\n while (j--) {\r\n let circum:DelaunayShape = opened[j];\r\n let radius = circum.circle[1][0];\r\n let d = pts[c].$subtract( circum.circle[0] );\r\n\r\n // if point is to the right of circumcircle, add it to closed list and don't check again\r\n if (d[0] > 0 && d[0]*d[0] > radius*radius) {\r\n closed.push( circum );\r\n tris.push( circum.triangle );\r\n opened.splice(j, 1);\r\n continue;\r\n }\r\n\r\n // if it's outside the circumcircle, skip\r\n if ( d[0]*d[0] + d[1]*d[1] - radius*radius > Const.epsilon) {\r\n continue;\r\n }\r\n\r\n // otherwise it's inside the circumcircle, so we add to edge buffer and remove it from the opened list\r\n edges.push( circum.i, circum.j, circum.j, circum.k, circum.k, circum.i );\r\n opened.splice(j, 1);\r\n }\r\n\r\n // dedup edges\r\n Delaunay._dedupe( edges );\r\n\r\n // Go through the edge buffer and create a triangle for each edge\r\n j = edges.length;\r\n while (j > 1) {\r\n opened.push( this._circum( edges[--j], edges[--j], c, false, pts) );\r\n }\r\n\r\n }\r\n\r\n for (let i=0, len=opened.length; i<len; i++) {\r\n let o = opened[i];\r\n if (o.i < n && o.j < n && o.k < n) {\r\n closed.push( o );\r\n tris.push( o.triangle );\r\n this._cache( o );\r\n }\r\n }\r\n\r\n return (triangleOnly) ? tris : closed;\r\n }\r\n\r\n\r\n /**\r\n * Generate Voronoi cells. `delaunay()` must be called before calling this function.\r\n * @returns an array of Groups, each of which represents a Voronoi cell\r\n */\r\n voronoi():Group[] {\r\n let vs = [];\r\n let n = this._mesh;\r\n for (let i=0, len=n.length; i<len; i++) {\r\n vs.push( this.neighborPts( i, true ) );\r\n }\r\n return vs;\r\n }\r\n\r\n\r\n /**\r\n * Get the cached mesh. The mesh is an array of objects, each of which representing the enclosing triangles around a Pt in this Delaunay group\r\n * @return an array of objects that store a series of DelaunayShapes\r\n */\r\n mesh():DelaunayMesh {\r\n return this._mesh;\r\n }\r\n\r\n\r\n /**\r\n * Given an index of a Pt in this Delaunay Group, returns its neighboring Pts in the network\r\n * @param i index of a Pt\r\n * @param sort if true, sort the neighbors so that their edges will form a polygon\r\n * @returns an array of Pts\r\n */\r\n neighborPts( i:number, sort=false ):GroupLike {\r\n let cs = new Group();\r\n let n = this._mesh;\r\n for (let k in n[i]) {\r\n if (n[i].hasOwnProperty(k)) cs.push( n[i][k].circle[0] );\r\n }\r\n return (sort) ? Geom.sortEdges( cs ) : cs;\r\n }\r\n\r\n\r\n /**\r\n * Given an index of a Pt in this Delaunay Group, returns its neighboring DelaunayShapes\r\n * @param i index of a Pt\r\n * @returns an array of DelaunayShapes `{i, j, k, triangle, circle}`\r\n */\r\n neighbors( i:number ):DelaunayShape[] {\r\n let cs = [];\r\n let n = this._mesh;\r\n for (let k in n[i]) {\r\n if (n[i].hasOwnProperty(k)) cs.push( n[i][k] );\r\n }\r\n return cs;\r\n }\r\n\r\n\r\n /**\r\n * Record a DelaunayShape in the mesh\r\n * @param o DelaunayShape instance\r\n */\r\n protected _cache( o ):void {\r\n this._mesh[o.i][`${Math.min(o.j,o.k)}-${Math.max(o.j,o.k)}`] = o;\r\n this._mesh[o.j][`${Math.min(o.i,o.k)}-${Math.max(o.i,o.k)}`] = o;\r\n this._mesh[o.k][`${Math.min(o.i,o.j)}-${Math.max(o.i,o.j)}`] = o;\r\n }\r\n\r\n\r\n /**\r\n * Get the initial \"super triangle\" that contains all the points in this set\r\n * @returns a Group representing a triangle\r\n */\r\n protected _superTriangle():Group {\r\n let minPt = this[0];\r\n let maxPt = this[0];\r\n for (let i=1, len=this.length; i<len; i++) {\r\n minPt = minPt.$min( this[i] );\r\n maxPt = maxPt.$max( this[i] );\r\n }\r\n\r\n let d = maxPt.$subtract( minPt );\r\n let mid = minPt.$add( maxPt ).divide(2);\r\n let dmax = Math.max( d[0], d[1] );\r\n\r\n return new Group( mid.$subtract(20*dmax, dmax), mid.$add( 0, 20*dmax), mid.$add(20*dmax, -dmax) );\r\n }\r\n\r\n\r\n /**\r\n * Get a triangle from 3 points in a list of points\r\n * @param i index 1\r\n * @param j index 2\r\n * @param k index 3\r\n * @param pts a Group of Pts\r\n */\r\n protected _triangle( i:number, j:number, k:number, pts:GroupLike=this):Group {\r\n return new Group( pts[i], pts[j], pts[k] );\r\n }\r\n\r\n\r\n /**\r\n * Get a circumcircle and triangle from 3 points in a list of points\r\n * @param i index 1\r\n * @param j index 2\r\n * @param k index 3\r\n * @param tri a Group representing a triangle, or `false` to create it from indices\r\n * @param pts a Group of Pts\r\n */\r\n protected _circum(i:number, j:number, k:number, tri:GroupLike|false, pts:GroupLike=this):DelaunayShape {\r\n let t = tri || this._triangle( i, j, k, pts );\r\n return {\r\n i: i,\r\n j: j,\r\n k: k,\r\n triangle: t,\r\n circle: Triangle.circumcircle( t )\r\n };\r\n }\r\n\r\n\r\n /**\r\n * Dedupe the edges array\r\n * @param edges \r\n */\r\n protected static _dedupe( edges:number[] ):number[] {\r\n let j = edges.length;\r\n\r\n while (j > 1) {\r\n let b = edges[--j];\r\n let a = edges[--j];\r\n let i=j;\r\n\r\n while (i > 1) {\r\n let n = edges[--i];\r\n let m = edges[--i];\r\n\r\n if ((a == m && b == n) || (a == n && b == m)) {\r\n edges.splice(j, 2);\r\n edges.splice(i, 2);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return edges;\r\n }\r\n\r\n\r\n}\n\n\n// WEBPACK FOOTER //\n// ./~/tslint-loader??ref--0!./src/Create.ts","// Source code licensed under Apache License 2.0. \n// Copyright © 2017 William Ngan. (https://github.com/williamngan/pts)\n\n\nimport {IPlayer} from './Space';\nimport {VisualForm, Font} from \"./Form\";\nimport {Bound} from './Bound';\nimport {Geom} from './Num';\nimport {Const} from './Util';\nimport {Pt, PtLike, GroupLike, Group} from './Pt';\nimport {Rectangle} from \"./Op\";\nimport {DOMSpace, DOMFormContext} from \"./Dom\";\n\n\n\n/**\n * A Space for SVG elements\n */\nexport class SVGSpace extends DOMSpace {\n \n id: string = \"svgspace\";\n protected _bgcolor:string = \"#999\";\n \n\n /**\n * Create a SVGSpace which represents a Space for SVG elements\n * @param elem Specify an element by its \"id\" attribute as string, or by the element object itself. An element can be an existing `<svg>`, or a `<div>` container in which a new `<svg>` will be created. If left empty, a `<div id=\"pt_container\"><svg id=\"pt\" /></div>` will be added to DOM. Use css to customize its appearance if needed.\n * @param callback an optional callback `function(boundingBox, spaceElement)` to be called when canvas is appended and ready. Alternatively, a \"ready\" event will also be fired from the `<svg>` element when it's appended, which can be traced with `spaceInstance.canvas.addEventListener(\"ready\")`\n * @example `new SVGSpace( \"#myElementID\" )`\n */\n constructor( elem:string|Element, callback?:Function ) {\n super( elem, callback );\n \n if (this._canvas.nodeName.toLowerCase() != \"svg\") {\n let s = SVGSpace.svgElement( this._canvas, \"svg\", `${this.id}_svg` );\n this._container = this._canvas;\n this._canvas = s as SVGElement;\n }\n }\n \n\n /**\n * Get a new `SVGForm` for drawing\n * @see `SVGForm`\n */\n getForm():SVGForm { return new SVGForm( this ); }\n \n\n /**\n * Get the html element\n */\n get element():Element {\n return this._canvas;\n }\n\n /**\n * This overrides Space's `resize` function. It's used as a callback function for window's resize event and not usually called directly. You can keep track of resize events with `resize: (bound ,evt)` callback in your player objects (See `Space`'s `add()` function). \n * @param b a Bound object to resize to\n * @param evt Optionally pass a resize event\n */\n resize( b:Bound, evt?:Event):this {\n super.resize( b, evt );\n SVGSpace.setAttr( this.element, {\n \"viewBox\": `0 0 ${this.bound.width} ${this.bound.height}`,\n \"width\": `${this.bound.width}`,\n \"height\": `${this.bound.height}`,\n \"xmlns\": \"http://www.w3.org/2000/svg\",\n \"version\": \"1.1\"\n });\n return this;\n }\n \n\n /**\n * A static function to add a svg element inside a node. Usually you don't need to use this directly. See methods in `SVGForm` instead.\n * @param parent the parent element, or `null` to use current `<svg>` as parent.\n * @param name a string of element name, such as `rect` or `circle`\n * @param id id attribute of the new element\n */\n static svgElement( parent:Element, name:string, id?:string ):SVGElement {\n if (!parent || !parent.appendChild ) throw new Error( \"parent is not a valid DOM element\" );\n \n let elem = document.querySelector(`#${id}`);\n\n if (!elem) {\n elem = document.createElementNS( \"http://www.w3.org/2000/svg\", name );\n elem.setAttribute( \"id\", id );\n \n parent.appendChild( elem );\n }\n return elem as SVGElement;\n }\n \n \n \n /**\n * Remove an item from this Space\n * @param item a player item with an auto-assigned `animateID` property\n */\n remove( player:IPlayer ):this {\n let temp = this._container.querySelectorAll( \".\"+SVGForm.scopeID( player ) );\n \n temp.forEach( (el:Element) => { \n el.parentNode.removeChild( el );\n });\n \n return super.remove( player );\n }\n \n \n /**\n * Remove all items from this Space\n */\n removeAll():this {\n this._container.innerHTML = \"\";\n return super.removeAll();\n }\n \n}\n\n\n/**\n* SVGForm is an implementation of abstract class VisualForm. It provide methods to express Pts on SVGSpace. \n* You may extend SVGForm to implement your own expressions for SVGSpace.\n*/\nexport class SVGForm extends VisualForm {\n \n protected _ctx:DOMFormContext = {\n group: null,\n groupID: \"pts\",\n groupCount: 0,\n currentID: \"pts0\",\n currentClass: \"\",\n style: {\n \"filled\": true,\n \"stroked\": true,\n \"fill\": \"#f03\",\n \"stroke\": \"#fff\",\n \"stroke-width\": 1,\n \"stroke-linejoin\": \"bevel\",\n \"stroke-linecap\": \"sqaure\"\n },\n font: \"11px sans-serif\",\n fontSize: 11,\n fontFamily: \"sans-serif\"\n };\n \n static groupID:number = 0;\n static domID:number = 0;\n \n protected _space:SVGSpace;\n protected _ready:boolean = false;\n \n\n /**\n * Create a new SVGForm. You may also use `space.getForm()` to get the default form.\n * @param space an instance of SVGSpace\n */\n constructor( space:SVGSpace ) {\n super();\n this._space = space;\n \n this._space.add( { start: () => {\n this._ctx.group = this._space.element;\n this._ctx.groupID = \"pts_svg_\"+(SVGForm.groupID++);\n this._ready = true;\n }} );\n }\n \n\n /**\n * get the SVGSpace instance that this form is associated with\n */\n get space():SVGSpace { return this._space; }\n \n \n /**\n * Update a style in _ctx context or throw an Erorr if the style doesn't exist\n * @param k style key\n * @param v style value\n */\n protected styleTo( k, v ) { \n if (this._ctx.style[k] === undefined) throw new Error(`${k} style property doesn't exist`);\n this._ctx.style[k] = v; \n }\n \n\n /**\n * Set current fill style. Provide a valid color string or `false` to specify no fill color.\n * @example `form.fill(\"#F90\")`, `form.fill(\"rgba(0,0,0,.5\")`, `form.fill(false)`\n * @param c fill color\n */\n fill( c:string|boolean ):this {\n if (typeof c == \"boolean\") {\n this.styleTo( \"filled\", c );\n } else {\n this.styleTo( \"filled\", true );\n this.styleTo( \"fill\", c );\n }\n return this;\n }\n \n\n /**\n * Set current stroke style. Provide a valid color string or `false` to specify no stroke color.\n * @example `form.stroke(\"#F90\")`, `form.stroke(\"rgba(0,0,0,.5\")`, `form.stroke(false)`, `form.stroke(\"#000\", 0.5, 'round', 'square')`\n * @param c stroke color which can be as color, gradient, or pattern. (See [canvas documentation](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/strokeStyle))\n * @param width Optional value (can be floating point) to set line width\n * @param linejoin Optional string to set line joint style. Can be \"miter\", \"bevel\", or \"round\".\n * @param linecap Optional string to set line cap style. Can be \"butt\", \"round\", or \"square\".\n */\n stroke( c:string|boolean, width?:number, linejoin?:string, linecap?:string ):this {\n if (typeof c == \"boolean\") {\n this.styleTo( \"stroked\", c );\n } else {\n this.styleTo( \"stroked\", true );\n this.styleTo( \"stroke\", c );\n if (width) this.styleTo( \"stroke-width\", width );\n if (linejoin) this.styleTo( \"stroke-linejoin\", linejoin );\n if (linecap) this.styleTo( \"stroke-linecap\", linecap );\n }\n return this;\n }\n\n\n /**\n * Add custom class to the created element\n * @param c custom class name or `false` to reset it\n * @example `form.fill(\"#f00\").cls(\"myClass\").rects(r)` `form.cls(false).circles(c)`\n */\n cls( c:string|boolean ) {\n if (typeof c == \"boolean\") {\n this._ctx.currentClass = \"\";\n } else {\n this._ctx.currentClass = c;\n }\n return this;\n }\n \n \n /**\n * Set the current font \n * @param sizeOrFont either a number to specify font-size, or a `Font` object to specify all font properties\n * @param weight Optional font-weight string such as \"bold\"\n * @param style Optional font-style string such as \"italic\"\n * @param lineHeight Optional line-height number suchas 1.5\n * @param family Optional font-family such as \"Helvetica, sans-serif\"\n * @example `form.font( myFont )`, `form.font(14, \"bold\")`\n */\n font( sizeOrFont:number|Font, weight?:string, style?:string, lineHeight?:number, family?:string ):this {\n if (typeof sizeOrFont == \"number\") {\n \n this._font.size = sizeOrFont;\n if (family) this._font.face = family;\n if (weight) this._font.weight = weight;\n if (style) this._font.style = style;\n if (lineHeight) this._font.lineHeight = lineHeight;\n this._ctx.font = this._font.value;\n \n } else {\n this._font = sizeOrFont;\n }\n return this;\n }\n \n\n /**\n * Reset the context's common styles to this form's styles. This supports using multiple forms on the same canvas context.\n */\n reset():this {\n this._ctx.style = {\n \"filled\": true, \"stroked\": true,\n \"fill\": \"#f03\", \"stroke\": \"#fff\",\n \"stroke-width\": 1,\n \"stroke-linejoin\": \"bevel\",\n \"stroke-linecap\": \"sqaure\"\n };\n\n this._font = new Font( 14, \"sans-serif\");\n this._ctx.font = this._font.value;\n\n return this;\n }\n\n \n /**\n * Set this form's group scope by an ID, and optionally define the group's parent element. A group scope keeps track of elements by their generated IDs, and updates their properties as needed. See also `scope()`.\n * @param group_id a string to use as prefix for the group's id. For example, group_id \"hello\" will create elements with id like \"hello-1\", \"hello-2\", etc\n * @param group Optional DOM or SVG element to define this group's parent element\n * @returns this form's context\n */\n updateScope( group_id:string, group?:Element ):object {\n this._ctx.group = group;\n this._ctx.groupID = group_id;\n this._ctx.groupCount = 0;\n this.nextID();\n return this._ctx;\n }\n \n\n /**\n * Set the current group scope to an item added into space, in order to keep track of any point, circle, etc created within it. The item must have an `animateID` property, so that elements created within the item will have generated IDs like \"item-{animateID}-{count}\".\n * @param item a \"player\" item that's added to space (see `space.add(...)`) and has an `animateID` property\n * @returns this form's context\n */\n scope( item:IPlayer ) {\n if (!item || item.animateID == null ) throw new Error(\"item not defined or not yet added to Space\");\n return this.updateScope( SVGForm.scopeID( item ), this.space.element );\n }\n \n \n /**\n * Get next available id in the current group\n * @returns an id string\n */\n nextID():string {\n this._ctx.groupCount++;\n this._ctx.currentID = `${this._ctx.groupID}-${this._ctx.groupCount}`;\n return this._ctx.currentID;\n }\n \n\n /**\n * A static function to generate an ID string based on a context object\n * @param ctx a context object for an SVGForm\n */\n static getID( ctx ):string {\n return ctx.currentID || `p-${SVGForm.domID++}`;\n }\n\n\n /**\n * A static function to generate an ID string for a scope, based on a \"player\" item in the Space\n * @param item a \"player\" item that's added to space (see `space.add(...)`) and has an `animateID` property\n */\n static scopeID( item:IPlayer ):string {\n return `item-${item.animateID}`;\n }\n \n\n /**\n * A static function to help adding style object to an element. This put all styles into `style` attribute instead of individual attributes, so that the styles can be parsed by Adobe Illustrator.\n * @param elem A DOM element to add to\n * @param styles an object of style properties\n * @example `SVGForm.style(elem, {fill: \"#f90\", stroke: false})`\n * @returns this DOM element \n */\n static style( elem:SVGElement, styles:object) {\n let st = [];\n\n if ( !styles[\"filled\"] ) st.push( \"fill: none\");\n if ( !styles[\"stroked\"] ) st.push( \"stroke: none\");\n \n for (let k in styles) {\n if ( styles.hasOwnProperty(k) && k != \"filled\" && k != \"stroked\" ) {\n let v = styles[k];\n if (v) {\n if ( !styles[\"filled\"] && k.indexOf('fill') === 0 ) {\n continue;\n } else if ( !styles[\"stroked\"] && k.indexOf('stroke') === 0 ) {\n continue;\n } else {\n st.push( `${k}: ${v}` );\n }\n }\n }\n }\n \n return DOMSpace.setAttr( elem, {style: st.join(\";\")} );\n }\n \n \n /**\n * Draws a point\n * @param ctx a context object of SVGForm\n * @param pt a Pt object or numeric array\n * @param radius radius of the point. Default is 5.\n * @param shape The shape of the point. Defaults to \"square\", but it can be \"circle\" or a custom shape function in your own implementation.\n * @example `SVGForm.point( p )`, `SVGForm.point( p, 10, \"circle\" )`\n */\n static point( ctx:DOMFormContext, pt:PtLike, radius:number=5, shape:string=\"square\" ):SVGElement {\n if (shape === \"circle\") {\n return SVGForm.circle( ctx, pt, radius );\n } else {\n return SVGForm.square( ctx, pt, radius );\n }\n }\n \n \n /**\n * Draws a point\n * @param p a Pt object\n * @param radius radius of the point. Default is 5.\n * @param shape The shape of the point. Defaults to \"square\", but it can be \"circle\" or a custom shape function in your own implementation.\n * @example `form.point( p )`, `form.point( p, 10, \"circle\" )`\n */\n point( pt:PtLike, radius:number=5, shape:string=\"square\" ):this {\n this.nextID();\n SVGForm.point( this._ctx, pt, radius, shape );\n return this;\n }\n \n\n /**\n * A static function to draw a circle\n * @param ctx a context object of SVGForm\n * @param pt center position of the circle\n * @param radius radius of the circle\n */\n static circle( ctx:DOMFormContext, pt:PtLike, radius:number=10 ):SVGElement {\n let elem = SVGSpace.svgElement( ctx.group, \"circle\", SVGForm.getID(ctx) );\n \n DOMSpace.setAttr( elem, {\n cx: pt[0],\n cy: pt[1],\n r: radius,\n 'class': `pts-svgform pts-circle ${ctx.currentClass}`,\n });\n \n SVGForm.style( elem, ctx.style );\n return elem;\n }\n \n\n /**\n * Draw a circle\n * @param pts usually a Group of 2 Pts, but it can also take an array of two numeric arrays [ [position], [size] ]\n * @see [`Circle.fromCenter`](./_op_.circle.html#frompt)\n */\n circle( pts:GroupLike|number[][] ):this {\n this.nextID();\n SVGForm.circle( this._ctx, pts[0], pts[1][0] );\n return this;\n }\n \n\n /**\n * A static function to draw an arc.\n * @param ctx a context object of SVGForm\n * @param pt center position \n * @param radius radius of the arc circle\n * @param startAngle start angle of the arc\n * @param endAngle end angle of the arc\n * @param cc an optional boolean value to specify if it should be drawn clockwise (`false`) or counter-clockwise (`true`). Default is clockwise.\n */\n static arc( ctx:DOMFormContext, pt:PtLike, radius:number, startAngle:number, endAngle:number, cc?:boolean ):SVGElement {\n let elem = SVGSpace.svgElement( ctx.group, \"path\", SVGForm.getID( ctx ) );\n \n const start = new Pt(pt).toAngle( startAngle, radius, true );\n const end = new Pt(pt).toAngle( endAngle, radius, true );\n const diff = Geom.boundAngle(endAngle) - Geom.boundAngle(startAngle);\n let largeArc = ( diff > Const.pi ) ? true : false;\n if (cc) largeArc = !largeArc;\n const sweep = (cc) ? \"0\" : \"1\";\n \n const d = `M ${start[0]} ${start[1]} A ${radius} ${radius} 0 ${largeArc ? \"1\" : \"0\"} ${sweep} ${end[0]} ${end[1]}`;\n \n DOMSpace.setAttr( elem, { \n d: d,\n 'class': `pts-svgform pts-arc ${ctx.currentClass}`,\n } );\n SVGForm.style( elem, ctx.style );\n return elem;\n }\n \n\n /**\n * Draw an arc.\n * @param pt center position\n * @param radius radius of the arc circle\n * @param startAngle start angle of the arc\n * @param endAngle end angle of the arc\n * @param cc an optional boolean value to specify if it should be drawn clockwise (`false`) or counter-clockwise (`true`). Default is clockwise.\n */\n arc( pt:PtLike, radius:number, startAngle:number, endAngle:number, cc?:boolean ):this {\n this.nextID();\n SVGForm.arc( this._ctx, pt, radius, startAngle, endAngle, cc );\n return this;\n }\n \n\n /**\n * A static function to draw a square \n * @param ctx a context object of SVGForm\n * @param pt center position of the square\n * @param halfsize half size of the square\n */\n static square( ctx:DOMFormContext, pt:PtLike, halfsize:number ) {\n let elem = SVGSpace.svgElement( ctx.group, \"rect\", SVGForm.getID( ctx ) );\n DOMSpace.setAttr( elem, {\n x: pt[0]-halfsize, \n y:pt[1]-halfsize, \n width: halfsize*2, \n height: halfsize*2,\n 'class': `pts-svgform pts-square ${ctx.currentClass}`,\n });\n SVGForm.style( elem, ctx.style );\n return elem;\n }\n \n\n /**\n * Draw a square, given a center and its half-size\n * @param pt center Pt\n * @param halfsize half-size\n */\n square( pt:PtLike, halfsize:number ):this {\n this.nextID();\n SVGForm.square( this._ctx, pt, halfsize );\n return this;\n } \n \n\n /**\n * A static function to draw a line\n * @param ctx a context object of SVGForm\n * @param pts a Group of multiple Pts, or an array of multiple numeric arrays\n */\n static line( ctx:DOMFormContext, pts:GroupLike|number[][] ):SVGElement {\n if (!this._checkSize( pts)) return;\n \n if (pts.length > 2) return SVGForm._poly( ctx, pts, false );\n \n let elem = SVGSpace.svgElement( ctx.group, \"line\", SVGForm.getID( ctx ) );\n \n DOMSpace.setAttr( elem, {\n x1: pts[0][0],\n y1: pts[0][1],\n x2: pts[1][0],\n y2: pts[1][1],\n 'class': `pts-svgform pts-line ${ctx.currentClass}`,\n });\n \n SVGForm.style( elem, ctx.style );\n return elem;\n }\n \n\n /**\n * Draw a line or polyline\n * @param pts a Group of multiple Pts, or an array of multiple numeric arrays\n */\n line( pts:GroupLike|number[][] ):this {\n this.nextID();\n SVGForm.line( this._ctx, pts );\n return this;\n }\n \n \n /**\n * A static helper function to draw polyline or polygon\n * @param ctx a context object of SVGForm\n * @param pts a Group of multiple Pts, or an array of multiple numeric arrays\n * @param closePath a boolean to specify if the polygon path should be closed\n */\n static _poly( ctx:DOMFormContext, pts:GroupLike|number[][], closePath:boolean=true) {\n if (!this._checkSize( pts)) return;\n \n let elem = SVGSpace.svgElement( ctx.group, ((closePath) ? \"polygon\" : \"polyline\"), SVGForm.getID(ctx) );\n let points:string = (pts as number[][]).reduce( (a, p) => a+`${p[0]},${p[1]} `, \"\");\n DOMSpace.setAttr( elem, {\n points: points,\n 'class': `pts-svgform pts-polygon ${ctx.currentClass}`,\n }); \n SVGForm.style( elem, ctx.style );\n return elem;\n }\n \n \n /**\n * A static function to draw polygon\n * @param ctx a context object of SVGForm\n * @param pts a Group of multiple Pts, or an array of multiple numeric arrays\n */\n static polygon( ctx:DOMFormContext, pts:GroupLike|number[][] ):SVGElement {\n return SVGForm._poly( ctx, pts, true );\n }\n \n\n /**\n * Draw a polygon\n * @param pts a Group of multiple Pts, or an array of multiple numeric arrays\n */\n polygon( pts:GroupLike|number[][] ):this {\n this.nextID();\n SVGForm.polygon( this._ctx, pts );\n return this;\n }\n \n \n /**\n * A static function to draw a rectangle\n * @param ctx a context object of SVGForm\n * @param pts usually a Group of 2 Pts specifying the top-left and bottom-right positions. Alternatively it can be an array of numeric arrays.\n */\n static rect( ctx:DOMFormContext, pts:GroupLike|number[][] ):SVGElement {\n if (!this._checkSize( pts)) return;\n \n let elem = SVGSpace.svgElement( ctx.group, \"rect\", SVGForm.getID(ctx) );\n let bound = Group.fromArray( pts ).boundingBox();\n let size = Rectangle.size( bound );\n \n DOMSpace.setAttr( elem, {\n x: bound[0][0],\n y: bound[0][1],\n width: size[0],\n height: size[1],\n 'class': `pts-svgform pts-rect ${ctx.currentClass}`,\n });\n \n SVGForm.style( elem, ctx.style );\n return elem;\n }\n \n \n /**\n * Draw a rectangle\n * @param pts usually a Group of 2 Pts specifying the top-left and bottom-right positions. Alternatively it can be an array of numeric arrays.\n */\n rect( pts:number[][]|Pt[] ):this {\n this.nextID();\n SVGForm.rect( this._ctx, pts );\n return this;\n }\n \n \n /**\n * A static function to draw text\n * @param ctx a context object of SVGForm\n * @param `pt` a Point object to specify the anchor point\n * @param `txt` a string of text to draw\n * @param `maxWidth` specify a maximum width per line\n */\n static text( ctx:DOMFormContext, pt:PtLike, txt:string ):SVGElement {\n let elem = SVGSpace.svgElement( ctx.group, \"text\", SVGForm.getID(ctx) );\n \n DOMSpace.setAttr( elem, {\n \"pointer-events\": \"none\",\n x: pt[0],\n y: pt[1],\n dx: 0, dy: 0,\n 'class': `pts-svgform pts-text ${ctx.currentClass}`,\n });\n \n elem.textContent = txt;\n \n SVGForm.style( elem, ctx.style );\n \n return elem;\n }\n \n\n /**\n * Draw text on canvas\n * @param `pt` a Pt or numeric array to specify the anchor point\n * @param `txt` text\n * @param `maxWidth` specify a maximum width per line\n */\n text( pt:PtLike, txt:string ): this {\n this.nextID();\n SVGForm.text( this._ctx, pt, txt );\n return this;\n }\n \n\n /**\n * A convenient way to draw some text on canvas for logging or debugging. It'll be draw on the top-left of the canvas as an overlay.\n * @param txt text\n */\n log( txt ):this {\n this.fill(\"#000\").stroke(\"#fff\", 0.5).text( [10,14], txt ); \n return this;\n }\n \n \n}\n\n\n// WEBPACK FOOTER //\n// ./~/tslint-loader??ref--0!./src/Svg.ts","// Source code licensed under Apache License 2.0.\n// Copyright © 2017 William Ngan. (https://github.com/williamngan/pts)\n\n\nimport {Pt, Group} from \"./Pt\";\nimport { Rectangle, Circle } from \"./Op\";\n\n\n/**\n * An enumeration of different UI types\n */\nexport enum UIShape {\n Rectangle, Circle, Polygon, Polyline, Line\n}\n\nexport const UIPointerActions = {\n up: \"up\", down: \"down\", move: \"move\", drag: \"drag\", drop: \"drop\", over: \"over\", out: \"out\"\n};\n\n\n/**\n * UIListener type\n */\nexport type UIHandler = ( pt:Pt, target:UI, type:string ) => void;\n\n\nexport class UI {\n group: Group;\n shape: UIShape;\n\n protected _id:string;\n protected _actions: {[key:string]: UIHandler };\n protected _states: {[key:string]: any};\n\n\n /**\n * Wrap an UI insider a group\n */\n constructor( group:Group, shape:UIShape, states: {}, id?:string ) {\n this.group = group;\n this.shape = shape;\n this._id = id;\n this._states = states;\n this._actions = {};\n }\n\n\n /**\n * Get and set uique id\n */\n get id():string { return this._id; }\n set id( d:string ) { this._id = d; } \n\n\n /**\n * Get a state\n * @param key state's name\n */\n state( key:string ):any {\n return this._states[key] || false;\n }\n\n\n /**\n * Add an event handler\n * @param key event key\n * @param fn handler function\n */\n on( key:string, fn:UIHandler ) {\n this._actions[key] = fn;\n return this;\n }\n\n\n /**\n * Remove an event handler\n * @param key even key\n * @param fn \n */\n off( key:string ) {\n delete this._actions[key];\n return this;\n }\n\n\n /**\n * Listen for interactions and trigger action handlers\n * @param key action key\n * @param p point to check\n */\n listen( key:string, p:Pt ):boolean {\n if ( this._actions[key] !== undefined ) {\n if ( this._trigger(p) ) {\n this._actions[key]( p, this, key );\n return true;\n }\n }\n return false;\n }\n\n\n /**\n * Take a custom render function to render this UI\n * @param fn render function\n */\n render( fn:( group:Group, states:{[key:string]: any}) => void ) {\n fn( this.group, this._states );\n }\n\n\n /**\n * Check intersection using a specific function based on UIShape\n * @param p a point to check\n */\n protected _trigger( p:Pt ):boolean {\n let fn = null;\n if (this.shape === UIShape.Rectangle) {\n fn = Rectangle.withinBound;\n } else if (this.shape === UIShape.Circle) {\n fn = Circle.withinBound;\n } else if (this.shape === UIShape.Polygon) {\n fn = Rectangle.withinBound;\n } else {\n return false;\n }\n\n return fn( this.group, p );\n }\n\n}\n\n\n/**\n * A simple UI button that can track clicks and hovers\n */\nexport class UIButton extends UI {\n\n _clicks:number = 0;\n\n constructor( group:Group, shape:UIShape, states: {}, id?:string ) {\n super( group, shape, states, id );\n }\n\n \n /**\n * Get the total number of clicks on this UIButton\n */\n get clicks():number { return this._clicks; }\n\n\n /**\n * Add a click handler\n * @param fn a function to handle clicks\n */\n onClick( fn:UIHandler ) {\n this._clicks++;\n this.on( UIPointerActions.up, fn );\n }\n\n \n /**\n * Add hover handler\n * @param over a function to handle when pointer enters hover\n * @param out a function to handle when pointer exits hover\n */\n onHover( over:UIHandler, out:UIHandler ) {\n this.on( UIPointerActions.over, over);\n this.on( UIPointerActions.out, out);\n }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./~/tslint-loader??ref--0!./src/UI.ts","import * as _Bound from \"./Bound\";\nimport * as _Canvas from \"./Canvas\";\nimport * as _Create from \"./Create\";\nimport * as _Form from \"./Form\";\nimport * as _LinearAlgebra from \"./LinearAlgebra\";\nimport * as _Num from \"./Num\";\nimport * as _Op from \"./Op\";\nimport * as _Pt from \"./Pt\";\nimport * as _Space from \"./Space\";\nimport * as _Color from \"./Color\";\nimport * as _Util from \"./Util\";\nimport * as _Dom from \"./Dom\";\nimport * as _Svg from \"./Svg\";\nimport * as _Typography from \"./Typography\";\n\n\nmodule.exports = {\n ..._Bound,\n ..._Canvas,\n ..._Create,\n ..._Form,\n ..._LinearAlgebra,\n ..._Op,\n ..._Num,\n ..._Pt,\n ..._Space,\n ..._Util,\n ..._Color,\n ..._Dom,\n ..._Svg,\n ..._Typography\n};\n\n\n// WEBPACK FOOTER //\n// ./~/tslint-loader??ref--0!./src/_module.ts"],"sourceRoot":""}