diff --git a/build/dat.gui.css b/build/dat.gui.css new file mode 100644 index 0000000..c039f45 --- /dev/null +++ b/build/dat.gui.css @@ -0,0 +1 @@ +.dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda} diff --git a/build/dat.gui.js b/build/dat.gui.js index 472129f..8d40bd9 100644 --- a/build/dat.gui.js +++ b/build/dat.gui.js @@ -1536,42 +1536,6 @@ function hueGradient(elem) { elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; } -var CustomController = function (_Controller) { - inherits(CustomController, _Controller); - function CustomController(init) { - classCallCheck(this, CustomController); - var _this = possibleConstructorReturn(this, (CustomController.__proto__ || Object.getPrototypeOf(CustomController)).call(this, {})); - init(_this); - _this.custom = true; - return _this; - } - return CustomController; -}(Controller); - -var css = { - load: function load(url, indoc) { - var doc = indoc || document; - var link = doc.createElement('link'); - link.type = 'text/css'; - link.rel = 'stylesheet'; - link.href = url; - doc.getElementsByTagName('head')[0].appendChild(link); - }, - inject: function inject(cssContent, indoc) { - var doc = indoc || document; - var injected = document.createElement('style'); - injected.type = 'text/css'; - injected.innerHTML = cssContent; - var head = doc.getElementsByTagName('head')[0]; - try { - head.appendChild(injected); - } catch (e) { - } - } -}; - -var saveDialogContents = "
\n\n Here's the new load parameter for your GUI's constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI's constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n\n
\n\n
\n\n
"; - var ControllerFactory = function ControllerFactory(object, property) { var initialValue = object[property]; if (Common.isArray(arguments[2]) || Common.isObject(arguments[2])) { @@ -1601,6 +1565,53 @@ var ControllerFactory = function ControllerFactory(object, property) { return null; }; +var CustomController = function (_Controller) { + inherits(CustomController, _Controller); + function CustomController(object, property) { + classCallCheck(this, CustomController); + var _this = possibleConstructorReturn(this, (CustomController.__proto__ || Object.getPrototypeOf(CustomController)).call(this, object, property)); + _this.arguments = { + object: object, property: property, opts: Array.prototype.slice.call(arguments, 2) + }; + if (object.property) _this.property = object.property(_this); + return _this; + } + createClass(CustomController, [{ + key: 'controller', + set: function set$$1(newController) { + this._controller = newController; + }, + get: function get$$1() { + return this._controller; + } + }]); + return CustomController; +}(Controller); + +var css = { + load: function load(url, indoc) { + var doc = indoc || document; + var link = doc.createElement('link'); + link.type = 'text/css'; + link.rel = 'stylesheet'; + link.href = url; + doc.getElementsByTagName('head')[0].appendChild(link); + }, + inject: function inject(cssContent, indoc) { + var doc = indoc || document; + var injected = document.createElement('style'); + injected.type = 'text/css'; + injected.innerHTML = cssContent; + var head = doc.getElementsByTagName('head')[0]; + try { + head.appendChild(injected); + } catch (e) { + } + } +}; + +var saveDialogContents = "
\n\n Here's the new load parameter for your GUI's constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI's constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n\n
\n\n
\n\n
"; + function requestAnimationFrame(callback) { setTimeout(callback, 1000 / 60); } @@ -1954,7 +1965,6 @@ Common.extend(GUI.prototype, { add: function add(object, property) { return _add(this, object, property, { - custom: object.custom, factoryArgs: Array.prototype.slice.call(arguments, 2) }); }, @@ -1963,11 +1973,6 @@ Common.extend(GUI.prototype, color: true }); }, - addCustomController: function addCustomController(init, property) { - return _add(this, new dat.controllers.CustomController(init), property, { - factoryArgs: Array.prototype.slice.call(arguments, 2) - }); - }, remove: function remove(controller) { this.__ul.removeChild(controller.__li); this.__controllers.splice(this.__controllers.indexOf(controller), 1); @@ -2317,28 +2322,41 @@ function recallSavedValue(gui, controller) { } } function _add(gui, object, property, params) { - var customObject = object.custom; - if (!customObject && !params.custom && object[property] === undefined) { + var customObject; + if (object.arguments) { + customObject = object; + object = customObject.arguments.object; + property = customObject.arguments.property; + params = { + factoryArgs: customObject.arguments.opts + }; + } + if (customObject === undefined && object[property] === undefined) { throw new Error('Object "' + object + '" has no property "' + property + '"'); } var controller = void 0; if (params.color) { controller = new ColorController(object, property); - } else if (customObject && property === undefined) { - controller = object; + } else if (customObject !== undefined && typeof customObject.property === "string") { + controller = customObject; } else { - var factoryArgs = customObject ? [property].concat(params.factoryArgs) : [object, property].concat(params.factoryArgs); + var factoryArgs = [object, property].concat(params.factoryArgs); controller = ControllerFactory.apply(gui, factoryArgs); } + if (controller === null) controller = customObject;else if (customObject !== undefined) customObject.controller = controller; if (params.before instanceof Controller) { params.before = params.before.__li; } recallSavedValue(gui, controller); dom.addClass(controller.domElement, 'c'); - var container = document.createElement('div'); - var name = customObject ? object.domElement : document.createElement('span'); - if (!customObject) name.innerHTML = controller.property; + var name = document.createElement('span'); dom.addClass(name, 'property-name'); + if (customObject !== undefined && _typeof(customObject.property) === "object") { + for (var propertyName in customObject.property) { + name.appendChild(customObject.property[propertyName]); + } + } else name.innerHTML = controller.property; + var container = document.createElement('div'); container.appendChild(name); container.appendChild(controller.domElement); var li = addRow(gui, container, params.before); diff --git a/build/dat.gui.js.map b/build/dat.gui.js.map new file mode 100644 index 0000000..2e9cc6b --- /dev/null +++ b/build/dat.gui.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dat.gui.js","sources":["../src/dat/color/toString.js","../src/dat/utils/common.js","../src/dat/color/interpret.js","../src/dat/color/math.js","../src/dat/color/Color.js","../src/dat/controllers/Controller.js","../src/dat/dom/dom.js","../src/dat/controllers/BooleanController.js","../src/dat/controllers/OptionController.js","../src/dat/controllers/StringController.js","../src/dat/controllers/NumberController.js","../src/dat/controllers/NumberControllerBox.js","../src/dat/controllers/NumberControllerSlider.js","../src/dat/controllers/FunctionController.js","../src/dat/controllers/ColorController.js","../src/dat/controllers/ControllerFactory.js","../src/dat/controllers/CustomController.js","../src/dat/utils/css.js","../src/dat/gui/saveDialogue.html.js","../src/dat/utils/requestAnimationFrame.js","../src/dat/dom/CenteredDiv.js","../src/dat/gui/GUI.js","../src/dat/index.js"],"sourcesContent":["/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nexport default function(color, forceCSSHex) {\r\n const colorFormat = color.__state.conversionName.toString();\r\n\r\n const r = Math.round(color.r);\r\n const g = Math.round(color.g);\r\n const b = Math.round(color.b);\r\n const a = color.a;\r\n const h = Math.round(color.h);\r\n const s = color.s.toFixed(1);\r\n const v = color.v.toFixed(1);\r\n\r\n if (forceCSSHex || (colorFormat === 'THREE_CHAR_HEX') || (colorFormat === 'SIX_CHAR_HEX')) {\r\n let str = color.hex.toString(16);\r\n while (str.length < 6) {\r\n str = '0' + str;\r\n }\r\n return '#' + str;\r\n } else if (colorFormat === 'CSS_RGB') {\r\n return 'rgb(' + r + ',' + g + ',' + b + ')';\r\n } else if (colorFormat === 'CSS_RGBA') {\r\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\r\n } else if (colorFormat === 'HEX') {\r\n return '0x' + color.hex.toString(16);\r\n } else if (colorFormat === 'RGB_ARRAY') {\r\n return '[' + r + ',' + g + ',' + b + ']';\r\n } else if (colorFormat === 'RGBA_ARRAY') {\r\n return '[' + r + ',' + g + ',' + b + ',' + a + ']';\r\n } else if (colorFormat === 'RGB_OBJ') {\r\n return '{r:' + r + ',g:' + g + ',b:' + b + '}';\r\n } else if (colorFormat === 'RGBA_OBJ') {\r\n return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}';\r\n } else if (colorFormat === 'HSV_OBJ') {\r\n return '{h:' + h + ',s:' + s + ',v:' + v + '}';\r\n } else if (colorFormat === 'HSVA_OBJ') {\r\n return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}';\r\n }\r\n\r\n return 'unknown format';\r\n}\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nconst ARR_EACH = Array.prototype.forEach;\r\nconst ARR_SLICE = Array.prototype.slice;\r\n\r\n/**\r\n * Band-aid methods for things that should be a lot easier in JavaScript.\r\n * Implementation and structure inspired by underscore.js\r\n * http://documentcloud.github.com/underscore/\r\n */\r\n\r\nconst Common = {\r\n BREAK: {},\r\n\r\n extend: function(target) {\r\n this.each(ARR_SLICE.call(arguments, 1), function(obj) {\r\n const keys = this.isObject(obj) ? Object.keys(obj) : [];\r\n keys.forEach(function(key) {\r\n if (!this.isUndefined(obj[key])) {\r\n target[key] = obj[key];\r\n }\r\n }.bind(this));\r\n }, this);\r\n\r\n return target;\r\n },\r\n\r\n defaults: function(target) {\r\n this.each(ARR_SLICE.call(arguments, 1), function(obj) {\r\n const keys = this.isObject(obj) ? Object.keys(obj) : [];\r\n keys.forEach(function(key) {\r\n if (this.isUndefined(target[key])) {\r\n target[key] = obj[key];\r\n }\r\n }.bind(this));\r\n }, this);\r\n\r\n return target;\r\n },\r\n\r\n compose: function() {\r\n const toCall = ARR_SLICE.call(arguments);\r\n return function() {\r\n let args = ARR_SLICE.call(arguments);\r\n for (let i = toCall.length - 1; i >= 0; i--) {\r\n args = [toCall[i].apply(this, args)];\r\n }\r\n return args[0];\r\n };\r\n },\r\n\r\n each: function(obj, itr, scope) {\r\n if (!obj) {\r\n return;\r\n }\r\n\r\n if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) {\r\n obj.forEach(itr, scope);\r\n } else if (obj.length === obj.length + 0) { // Is number but not NaN\r\n let key;\r\n let l;\r\n for (key = 0, l = obj.length; key < l; key++) {\r\n if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) {\r\n return;\r\n }\r\n }\r\n } else {\r\n for (const key in obj) {\r\n if (itr.call(scope, obj[key], key) === this.BREAK) {\r\n return;\r\n }\r\n }\r\n }\r\n },\r\n\r\n defer: function(fnc) {\r\n setTimeout(fnc, 0);\r\n },\r\n\r\n // if the function is called repeatedly, wait until threshold passes until we execute the function\r\n debounce: function(func, threshold, callImmediately) {\r\n let timeout;\r\n\r\n return function() {\r\n const obj = this;\r\n const args = arguments;\r\n function delayed() {\r\n timeout = null;\r\n if (!callImmediately) func.apply(obj, args);\r\n }\r\n\r\n const callNow = callImmediately || !timeout;\r\n\r\n clearTimeout(timeout);\r\n timeout = setTimeout(delayed, threshold);\r\n\r\n if (callNow) {\r\n func.apply(obj, args);\r\n }\r\n };\r\n },\r\n\r\n toArray: function(obj) {\r\n if (obj.toArray) return obj.toArray();\r\n return ARR_SLICE.call(obj);\r\n },\r\n\r\n isUndefined: function(obj) {\r\n return obj === undefined;\r\n },\r\n\r\n isNull: function(obj) {\r\n return obj === null;\r\n },\r\n\r\n isNaN: function(obj) {\r\n return isNaN(obj);\r\n },\r\n\r\n isArray: Array.isArray || function(obj) {\r\n return obj.constructor === Array;\r\n },\r\n\r\n isObject: function(obj) {\r\n return obj === Object(obj);\r\n },\r\n\r\n isNumber: function(obj) {\r\n return obj === obj + 0;\r\n },\r\n\r\n isString: function(obj) {\r\n return obj === obj + '';\r\n },\r\n\r\n isBoolean: function(obj) {\r\n return obj === false || obj === true;\r\n },\r\n\r\n isFunction: function(obj) {\r\n return Object.prototype.toString.call(obj) === '[object Function]';\r\n }\r\n\r\n};\r\n\r\nexport default Common;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport toString from './toString';\r\nimport common from '../utils/common';\r\n\r\nconst INTERPRETATIONS = [\r\n // Strings\r\n {\r\n litmus: common.isString,\r\n conversions: {\r\n THREE_CHAR_HEX: {\r\n read: function(original) {\r\n const test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);\r\n if (test === null) {\r\n return false;\r\n }\r\n\r\n return {\r\n space: 'HEX',\r\n hex: parseInt(\r\n '0x' +\r\n test[1].toString() + test[1].toString() +\r\n test[2].toString() + test[2].toString() +\r\n test[3].toString() + test[3].toString(), 0)\r\n };\r\n },\r\n\r\n write: toString\r\n },\r\n\r\n SIX_CHAR_HEX: {\r\n read: function(original) {\r\n const test = original.match(/^#([A-F0-9]{6})$/i);\r\n if (test === null) {\r\n return false;\r\n }\r\n\r\n return {\r\n space: 'HEX',\r\n hex: parseInt('0x' + test[1].toString(), 0)\r\n };\r\n },\r\n\r\n write: toString\r\n },\r\n\r\n CSS_RGB: {\r\n read: function(original) {\r\n const test = original.match(/^rgb\\(\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*\\)/);\r\n if (test === null) {\r\n return false;\r\n }\r\n\r\n return {\r\n space: 'RGB',\r\n r: parseFloat(test[1]),\r\n g: parseFloat(test[2]),\r\n b: parseFloat(test[3])\r\n };\r\n },\r\n\r\n write: toString\r\n },\r\n\r\n CSS_RGBA: {\r\n read: function(original) {\r\n const test = original.match(/^rgba\\(\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*\\)/);\r\n if (test === null) {\r\n return false;\r\n }\r\n\r\n return {\r\n space: 'RGB',\r\n r: parseFloat(test[1]),\r\n g: parseFloat(test[2]),\r\n b: parseFloat(test[3]),\r\n a: parseFloat(test[4])\r\n };\r\n },\r\n\r\n write: toString\r\n }\r\n }\r\n },\r\n\r\n // Numbers\r\n {\r\n litmus: common.isNumber,\r\n\r\n conversions: {\r\n\r\n HEX: {\r\n read: function(original) {\r\n return {\r\n space: 'HEX',\r\n hex: original,\r\n conversionName: 'HEX'\r\n };\r\n },\r\n\r\n write: function(color) {\r\n return color.hex;\r\n }\r\n }\r\n\r\n }\r\n\r\n },\r\n\r\n // Arrays\r\n {\r\n litmus: common.isArray,\r\n conversions: {\r\n RGB_ARRAY: {\r\n read: function(original) {\r\n if (original.length !== 3) {\r\n return false;\r\n }\r\n\r\n return {\r\n space: 'RGB',\r\n r: original[0],\r\n g: original[1],\r\n b: original[2]\r\n };\r\n },\r\n\r\n write: function(color) {\r\n return [color.r, color.g, color.b];\r\n }\r\n },\r\n\r\n RGBA_ARRAY: {\r\n read: function(original) {\r\n if (original.length !== 4) return false;\r\n return {\r\n space: 'RGB',\r\n r: original[0],\r\n g: original[1],\r\n b: original[2],\r\n a: original[3]\r\n };\r\n },\r\n\r\n write: function(color) {\r\n return [color.r, color.g, color.b, color.a];\r\n }\r\n }\r\n }\r\n },\r\n\r\n // Objects\r\n {\r\n litmus: common.isObject,\r\n conversions: {\r\n\r\n RGBA_OBJ: {\r\n read: function(original) {\r\n if (common.isNumber(original.r) &&\r\n common.isNumber(original.g) &&\r\n common.isNumber(original.b) &&\r\n common.isNumber(original.a)) {\r\n return {\r\n space: 'RGB',\r\n r: original.r,\r\n g: original.g,\r\n b: original.b,\r\n a: original.a\r\n };\r\n }\r\n return false;\r\n },\r\n\r\n write: function(color) {\r\n return {\r\n r: color.r,\r\n g: color.g,\r\n b: color.b,\r\n a: color.a\r\n };\r\n }\r\n },\r\n\r\n RGB_OBJ: {\r\n read: function(original) {\r\n if (common.isNumber(original.r) &&\r\n common.isNumber(original.g) &&\r\n common.isNumber(original.b)) {\r\n return {\r\n space: 'RGB',\r\n r: original.r,\r\n g: original.g,\r\n b: original.b\r\n };\r\n }\r\n return false;\r\n },\r\n\r\n write: function(color) {\r\n return {\r\n r: color.r,\r\n g: color.g,\r\n b: color.b\r\n };\r\n }\r\n },\r\n\r\n HSVA_OBJ: {\r\n read: function(original) {\r\n if (common.isNumber(original.h) &&\r\n common.isNumber(original.s) &&\r\n common.isNumber(original.v) &&\r\n common.isNumber(original.a)) {\r\n return {\r\n space: 'HSV',\r\n h: original.h,\r\n s: original.s,\r\n v: original.v,\r\n a: original.a\r\n };\r\n }\r\n return false;\r\n },\r\n\r\n write: function(color) {\r\n return {\r\n h: color.h,\r\n s: color.s,\r\n v: color.v,\r\n a: color.a\r\n };\r\n }\r\n },\r\n\r\n HSV_OBJ: {\r\n read: function(original) {\r\n if (common.isNumber(original.h) &&\r\n common.isNumber(original.s) &&\r\n common.isNumber(original.v)) {\r\n return {\r\n space: 'HSV',\r\n h: original.h,\r\n s: original.s,\r\n v: original.v\r\n };\r\n }\r\n return false;\r\n },\r\n\r\n write: function(color) {\r\n return {\r\n h: color.h,\r\n s: color.s,\r\n v: color.v\r\n };\r\n }\r\n }\r\n }\r\n }\r\n];\r\n\r\nlet result;\r\nlet toReturn;\r\n\r\nconst interpret = function() {\r\n toReturn = false;\r\n\r\n const original = arguments.length > 1 ? common.toArray(arguments) : arguments[0];\r\n common.each(INTERPRETATIONS, function(family) {\r\n if (family.litmus(original)) {\r\n common.each(family.conversions, function(conversion, conversionName) {\r\n result = conversion.read(original);\r\n\r\n if (toReturn === false && result !== false) {\r\n toReturn = result;\r\n result.conversionName = conversionName;\r\n result.conversion = conversion;\r\n return common.BREAK;\r\n }\r\n });\r\n\r\n return common.BREAK;\r\n }\r\n });\r\n\r\n return toReturn;\r\n};\r\n\r\nexport default interpret;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nlet tmpComponent;\r\n\r\nconst ColorMath = {\r\n hsv_to_rgb: function(h, s, v) {\r\n const hi = Math.floor(h / 60) % 6;\r\n\r\n const f = h / 60 - Math.floor(h / 60);\r\n const p = v * (1.0 - s);\r\n const q = v * (1.0 - (f * s));\r\n const t = v * (1.0 - ((1.0 - f) * s));\r\n\r\n const c = [\r\n [v, t, p],\r\n [q, v, p],\r\n [p, v, t],\r\n [p, q, v],\r\n [t, p, v],\r\n [v, p, q]\r\n ][hi];\r\n\r\n return {\r\n r: c[0] * 255,\r\n g: c[1] * 255,\r\n b: c[2] * 255\r\n };\r\n },\r\n\r\n rgb_to_hsv: function(r, g, b) {\r\n const min = Math.min(r, g, b);\r\n const max = Math.max(r, g, b);\r\n const delta = max - min;\r\n let h;\r\n let s;\r\n\r\n if (max !== 0) {\r\n s = delta / max;\r\n } else {\r\n return {\r\n h: NaN,\r\n s: 0,\r\n v: 0\r\n };\r\n }\r\n\r\n if (r === max) {\r\n h = (g - b) / delta;\r\n } else if (g === max) {\r\n h = 2 + (b - r) / delta;\r\n } else {\r\n h = 4 + (r - g) / delta;\r\n }\r\n h /= 6;\r\n if (h < 0) {\r\n h += 1;\r\n }\r\n\r\n return {\r\n h: h * 360,\r\n s: s,\r\n v: max / 255\r\n };\r\n },\r\n\r\n rgb_to_hex: function(r, g, b) {\r\n let hex = this.hex_with_component(0, 2, r);\r\n hex = this.hex_with_component(hex, 1, g);\r\n hex = this.hex_with_component(hex, 0, b);\r\n return hex;\r\n },\r\n\r\n component_from_hex: function(hex, componentIndex) {\r\n return (hex >> (componentIndex * 8)) & 0xFF;\r\n },\r\n\r\n hex_with_component: function(hex, componentIndex, value) {\r\n return value << (tmpComponent = componentIndex * 8) | (hex & ~(0xFF << tmpComponent));\r\n }\r\n};\r\n\r\nexport default ColorMath;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport interpret from './interpret';\r\nimport math from './math';\r\nimport colorToString from './toString';\r\nimport common from '../utils/common';\r\n\r\nclass Color {\r\n constructor() {\r\n this.__state = interpret.apply(this, arguments);\r\n\r\n if (this.__state === false) {\r\n throw new Error('Failed to interpret color arguments');\r\n }\r\n\r\n this.__state.a = this.__state.a || 1;\r\n }\r\n\r\n toString() {\r\n return colorToString(this);\r\n }\r\n\r\n toHexString() {\r\n return colorToString(this, true);\r\n }\r\n\r\n toOriginal() {\r\n return this.__state.conversion.write(this);\r\n }\r\n}\r\n\r\nfunction defineRGBComponent(target, component, componentHexIndex) {\r\n Object.defineProperty(target, component, {\r\n get: function() {\r\n if (this.__state.space === 'RGB') {\r\n return this.__state[component];\r\n }\r\n\r\n Color.recalculateRGB(this, component, componentHexIndex);\r\n\r\n return this.__state[component];\r\n },\r\n\r\n set: function(v) {\r\n if (this.__state.space !== 'RGB') {\r\n Color.recalculateRGB(this, component, componentHexIndex);\r\n this.__state.space = 'RGB';\r\n }\r\n\r\n this.__state[component] = v;\r\n }\r\n });\r\n}\r\n\r\nfunction defineHSVComponent(target, component) {\r\n Object.defineProperty(target, component, {\r\n get: function() {\r\n if (this.__state.space === 'HSV') {\r\n return this.__state[component];\r\n }\r\n\r\n Color.recalculateHSV(this);\r\n\r\n return this.__state[component];\r\n },\r\n\r\n set: function(v) {\r\n if (this.__state.space !== 'HSV') {\r\n Color.recalculateHSV(this);\r\n this.__state.space = 'HSV';\r\n }\r\n\r\n this.__state[component] = v;\r\n }\r\n });\r\n}\r\n\r\n\r\nColor.recalculateRGB = function(color, component, componentHexIndex) {\r\n if (color.__state.space === 'HEX') {\r\n color.__state[component] = math.component_from_hex(color.__state.hex, componentHexIndex);\r\n } else if (color.__state.space === 'HSV') {\r\n common.extend(color.__state, math.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v));\r\n } else {\r\n throw new Error('Corrupted color state');\r\n }\r\n};\r\n\r\nColor.recalculateHSV = function(color) {\r\n const result = math.rgb_to_hsv(color.r, color.g, color.b);\r\n\r\n common.extend(color.__state,\r\n {\r\n s: result.s,\r\n v: result.v\r\n }\r\n );\r\n\r\n if (!common.isNaN(result.h)) {\r\n color.__state.h = result.h;\r\n } else if (common.isUndefined(color.__state.h)) {\r\n color.__state.h = 0;\r\n }\r\n};\r\n\r\nColor.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a'];\r\n\r\ndefineRGBComponent(Color.prototype, 'r', 2);\r\ndefineRGBComponent(Color.prototype, 'g', 1);\r\ndefineRGBComponent(Color.prototype, 'b', 0);\r\n\r\ndefineHSVComponent(Color.prototype, 'h');\r\ndefineHSVComponent(Color.prototype, 's');\r\ndefineHSVComponent(Color.prototype, 'v');\r\n\r\nObject.defineProperty(Color.prototype, 'a', {\r\n get: function() {\r\n return this.__state.a;\r\n },\r\n\r\n set: function(v) {\r\n this.__state.a = v;\r\n }\r\n});\r\n\r\nObject.defineProperty(Color.prototype, 'hex', {\r\n get: function() {\r\n if (!this.__state.space !== 'HEX') {\r\n this.__state.hex = math.rgb_to_hex(this.r, this.g, this.b);\r\n }\r\n\r\n return this.__state.hex;\r\n },\r\n\r\n set: function(v) {\r\n this.__state.space = 'HEX';\r\n this.__state.hex = v;\r\n }\r\n});\r\n\r\nexport default Color;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\n/**\r\n * @class An \"abstract\" class that represents a given property of an object.\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n */\r\nclass Controller {\r\n constructor(object, property) {\r\n this.initialValue = object[property];\r\n\r\n /**\r\n * Those who extend this class will put their DOM elements in here.\r\n * @type {DOMElement}\r\n */\r\n this.domElement = document.createElement('div');\r\n\r\n /**\r\n * The object to manipulate\r\n * @type {Object}\r\n */\r\n this.object = object;\r\n\r\n /**\r\n * The name of the property to manipulate\r\n * @type {String}\r\n */\r\n this.property = property;\r\n\r\n /**\r\n * The function to be called on change.\r\n * @type {Function}\r\n * @ignore\r\n */\r\n this.__onChange = undefined;\r\n\r\n /**\r\n * The function to be called on finishing change.\r\n * @type {Function}\r\n * @ignore\r\n */\r\n this.__onFinishChange = undefined;\r\n }\r\n\r\n /**\r\n * Specify that a function fire every time someone changes the value with\r\n * this Controller.\r\n *\r\n * @param {Function} fnc This function will be called whenever the value\r\n * is modified via this Controller.\r\n * @returns {Controller} this\r\n */\r\n onChange(fnc) {\r\n this.__onChange = fnc;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specify that a function fire every time someone \"finishes\" changing\r\n * the value wih this Controller. Useful for values that change\r\n * incrementally like numbers or strings.\r\n *\r\n * @param {Function} fnc This function will be called whenever\r\n * someone \"finishes\" changing the value via this Controller.\r\n * @returns {Controller} this\r\n */\r\n onFinishChange(fnc) {\r\n this.__onFinishChange = fnc;\r\n return this;\r\n }\r\n\r\n /**\r\n * Change the value of object[property]\r\n *\r\n * @param {Object} newValue The new value of object[property]\r\n */\r\n setValue(newValue) {\r\n this.object[this.property] = newValue;\r\n if (this.__onChange) {\r\n this.__onChange.call(this, newValue);\r\n }\r\n\r\n this.updateDisplay();\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the value of object[property]\r\n *\r\n * @returns {Object} The current value of object[property]\r\n */\r\n getValue() {\r\n return this.object[this.property];\r\n }\r\n\r\n /**\r\n * Refreshes the visual display of a Controller in order to keep sync\r\n * with the object's current value.\r\n * @returns {Controller} this\r\n */\r\n updateDisplay() {\r\n return this;\r\n }\r\n\r\n /**\r\n * @returns {Boolean} true if the value has deviated from initialValue\r\n */\r\n isModified() {\r\n return this.initialValue !== this.getValue();\r\n }\r\n}\r\n\r\nexport default Controller;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport common from '../utils/common';\r\n\r\nconst EVENT_MAP = {\r\n HTMLEvents: ['change'],\r\n MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'],\r\n KeyboardEvents: ['keydown']\r\n};\r\n\r\nconst EVENT_MAP_INV = {};\r\ncommon.each(EVENT_MAP, function(v, k) {\r\n common.each(v, function(e) {\r\n EVENT_MAP_INV[e] = k;\r\n });\r\n});\r\n\r\nconst CSS_VALUE_PIXELS = /(\\d+(\\.\\d+)?)px/;\r\n\r\nfunction cssValueToPixels(val) {\r\n if (val === '0' || common.isUndefined(val)) {\r\n return 0;\r\n }\r\n\r\n const match = val.match(CSS_VALUE_PIXELS);\r\n\r\n if (!common.isNull(match)) {\r\n return parseFloat(match[1]);\r\n }\r\n\r\n // TODO ...ems? %?\r\n\r\n return 0;\r\n}\r\n\r\n/**\r\n * @namespace\r\n * @member dat.dom\r\n */\r\nconst dom = {\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param selectable\r\n */\r\n makeSelectable: function(elem, selectable) {\r\n if (elem === undefined || elem.style === undefined) return;\r\n\r\n elem.onselectstart = selectable ? function() {\r\n return false;\r\n } : function() {\r\n };\r\n\r\n elem.style.MozUserSelect = selectable ? 'auto' : 'none';\r\n elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none';\r\n elem.unselectable = selectable ? 'on' : 'off';\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param horizontal\r\n * @param vert\r\n */\r\n makeFullscreen: function(elem, hor, vert) {\r\n let vertical = vert;\r\n let horizontal = hor;\r\n\r\n if (common.isUndefined(horizontal)) {\r\n horizontal = true;\r\n }\r\n\r\n if (common.isUndefined(vertical)) {\r\n vertical = true;\r\n }\r\n\r\n elem.style.position = 'absolute';\r\n\r\n if (horizontal) {\r\n elem.style.left = 0;\r\n elem.style.right = 0;\r\n }\r\n if (vertical) {\r\n elem.style.top = 0;\r\n elem.style.bottom = 0;\r\n }\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param eventType\r\n * @param params\r\n */\r\n fakeEvent: function(elem, eventType, pars, aux) {\r\n const params = pars || {};\r\n const className = EVENT_MAP_INV[eventType];\r\n if (!className) {\r\n throw new Error('Event type ' + eventType + ' not supported.');\r\n }\r\n const evt = document.createEvent(className);\r\n switch (className) {\r\n case 'MouseEvents':\r\n {\r\n const clientX = params.x || params.clientX || 0;\r\n const clientY = params.y || params.clientY || 0;\r\n evt.initMouseEvent(eventType, params.bubbles || false,\r\n params.cancelable || true, window, params.clickCount || 1,\r\n 0, // screen X\r\n 0, // screen Y\r\n clientX, // client X\r\n clientY, // client Y\r\n false, false, false, false, 0, null);\r\n break;\r\n }\r\n case 'KeyboardEvents':\r\n {\r\n const init = evt.initKeyboardEvent || evt.initKeyEvent; // webkit || moz\r\n common.defaults(params, {\r\n cancelable: true,\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n metaKey: false,\r\n keyCode: undefined,\r\n charCode: undefined\r\n });\r\n init(eventType, params.bubbles || false,\r\n params.cancelable, window,\r\n params.ctrlKey, params.altKey,\r\n params.shiftKey, params.metaKey,\r\n params.keyCode, params.charCode);\r\n break;\r\n }\r\n default:\r\n {\r\n evt.initEvent(eventType, params.bubbles || false, params.cancelable || true);\r\n break;\r\n }\r\n }\r\n common.defaults(evt, aux);\r\n elem.dispatchEvent(evt);\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param event\r\n * @param func\r\n * @param bool\r\n */\r\n bind: function(elem, event, func, newBool) {\r\n const bool = newBool || false;\r\n if (elem.addEventListener) {\r\n elem.addEventListener(event, func, bool);\r\n } else if (elem.attachEvent) {\r\n elem.attachEvent('on' + event, func);\r\n }\r\n return dom;\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param event\r\n * @param func\r\n * @param bool\r\n */\r\n unbind: function(elem, event, func, newBool) {\r\n const bool = newBool || false;\r\n if (elem.removeEventListener) {\r\n elem.removeEventListener(event, func, bool);\r\n } else if (elem.detachEvent) {\r\n elem.detachEvent('on' + event, func);\r\n }\r\n return dom;\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param className\r\n */\r\n addClass: function(elem, className) {\r\n if (elem.className === undefined) {\r\n elem.className = className;\r\n } else if (elem.className !== className) {\r\n const classes = elem.className.split(/ +/);\r\n if (classes.indexOf(className) === -1) {\r\n classes.push(className);\r\n elem.className = classes.join(' ').replace(/^\\s+/, '').replace(/\\s+$/, '');\r\n }\r\n }\r\n return dom;\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param className\r\n */\r\n removeClass: function(elem, className) {\r\n if (className) {\r\n if (elem.className === className) {\r\n elem.removeAttribute('class');\r\n } else {\r\n const classes = elem.className.split(/ +/);\r\n const index = classes.indexOf(className);\r\n if (index !== -1) {\r\n classes.splice(index, 1);\r\n elem.className = classes.join(' ');\r\n }\r\n }\r\n } else {\r\n elem.className = undefined;\r\n }\r\n return dom;\r\n },\r\n\r\n hasClass: function(elem, className) {\r\n return new RegExp('(?:^|\\\\s+)' + className + '(?:\\\\s+|$)').test(elem.className) || false;\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n */\r\n getWidth: function(elem) {\r\n const style = getComputedStyle(elem);\r\n\r\n return cssValueToPixels(style['border-left-width']) +\r\n cssValueToPixels(style['border-right-width']) +\r\n cssValueToPixels(style['padding-left']) +\r\n cssValueToPixels(style['padding-right']) +\r\n cssValueToPixels(style.width);\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n */\r\n getHeight: function(elem) {\r\n const style = getComputedStyle(elem);\r\n\r\n return cssValueToPixels(style['border-top-width']) +\r\n cssValueToPixels(style['border-bottom-width']) +\r\n cssValueToPixels(style['padding-top']) +\r\n cssValueToPixels(style['padding-bottom']) +\r\n cssValueToPixels(style.height);\r\n },\r\n\r\n /**\r\n *\r\n * @param el\r\n */\r\n getOffset: function(el) {\r\n let elem = el;\r\n const offset = { left: 0, top: 0 };\r\n if (elem.offsetParent) {\r\n do {\r\n offset.left += elem.offsetLeft;\r\n offset.top += elem.offsetTop;\r\n elem = elem.offsetParent;\r\n } while (elem);\r\n }\r\n return offset;\r\n },\r\n\r\n // http://stackoverflow.com/posts/2684561/revisions\r\n /**\r\n *\r\n * @param elem\r\n */\r\n isActive: function(elem) {\r\n return elem === document.activeElement && (elem.type || elem.href);\r\n }\r\n\r\n};\r\n\r\nexport default dom;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Controller from './Controller';\r\nimport dom from '../dom/dom';\r\n\r\n/**\r\n * @class Provides a checkbox input to alter the boolean property of an object.\r\n *\r\n * @extends dat.controllers.Controller\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n */\r\nclass BooleanController extends Controller {\r\n constructor(object, property) {\r\n super(object, property);\r\n\r\n const _this = this;\r\n this.__prev = this.getValue();\r\n\r\n this.__checkbox = document.createElement('input');\r\n this.__checkbox.setAttribute('type', 'checkbox');\r\n\r\n function onChange() {\r\n _this.setValue(!_this.__prev);\r\n }\r\n\r\n dom.bind(this.__checkbox, 'change', onChange, false);\r\n\r\n this.domElement.appendChild(this.__checkbox);\r\n\r\n // Match original value\r\n this.updateDisplay();\r\n }\r\n\r\n setValue(v) {\r\n const toReturn = super.setValue(v);\r\n if (this.__onFinishChange) {\r\n this.__onFinishChange.call(this, this.getValue());\r\n }\r\n this.__prev = this.getValue();\r\n return toReturn;\r\n }\r\n\r\n updateDisplay() {\r\n if (this.getValue() === true) {\r\n this.__checkbox.setAttribute('checked', 'checked');\r\n this.__checkbox.checked = true;\r\n this.__prev = true;\r\n } else {\r\n this.__checkbox.checked = false;\r\n this.__prev = false;\r\n }\r\n\r\n return super.updateDisplay();\r\n }\r\n}\r\n\r\nexport default BooleanController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Controller from './Controller';\r\nimport dom from '../dom/dom';\r\nimport common from '../utils/common';\r\n\r\n/**\r\n * @class Provides a select input to alter the property of an object, using a\r\n * list of accepted values.\r\n *\r\n * @extends dat.controllers.Controller\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n * @param {Object|string[]} options A map of labels to acceptable values, or\r\n * a list of acceptable string values.\r\n */\r\nclass OptionController extends Controller {\r\n constructor(object, property, opts) {\r\n super(object, property);\r\n\r\n let options = opts;\r\n\r\n const _this = this;\r\n\r\n /**\r\n * The drop down menu\r\n * @ignore\r\n */\r\n this.__select = document.createElement('select');\r\n\r\n if (common.isArray(options)) {\r\n const map = {};\r\n common.each(options, function(element) {\r\n map[element] = element;\r\n });\r\n options = map;\r\n }\r\n\r\n common.each(options, function(value, key) {\r\n const opt = document.createElement('option');\r\n opt.innerHTML = key;\r\n opt.setAttribute('value', value);\r\n _this.__select.appendChild(opt);\r\n });\r\n\r\n // Acknowledge original value\r\n this.updateDisplay();\r\n\r\n dom.bind(this.__select, 'change', function() {\r\n const desiredValue = this.options[this.selectedIndex].value;\r\n _this.setValue(desiredValue);\r\n });\r\n\r\n this.domElement.appendChild(this.__select);\r\n }\r\n\r\n setValue(v) {\r\n const toReturn = super.setValue(v);\r\n\r\n if (this.__onFinishChange) {\r\n this.__onFinishChange.call(this, this.getValue());\r\n }\r\n return toReturn;\r\n }\r\n\r\n updateDisplay() {\r\n if (dom.isActive(this.__select)) return this; // prevent number from updating if user is trying to manually update\r\n this.__select.value = this.getValue();\r\n return super.updateDisplay();\r\n }\r\n}\r\n\r\nexport default OptionController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Controller from './Controller';\r\nimport dom from '../dom/dom';\r\n\r\n/**\r\n * @class Provides a text input to alter the string property of an object.\r\n *\r\n * @extends dat.controllers.Controller\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n */\r\nclass StringController extends Controller {\r\n constructor(object, property) {\r\n super(object, property);\r\n\r\n const _this = this;\r\n\r\n function onChange() {\r\n _this.setValue(_this.__input.value);\r\n }\r\n\r\n function onBlur() {\r\n if (_this.__onFinishChange) {\r\n _this.__onFinishChange.call(_this, _this.getValue());\r\n }\r\n }\r\n\r\n this.__input = document.createElement('input');\r\n this.__input.setAttribute('type', 'text');\r\n\r\n dom.bind(this.__input, 'keyup', onChange);\r\n dom.bind(this.__input, 'change', onChange);\r\n dom.bind(this.__input, 'blur', onBlur);\r\n dom.bind(this.__input, 'keydown', function(e) {\r\n if (e.keyCode === 13) {\r\n this.blur();\r\n }\r\n });\r\n\r\n this.updateDisplay();\r\n\r\n this.domElement.appendChild(this.__input);\r\n }\r\n\r\n updateDisplay() {\r\n // Stops the caret from moving on account of:\r\n // keyup -> setValue -> updateDisplay\r\n if (!dom.isActive(this.__input)) {\r\n this.__input.value = this.getValue();\r\n }\r\n return super.updateDisplay();\r\n }\r\n}\r\n\r\nexport default StringController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Controller from './Controller';\r\nimport common from '../utils/common';\r\n\r\nfunction numDecimals(x) {\r\n const _x = x.toString();\r\n if (_x.indexOf('.') > -1) {\r\n return _x.length - _x.indexOf('.') - 1;\r\n }\r\n\r\n return 0;\r\n}\r\n\r\n/**\r\n * @class Represents a given property of an object that is a number.\r\n *\r\n * @extends dat.controllers.Controller\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n * @param {Object} [params] Optional parameters\r\n * @param {Number} [params.min] Minimum allowed value\r\n * @param {Number} [params.max] Maximum allowed value\r\n * @param {Number} [params.step] Increment by which to change value\r\n */\r\nclass NumberController extends Controller {\r\n constructor(object, property, params) {\r\n super(object, property);\r\n\r\n const _params = params || {};\r\n\r\n this.__min = _params.min;\r\n this.__max = _params.max;\r\n this.__step = _params.step;\r\n\r\n if (common.isUndefined(this.__step)) {\r\n if (this.initialValue === 0) {\r\n this.__impliedStep = 1; // What are we, psychics?\r\n } else {\r\n // Hey Doug, check this out.\r\n this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(this.initialValue)) / Math.LN10)) / 10;\r\n }\r\n } else {\r\n this.__impliedStep = this.__step;\r\n }\r\n\r\n this.__precision = numDecimals(this.__impliedStep);\r\n }\r\n\r\n setValue(v) {\r\n let _v = v;\r\n\r\n if (this.__min !== undefined && _v < this.__min) {\r\n _v = this.__min;\r\n } else if (this.__max !== undefined && _v > this.__max) {\r\n _v = this.__max;\r\n }\r\n\r\n if (this.__step !== undefined && _v % this.__step !== 0) {\r\n _v = Math.round(_v / this.__step) * this.__step;\r\n }\r\n\r\n return super.setValue(_v);\r\n }\r\n\r\n /**\r\n * Specify a minimum value for object[property].\r\n *\r\n * @param {Number} minValue The minimum value for\r\n * object[property]\r\n * @returns {dat.controllers.NumberController} this\r\n */\r\n min(minValue) {\r\n this.__min = minValue;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specify a maximum value for object[property].\r\n *\r\n * @param {Number} maxValue The maximum value for\r\n * object[property]\r\n * @returns {dat.controllers.NumberController} this\r\n */\r\n max(maxValue) {\r\n this.__max = maxValue;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specify a step value that dat.controllers.NumberController\r\n * increments by.\r\n *\r\n * @param {Number} stepValue The step value for\r\n * dat.controllers.NumberController\r\n * @default if minimum and maximum specified increment is 1% of the\r\n * difference otherwise stepValue is 1\r\n * @returns {dat.controllers.NumberController} this\r\n */\r\n step(stepValue) {\r\n this.__step = stepValue;\r\n this.__impliedStep = stepValue;\r\n this.__precision = numDecimals(stepValue);\r\n return this;\r\n }\r\n}\r\n\r\nexport default NumberController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport NumberController from './NumberController';\r\nimport dom from '../dom/dom';\r\nimport common from '../utils/common';\r\n\r\nfunction roundToDecimal(value, decimals) {\r\n const tenTo = Math.pow(10, decimals);\r\n return Math.round(value * tenTo) / tenTo;\r\n}\r\n\r\n/**\r\n * @class Represents a given property of an object that is a number and\r\n * provides an input element with which to manipulate it.\r\n *\r\n * @extends dat.controllers.Controller\r\n * @extends dat.controllers.NumberController\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n * @param {Object} [params] Optional parameters\r\n * @param {Number} [params.min] Minimum allowed value\r\n * @param {Number} [params.max] Maximum allowed value\r\n * @param {Number} [params.step] Increment by which to change value\r\n */\r\nclass NumberControllerBox extends NumberController {\r\n constructor(object, property, params) {\r\n super(object, property, params);\r\n\r\n this.__truncationSuspended = false;\r\n\r\n const _this = this;\r\n\r\n /**\r\n * {Number} Previous mouse y position\r\n * @ignore\r\n */\r\n let prevY;\r\n\r\n function onChange() {\r\n const attempted = parseFloat(_this.__input.value);\r\n if (!common.isNaN(attempted)) {\r\n _this.setValue(attempted);\r\n }\r\n }\r\n\r\n function onFinish() {\r\n if (_this.__onFinishChange) {\r\n _this.__onFinishChange.call(_this, _this.getValue());\r\n }\r\n }\r\n\r\n function onBlur() {\r\n onFinish();\r\n }\r\n\r\n function onMouseDrag(e) {\r\n const diff = prevY - e.clientY;\r\n _this.setValue(_this.getValue() + diff * _this.__impliedStep);\r\n\r\n prevY = e.clientY;\r\n }\r\n\r\n function onMouseUp() {\r\n dom.unbind(window, 'mousemove', onMouseDrag);\r\n dom.unbind(window, 'mouseup', onMouseUp);\r\n onFinish();\r\n }\r\n\r\n function onMouseDown(e) {\r\n dom.bind(window, 'mousemove', onMouseDrag);\r\n dom.bind(window, 'mouseup', onMouseUp);\r\n prevY = e.clientY;\r\n }\r\n\r\n this.__input = document.createElement('input');\r\n this.__input.setAttribute('type', 'text');\r\n\r\n // Makes it so manually specified values are not truncated.\r\n\r\n dom.bind(this.__input, 'change', onChange);\r\n dom.bind(this.__input, 'blur', onBlur);\r\n dom.bind(this.__input, 'mousedown', onMouseDown);\r\n dom.bind(this.__input, 'keydown', function(e) {\r\n // When pressing enter, you can be as precise as you want.\r\n if (e.keyCode === 13) {\r\n _this.__truncationSuspended = true;\r\n this.blur();\r\n _this.__truncationSuspended = false;\r\n onFinish();\r\n }\r\n });\r\n\r\n this.updateDisplay();\r\n\r\n this.domElement.appendChild(this.__input);\r\n }\r\n\r\n updateDisplay() {\r\n this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision);\r\n return super.updateDisplay();\r\n }\r\n}\r\n\r\nexport default NumberControllerBox;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport NumberController from './NumberController';\r\nimport dom from '../dom/dom';\r\n\r\nfunction map(v, i1, i2, o1, o2) {\r\n return o1 + (o2 - o1) * ((v - i1) / (i2 - i1));\r\n}\r\n\r\n/**\r\n * @class Represents a given property of an object that is a number, contains\r\n * a minimum and maximum, and provides a slider element with which to\r\n * manipulate it. It should be noted that the slider element is made up of\r\n * <div> tags, not the html5\r\n * <slider> element.\r\n *\r\n * @extends dat.controllers.Controller\r\n * @extends dat.controllers.NumberController\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n * @param {Number} minValue Minimum allowed value\r\n * @param {Number} maxValue Maximum allowed value\r\n * @param {Number} stepValue Increment by which to change value\r\n */\r\nclass NumberControllerSlider extends NumberController {\r\n constructor(object, property, min, max, step) {\r\n super(object, property, { min: min, max: max, step: step });\r\n\r\n const _this = this;\r\n\r\n this.__background = document.createElement('div');\r\n this.__foreground = document.createElement('div');\r\n\r\n dom.bind(this.__background, 'mousedown', onMouseDown);\r\n dom.bind(this.__background, 'touchstart', onTouchStart);\r\n\r\n dom.addClass(this.__background, 'slider');\r\n dom.addClass(this.__foreground, 'slider-fg');\r\n\r\n function onMouseDown(e) {\r\n document.activeElement.blur();\r\n\r\n dom.bind(window, 'mousemove', onMouseDrag);\r\n dom.bind(window, 'mouseup', onMouseUp);\r\n\r\n onMouseDrag(e);\r\n }\r\n\r\n function onMouseDrag(e) {\r\n e.preventDefault();\r\n\r\n const bgRect = _this.__background.getBoundingClientRect();\r\n\r\n _this.setValue(\r\n map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max)\r\n );\r\n\r\n return false;\r\n }\r\n\r\n function onMouseUp() {\r\n dom.unbind(window, 'mousemove', onMouseDrag);\r\n dom.unbind(window, 'mouseup', onMouseUp);\r\n if (_this.__onFinishChange) {\r\n _this.__onFinishChange.call(_this, _this.getValue());\r\n }\r\n }\r\n\r\n function onTouchStart(e) {\r\n if (e.touches.length !== 1) { return; }\r\n dom.bind(window, 'touchmove', onTouchMove);\r\n dom.bind(window, 'touchend', onTouchEnd);\r\n onTouchMove(e);\r\n }\r\n\r\n function onTouchMove(e) {\r\n const clientX = e.touches[0].clientX;\r\n const bgRect = _this.__background.getBoundingClientRect();\r\n\r\n _this.setValue(\r\n map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max)\r\n );\r\n }\r\n\r\n function onTouchEnd() {\r\n dom.unbind(window, 'touchmove', onTouchMove);\r\n dom.unbind(window, 'touchend', onTouchEnd);\r\n if (_this.__onFinishChange) {\r\n _this.__onFinishChange.call(_this, _this.getValue());\r\n }\r\n }\r\n\r\n this.updateDisplay();\r\n\r\n this.__background.appendChild(this.__foreground);\r\n this.domElement.appendChild(this.__background);\r\n }\r\n\r\n updateDisplay() {\r\n const pct = (this.getValue() - this.__min) / (this.__max - this.__min);\r\n this.__foreground.style.width = pct * 100 + '%';\r\n return super.updateDisplay();\r\n }\r\n}\r\n\r\nexport default NumberControllerSlider;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Controller from './Controller';\r\nimport dom from '../dom/dom';\r\n\r\n/**\r\n * @class Provides a GUI interface to fire a specified method, a property of an object.\r\n *\r\n * @extends dat.controllers.Controller\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n */\r\nclass FunctionController extends Controller {\r\n constructor(object, property, text) {\r\n super(object, property);\r\n\r\n const _this = this;\r\n\r\n this.__button = document.createElement('div');\r\n this.__button.innerHTML = text === undefined ? 'Fire' : text;\r\n\r\n dom.bind(this.__button, 'click', function(e) {\r\n e.preventDefault();\r\n _this.fire();\r\n return false;\r\n });\r\n\r\n dom.addClass(this.__button, 'button');\r\n\r\n this.domElement.appendChild(this.__button);\r\n }\r\n\r\n fire() {\r\n if (this.__onChange) {\r\n this.__onChange.call(this);\r\n }\r\n this.getValue().call(this.object);\r\n if (this.__onFinishChange) {\r\n this.__onFinishChange.call(this, this.getValue());\r\n }\r\n }\r\n}\r\n\r\nexport default FunctionController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Controller from './Controller';\r\nimport dom from '../dom/dom';\r\nimport Color from '../color/Color';\r\nimport interpret from '../color/interpret';\r\nimport common from '../utils/common';\r\n\r\n/**\r\n * @class Represents a given property of an object that is a color.\r\n * @param {Object} object\r\n * @param {string} property\r\n */\r\nclass ColorController extends Controller {\r\n constructor(object, property) {\r\n super(object, property);\r\n\r\n this.__color = new Color(this.getValue());\r\n this.__temp = new Color(0);\r\n\r\n const _this = this;\r\n\r\n this.domElement = document.createElement('div');\r\n\r\n dom.makeSelectable(this.domElement, false);\r\n\r\n this.__selector = document.createElement('div');\r\n this.__selector.className = 'selector';\r\n\r\n this.__saturation_field = document.createElement('div');\r\n this.__saturation_field.className = 'saturation-field';\r\n\r\n this.__field_knob = document.createElement('div');\r\n this.__field_knob.className = 'field-knob';\r\n this.__field_knob_border = '2px solid ';\r\n\r\n this.__hue_knob = document.createElement('div');\r\n this.__hue_knob.className = 'hue-knob';\r\n\r\n this.__hue_field = document.createElement('div');\r\n this.__hue_field.className = 'hue-field';\r\n\r\n this.__input = document.createElement('input');\r\n this.__input.type = 'text';\r\n this.__input_textShadow = '0 1px 1px ';\r\n\r\n dom.bind(this.__input, 'keydown', function(e) {\r\n if (e.keyCode === 13) { // on enter\r\n onBlur.call(this);\r\n }\r\n });\r\n\r\n dom.bind(this.__input, 'blur', onBlur);\r\n\r\n dom.bind(this.__selector, 'mousedown', function(/* e */) {\r\n dom\r\n .addClass(this, 'drag')\r\n .bind(window, 'mouseup', function(/* e */) {\r\n dom.removeClass(_this.__selector, 'drag');\r\n });\r\n });\r\n\r\n dom.bind(this.__selector, 'touchstart', function(/* e */) {\r\n dom\r\n .addClass(this, 'drag')\r\n .bind(window, 'touchend', function(/* e */) {\r\n dom.removeClass(_this.__selector, 'drag');\r\n });\r\n });\r\n\r\n const valueField = document.createElement('div');\r\n\r\n common.extend(this.__selector.style, {\r\n width: '122px',\r\n height: '102px',\r\n padding: '3px',\r\n backgroundColor: '#222',\r\n boxShadow: '0px 1px 3px rgba(0,0,0,0.3)'\r\n });\r\n\r\n common.extend(this.__field_knob.style, {\r\n position: 'absolute',\r\n width: '12px',\r\n height: '12px',\r\n border: this.__field_knob_border + (this.__color.v < 0.5 ? '#fff' : '#000'),\r\n boxShadow: '0px 1px 3px rgba(0,0,0,0.5)',\r\n borderRadius: '12px',\r\n zIndex: 1\r\n });\r\n\r\n common.extend(this.__hue_knob.style, {\r\n position: 'absolute',\r\n width: '15px',\r\n height: '2px',\r\n borderRight: '4px solid #fff',\r\n zIndex: 1\r\n });\r\n\r\n common.extend(this.__saturation_field.style, {\r\n width: '100px',\r\n height: '100px',\r\n border: '1px solid #555',\r\n marginRight: '3px',\r\n display: 'inline-block',\r\n cursor: 'pointer'\r\n });\r\n\r\n common.extend(valueField.style, {\r\n width: '100%',\r\n height: '100%',\r\n background: 'none'\r\n });\r\n\r\n linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000');\r\n\r\n common.extend(this.__hue_field.style, {\r\n width: '15px',\r\n height: '100px',\r\n border: '1px solid #555',\r\n cursor: 'ns-resize',\r\n position: 'absolute',\r\n top: '3px',\r\n right: '3px'\r\n });\r\n\r\n hueGradient(this.__hue_field);\r\n\r\n common.extend(this.__input.style, {\r\n outline: 'none',\r\n// width: '120px',\r\n textAlign: 'center',\r\n// padding: '4px',\r\n// marginBottom: '6px',\r\n color: '#fff',\r\n border: 0,\r\n fontWeight: 'bold',\r\n textShadow: this.__input_textShadow + 'rgba(0,0,0,0.7)'\r\n });\r\n\r\n dom.bind(this.__saturation_field, 'mousedown', fieldDown);\r\n dom.bind(this.__saturation_field, 'touchstart', fieldDown);\r\n\r\n dom.bind(this.__field_knob, 'mousedown', fieldDown);\r\n dom.bind(this.__field_knob, 'touchstart', fieldDown);\r\n\r\n dom.bind(this.__hue_field, 'mousedown', fieldDownH);\r\n dom.bind(this.__hue_field, 'touchstart', fieldDownH);\r\n\r\n function fieldDown(e) {\r\n setSV(e);\r\n dom.bind(window, 'mousemove', setSV);\r\n dom.bind(window, 'touchmove', setSV);\r\n dom.bind(window, 'mouseup', fieldUpSV);\r\n dom.bind(window, 'touchend', fieldUpSV);\r\n }\r\n\r\n function fieldDownH(e) {\r\n setH(e);\r\n dom.bind(window, 'mousemove', setH);\r\n dom.bind(window, 'touchmove', setH);\r\n dom.bind(window, 'mouseup', fieldUpH);\r\n dom.bind(window, 'touchend', fieldUpH);\r\n }\r\n\r\n function fieldUpSV() {\r\n dom.unbind(window, 'mousemove', setSV);\r\n dom.unbind(window, 'touchmove', setSV);\r\n dom.unbind(window, 'mouseup', fieldUpSV);\r\n dom.unbind(window, 'touchend', fieldUpSV);\r\n onFinish();\r\n }\r\n\r\n function fieldUpH() {\r\n dom.unbind(window, 'mousemove', setH);\r\n dom.unbind(window, 'touchmove', setH);\r\n dom.unbind(window, 'mouseup', fieldUpH);\r\n dom.unbind(window, 'touchend', fieldUpH);\r\n onFinish();\r\n }\r\n\r\n function onBlur() {\r\n const i = interpret(this.value);\r\n if (i !== false) {\r\n _this.__color.__state = i;\r\n _this.setValue(_this.__color.toOriginal());\r\n } else {\r\n this.value = _this.__color.toString();\r\n }\r\n }\r\n\r\n function onFinish() {\r\n if (_this.__onFinishChange) {\r\n _this.__onFinishChange.call(_this, _this.__color.toOriginal());\r\n }\r\n }\r\n\r\n this.__saturation_field.appendChild(valueField);\r\n this.__selector.appendChild(this.__field_knob);\r\n this.__selector.appendChild(this.__saturation_field);\r\n this.__selector.appendChild(this.__hue_field);\r\n this.__hue_field.appendChild(this.__hue_knob);\r\n\r\n this.domElement.appendChild(this.__input);\r\n this.domElement.appendChild(this.__selector);\r\n\r\n this.updateDisplay();\r\n\r\n function setSV(e) {\r\n if (e.type.indexOf('touch') === -1) { e.preventDefault(); }\r\n\r\n const fieldRect = _this.__saturation_field.getBoundingClientRect();\r\n const { clientX, clientY } = (e.touches && e.touches[0]) || e;\r\n let s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left);\r\n let v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\r\n\r\n if (v > 1) {\r\n v = 1;\r\n } else if (v < 0) {\r\n v = 0;\r\n }\r\n\r\n if (s > 1) {\r\n s = 1;\r\n } else if (s < 0) {\r\n s = 0;\r\n }\r\n\r\n _this.__color.v = v;\r\n _this.__color.s = s;\r\n\r\n _this.setValue(_this.__color.toOriginal());\r\n\r\n\r\n return false;\r\n }\r\n\r\n function setH(e) {\r\n if (e.type.indexOf('touch') === -1) { e.preventDefault(); }\r\n\r\n const fieldRect = _this.__hue_field.getBoundingClientRect();\r\n const { clientY } = (e.touches && e.touches[0]) || e;\r\n let h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\r\n\r\n if (h > 1) {\r\n h = 1;\r\n } else if (h < 0) {\r\n h = 0;\r\n }\r\n\r\n _this.__color.h = h * 360;\r\n\r\n _this.setValue(_this.__color.toOriginal());\r\n\r\n return false;\r\n }\r\n }\r\n\r\n updateDisplay() {\r\n const i = interpret(this.getValue());\r\n\r\n if (i !== false) {\r\n let mismatch = false;\r\n\r\n // Check for mismatch on the interpreted value.\r\n\r\n common.each(Color.COMPONENTS, function(component) {\r\n if (!common.isUndefined(i[component]) && !common.isUndefined(this.__color.__state[component]) &&\r\n i[component] !== this.__color.__state[component]) {\r\n mismatch = true;\r\n return {}; // break\r\n }\r\n }, this);\r\n\r\n // If nothing diverges, we keep our previous values\r\n // for statefulness, otherwise we recalculate fresh\r\n if (mismatch) {\r\n common.extend(this.__color.__state, i);\r\n }\r\n }\r\n\r\n common.extend(this.__temp.__state, this.__color.__state);\r\n\r\n this.__temp.a = 1;\r\n\r\n const flip = (this.__color.v < 0.5 || this.__color.s > 0.5) ? 255 : 0;\r\n const _flip = 255 - flip;\r\n\r\n common.extend(this.__field_knob.style, {\r\n marginLeft: 100 * this.__color.s - 7 + 'px',\r\n marginTop: 100 * (1 - this.__color.v) - 7 + 'px',\r\n backgroundColor: this.__temp.toHexString(),\r\n border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')'\r\n });\r\n\r\n this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px';\r\n\r\n this.__temp.s = 1;\r\n this.__temp.v = 1;\r\n\r\n linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString());\r\n\r\n this.__input.value = this.__color.toString();\r\n\r\n common.extend(this.__input.style, {\r\n backgroundColor: this.__color.toHexString(),\r\n color: 'rgb(' + flip + ',' + flip + ',' + flip + ')',\r\n textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)'\r\n });\r\n }\r\n}\r\n\r\nconst vendors = ['-moz-', '-o-', '-webkit-', '-ms-', ''];\r\n\r\nfunction linearGradient(elem, x, a, b) {\r\n elem.style.background = '';\r\n common.each(vendors, function(vendor) {\r\n elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); ';\r\n });\r\n}\r\n\r\nfunction hueGradient(elem) {\r\n elem.style.background = '';\r\n elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);';\r\n elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\r\n elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\r\n elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\r\n elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\r\n}\r\n\r\nexport default ColorController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport OptionController from './OptionController';\r\nimport NumberControllerBox from './NumberControllerBox';\r\nimport NumberControllerSlider from './NumberControllerSlider';\r\nimport StringController from './StringController';\r\nimport FunctionController from './FunctionController';\r\nimport BooleanController from './BooleanController';\r\nimport common from '../utils/common';\r\n\r\nconst ControllerFactory = function(object, property) {\r\n const initialValue = object[property];\r\n\r\n // Providing options?\r\n if (common.isArray(arguments[2]) || common.isObject(arguments[2])) {\r\n return new OptionController(object, property, arguments[2]);\r\n }\r\n\r\n // Providing a map?\r\n if (common.isNumber(initialValue)) {\r\n // Has min and max? (slider)\r\n if (common.isNumber(arguments[2]) && common.isNumber(arguments[3])) {\r\n // has step?\r\n if (common.isNumber(arguments[4])) {\r\n return new NumberControllerSlider(object, property,\r\n arguments[2], arguments[3], arguments[4]);\r\n }\r\n\r\n return new NumberControllerSlider(object, property, arguments[2], arguments[3]);\r\n }\r\n\r\n // number box\r\n if (common.isNumber(arguments[4])) { // has step\r\n return new NumberControllerBox(object, property,\r\n { min: arguments[2], max: arguments[3], step: arguments[4] });\r\n }\r\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] });\r\n }\r\n\r\n if (common.isString(initialValue)) {\r\n return new StringController(object, property);\r\n }\r\n\r\n if (common.isFunction(initialValue)) {\r\n return new FunctionController(object, property, '');\r\n }\r\n\r\n if (common.isBoolean(initialValue)) {\r\n return new BooleanController(object, property);\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport default ControllerFactory;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * @author Andrej Hristoliubov https://anhr.github.io/AboutMe/\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport Controller from './Controller';\r\nimport ControllerFactory from './ControllerFactory';\r\n\r\n/**\r\n * @class Represents a custom controller.\r\n *\r\n * @extends dat.controllers.Controller\r\n *\r\n */\r\nclass CustomController extends Controller{\r\n /**\r\n * Represents a custom controller.\r\n * @param {Object} object The object to be manipulated\r\n * @param {Function} [object.property] Returns an object with elements for adding into \"property-name\" class element.\r\n * @param {string} property The name of the property to be manipulated\r\n * @param {Object} [params] Optional parameters\r\n */\r\n constructor(object, property) {\r\n super(object, property);\r\n\r\n this.arguments = {\r\n object: object, property: property, opts: Array.prototype.slice.call(arguments, 2)\r\n }\r\n if(object.property)\r\n this.property = object.property( this );\r\n }\r\n set controller( newController ){\r\n this._controller = newController;\r\n }\r\n get controller(){\r\n return this._controller;\r\n }\r\n}\r\n\r\nexport default CustomController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nconst css = {\r\n load: function(url, indoc) {\r\n const doc = indoc || document;\r\n const link = doc.createElement('link');\r\n link.type = 'text/css';\r\n link.rel = 'stylesheet';\r\n link.href = url;\r\n doc.getElementsByTagName('head')[0].appendChild(link);\r\n },\r\n\r\n inject: function(cssContent, indoc) {\r\n const doc = indoc || document;\r\n const injected = document.createElement('style');\r\n injected.type = 'text/css';\r\n injected.innerHTML = cssContent;\r\n const head = doc.getElementsByTagName('head')[0];\r\n try {\r\n head.appendChild(injected);\r\n } catch (e) { // Unable to inject CSS, probably because of a Content Security Policy\r\n }\r\n }\r\n};\r\n\r\nexport default css;\r\n","const saveDialogContents = `
\r\n\r\n Here's the new load parameter for your GUI's constructor:\r\n\r\n \r\n\r\n
\r\n\r\n Automatically save\r\n values to localStorage on exit.\r\n\r\n
The values saved to localStorage will\r\n override those passed to dat.GUI's constructor. This makes it\r\n easier to work incrementally, but localStorage is fragile,\r\n and your friends may not see the same values you do.\r\n\r\n
\r\n\r\n
\r\n\r\n
`;\r\n\r\nexport default saveDialogContents;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nfunction requestAnimationFrame(callback) {\r\n setTimeout(callback, 1000 / 60);\r\n}\r\n\r\nexport default window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n window.msRequestAnimationFrame ||\r\n requestAnimationFrame;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport dom from '../dom/dom';\r\nimport common from '../utils/common';\r\n\r\nclass CenteredDiv {\r\n constructor() {\r\n this.backgroundElement = document.createElement('div');\r\n common.extend(this.backgroundElement.style, {\r\n backgroundColor: 'rgba(0,0,0,0.8)',\r\n top: 0,\r\n left: 0,\r\n display: 'none',\r\n zIndex: '1000',\r\n opacity: 0,\r\n WebkitTransition: 'opacity 0.2s linear',\r\n transition: 'opacity 0.2s linear'\r\n });\r\n\r\n dom.makeFullscreen(this.backgroundElement);\r\n this.backgroundElement.style.position = 'fixed';\r\n\r\n this.domElement = document.createElement('div');\r\n common.extend(this.domElement.style, {\r\n position: 'fixed',\r\n display: 'none',\r\n zIndex: '1001',\r\n opacity: 0,\r\n WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear',\r\n transition: 'transform 0.2s ease-out, opacity 0.2s linear'\r\n });\r\n\r\n\r\n document.body.appendChild(this.backgroundElement);\r\n document.body.appendChild(this.domElement);\r\n\r\n const _this = this;\r\n dom.bind(this.backgroundElement, 'click', function() {\r\n _this.hide();\r\n });\r\n }\r\n\r\n show() {\r\n const _this = this;\r\n\r\n this.backgroundElement.style.display = 'block';\r\n\r\n this.domElement.style.display = 'block';\r\n this.domElement.style.opacity = 0;\r\n// this.domElement.style.top = '52%';\r\n this.domElement.style.webkitTransform = 'scale(1.1)';\r\n\r\n this.layout();\r\n\r\n common.defer(function() {\r\n _this.backgroundElement.style.opacity = 1;\r\n _this.domElement.style.opacity = 1;\r\n _this.domElement.style.webkitTransform = 'scale(1)';\r\n });\r\n }\r\n\r\n /**\r\n * Hide centered div\r\n */\r\n hide() {\r\n const _this = this;\r\n\r\n const hide = function() {\r\n _this.domElement.style.display = 'none';\r\n _this.backgroundElement.style.display = 'none';\r\n\r\n dom.unbind(_this.domElement, 'webkitTransitionEnd', hide);\r\n dom.unbind(_this.domElement, 'transitionend', hide);\r\n dom.unbind(_this.domElement, 'oTransitionEnd', hide);\r\n };\r\n\r\n dom.bind(this.domElement, 'webkitTransitionEnd', hide);\r\n dom.bind(this.domElement, 'transitionend', hide);\r\n dom.bind(this.domElement, 'oTransitionEnd', hide);\r\n\r\n this.backgroundElement.style.opacity = 0;\r\n// this.domElement.style.top = '48%';\r\n this.domElement.style.opacity = 0;\r\n this.domElement.style.webkitTransform = 'scale(1.1)';\r\n }\r\n\r\n layout() {\r\n this.domElement.style.left = window.innerWidth / 2 - dom.getWidth(this.domElement) / 2 + 'px';\r\n this.domElement.style.top = window.innerHeight / 2 - dom.getHeight(this.domElement) / 2 + 'px';\r\n }\r\n}\r\n\r\nexport default CenteredDiv;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport css from '../utils/css';\r\nimport saveDialogueContents from './saveDialogue.html';\r\nimport ControllerFactory from '../controllers/ControllerFactory';\r\nimport Controller from '../controllers/Controller';\r\nimport BooleanController from '../controllers/BooleanController';\r\nimport FunctionController from '../controllers/FunctionController';\r\nimport NumberControllerBox from '../controllers/NumberControllerBox';\r\nimport NumberControllerSlider from '../controllers/NumberControllerSlider';\r\nimport ColorController from '../controllers/ColorController';\r\nimport CustomController from '../controllers/CustomController';\r\nimport requestAnimationFrame from '../utils/requestAnimationFrame';\r\nimport CenteredDiv from '../dom/CenteredDiv';\r\nimport dom from '../dom/dom';\r\nimport common from '../utils/common';\r\n\r\nimport styleSheet from './style.scss'; // CSS to embed in build\r\n\r\ncss.inject(styleSheet);\r\n\r\n/** @ignore Outer-most className for GUI's */\r\nconst CSS_NAMESPACE = 'dg';\r\n\r\nconst HIDE_KEY_CODE = 72;\r\n\r\n/** @ignore The only value shared between the JS and SCSS. Use caution. */\r\nconst CLOSE_BUTTON_HEIGHT = 20;\r\n\r\nconst DEFAULT_DEFAULT_PRESET_NAME = 'Default';\r\n\r\nconst SUPPORTS_LOCAL_STORAGE = (function() {\r\n try {\r\n return !!window.localStorage;\r\n } catch (e) {\r\n return false;\r\n }\r\n}());\r\n\r\nlet SAVE_DIALOGUE;\r\n\r\n/** @ignore Have we yet to create an autoPlace GUI? */\r\nlet autoPlaceVirgin = true;\r\n\r\n/** @ignore Fixed position div that auto place GUI's go inside */\r\nlet autoPlaceContainer;\r\n\r\n/** @ignore Are we hiding the GUI's ? */\r\nlet hide = false;\r\n\r\n/** @private GUI's which should be hidden */\r\nconst hideableGuis = [];\r\n\r\n/**\r\n * @class A lightweight controller library for JavaScript. It allows you to easily\r\n * manipulate variables and fire functions on the fly.\r\n *\r\n * @typicalname gui\r\n *\r\n * @example\r\n * // Creating a GUI with options.\r\n * var gui = new dat.GUI({name: 'My GUI'});\r\n *\r\n * @example\r\n * // Creating a GUI and a subfolder.\r\n * var gui = new dat.GUI();\r\n * var folder1 = gui.addFolder('Flow Field');\r\n *\r\n * @param {Object} [params]\r\n * @param {String} [params.name] The name of this GUI.\r\n * @param {Object} [params.load] JSON object representing the saved state of\r\n * this GUI.\r\n * @param {dat.gui.GUI} [params.parent] The GUI I'm nested in.\r\n * @param {Boolean} [params.autoPlace=true]\r\n * @param {Boolean} [params.hideable=true] If true, GUI is shown/hidden by h keypress.\r\n * @param {Boolean} [params.closed=false] If true, starts closed\r\n * @param {Boolean} [params.closeOnTop=false] If true, close/open button shows on top of the GUI\r\n */\r\nconst GUI = function(pars) {\r\n const _this = this;\r\n\r\n let params = pars || {};\r\n\r\n /**\r\n * Outermost DOM Element\r\n * @type {DOMElement}\r\n */\r\n this.domElement = document.createElement('div');\r\n this.__ul = document.createElement('ul');\r\n this.domElement.appendChild(this.__ul);\r\n\r\n dom.addClass(this.domElement, CSS_NAMESPACE);\r\n\r\n /**\r\n * Nested GUI's by name\r\n * @ignore\r\n */\r\n this.__folders = {};\r\n\r\n this.__controllers = [];\r\n\r\n /**\r\n * List of objects I'm remembering for save, only used in top level GUI\r\n * @ignore\r\n */\r\n this.__rememberedObjects = [];\r\n\r\n /**\r\n * Maps the index of remembered objects to a map of controllers, only used\r\n * in top level GUI.\r\n *\r\n * @private\r\n * @ignore\r\n *\r\n * @example\r\n * [\r\n * {\r\n * propertyName: Controller,\r\n * anotherPropertyName: Controller\r\n * },\r\n * {\r\n * propertyName: Controller\r\n * }\r\n * ]\r\n */\r\n this.__rememberedObjectIndecesToControllers = [];\r\n\r\n this.__listening = [];\r\n\r\n // Default parameters\r\n params = common.defaults(params, {\r\n closeOnTop: false,\r\n autoPlace: true,\r\n width: GUI.DEFAULT_WIDTH\r\n });\r\n\r\n params = common.defaults(params, {\r\n resizable: params.autoPlace,\r\n hideable: params.autoPlace\r\n });\r\n\r\n if (!common.isUndefined(params.load)) {\r\n // Explicit preset\r\n if (params.preset) {\r\n params.load.preset = params.preset;\r\n }\r\n } else {\r\n params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME };\r\n }\r\n\r\n if (common.isUndefined(params.parent) && params.hideable) {\r\n hideableGuis.push(this);\r\n }\r\n\r\n // Only root level GUI's are resizable.\r\n params.resizable = common.isUndefined(params.parent) && params.resizable;\r\n\r\n if (params.autoPlace && common.isUndefined(params.scrollable)) {\r\n params.scrollable = true;\r\n }\r\n// params.scrollable = common.isUndefined(params.parent) && params.scrollable === true;\r\n\r\n // Not part of params because I don't want people passing this in via\r\n // constructor. Should be a 'remembered' value.\r\n let useLocalStorage =\r\n SUPPORTS_LOCAL_STORAGE &&\r\n localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true';\r\n\r\n let saveToLocalStorage;\r\n let titleRow;\r\n\r\n Object.defineProperties(this,\r\n /** @lends GUI.prototype */\r\n {\r\n /**\r\n * The parent GUI\r\n * @type dat.gui.GUI\r\n */\r\n parent: {\r\n get: function() {\r\n return params.parent;\r\n }\r\n },\r\n\r\n scrollable: {\r\n get: function() {\r\n return params.scrollable;\r\n }\r\n },\r\n\r\n /**\r\n * Handles GUI's element placement for you\r\n * @type Boolean\r\n */\r\n autoPlace: {\r\n get: function() {\r\n return params.autoPlace;\r\n }\r\n },\r\n\r\n /**\r\n * Handles GUI's position of open/close button\r\n * @type Boolean\r\n */\r\n closeOnTop: {\r\n get: function() {\r\n return params.closeOnTop;\r\n }\r\n },\r\n\r\n /**\r\n * The identifier for a set of saved values\r\n * @type String\r\n */\r\n preset: {\r\n get: function() {\r\n if (_this.parent) {\r\n return _this.getRoot().preset;\r\n }\r\n\r\n return params.load.preset;\r\n },\r\n\r\n set: function(v) {\r\n if (_this.parent) {\r\n _this.getRoot().preset = v;\r\n } else {\r\n params.load.preset = v;\r\n }\r\n setPresetSelectIndex(this);\r\n _this.revert();\r\n }\r\n },\r\n\r\n /**\r\n * The width of GUI element\r\n * @type Number\r\n */\r\n width: {\r\n get: function() {\r\n return params.width;\r\n },\r\n set: function(v) {\r\n params.width = v;\r\n setWidth(_this, v);\r\n }\r\n },\r\n\r\n /**\r\n * The name of GUI. Used for folders. i.e\r\n * a folder's name\r\n * @type String\r\n */\r\n name: {\r\n get: function() {\r\n return params.name;\r\n },\r\n set: function(v) {\r\n // TODO Check for collisions among sibling folders\r\n params.name = v;\r\n if (titleRow) {\r\n titleRow.innerHTML = params.name;\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Whether the GUI is collapsed or not\r\n * @type Boolean\r\n */\r\n closed: {\r\n get: function() {\r\n return params.closed;\r\n },\r\n set: function(v) {\r\n params.closed = v;\r\n if (params.closed) {\r\n dom.addClass(_this.__ul, GUI.CLASS_CLOSED);\r\n } else {\r\n dom.removeClass(_this.__ul, GUI.CLASS_CLOSED);\r\n }\r\n // For browsers that aren't going to respect the CSS transition,\r\n // Lets just check our height against the window height right off\r\n // the bat.\r\n this.onResize();\r\n\r\n if (_this.__closeButton) {\r\n _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED;\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Contains all presets\r\n * @type Object\r\n */\r\n load: {\r\n get: function() {\r\n return params.load;\r\n }\r\n },\r\n\r\n /**\r\n * Determines whether or not to use localStorage as the means for\r\n * remembering\r\n * @type Boolean\r\n */\r\n useLocalStorage: {\r\n\r\n get: function() {\r\n return useLocalStorage;\r\n },\r\n set: function(bool) {\r\n if (SUPPORTS_LOCAL_STORAGE) {\r\n useLocalStorage = bool;\r\n if (bool) {\r\n dom.bind(window, 'unload', saveToLocalStorage);\r\n } else {\r\n dom.unbind(window, 'unload', saveToLocalStorage);\r\n }\r\n localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool);\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Are we a root level GUI?\r\n if (common.isUndefined(params.parent)) {\r\n this.closed = params.closed || false;\r\n\r\n dom.addClass(this.domElement, GUI.CLASS_MAIN);\r\n dom.makeSelectable(this.domElement, false);\r\n\r\n // Are we supposed to be loading locally?\r\n if (SUPPORTS_LOCAL_STORAGE) {\r\n if (useLocalStorage) {\r\n _this.useLocalStorage = true;\r\n\r\n const savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui'));\r\n\r\n if (savedGui) {\r\n params.load = JSON.parse(savedGui);\r\n }\r\n }\r\n }\r\n\r\n this.__closeButton = document.createElement('div');\r\n this.__closeButton.innerHTML = GUI.TEXT_CLOSED;\r\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON);\r\n if (params.closeOnTop) {\r\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP);\r\n this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]);\r\n } else {\r\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM);\r\n this.domElement.appendChild(this.__closeButton);\r\n }\r\n\r\n dom.bind(this.__closeButton, 'click', function() {\r\n _this.closed = !_this.closed;\r\n });\r\n // Oh, you're a nested GUI!\r\n } else {\r\n if (params.closed === undefined) {\r\n params.closed = true;\r\n }\r\n\r\n const titleRowName = document.createTextNode(params.name);\r\n dom.addClass(titleRowName, 'controller-name');\r\n\r\n titleRow = addRow(_this, titleRowName);\r\n\r\n const onClickTitle = function(e) {\r\n e.preventDefault();\r\n _this.closed = !_this.closed;\r\n return false;\r\n };\r\n\r\n dom.addClass(this.__ul, GUI.CLASS_CLOSED);\r\n\r\n dom.addClass(titleRow, 'title');\r\n dom.bind(titleRow, 'click', onClickTitle);\r\n\r\n if (!params.closed) {\r\n this.closed = false;\r\n }\r\n }\r\n\r\n if (params.autoPlace) {\r\n if (common.isUndefined(params.parent)) {\r\n if (autoPlaceVirgin) {\r\n autoPlaceContainer = document.createElement('div');\r\n dom.addClass(autoPlaceContainer, CSS_NAMESPACE);\r\n dom.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER);\r\n document.body.appendChild(autoPlaceContainer);\r\n autoPlaceVirgin = false;\r\n }\r\n\r\n // Put it in the dom for you.\r\n autoPlaceContainer.appendChild(this.domElement);\r\n\r\n // Apply the auto styles\r\n dom.addClass(this.domElement, GUI.CLASS_AUTO_PLACE);\r\n }\r\n\r\n\r\n // Make it not elastic.\r\n if (!this.parent) {\r\n setWidth(_this, params.width);\r\n }\r\n }\r\n\r\n this.__resizeHandler = function() {\r\n _this.onResizeDebounced();\r\n };\r\n\r\n dom.bind(window, 'resize', this.__resizeHandler);\r\n dom.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler);\r\n dom.bind(this.__ul, 'transitionend', this.__resizeHandler);\r\n dom.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler);\r\n this.onResize();\r\n\r\n if (params.resizable) {\r\n addResizeHandle(this);\r\n }\r\n\r\n saveToLocalStorage = function() {\r\n if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') {\r\n localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject()));\r\n }\r\n };\r\n\r\n // expose this method publicly\r\n this.saveToLocalStorageIfPossible = saveToLocalStorage;\r\n\r\n function resetWidth() {\r\n const root = _this.getRoot();\r\n root.width += 1;\r\n common.defer(function() {\r\n root.width -= 1;\r\n });\r\n }\r\n\r\n if (!params.parent) {\r\n resetWidth();\r\n }\r\n};\r\n\r\nGUI.toggleHide = function() {\r\n hide = !hide;\r\n common.each(hideableGuis, function(gui) {\r\n gui.domElement.style.display = hide ? 'none' : '';\r\n });\r\n};\r\n\r\nGUI.CLASS_AUTO_PLACE = 'a';\r\nGUI.CLASS_AUTO_PLACE_CONTAINER = 'ac';\r\nGUI.CLASS_MAIN = 'main';\r\nGUI.CLASS_CONTROLLER_ROW = 'cr';\r\nGUI.CLASS_TOO_TALL = 'taller-than-window';\r\nGUI.CLASS_CLOSED = 'closed';\r\nGUI.CLASS_CLOSE_BUTTON = 'close-button';\r\nGUI.CLASS_CLOSE_TOP = 'close-top';\r\nGUI.CLASS_CLOSE_BOTTOM = 'close-bottom';\r\nGUI.CLASS_DRAG = 'drag';\r\n\r\nGUI.DEFAULT_WIDTH = 245;\r\nGUI.TEXT_CLOSED = 'Close Controls';\r\nGUI.TEXT_OPEN = 'Open Controls';\r\n\r\nGUI._keydownHandler = function(e) {\r\n if (document.activeElement.type !== 'text' &&\r\n (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) {\r\n GUI.toggleHide();\r\n }\r\n};\r\ndom.bind(window, 'keydown', GUI._keydownHandler, false);\r\n\r\ncommon.extend(\r\n GUI.prototype,\r\n\r\n /** @lends GUI.prototype */\r\n {\r\n\r\n /**\r\n * Adds a new {@link Controller} to the GUI. The type of controller created\r\n * is inferred from the initial value of object[property]. For\r\n * color properties, see {@link addColor}.\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {String} property The name of the property to be manipulated\r\n * @param {Number} [min] Minimum allowed value\r\n * @param {Number} [max] Maximum allowed value\r\n * @param {Number} [step] Increment by which to change value\r\n * @returns {Controller} The controller that was added to the GUI.\r\n * @instance\r\n *\r\n * @example\r\n * // Add a string controller.\r\n * var person = {name: 'Sam'};\r\n * gui.add(person, 'name');\r\n *\r\n * @example\r\n * // Add a number controller slider.\r\n * var person = {age: 45};\r\n * gui.add(person, 'age', 0, 100);\r\n */\r\n add: function(object, property) {\r\n return add(\r\n this,\r\n object,\r\n property,\r\n {\r\n factoryArgs: Array.prototype.slice.call(arguments, 2)\r\n }\r\n );\r\n },\r\n\r\n /**\r\n * Adds a new color controller to the GUI.\r\n *\r\n * @param object\r\n * @param property\r\n * @returns {Controller} The controller that was added to the GUI.\r\n * @instance\r\n *\r\n * @example\r\n * var palette = {\r\n * color1: '#FF0000', // CSS string\r\n * color2: [ 0, 128, 255 ], // RGB array\r\n * color3: [ 0, 128, 255, 0.3 ], // RGB with alpha\r\n * color4: { h: 350, s: 0.9, v: 0.3 } // Hue, saturation, value\r\n * };\r\n * gui.addColor(palette, 'color1');\r\n * gui.addColor(palette, 'color2');\r\n * gui.addColor(palette, 'color3');\r\n * gui.addColor(palette, 'color4');\r\n */\r\n addColor: function(object, property) {\r\n return add(\r\n this,\r\n object,\r\n property,\r\n {\r\n color: true\r\n }\r\n );\r\n },\r\n\r\n /**\r\n * Removes the given controller from the GUI.\r\n * @param {Controller} controller\r\n * @instance\r\n */\r\n remove: function(controller) {\r\n // TODO listening?\r\n this.__ul.removeChild(controller.__li);\r\n this.__controllers.splice(this.__controllers.indexOf(controller), 1);\r\n const _this = this;\r\n common.defer(function() {\r\n _this.onResize();\r\n });\r\n },\r\n\r\n /**\r\n * Removes the root GUI from the document and unbinds all event listeners.\r\n * For subfolders, use `gui.removeFolder(folder)` instead.\r\n * @instance\r\n */\r\n destroy: function() {\r\n if (this.parent) {\r\n throw new Error(\r\n 'Only the root GUI should be removed with .destroy(). ' +\r\n 'For subfolders, use gui.removeFolder(folder) instead.'\r\n );\r\n }\r\n\r\n if (this.autoPlace) {\r\n autoPlaceContainer.removeChild(this.domElement);\r\n }\r\n\r\n const _this = this;\r\n common.each(this.__folders, function(subfolder) {\r\n _this.removeFolder(subfolder);\r\n });\r\n\r\n dom.unbind(window, 'keydown', GUI._keydownHandler, false);\r\n\r\n removeListeners(this);\r\n },\r\n\r\n /**\r\n * Creates a new subfolder GUI instance.\r\n * @param name\r\n * @returns {dat.gui.GUI} The new folder.\r\n * @throws {Error} if this GUI already has a folder by the specified\r\n * name\r\n * @instance\r\n */\r\n addFolder: function(name) {\r\n // We have to prevent collisions on names in order to have a key\r\n // by which to remember saved values\r\n if (this.__folders[name] !== undefined) {\r\n throw new Error('You already have a folder in this GUI by the' +\r\n ' name \"' + name + '\"');\r\n }\r\n\r\n const newGuiParams = { name: name, parent: this };\r\n\r\n // We need to pass down the autoPlace trait so that we can\r\n // attach event listeners to open/close folder actions to\r\n // ensure that a scrollbar appears if the window is too short.\r\n newGuiParams.autoPlace = this.autoPlace;\r\n\r\n // Do we have saved appearance data for this folder?\r\n if (this.load && // Anything loaded?\r\n this.load.folders && // Was my parent a dead-end?\r\n this.load.folders[name]) { // Did daddy remember me?\r\n // Start me closed if I was closed\r\n newGuiParams.closed = this.load.folders[name].closed;\r\n\r\n // Pass down the loaded data\r\n newGuiParams.load = this.load.folders[name];\r\n }\r\n\r\n const gui = new GUI(newGuiParams);\r\n this.__folders[name] = gui;\r\n\r\n const li = addRow(this, gui.domElement);\r\n dom.addClass(li, 'folder');\r\n return gui;\r\n },\r\n\r\n /**\r\n * Removes a subfolder GUI instance.\r\n * @param {dat.gui.GUI} folder The folder to remove.\r\n * @instance\r\n */\r\n removeFolder: function(folder) {\r\n this.__ul.removeChild(folder.domElement.parentElement);\r\n\r\n delete this.__folders[folder.name];\r\n\r\n // Do we have saved appearance data for this folder?\r\n if (this.load && // Anything loaded?\r\n this.load.folders && // Was my parent a dead-end?\r\n this.load.folders[folder.name]) {\r\n delete this.load.folders[folder.name];\r\n }\r\n\r\n removeListeners(folder);\r\n\r\n const _this = this;\r\n\r\n common.each(folder.__folders, function(subfolder) {\r\n folder.removeFolder(subfolder);\r\n });\r\n\r\n common.defer(function() {\r\n _this.onResize();\r\n });\r\n },\r\n\r\n /**\r\n * Opens the GUI.\r\n */\r\n open: function() {\r\n this.closed = false;\r\n },\r\n\r\n /**\r\n * Closes the GUI.\r\n */\r\n close: function() {\r\n this.closed = true;\r\n },\r\n\r\n /**\r\n * Hides the GUI.\r\n */\r\n hide: function() {\r\n this.domElement.style.display = 'none';\r\n },\r\n\r\n /**\r\n * Shows the GUI.\r\n */\r\n show: function() {\r\n this.domElement.style.display = '';\r\n },\r\n\r\n\r\n onResize: function() {\r\n // we debounce this function to prevent performance issues when rotating on tablet/mobile\r\n const root = this.getRoot();\r\n if (root.scrollable) {\r\n const top = dom.getOffset(root.__ul).top;\r\n let h = 0;\r\n\r\n common.each(root.__ul.childNodes, function(node) {\r\n if (!(root.autoPlace && node === root.__save_row)) {\r\n h += dom.getHeight(node);\r\n }\r\n });\r\n\r\n if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) {\r\n dom.addClass(root.domElement, GUI.CLASS_TOO_TALL);\r\n root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px';\r\n } else {\r\n dom.removeClass(root.domElement, GUI.CLASS_TOO_TALL);\r\n root.__ul.style.height = 'auto';\r\n }\r\n }\r\n\r\n if (root.__resize_handle) {\r\n common.defer(function() {\r\n root.__resize_handle.style.height = root.__ul.offsetHeight + 'px';\r\n });\r\n }\r\n\r\n if (root.__closeButton) {\r\n root.__closeButton.style.width = root.width + 'px';\r\n }\r\n },\r\n\r\n onResizeDebounced: common.debounce(function() { this.onResize(); }, 50),\r\n\r\n /**\r\n * Mark objects for saving. The order of these objects cannot change as\r\n * the GUI grows. When remembering new objects, append them to the end\r\n * of the list.\r\n *\r\n * @param {...Object} objects\r\n * @throws {Error} if not called on a top level GUI.\r\n * @instance\r\n * @ignore\r\n */\r\n remember: function() {\r\n if (common.isUndefined(SAVE_DIALOGUE)) {\r\n SAVE_DIALOGUE = new CenteredDiv();\r\n SAVE_DIALOGUE.domElement.innerHTML = saveDialogueContents;\r\n }\r\n\r\n if (this.parent) {\r\n throw new Error('You can only call remember on a top level GUI.');\r\n }\r\n\r\n const _this = this;\r\n\r\n common.each(Array.prototype.slice.call(arguments), function(object) {\r\n if (_this.__rememberedObjects.length === 0) {\r\n addSaveMenu(_this);\r\n }\r\n if (_this.__rememberedObjects.indexOf(object) === -1) {\r\n _this.__rememberedObjects.push(object);\r\n }\r\n });\r\n\r\n if (this.autoPlace) {\r\n // Set save row width\r\n setWidth(this, this.width);\r\n }\r\n },\r\n\r\n /**\r\n * @returns {dat.gui.GUI} the topmost parent GUI of a nested GUI.\r\n * @instance\r\n */\r\n getRoot: function() {\r\n let gui = this;\r\n while (gui.parent) {\r\n gui = gui.parent;\r\n }\r\n return gui;\r\n },\r\n\r\n /**\r\n * @returns {Object} a JSON object representing the current state of\r\n * this GUI as well as its remembered properties.\r\n * @instance\r\n */\r\n getSaveObject: function() {\r\n const toReturn = this.load;\r\n toReturn.closed = this.closed;\r\n\r\n // Am I remembering any values?\r\n if (this.__rememberedObjects.length > 0) {\r\n toReturn.preset = this.preset;\r\n\r\n if (!toReturn.remembered) {\r\n toReturn.remembered = {};\r\n }\r\n\r\n toReturn.remembered[this.preset] = getCurrentPreset(this);\r\n }\r\n\r\n toReturn.folders = {};\r\n common.each(this.__folders, function(element, key) {\r\n toReturn.folders[key] = element.getSaveObject();\r\n });\r\n\r\n return toReturn;\r\n },\r\n\r\n save: function() {\r\n if (!this.load.remembered) {\r\n this.load.remembered = {};\r\n }\r\n\r\n this.load.remembered[this.preset] = getCurrentPreset(this);\r\n markPresetModified(this, false);\r\n this.saveToLocalStorageIfPossible();\r\n },\r\n\r\n saveAs: function(presetName) {\r\n if (!this.load.remembered) {\r\n // Retain default values upon first save\r\n this.load.remembered = {};\r\n this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true);\r\n }\r\n\r\n this.load.remembered[presetName] = getCurrentPreset(this);\r\n this.preset = presetName;\r\n addPresetOption(this, presetName, true);\r\n this.saveToLocalStorageIfPossible();\r\n },\r\n\r\n revert: function(gui) {\r\n common.each(this.__controllers, function(controller) {\r\n // Make revert work on Default.\r\n if (!this.getRoot().load.remembered) {\r\n controller.setValue(controller.initialValue);\r\n } else {\r\n recallSavedValue(gui || this.getRoot(), controller);\r\n }\r\n\r\n // fire onFinishChange callback\r\n if (controller.__onFinishChange) {\r\n controller.__onFinishChange.call(controller, controller.getValue());\r\n }\r\n }, this);\r\n\r\n common.each(this.__folders, function(folder) {\r\n folder.revert(folder);\r\n });\r\n\r\n if (!gui) {\r\n markPresetModified(this.getRoot(), false);\r\n }\r\n },\r\n\r\n listen: function(controller) {\r\n const init = this.__listening.length === 0;\r\n this.__listening.push(controller);\r\n if (init) {\r\n updateDisplays(this.__listening);\r\n }\r\n },\r\n\r\n updateDisplay: function() {\r\n common.each(this.__controllers, function(controller) {\r\n controller.updateDisplay();\r\n });\r\n common.each(this.__folders, function(folder) {\r\n folder.updateDisplay();\r\n });\r\n }\r\n }\r\n);\r\n\r\n/**\r\n * Add a row to the end of the GUI or before another row.\r\n *\r\n * @param gui\r\n * @param [newDom] If specified, inserts the dom content in the new row\r\n * @param [liBefore] If specified, places the new row before another row\r\n *\r\n * @ignore\r\n */\r\nfunction addRow(gui, newDom, liBefore) {\r\n const li = document.createElement('li');\r\n if (newDom) {\r\n li.appendChild(newDom);\r\n }\r\n\r\n if (liBefore) {\r\n gui.__ul.insertBefore(li, liBefore);\r\n } else {\r\n gui.__ul.appendChild(li);\r\n }\r\n gui.onResize();\r\n return li;\r\n}\r\n\r\nfunction removeListeners(gui) {\r\n dom.unbind(window, 'resize', gui.__resizeHandler);\r\n\r\n if (gui.saveToLocalStorageIfPossible) {\r\n dom.unbind(window, 'unload', gui.saveToLocalStorageIfPossible);\r\n }\r\n}\r\n\r\nfunction markPresetModified(gui, modified) {\r\n const opt = gui.__preset_select[gui.__preset_select.selectedIndex];\r\n\r\n if (modified) {\r\n opt.innerHTML = opt.value + '*';\r\n } else {\r\n opt.innerHTML = opt.value;\r\n }\r\n}\r\n\r\nfunction augmentController(gui, li, controller) {\r\n controller.__li = li;\r\n controller.__gui = gui;\r\n\r\n common.extend(controller, /** @lends Controller.prototype */ {\r\n /**\r\n * @param {Array|Object} options\r\n * @return {Controller}\r\n */\r\n options: function(options) {\r\n if (arguments.length > 1) {\r\n const nextSibling = controller.__li.nextElementSibling;\r\n controller.remove();\r\n\r\n return add(\r\n gui,\r\n controller.object,\r\n controller.property,\r\n {\r\n before: nextSibling,\r\n factoryArgs: [common.toArray(arguments)]\r\n }\r\n );\r\n }\r\n\r\n if (common.isArray(options) || common.isObject(options)) {\r\n const nextSibling = controller.__li.nextElementSibling;\r\n controller.remove();\r\n\r\n return add(\r\n gui,\r\n controller.object,\r\n controller.property,\r\n {\r\n before: nextSibling,\r\n factoryArgs: [options]\r\n }\r\n );\r\n }\r\n },\r\n\r\n /**\r\n * Sets the name of the controller.\r\n * @param {string} name\r\n * @return {Controller}\r\n */\r\n name: function(name) {\r\n controller.__li.firstElementChild.firstElementChild.innerHTML = name;\r\n return controller;\r\n },\r\n\r\n /**\r\n * Sets controller to listen for changes on its underlying object.\r\n * @return {Controller}\r\n */\r\n listen: function() {\r\n controller.__gui.listen(controller);\r\n return controller;\r\n },\r\n\r\n /**\r\n * Removes the controller from its parent GUI.\r\n * @return {Controller}\r\n */\r\n remove: function() {\r\n controller.__gui.remove(controller);\r\n return controller;\r\n }\r\n });\r\n\r\n // All sliders should be accompanied by a box.\r\n if (controller instanceof NumberControllerSlider) {\r\n const box = new NumberControllerBox(controller.object, controller.property,\r\n { min: controller.__min, max: controller.__max, step: controller.__step });\r\n\r\n common.each(['updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max'], function(method) {\r\n const pc = controller[method];\r\n const pb = box[method];\r\n controller[method] = box[method] = function() {\r\n const args = Array.prototype.slice.call(arguments);\r\n pb.apply(box, args);\r\n return pc.apply(controller, args);\r\n };\r\n });\r\n\r\n dom.addClass(li, 'has-slider');\r\n controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild);\r\n } else if (controller instanceof NumberControllerBox) {\r\n const r = function(returned) {\r\n // Have we defined both boundaries?\r\n if (common.isNumber(controller.__min) && common.isNumber(controller.__max)) {\r\n // Well, then lets just replace this with a slider.\r\n\r\n // lets remember if the old controller had a specific name or was listening\r\n const oldName = controller.__li.firstElementChild.firstElementChild.innerHTML;\r\n const wasListening = controller.__gui.__listening.indexOf(controller) > -1;\r\n\r\n controller.remove();\r\n const newController = add(\r\n gui,\r\n controller.object,\r\n controller.property,\r\n {\r\n before: controller.__li.nextElementSibling,\r\n factoryArgs: [controller.__min, controller.__max, controller.__step]\r\n });\r\n\r\n newController.name(oldName);\r\n if (wasListening) newController.listen();\r\n\r\n return newController;\r\n }\r\n\r\n return returned;\r\n };\r\n\r\n controller.min = common.compose(r, controller.min);\r\n controller.max = common.compose(r, controller.max);\r\n } else if (controller instanceof BooleanController) {\r\n dom.bind(li, 'click', function() {\r\n dom.fakeEvent(controller.__checkbox, 'click');\r\n });\r\n\r\n dom.bind(controller.__checkbox, 'click', function(e) {\r\n e.stopPropagation(); // Prevents double-toggle\r\n });\r\n } else if (controller instanceof FunctionController) {\r\n dom.bind(li, 'click', function() {\r\n dom.fakeEvent(controller.__button, 'click');\r\n });\r\n\r\n dom.bind(li, 'mouseover', function() {\r\n dom.addClass(controller.__button, 'hover');\r\n });\r\n\r\n dom.bind(li, 'mouseout', function() {\r\n dom.removeClass(controller.__button, 'hover');\r\n });\r\n } else if (controller instanceof ColorController) {\r\n dom.addClass(li, 'color');\r\n controller.updateDisplay = common.compose(function(val) {\r\n li.style.borderLeftColor = controller.__color.toString();\r\n return val;\r\n }, controller.updateDisplay);\r\n\r\n controller.updateDisplay();\r\n }\r\n\r\n controller.setValue = common.compose(function(val) {\r\n if (gui.getRoot().__preset_select && controller.isModified()) {\r\n markPresetModified(gui.getRoot(), true);\r\n }\r\n\r\n return val;\r\n }, controller.setValue);\r\n}\r\n\r\nfunction recallSavedValue(gui, controller) {\r\n // Find the topmost GUI, that's where remembered objects live.\r\n const root = gui.getRoot();\r\n\r\n // Does the object we're controlling match anything we've been told to\r\n // remember?\r\n const matchedIndex = root.__rememberedObjects.indexOf(controller.object);\r\n\r\n // Why yes, it does!\r\n if (matchedIndex !== -1) {\r\n // Let me fetch a map of controllers for thcommon.isObject.\r\n let controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex];\r\n\r\n // Ohp, I believe this is the first controller we've created for this\r\n // object. Lets make the map fresh.\r\n if (controllerMap === undefined) {\r\n controllerMap = {};\r\n root.__rememberedObjectIndecesToControllers[matchedIndex] =\r\n controllerMap;\r\n }\r\n\r\n // Keep track of this controller\r\n controllerMap[controller.property] = controller;\r\n\r\n // Okay, now have we saved any values for this controller?\r\n if (root.load && root.load.remembered) {\r\n const presetMap = root.load.remembered;\r\n\r\n // Which preset are we trying to load?\r\n let preset;\r\n\r\n if (presetMap[gui.preset]) {\r\n preset = presetMap[gui.preset];\r\n } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) {\r\n // Uhh, you can have the default instead?\r\n preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME];\r\n } else {\r\n // Nada.\r\n return;\r\n }\r\n\r\n // Did the loaded object remember thcommon.isObject? && Did we remember this particular property?\r\n if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) {\r\n // We did remember something for this guy ...\r\n const value = preset[matchedIndex][controller.property];\r\n\r\n // And that's what it is.\r\n controller.initialValue = value;\r\n controller.setValue(value);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction add(gui, object, property, params) {\r\n var customObject;\r\n if( object.arguments ){\r\n //custom controller\r\n customObject = object;\r\n object = customObject.arguments.object;\r\n property = customObject.arguments.property;\r\n params = {\r\n factoryArgs: customObject.arguments.opts\r\n }\r\n }\r\n if ( ( customObject === undefined ) && ( object[property] === undefined ) ) {\r\n throw new Error(`Object \"${object}\" has no property \"${property}\"`);\r\n }\r\n\r\n let controller;\r\n\r\n if (params.color) {\r\n controller = new ColorController(object, property);\r\n } else if ( ( customObject !== undefined ) && ( typeof customObject.property === \"string\" ) ) {\r\n controller = customObject;\r\n } else {\r\n const factoryArgs = [object, property].concat(params.factoryArgs);\r\n controller = ControllerFactory.apply(gui, factoryArgs);\r\n }\r\n if ( controller === null )\r\n \tcontroller = customObject;\r\n else if( customObject !== undefined )\r\n customObject.controller = controller;\r\n\r\n if (params.before instanceof Controller) {\r\n params.before = params.before.__li;\r\n }\r\n\r\n recallSavedValue(gui, controller);\r\n\r\n dom.addClass(controller.domElement, 'c');\r\n\r\n const name = document.createElement('span');\r\n dom.addClass(name, 'property-name');\r\n if( ( customObject !== undefined ) && typeof customObject.property === \"object\" ){\r\n for(var propertyName in customObject.property)\r\n name.appendChild(customObject.property[propertyName]);\r\n }\r\n else name.innerHTML = controller.property;\r\n\r\n const container = document.createElement('div');\r\n container.appendChild(name);\r\n container.appendChild(controller.domElement);\r\n\r\n const li = addRow(gui, container, params.before);\r\n\r\n dom.addClass(li, GUI.CLASS_CONTROLLER_ROW);\r\n if (controller instanceof ColorController) {\r\n dom.addClass(li, 'color');\r\n } else {\r\n dom.addClass(li, typeof controller.getValue());\r\n }\r\n\r\n augmentController(gui, li, controller);\r\n\r\n gui.__controllers.push(controller);\r\n\r\n return controller;\r\n}\r\n\r\nfunction getLocalStorageHash(gui, key) {\r\n // TODO how does this deal with multiple GUI's?\r\n return document.location.href + '.' + key;\r\n}\r\n\r\nfunction addPresetOption(gui, name, setSelected) {\r\n const opt = document.createElement('option');\r\n opt.innerHTML = name;\r\n opt.value = name;\r\n gui.__preset_select.appendChild(opt);\r\n if (setSelected) {\r\n gui.__preset_select.selectedIndex = gui.__preset_select.length - 1;\r\n }\r\n}\r\n\r\nfunction showHideExplain(gui, explain) {\r\n explain.style.display = gui.useLocalStorage ? 'block' : 'none';\r\n}\r\n\r\nfunction addSaveMenu(gui) {\r\n const div = gui.__save_row = document.createElement('li');\r\n\r\n dom.addClass(gui.domElement, 'has-save');\r\n\r\n gui.__ul.insertBefore(div, gui.__ul.firstChild);\r\n\r\n dom.addClass(div, 'save-row');\r\n\r\n const gears = document.createElement('span');\r\n gears.innerHTML = ' ';\r\n dom.addClass(gears, 'button gears');\r\n\r\n // TODO replace with FunctionController\r\n const button = document.createElement('span');\r\n button.innerHTML = 'Save';\r\n dom.addClass(button, 'button');\r\n dom.addClass(button, 'save');\r\n\r\n const button2 = document.createElement('span');\r\n button2.innerHTML = 'New';\r\n dom.addClass(button2, 'button');\r\n dom.addClass(button2, 'save-as');\r\n\r\n const button3 = document.createElement('span');\r\n button3.innerHTML = 'Revert';\r\n dom.addClass(button3, 'button');\r\n dom.addClass(button3, 'revert');\r\n\r\n const select = gui.__preset_select = document.createElement('select');\r\n\r\n if (gui.load && gui.load.remembered) {\r\n common.each(gui.load.remembered, function(value, key) {\r\n addPresetOption(gui, key, key === gui.preset);\r\n });\r\n } else {\r\n addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false);\r\n }\r\n\r\n dom.bind(select, 'change', function() {\r\n for (let index = 0; index < gui.__preset_select.length; index++) {\r\n gui.__preset_select[index].innerHTML = gui.__preset_select[index].value;\r\n }\r\n\r\n gui.preset = this.value;\r\n });\r\n\r\n div.appendChild(select);\r\n div.appendChild(gears);\r\n div.appendChild(button);\r\n div.appendChild(button2);\r\n div.appendChild(button3);\r\n\r\n if (SUPPORTS_LOCAL_STORAGE) {\r\n const explain = document.getElementById('dg-local-explain');\r\n const localStorageCheckBox = document.getElementById('dg-local-storage');\r\n const saveLocally = document.getElementById('dg-save-locally');\r\n\r\n saveLocally.style.display = 'block';\r\n\r\n if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') {\r\n localStorageCheckBox.setAttribute('checked', 'checked');\r\n }\r\n\r\n showHideExplain(gui, explain);\r\n\r\n // TODO: Use a boolean controller, fool!\r\n dom.bind(localStorageCheckBox, 'change', function() {\r\n gui.useLocalStorage = !gui.useLocalStorage;\r\n showHideExplain(gui, explain);\r\n });\r\n }\r\n\r\n const newConstructorTextArea = document.getElementById('dg-new-constructor');\r\n\r\n dom.bind(newConstructorTextArea, 'keydown', function(e) {\r\n if (e.metaKey && (e.which === 67 || e.keyCode === 67)) {\r\n SAVE_DIALOGUE.hide();\r\n }\r\n });\r\n\r\n dom.bind(gears, 'click', function() {\r\n newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2);\r\n SAVE_DIALOGUE.show();\r\n newConstructorTextArea.focus();\r\n newConstructorTextArea.select();\r\n });\r\n\r\n dom.bind(button, 'click', function() {\r\n gui.save();\r\n });\r\n\r\n dom.bind(button2, 'click', function() {\r\n const presetName = prompt('Enter a new preset name.');\r\n if (presetName) {\r\n gui.saveAs(presetName);\r\n }\r\n });\r\n\r\n dom.bind(button3, 'click', function() {\r\n gui.revert();\r\n });\r\n\r\n // div.appendChild(button2);\r\n}\r\n\r\nfunction addResizeHandle(gui) {\r\n let pmouseX;\r\n\r\n gui.__resize_handle = document.createElement('div');\r\n\r\n common.extend(gui.__resize_handle.style, {\r\n\r\n width: '6px',\r\n marginLeft: '-3px',\r\n height: '200px',\r\n cursor: 'ew-resize',\r\n position: 'absolute'\r\n // border: '1px solid blue'\r\n\r\n });\r\n\r\n function drag(e) {\r\n e.preventDefault();\r\n\r\n gui.width += pmouseX - e.clientX;\r\n gui.onResize();\r\n pmouseX = e.clientX;\r\n\r\n return false;\r\n }\r\n\r\n function dragStop() {\r\n dom.removeClass(gui.__closeButton, GUI.CLASS_DRAG);\r\n dom.unbind(window, 'mousemove', drag);\r\n dom.unbind(window, 'mouseup', dragStop);\r\n }\r\n\r\n function dragStart(e) {\r\n e.preventDefault();\r\n\r\n pmouseX = e.clientX;\r\n\r\n dom.addClass(gui.__closeButton, GUI.CLASS_DRAG);\r\n dom.bind(window, 'mousemove', drag);\r\n dom.bind(window, 'mouseup', dragStop);\r\n\r\n return false;\r\n }\r\n\r\n dom.bind(gui.__resize_handle, 'mousedown', dragStart);\r\n dom.bind(gui.__closeButton, 'mousedown', dragStart);\r\n\r\n gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild);\r\n}\r\n\r\nfunction setWidth(gui, w) {\r\n gui.domElement.style.width = w + 'px';\r\n // Auto placed save-rows are position fixed, so we have to\r\n // set the width manually if we want it to bleed to the edge\r\n if (gui.__save_row && gui.autoPlace) {\r\n gui.__save_row.style.width = w + 'px';\r\n }\r\n if (gui.__closeButton) {\r\n gui.__closeButton.style.width = w + 'px';\r\n }\r\n}\r\n\r\nfunction getCurrentPreset(gui, useInitialValues) {\r\n const toReturn = {};\r\n\r\n // For each object I'm remembering\r\n common.each(gui.__rememberedObjects, function(val, index) {\r\n const savedValues = {};\r\n\r\n // The controllers I've made for thcommon.isObject by property\r\n const controllerMap =\r\n gui.__rememberedObjectIndecesToControllers[index];\r\n\r\n // Remember each value for each property\r\n common.each(controllerMap, function(controller, property) {\r\n savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue();\r\n });\r\n\r\n // Save the values for thcommon.isObject\r\n toReturn[index] = savedValues;\r\n });\r\n\r\n return toReturn;\r\n}\r\n\r\nfunction setPresetSelectIndex(gui) {\r\n for (let index = 0; index < gui.__preset_select.length; index++) {\r\n if (gui.__preset_select[index].value === gui.preset) {\r\n gui.__preset_select.selectedIndex = index;\r\n }\r\n }\r\n}\r\n\r\nfunction updateDisplays(controllerArray) {\r\n if (controllerArray.length !== 0) {\r\n requestAnimationFrame.call(window, function() {\r\n updateDisplays(controllerArray);\r\n });\r\n }\r\n\r\n common.each(controllerArray, function(c) {\r\n c.updateDisplay();\r\n });\r\n}\r\n\r\nexport default GUI;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Color from './color/Color';\r\nimport math from './color/math';\r\nimport interpret from './color/interpret';\r\n\r\nimport Controller from './controllers/Controller';\r\nimport BooleanController from './controllers/BooleanController';\r\nimport OptionController from './controllers/OptionController';\r\nimport StringController from './controllers/StringController';\r\nimport NumberController from './controllers/NumberController';\r\nimport NumberControllerBox from './controllers/NumberControllerBox';\r\nimport NumberControllerSlider from './controllers/NumberControllerSlider';\r\nimport FunctionController from './controllers/FunctionController';\r\nimport ColorController from './controllers/ColorController';\r\nimport CustomController from './controllers/CustomController';\r\n\r\nimport domImport from './dom/dom';\r\nimport GUIImport from './gui/GUI';\r\n\r\nexport const color = {\r\n Color: Color,\r\n math: math,\r\n interpret: interpret\r\n};\r\n\r\nexport const controllers = {\r\n Controller: Controller,\r\n BooleanController: BooleanController,\r\n OptionController: OptionController,\r\n StringController: StringController,\r\n NumberController: NumberController,\r\n NumberControllerBox: NumberControllerBox,\r\n NumberControllerSlider: NumberControllerSlider,\r\n FunctionController: FunctionController,\r\n ColorController: ColorController,\r\n CustomController: CustomController\r\n};\r\n\r\nexport const dom = { dom: domImport };\r\n\r\nexport const gui = { GUI: GUIImport };\r\n\r\nexport const GUI = GUIImport;\r\n\r\nexport default {\r\n color,\r\n controllers,\r\n dom,\r\n gui,\r\n GUI\r\n};\r\n"],"names":["color","forceCSSHex","colorFormat","__state","conversionName","toString","r","Math","round","g","b","a","h","s","toFixed","v","str","hex","length","ARR_EACH","Array","prototype","forEach","ARR_SLICE","slice","Common","target","each","call","arguments","obj","keys","isObject","Object","key","isUndefined","bind","toCall","args","i","apply","itr","scope","l","BREAK","fnc","func","threshold","callImmediately","timeout","delayed","callNow","setTimeout","toArray","undefined","isNaN","isArray","constructor","INTERPRETATIONS","common","isString","original","test","match","parseInt","parseFloat","isNumber","result","toReturn","interpret","family","litmus","conversions","conversion","read","tmpComponent","ColorMath","hi","floor","f","p","q","t","c","min","max","delta","NaN","hex_with_component","componentIndex","value","Color","Error","colorToString","write","defineRGBComponent","component","componentHexIndex","defineProperty","space","recalculateRGB","defineHSVComponent","recalculateHSV","math","component_from_hex","extend","hsv_to_rgb","rgb_to_hsv","COMPONENTS","rgb_to_hex","Controller","object","property","initialValue","domElement","document","createElement","__onChange","__onFinishChange","newValue","updateDisplay","getValue","EVENT_MAP","EVENT_MAP_INV","k","e","CSS_VALUE_PIXELS","cssValueToPixels","val","isNull","dom","elem","selectable","style","onselectstart","MozUserSelect","KhtmlUserSelect","unselectable","hor","vert","vertical","horizontal","position","left","right","top","bottom","eventType","pars","aux","params","className","evt","createEvent","clientX","x","clientY","y","initMouseEvent","bubbles","cancelable","window","clickCount","init","initKeyboardEvent","initKeyEvent","defaults","ctrlKey","altKey","shiftKey","metaKey","keyCode","charCode","initEvent","dispatchEvent","event","newBool","bool","addEventListener","attachEvent","removeEventListener","detachEvent","classes","split","indexOf","push","join","replace","removeAttribute","index","splice","RegExp","getComputedStyle","width","height","el","offset","offsetParent","offsetLeft","offsetTop","activeElement","type","href","BooleanController","_this","__prev","__checkbox","setAttribute","onChange","setValue","appendChild","checked","OptionController","opts","options","__select","map","element","opt","innerHTML","desiredValue","selectedIndex","isActive","StringController","__input","onBlur","blur","numDecimals","_x","NumberController","_params","__min","__max","__step","step","__impliedStep","pow","log","abs","LN10","__precision","_v","minValue","maxValue","stepValue","roundToDecimal","decimals","tenTo","NumberControllerBox","__truncationSuspended","prevY","attempted","onFinish","onMouseDrag","diff","onMouseUp","unbind","onMouseDown","i1","i2","o1","o2","NumberControllerSlider","__background","__foreground","onTouchStart","addClass","preventDefault","bgRect","getBoundingClientRect","touches","onTouchMove","onTouchEnd","pct","FunctionController","text","__button","fire","ColorController","__color","__temp","makeSelectable","__selector","__saturation_field","__field_knob","__field_knob_border","__hue_knob","__hue_field","__input_textShadow","removeClass","valueField","fieldDown","fieldDownH","setSV","fieldUpSV","setH","fieldUpH","toOriginal","fieldRect","mismatch","flip","_flip","toHexString","marginTop","vendors","linearGradient","background","vendor","cssText","hueGradient","ControllerFactory","isFunction","isBoolean","CustomController","newController","_controller","css","url","indoc","doc","link","rel","getElementsByTagName","cssContent","injected","head","saveDialogContents","requestAnimationFrame","callback","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","CenteredDiv","backgroundElement","makeFullscreen","body","hide","display","opacity","webkitTransform","layout","defer","innerWidth","getWidth","innerHeight","getHeight","inject","styleSheet","CSS_NAMESPACE","HIDE_KEY_CODE","CLOSE_BUTTON_HEIGHT","DEFAULT_DEFAULT_PRESET_NAME","SUPPORTS_LOCAL_STORAGE","localStorage","SAVE_DIALOGUE","autoPlaceVirgin","autoPlaceContainer","hideableGuis","GUI","__ul","__folders","__controllers","__rememberedObjects","__rememberedObjectIndecesToControllers","__listening","DEFAULT_WIDTH","autoPlace","load","preset","parent","hideable","resizable","scrollable","useLocalStorage","getItem","getLocalStorageHash","saveToLocalStorage","titleRow","defineProperties","closeOnTop","getRoot","revert","name","closed","CLASS_CLOSED","onResize","__closeButton","TEXT_OPEN","TEXT_CLOSED","setItem","CLASS_MAIN","savedGui","JSON","parse","CLASS_CLOSE_BUTTON","CLASS_CLOSE_TOP","insertBefore","childNodes","CLASS_CLOSE_BOTTOM","titleRowName","createTextNode","addRow","onClickTitle","CLASS_AUTO_PLACE_CONTAINER","CLASS_AUTO_PLACE","__resizeHandler","onResizeDebounced","stringify","getSaveObject","saveToLocalStorageIfPossible","resetWidth","root","toggleHide","gui","CLASS_CONTROLLER_ROW","CLASS_TOO_TALL","CLASS_DRAG","_keydownHandler","which","add","controller","removeChild","__li","subfolder","removeFolder","newGuiParams","folders","li","folder","parentElement","getOffset","node","__save_row","__resize_handle","offsetHeight","debounce","saveDialogueContents","remembered","getCurrentPreset","presetName","newDom","liBefore","removeListeners","markPresetModified","modified","__preset_select","augmentController","__gui","nextSibling","nextElementSibling","remove","firstElementChild","listen","box","method","pc","pb","returned","oldName","wasListening","compose","fakeEvent","stopPropagation","borderLeftColor","isModified","recallSavedValue","matchedIndex","controllerMap","presetMap","customObject","factoryArgs","concat","before","babelHelpers.typeof","propertyName","container","location","addPresetOption","setSelected","showHideExplain","explain","addSaveMenu","div","firstChild","gears","button","button2","button3","select","getElementById","localStorageCheckBox","saveLocally","newConstructorTextArea","show","focus","save","prompt","saveAs","addResizeHandle","pmouseX","drag","dragStop","dragStart","setWidth","w","useInitialValues","savedValues","setPresetSelectIndex","updateDisplays","controllerArray","controllers","domImport","GUIImport"],"mappings":"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"} \ No newline at end of file diff --git a/build/dat.gui.min.js b/build/dat.gui.min.js new file mode 100644 index 0000000..a92e188 --- /dev/null +++ b/build/dat.gui.min.js @@ -0,0 +1,13 @@ +/** + * dat-gui JavaScript Controller Library + * http://code.google.com/p/dat-gui + * + * Copyright 2011 Data Arts Team, Google Creative Lab + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.dat={})}(this,function(e){"use strict";function t(e,t){var n=e.__state.conversionName.toString(),o=Math.round(e.r),i=Math.round(e.g),r=Math.round(e.b),s=e.a,a=Math.round(e.h),l=e.s.toFixed(1),d=e.v.toFixed(1);if(t||"THREE_CHAR_HEX"===n||"SIX_CHAR_HEX"===n){for(var c=e.hex.toString(16);c.length<6;)c="0"+c;return"#"+c}return"CSS_RGB"===n?"rgb("+o+","+i+","+r+")":"CSS_RGBA"===n?"rgba("+o+","+i+","+r+","+s+")":"HEX"===n?"0x"+e.hex.toString(16):"RGB_ARRAY"===n?"["+o+","+i+","+r+"]":"RGBA_ARRAY"===n?"["+o+","+i+","+r+","+s+"]":"RGB_OBJ"===n?"{r:"+o+",g:"+i+",b:"+r+"}":"RGBA_OBJ"===n?"{r:"+o+",g:"+i+",b:"+r+",a:"+s+"}":"HSV_OBJ"===n?"{h:"+a+",s:"+l+",v:"+d+"}":"HSVA_OBJ"===n?"{h:"+a+",s:"+l+",v:"+d+",a:"+s+"}":"unknown format"}function n(e,t,n){Object.defineProperty(e,t,{get:function(){return"RGB"===this.__state.space?this.__state[t]:(I.recalculateRGB(this,t,n),this.__state[t])},set:function(e){"RGB"!==this.__state.space&&(I.recalculateRGB(this,t,n),this.__state.space="RGB"),this.__state[t]=e}})}function o(e,t){Object.defineProperty(e,t,{get:function(){return"HSV"===this.__state.space?this.__state[t]:(I.recalculateHSV(this),this.__state[t])},set:function(e){"HSV"!==this.__state.space&&(I.recalculateHSV(this),this.__state.space="HSV"),this.__state[t]=e}})}function i(e){if("0"===e||S.isUndefined(e))return 0;var t=e.match(U);return S.isNull(t)?0:parseFloat(t[1])}function r(e){var t=e.toString();return t.indexOf(".")>-1?t.length-t.indexOf(".")-1:0}function s(e,t){var n=Math.pow(10,t);return Math.round(e*n)/n}function a(e,t,n,o,i){return o+(e-t)/(n-t)*(i-o)}function l(e,t,n,o){e.style.background="",S.each(ee,function(i){e.style.cssText+="background: "+i+"linear-gradient("+t+", "+n+" 0%, "+o+" 100%); "})}function d(e){e.style.background="",e.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);",e.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",e.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",e.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",e.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"}function c(e,t,n){var o=document.createElement("li");return t&&o.appendChild(t),n?e.__ul.insertBefore(o,n):e.__ul.appendChild(o),e.onResize(),o}function u(e){X.unbind(window,"resize",e.__resizeHandler),e.saveToLocalStorageIfPossible&&X.unbind(window,"unload",e.saveToLocalStorageIfPossible)}function _(e,t){var n=e.__preset_select[e.__preset_select.selectedIndex];n.innerHTML=t?n.value+"*":n.value}function h(e,t,n){if(n.__li=t,n.__gui=e,S.extend(n,{options:function(t){if(arguments.length>1){var o=n.__li.nextElementSibling;return n.remove(),f(e,n.object,n.property,{before:o,factoryArgs:[S.toArray(arguments)]})}if(S.isArray(t)||S.isObject(t)){var i=n.__li.nextElementSibling;return n.remove(),f(e,n.object,n.property,{before:i,factoryArgs:[t]})}},name:function(e){return n.__li.firstElementChild.firstElementChild.innerHTML=e,n},listen:function(){return n.__gui.listen(n),n},remove:function(){return n.__gui.remove(n),n}}),n instanceof q){var o=new Q(n.object,n.property,{min:n.__min,max:n.__max,step:n.__step});S.each(["updateDisplay","onChange","onFinishChange","step","min","max"],function(e){var t=n[e],i=o[e];n[e]=o[e]=function(){var e=Array.prototype.slice.call(arguments);return i.apply(o,e),t.apply(n,e)}}),X.addClass(t,"has-slider"),n.domElement.insertBefore(o.domElement,n.domElement.firstElementChild)}else if(n instanceof Q){var i=function(t){if(S.isNumber(n.__min)&&S.isNumber(n.__max)){var o=n.__li.firstElementChild.firstElementChild.innerHTML,i=n.__gui.__listening.indexOf(n)>-1;n.remove();var r=f(e,n.object,n.property,{before:n.__li.nextElementSibling,factoryArgs:[n.__min,n.__max,n.__step]});return r.name(o),i&&r.listen(),r}return t};n.min=S.compose(i,n.min),n.max=S.compose(i,n.max)}else n instanceof K?(X.bind(t,"click",function(){X.fakeEvent(n.__checkbox,"click")}),X.bind(n.__checkbox,"click",function(e){e.stopPropagation()})):n instanceof Z?(X.bind(t,"click",function(){X.fakeEvent(n.__button,"click")}),X.bind(t,"mouseover",function(){X.addClass(n.__button,"hover")}),X.bind(t,"mouseout",function(){X.removeClass(n.__button,"hover")})):n instanceof $&&(X.addClass(t,"color"),n.updateDisplay=S.compose(function(e){return t.style.borderLeftColor=n.__color.toString(),e},n.updateDisplay),n.updateDisplay());n.setValue=S.compose(function(t){return e.getRoot().__preset_select&&n.isModified()&&_(e.getRoot(),!0),t},n.setValue)}function p(e,t){var n=e.getRoot(),o=n.__rememberedObjects.indexOf(t.object);if(-1!==o){var i=n.__rememberedObjectIndecesToControllers[o];if(void 0===i&&(i={},n.__rememberedObjectIndecesToControllers[o]=i),i[t.property]=t,n.load&&n.load.remembered){var r=n.load.remembered,s=void 0;if(r[e.preset])s=r[e.preset];else{if(!r[ae])return;s=r[ae]}if(s[o]&&void 0!==s[o][t.property]){var a=s[o][t.property];t.initialValue=a,t.setValue(a)}}}}function f(e,t,n,o){var i;if(t.arguments&&(t=(i=t).arguments.object,n=i.arguments.property,o={factoryArgs:i.arguments.opts}),void 0===i&&void 0===t[n])throw new Error('Object "'+t+'" has no property "'+n+'"');var r=void 0;if(o.color)r=new $(t,n);else if(void 0!==i&&"string"==typeof i.property)r=i;else{var s=[t,n].concat(o.factoryArgs);r=te.apply(e,s)}null===r?r=i:void 0!==i&&(i.controller=r),o.before instanceof z&&(o.before=o.before.__li),p(e,r),X.addClass(r.domElement,"c");var a=document.createElement("span");if(X.addClass(a,"property-name"),void 0!==i&&"object"===H(i.property))for(var l in i.property)a.appendChild(i.property[l]);else a.innerHTML=r.property;var d=document.createElement("div");d.appendChild(a),d.appendChild(r.domElement);var u=c(e,d,o.before);return X.addClass(u,pe.CLASS_CONTROLLER_ROW),r instanceof $?X.addClass(u,"color"):X.addClass(u,H(r.getValue())),h(e,u,r),e.__controllers.push(r),r}function m(e,t){return document.location.href+"."+t}function g(e,t,n){var o=document.createElement("option");o.innerHTML=t,o.value=t,e.__preset_select.appendChild(o),n&&(e.__preset_select.selectedIndex=e.__preset_select.length-1)}function b(e,t){t.style.display=e.useLocalStorage?"block":"none"}function v(e){var t=e.__save_row=document.createElement("li");X.addClass(e.domElement,"has-save"),e.__ul.insertBefore(t,e.__ul.firstChild),X.addClass(t,"save-row");var n=document.createElement("span");n.innerHTML=" ",X.addClass(n,"button gears");var o=document.createElement("span");o.innerHTML="Save",X.addClass(o,"button"),X.addClass(o,"save");var i=document.createElement("span");i.innerHTML="New",X.addClass(i,"button"),X.addClass(i,"save-as");var r=document.createElement("span");r.innerHTML="Revert",X.addClass(r,"button"),X.addClass(r,"revert");var s=e.__preset_select=document.createElement("select");if(e.load&&e.load.remembered?S.each(e.load.remembered,function(t,n){g(e,n,n===e.preset)}):g(e,ae,!1),X.bind(s,"change",function(){for(var t=0;t=0;n--)t=[e[n].apply(this,t)];return t[0]}},each:function(e,t,n){if(e)if(A&&e.forEach&&e.forEach===A)e.forEach(t,n);else if(e.length===e.length+0){var o=void 0,i=void 0;for(o=0,i=e.length;o1?S.toArray(arguments):arguments[0];return S.each(O,function(t){if(t.litmus(e))return S.each(t.conversions,function(t,n){if(T=t.read(e),!1===L&&!1!==T)return L=T,T.conversionName=n,T.conversion=t,S.BREAK}),S.BREAK}),L},B=void 0,N={hsv_to_rgb:function(e,t,n){var o=Math.floor(e/60)%6,i=e/60-Math.floor(e/60),r=n*(1-t),s=n*(1-i*t),a=n*(1-(1-i)*t),l=[[n,a,r],[s,n,r],[r,n,a],[r,s,n],[a,r,n],[n,r,s]][o];return{r:255*l[0],g:255*l[1],b:255*l[2]}},rgb_to_hsv:function(e,t,n){var o=Math.min(e,t,n),i=Math.max(e,t,n),r=i-o,s=void 0,a=void 0;return 0===i?{h:NaN,s:0,v:0}:(a=r/i,s=e===i?(t-n)/r:t===i?2+(n-e)/r:4+(e-t)/r,(s/=6)<0&&(s+=1),{h:360*s,s:a,v:i/255})},rgb_to_hex:function(e,t,n){var o=this.hex_with_component(0,2,e);return o=this.hex_with_component(o,1,t),o=this.hex_with_component(o,0,n)},component_from_hex:function(e,t){return e>>8*t&255},hex_with_component:function(e,t,n){return n<<(B=8*t)|e&~(255<this.__max&&(n=this.__max),void 0!==this.__step&&n%this.__step!=0&&(n=Math.round(n/this.__step)*this.__step),j(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"setValue",this).call(this,n)}},{key:"min",value:function(e){return this.__min=e,this}},{key:"max",value:function(e){return this.__max=e,this}},{key:"step",value:function(e){return this.__step=e,this.__impliedStep=e,this.__precision=r(e),this}}]),t}(),Q=function(e){function t(e,n,o){function i(){l.__onFinishChange&&l.__onFinishChange.call(l,l.getValue())}function r(e){var t=d-e.clientY;l.setValue(l.getValue()+t*l.__impliedStep),d=e.clientY}function s(){X.unbind(window,"mousemove",r),X.unbind(window,"mouseup",s),i()}F(this,t);var a=V(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,o));a.__truncationSuspended=!1;var l=a,d=void 0;return a.__input=document.createElement("input"),a.__input.setAttribute("type","text"),X.bind(a.__input,"change",function(){var e=parseFloat(l.__input.value);S.isNaN(e)||l.setValue(e)}),X.bind(a.__input,"blur",function(){i()}),X.bind(a.__input,"mousedown",function(e){X.bind(window,"mousemove",r),X.bind(window,"mouseup",s),d=e.clientY}),X.bind(a.__input,"keydown",function(e){13===e.keyCode&&(l.__truncationSuspended=!0,this.blur(),l.__truncationSuspended=!1,i())}),a.updateDisplay(),a.domElement.appendChild(a.__input),a}return D(t,W),P(t,[{key:"updateDisplay",value:function(){return this.__input.value=this.__truncationSuspended?this.getValue():s(this.getValue(),this.__precision),j(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"updateDisplay",this).call(this)}}]),t}(),q=function(e){function t(e,n,o,i,r){function s(e){e.preventDefault();var t=_.__background.getBoundingClientRect();return _.setValue(a(e.clientX,t.left,t.right,_.__min,_.__max)),!1}function l(){X.unbind(window,"mousemove",s),X.unbind(window,"mouseup",l),_.__onFinishChange&&_.__onFinishChange.call(_,_.getValue())}function d(e){var t=e.touches[0].clientX,n=_.__background.getBoundingClientRect();_.setValue(a(t,n.left,n.right,_.__min,_.__max))}function c(){X.unbind(window,"touchmove",d),X.unbind(window,"touchend",c),_.__onFinishChange&&_.__onFinishChange.call(_,_.getValue())}F(this,t);var u=V(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,{min:o,max:i,step:r})),_=u;return u.__background=document.createElement("div"),u.__foreground=document.createElement("div"),X.bind(u.__background,"mousedown",function(e){document.activeElement.blur(),X.bind(window,"mousemove",s),X.bind(window,"mouseup",l),s(e)}),X.bind(u.__background,"touchstart",function(e){1===e.touches.length&&(X.bind(window,"touchmove",d),X.bind(window,"touchend",c),d(e))}),X.addClass(u.__background,"slider"),X.addClass(u.__foreground,"slider-fg"),u.updateDisplay(),u.__background.appendChild(u.__foreground),u.domElement.appendChild(u.__background),u}return D(t,W),P(t,[{key:"updateDisplay",value:function(){var e=(this.getValue()-this.__min)/(this.__max-this.__min);return this.__foreground.style.width=100*e+"%",j(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"updateDisplay",this).call(this)}}]),t}(),Z=function(e){function t(e,n,o){F(this,t);var i=V(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n)),r=i;return i.__button=document.createElement("div"),i.__button.innerHTML=void 0===o?"Fire":o,X.bind(i.__button,"click",function(e){return e.preventDefault(),r.fire(),!1}),X.addClass(i.__button,"button"),i.domElement.appendChild(i.__button),i}return D(t,z),P(t,[{key:"fire",value:function(){this.__onChange&&this.__onChange.call(this),this.getValue().call(this.object),this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue())}}]),t}(),$=function(e){function t(e,n){function o(e){u(e),X.bind(window,"mousemove",u),X.bind(window,"touchmove",u),X.bind(window,"mouseup",r),X.bind(window,"touchend",r)}function i(e){_(e),X.bind(window,"mousemove",_),X.bind(window,"touchmove",_),X.bind(window,"mouseup",s),X.bind(window,"touchend",s)}function r(){X.unbind(window,"mousemove",u),X.unbind(window,"touchmove",u),X.unbind(window,"mouseup",r),X.unbind(window,"touchend",r),c()}function s(){X.unbind(window,"mousemove",_),X.unbind(window,"touchmove",_),X.unbind(window,"mouseup",s),X.unbind(window,"touchend",s),c()}function a(){var e=R(this.value);!1!==e?(p.__color.__state=e,p.setValue(p.__color.toOriginal())):this.value=p.__color.toString()}function c(){p.__onFinishChange&&p.__onFinishChange.call(p,p.__color.toOriginal())}function u(e){-1===e.type.indexOf("touch")&&e.preventDefault();var t=p.__saturation_field.getBoundingClientRect(),n=e.touches&&e.touches[0]||e,o=n.clientX,i=n.clientY,r=(o-t.left)/(t.right-t.left),s=1-(i-t.top)/(t.bottom-t.top);return s>1?s=1:s<0&&(s=0),r>1?r=1:r<0&&(r=0),p.__color.v=s,p.__color.s=r,p.setValue(p.__color.toOriginal()),!1}function _(e){-1===e.type.indexOf("touch")&&e.preventDefault();var t=p.__hue_field.getBoundingClientRect(),n=1-((e.touches&&e.touches[0]||e).clientY-t.top)/(t.bottom-t.top);return n>1?n=1:n<0&&(n=0),p.__color.h=360*n,p.setValue(p.__color.toOriginal()),!1}F(this,t);var h=V(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));h.__color=new I(h.getValue()),h.__temp=new I(0);var p=h;h.domElement=document.createElement("div"),X.makeSelectable(h.domElement,!1),h.__selector=document.createElement("div"),h.__selector.className="selector",h.__saturation_field=document.createElement("div"),h.__saturation_field.className="saturation-field",h.__field_knob=document.createElement("div"),h.__field_knob.className="field-knob",h.__field_knob_border="2px solid ",h.__hue_knob=document.createElement("div"),h.__hue_knob.className="hue-knob",h.__hue_field=document.createElement("div"),h.__hue_field.className="hue-field",h.__input=document.createElement("input"),h.__input.type="text",h.__input_textShadow="0 1px 1px ",X.bind(h.__input,"keydown",function(e){13===e.keyCode&&a.call(this)}),X.bind(h.__input,"blur",a),X.bind(h.__selector,"mousedown",function(){X.addClass(this,"drag").bind(window,"mouseup",function(){X.removeClass(p.__selector,"drag")})}),X.bind(h.__selector,"touchstart",function(){X.addClass(this,"drag").bind(window,"touchend",function(){X.removeClass(p.__selector,"drag")})});var f=document.createElement("div");return S.extend(h.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"}),S.extend(h.__field_knob.style,{position:"absolute",width:"12px",height:"12px",border:h.__field_knob_border+(h.__color.v<.5?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1}),S.extend(h.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1}),S.extend(h.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"}),S.extend(f.style,{width:"100%",height:"100%",background:"none"}),l(f,"top","rgba(0,0,0,0)","#000"),S.extend(h.__hue_field.style,{width:"15px",height:"100px",border:"1px solid #555",cursor:"ns-resize",position:"absolute",top:"3px",right:"3px"}),d(h.__hue_field),S.extend(h.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:h.__input_textShadow+"rgba(0,0,0,0.7)"}),X.bind(h.__saturation_field,"mousedown",o),X.bind(h.__saturation_field,"touchstart",o),X.bind(h.__field_knob,"mousedown",o),X.bind(h.__field_knob,"touchstart",o),X.bind(h.__hue_field,"mousedown",i),X.bind(h.__hue_field,"touchstart",i),h.__saturation_field.appendChild(f),h.__selector.appendChild(h.__field_knob),h.__selector.appendChild(h.__saturation_field),h.__selector.appendChild(h.__hue_field),h.__hue_field.appendChild(h.__hue_knob),h.domElement.appendChild(h.__input),h.domElement.appendChild(h.__selector),h.updateDisplay(),h}return D(t,z),P(t,[{key:"updateDisplay",value:function(){var e=R(this.getValue());if(!1!==e){var t=!1;S.each(I.COMPONENTS,function(n){if(!S.isUndefined(e[n])&&!S.isUndefined(this.__color.__state[n])&&e[n]!==this.__color.__state[n])return t=!0,{}},this),t&&S.extend(this.__color.__state,e)}S.extend(this.__temp.__state,this.__color.__state),this.__temp.a=1;var n=this.__color.v<.5||this.__color.s>.5?255:0,o=255-n;S.extend(this.__field_knob.style,{marginLeft:100*this.__color.s-7+"px",marginTop:100*(1-this.__color.v)-7+"px",backgroundColor:this.__temp.toHexString(),border:this.__field_knob_border+"rgb("+n+","+n+","+n+")"}),this.__hue_knob.style.marginTop=100*(1-this.__color.h/360)+"px",this.__temp.s=1,this.__temp.v=1,l(this.__saturation_field,"left","#fff",this.__temp.toHexString()),this.__input.value=this.__color.toString(),S.extend(this.__input.style,{backgroundColor:this.__color.toHexString(),color:"rgb("+n+","+n+","+n+")",textShadow:this.__input_textShadow+"rgba("+o+","+o+","+o+",.7)"})}}]),t}(),ee=["-moz-","-o-","-webkit-","-ms-",""],te=function(e,t){var n=e[t];return S.isArray(arguments[2])||S.isObject(arguments[2])?new Y(e,t,arguments[2]):S.isNumber(n)?S.isNumber(arguments[2])&&S.isNumber(arguments[3])?S.isNumber(arguments[4])?new q(e,t,arguments[2],arguments[3],arguments[4]):new q(e,t,arguments[2],arguments[3]):S.isNumber(arguments[4])?new Q(e,t,{min:arguments[2],max:arguments[3],step:arguments[4]}):new Q(e,t,{min:arguments[2],max:arguments[3]}):S.isString(n)?new J(e,t):S.isFunction(n)?new Z(e,t,""):S.isBoolean(n)?new K(e,t):null},ne=function(e){function t(e,n){F(this,t);var o=V(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return o.arguments={object:e,property:n,opts:Array.prototype.slice.call(arguments,2)},e.property&&(o.property=e.property(o)),o}return D(t,z),P(t,[{key:"controller",set:function(e){this._controller=e},get:function(){return this._controller}}]),t}(),oe={load:function(e,t){var n=t||document,o=n.createElement("link");o.type="text/css",o.rel="stylesheet",o.href=e,n.getElementsByTagName("head")[0].appendChild(o)},inject:function(e,t){var n=t||document,o=document.createElement("style");o.type="text/css",o.innerHTML=e;var i=n.getElementsByTagName("head")[0];try{i.appendChild(o)}catch(e){}}},ie=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){setTimeout(e,1e3/60)},re=function(){function e(){F(this,e),this.backgroundElement=document.createElement("div"),S.extend(this.backgroundElement.style,{backgroundColor:"rgba(0,0,0,0.8)",top:0,left:0,display:"none",zIndex:"1000",opacity:0,WebkitTransition:"opacity 0.2s linear",transition:"opacity 0.2s linear"}),X.makeFullscreen(this.backgroundElement),this.backgroundElement.style.position="fixed",this.domElement=document.createElement("div"),S.extend(this.domElement.style,{position:"fixed",display:"none",zIndex:"1001",opacity:0,WebkitTransition:"-webkit-transform 0.2s ease-out, opacity 0.2s linear",transition:"transform 0.2s ease-out, opacity 0.2s linear"}),document.body.appendChild(this.backgroundElement),document.body.appendChild(this.domElement);var t=this;X.bind(this.backgroundElement,"click",function(){t.hide()})}return P(e,[{key:"show",value:function(){var e=this;this.backgroundElement.style.display="block",this.domElement.style.display="block",this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)",this.layout(),S.defer(function(){e.backgroundElement.style.opacity=1,e.domElement.style.opacity=1,e.domElement.style.webkitTransform="scale(1)"})}},{key:"hide",value:function(){var e=this,t=function t(){e.domElement.style.display="none",e.backgroundElement.style.display="none",X.unbind(e.domElement,"webkitTransitionEnd",t),X.unbind(e.domElement,"transitionend",t),X.unbind(e.domElement,"oTransitionEnd",t)};X.bind(this.domElement,"webkitTransitionEnd",t),X.bind(this.domElement,"transitionend",t),X.bind(this.domElement,"oTransitionEnd",t),this.backgroundElement.style.opacity=0,this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)"}},{key:"layout",value:function(){this.domElement.style.left=window.innerWidth/2-X.getWidth(this.domElement)/2+"px",this.domElement.style.top=window.innerHeight/2-X.getHeight(this.domElement)/2+"px"}}]),e}(),se=function(e){if(e&&"undefined"!=typeof window){var t=document.createElement("style");return t.setAttribute("type","text/css"),t.innerHTML=e,document.head.appendChild(t),e}}(".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n");oe.inject(se);var ae="Default",le=function(){try{return!!window.localStorage}catch(e){return!1}}(),de=void 0,ce=!0,ue=void 0,_e=!1,he=[],pe=function e(t){var n=this,o=t||{};this.domElement=document.createElement("div"),this.__ul=document.createElement("ul"),this.domElement.appendChild(this.__ul),X.addClass(this.domElement,"dg"),this.__folders={},this.__controllers=[],this.__rememberedObjects=[],this.__rememberedObjectIndecesToControllers=[],this.__listening=[],o=S.defaults(o,{closeOnTop:!1,autoPlace:!0,width:e.DEFAULT_WIDTH}),o=S.defaults(o,{resizable:o.autoPlace,hideable:o.autoPlace}),S.isUndefined(o.load)?o.load={preset:ae}:o.preset&&(o.load.preset=o.preset),S.isUndefined(o.parent)&&o.hideable&&he.push(this),o.resizable=S.isUndefined(o.parent)&&o.resizable,o.autoPlace&&S.isUndefined(o.scrollable)&&(o.scrollable=!0);var i=le&&"true"===localStorage.getItem(m(this,"isLocal")),r=void 0,s=void 0;if(Object.defineProperties(this,{parent:{get:function(){return o.parent}},scrollable:{get:function(){return o.scrollable}},autoPlace:{get:function(){return o.autoPlace}},closeOnTop:{get:function(){return o.closeOnTop}},preset:{get:function(){return n.parent?n.getRoot().preset:o.load.preset},set:function(e){n.parent?n.getRoot().preset=e:o.load.preset=e,E(this),n.revert()}},width:{get:function(){return o.width},set:function(e){o.width=e,w(n,e)}},name:{get:function(){return o.name},set:function(e){o.name=e,s&&(s.innerHTML=o.name)}},closed:{get:function(){return o.closed},set:function(t){o.closed=t,o.closed?X.addClass(n.__ul,e.CLASS_CLOSED):X.removeClass(n.__ul,e.CLASS_CLOSED),this.onResize(),n.__closeButton&&(n.__closeButton.innerHTML=t?e.TEXT_OPEN:e.TEXT_CLOSED)}},load:{get:function(){return o.load}},useLocalStorage:{get:function(){return i},set:function(e){le&&(i=e,e?X.bind(window,"unload",r):X.unbind(window,"unload",r),localStorage.setItem(m(n,"isLocal"),e))}}}),S.isUndefined(o.parent)){if(this.closed=o.closed||!1,X.addClass(this.domElement,e.CLASS_MAIN),X.makeSelectable(this.domElement,!1),le&&i){n.useLocalStorage=!0;var a=localStorage.getItem(m(this,"gui"));a&&(o.load=JSON.parse(a))}this.__closeButton=document.createElement("div"),this.__closeButton.innerHTML=e.TEXT_CLOSED,X.addClass(this.__closeButton,e.CLASS_CLOSE_BUTTON),o.closeOnTop?(X.addClass(this.__closeButton,e.CLASS_CLOSE_TOP),this.domElement.insertBefore(this.__closeButton,this.domElement.childNodes[0])):(X.addClass(this.__closeButton,e.CLASS_CLOSE_BOTTOM),this.domElement.appendChild(this.__closeButton)),X.bind(this.__closeButton,"click",function(){n.closed=!n.closed})}else{void 0===o.closed&&(o.closed=!0);var l=document.createTextNode(o.name);X.addClass(l,"controller-name"),s=c(n,l);X.addClass(this.__ul,e.CLASS_CLOSED),X.addClass(s,"title"),X.bind(s,"click",function(e){return e.preventDefault(),n.closed=!n.closed,!1}),o.closed||(this.closed=!1)}o.autoPlace&&(S.isUndefined(o.parent)&&(ce&&(ue=document.createElement("div"),X.addClass(ue,"dg"),X.addClass(ue,e.CLASS_AUTO_PLACE_CONTAINER),document.body.appendChild(ue),ce=!1),ue.appendChild(this.domElement),X.addClass(this.domElement,e.CLASS_AUTO_PLACE)),this.parent||w(n,o.width)),this.__resizeHandler=function(){n.onResizeDebounced()},X.bind(window,"resize",this.__resizeHandler),X.bind(this.__ul,"webkitTransitionEnd",this.__resizeHandler),X.bind(this.__ul,"transitionend",this.__resizeHandler),X.bind(this.__ul,"oTransitionEnd",this.__resizeHandler),this.onResize(),o.resizable&&y(this),r=function(){le&&"true"===localStorage.getItem(m(n,"isLocal"))&&localStorage.setItem(m(n,"gui"),JSON.stringify(n.getSaveObject()))},this.saveToLocalStorageIfPossible=r,o.parent||function(){var e=n.getRoot();e.width+=1,S.defer(function(){e.width-=1})}()};pe.toggleHide=function(){_e=!_e,S.each(he,function(e){e.domElement.style.display=_e?"none":""})},pe.CLASS_AUTO_PLACE="a",pe.CLASS_AUTO_PLACE_CONTAINER="ac",pe.CLASS_MAIN="main",pe.CLASS_CONTROLLER_ROW="cr",pe.CLASS_TOO_TALL="taller-than-window",pe.CLASS_CLOSED="closed",pe.CLASS_CLOSE_BUTTON="close-button",pe.CLASS_CLOSE_TOP="close-top",pe.CLASS_CLOSE_BOTTOM="close-bottom",pe.CLASS_DRAG="drag",pe.DEFAULT_WIDTH=245,pe.TEXT_CLOSED="Close Controls",pe.TEXT_OPEN="Open Controls",pe._keydownHandler=function(e){"text"===document.activeElement.type||72!==e.which&&72!==e.keyCode||pe.toggleHide()},X.bind(window,"keydown",pe._keydownHandler,!1),S.extend(pe.prototype,{add:function(e,t){return f(this,e,t,{factoryArgs:Array.prototype.slice.call(arguments,2)})},addColor:function(e,t){return f(this,e,t,{color:!0})},remove:function(e){this.__ul.removeChild(e.__li),this.__controllers.splice(this.__controllers.indexOf(e),1);var t=this;S.defer(function(){t.onResize()})},destroy:function(){if(this.parent)throw new Error("Only the root GUI should be removed with .destroy(). For subfolders, use gui.removeFolder(folder) instead.");this.autoPlace&&ue.removeChild(this.domElement);var e=this;S.each(this.__folders,function(t){e.removeFolder(t)}),X.unbind(window,"keydown",pe._keydownHandler,!1),u(this)},addFolder:function(e){if(void 0!==this.__folders[e])throw new Error('You already have a folder in this GUI by the name "'+e+'"');var t={name:e,parent:this};t.autoPlace=this.autoPlace,this.load&&this.load.folders&&this.load.folders[e]&&(t.closed=this.load.folders[e].closed,t.load=this.load.folders[e]);var n=new pe(t);this.__folders[e]=n;var o=c(this,n.domElement);return X.addClass(o,"folder"),n},removeFolder:function(e){this.__ul.removeChild(e.domElement.parentElement),delete this.__folders[e.name],this.load&&this.load.folders&&this.load.folders[e.name]&&delete this.load.folders[e.name],u(e);var t=this;S.each(e.__folders,function(t){e.removeFolder(t)}),S.defer(function(){t.onResize()})},open:function(){this.closed=!1},close:function(){this.closed=!0},hide:function(){this.domElement.style.display="none"},show:function(){this.domElement.style.display=""},onResize:function(){var e=this.getRoot();if(e.scrollable){var t=X.getOffset(e.__ul).top,n=0;S.each(e.__ul.childNodes,function(t){e.autoPlace&&t===e.__save_row||(n+=X.getHeight(t))}),window.innerHeight-t-20GUI\'s constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n\n
\n\n
\n\n'),this.parent)throw new Error("You can only call remember on a top level GUI.");var e=this;S.each(Array.prototype.slice.call(arguments),function(t){0===e.__rememberedObjects.length&&v(e),-1===e.__rememberedObjects.indexOf(t)&&e.__rememberedObjects.push(t)}),this.autoPlace&&w(this,this.width)},getRoot:function(){for(var e=this;e.parent;)e=e.parent;return e},getSaveObject:function(){var e=this.load;return e.closed=this.closed,this.__rememberedObjects.length>0&&(e.preset=this.preset,e.remembered||(e.remembered={}),e.remembered[this.preset]=x(this)),e.folders={},S.each(this.__folders,function(t,n){e.folders[n]=t.getSaveObject()}),e},save:function(){this.load.remembered||(this.load.remembered={}),this.load.remembered[this.preset]=x(this),_(this,!1),this.saveToLocalStorageIfPossible()},saveAs:function(e){this.load.remembered||(this.load.remembered={},this.load.remembered[ae]=x(this,!0)),this.load.remembered[e]=x(this),this.preset=e,g(this,e,!0),this.saveToLocalStorageIfPossible()},revert:function(e){S.each(this.__controllers,function(t){this.getRoot().load.remembered?p(e||this.getRoot(),t):t.setValue(t.initialValue),t.__onFinishChange&&t.__onFinishChange.call(t,t.getValue())},this),S.each(this.__folders,function(e){e.revert(e)}),e||_(this.getRoot(),!1)},listen:function(e){var t=0===this.__listening.length;this.__listening.push(e),t&&C(this.__listening)},updateDisplay:function(){S.each(this.__controllers,function(e){e.updateDisplay()}),S.each(this.__folders,function(e){e.updateDisplay()})}});var fe={Color:I,math:N,interpret:R},me={Controller:z,BooleanController:K,OptionController:Y,StringController:J,NumberController:W,NumberControllerBox:Q,NumberControllerSlider:q,FunctionController:Z,ColorController:$,CustomController:ne},ge={dom:X},be={GUI:pe},ve=pe,ye={color:fe,controllers:me,dom:ge,gui:be,GUI:ve};e.color=fe,e.controllers=me,e.dom=ge,e.gui=be,e.GUI=ve,e.default=ye,Object.defineProperty(e,"__esModule",{value:!0})}); diff --git a/build/dat.gui.module.js b/build/dat.gui.module.js new file mode 100644 index 0000000..e806740 --- /dev/null +++ b/build/dat.gui.module.js @@ -0,0 +1,2563 @@ +/** + * dat-gui JavaScript Controller Library + * http://code.google.com/p/dat-gui + * + * Copyright 2011 Data Arts Team, Google Creative Lab + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ + +function ___$insertStyle(css) { + if (!css) { + return; + } + if (typeof window === 'undefined') { + return; + } + + var style = document.createElement('style'); + + style.setAttribute('type', 'text/css'); + style.innerHTML = css; + document.head.appendChild(style); + + return css; +} + +function colorToString (color, forceCSSHex) { + var colorFormat = color.__state.conversionName.toString(); + var r = Math.round(color.r); + var g = Math.round(color.g); + var b = Math.round(color.b); + var a = color.a; + var h = Math.round(color.h); + var s = color.s.toFixed(1); + var v = color.v.toFixed(1); + if (forceCSSHex || colorFormat === 'THREE_CHAR_HEX' || colorFormat === 'SIX_CHAR_HEX') { + var str = color.hex.toString(16); + while (str.length < 6) { + str = '0' + str; + } + return '#' + str; + } else if (colorFormat === 'CSS_RGB') { + return 'rgb(' + r + ',' + g + ',' + b + ')'; + } else if (colorFormat === 'CSS_RGBA') { + return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + } else if (colorFormat === 'HEX') { + return '0x' + color.hex.toString(16); + } else if (colorFormat === 'RGB_ARRAY') { + return '[' + r + ',' + g + ',' + b + ']'; + } else if (colorFormat === 'RGBA_ARRAY') { + return '[' + r + ',' + g + ',' + b + ',' + a + ']'; + } else if (colorFormat === 'RGB_OBJ') { + return '{r:' + r + ',g:' + g + ',b:' + b + '}'; + } else if (colorFormat === 'RGBA_OBJ') { + return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}'; + } else if (colorFormat === 'HSV_OBJ') { + return '{h:' + h + ',s:' + s + ',v:' + v + '}'; + } else if (colorFormat === 'HSVA_OBJ') { + return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}'; + } + return 'unknown format'; +} + +var ARR_EACH = Array.prototype.forEach; +var ARR_SLICE = Array.prototype.slice; +var Common = { + BREAK: {}, + extend: function extend(target) { + this.each(ARR_SLICE.call(arguments, 1), function (obj) { + var keys = this.isObject(obj) ? Object.keys(obj) : []; + keys.forEach(function (key) { + if (!this.isUndefined(obj[key])) { + target[key] = obj[key]; + } + }.bind(this)); + }, this); + return target; + }, + defaults: function defaults(target) { + this.each(ARR_SLICE.call(arguments, 1), function (obj) { + var keys = this.isObject(obj) ? Object.keys(obj) : []; + keys.forEach(function (key) { + if (this.isUndefined(target[key])) { + target[key] = obj[key]; + } + }.bind(this)); + }, this); + return target; + }, + compose: function compose() { + var toCall = ARR_SLICE.call(arguments); + return function () { + var args = ARR_SLICE.call(arguments); + for (var i = toCall.length - 1; i >= 0; i--) { + args = [toCall[i].apply(this, args)]; + } + return args[0]; + }; + }, + each: function each(obj, itr, scope) { + if (!obj) { + return; + } + if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) { + obj.forEach(itr, scope); + } else if (obj.length === obj.length + 0) { + var key = void 0; + var l = void 0; + for (key = 0, l = obj.length; key < l; key++) { + if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) { + return; + } + } + } else { + for (var _key in obj) { + if (itr.call(scope, obj[_key], _key) === this.BREAK) { + return; + } + } + } + }, + defer: function defer(fnc) { + setTimeout(fnc, 0); + }, + debounce: function debounce(func, threshold, callImmediately) { + var timeout = void 0; + return function () { + var obj = this; + var args = arguments; + function delayed() { + timeout = null; + if (!callImmediately) func.apply(obj, args); + } + var callNow = callImmediately || !timeout; + clearTimeout(timeout); + timeout = setTimeout(delayed, threshold); + if (callNow) { + func.apply(obj, args); + } + }; + }, + toArray: function toArray(obj) { + if (obj.toArray) return obj.toArray(); + return ARR_SLICE.call(obj); + }, + isUndefined: function isUndefined(obj) { + return obj === undefined; + }, + isNull: function isNull(obj) { + return obj === null; + }, + isNaN: function (_isNaN) { + function isNaN(_x) { + return _isNaN.apply(this, arguments); + } + isNaN.toString = function () { + return _isNaN.toString(); + }; + return isNaN; + }(function (obj) { + return isNaN(obj); + }), + isArray: Array.isArray || function (obj) { + return obj.constructor === Array; + }, + isObject: function isObject(obj) { + return obj === Object(obj); + }, + isNumber: function isNumber(obj) { + return obj === obj + 0; + }, + isString: function isString(obj) { + return obj === obj + ''; + }, + isBoolean: function isBoolean(obj) { + return obj === false || obj === true; + }, + isFunction: function isFunction(obj) { + return Object.prototype.toString.call(obj) === '[object Function]'; + } +}; + +var INTERPRETATIONS = [ +{ + litmus: Common.isString, + conversions: { + THREE_CHAR_HEX: { + read: function read(original) { + var test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i); + if (test === null) { + return false; + } + return { + space: 'HEX', + hex: parseInt('0x' + test[1].toString() + test[1].toString() + test[2].toString() + test[2].toString() + test[3].toString() + test[3].toString(), 0) + }; + }, + write: colorToString + }, + SIX_CHAR_HEX: { + read: function read(original) { + var test = original.match(/^#([A-F0-9]{6})$/i); + if (test === null) { + return false; + } + return { + space: 'HEX', + hex: parseInt('0x' + test[1].toString(), 0) + }; + }, + write: colorToString + }, + CSS_RGB: { + read: function read(original) { + var test = original.match(/^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/); + if (test === null) { + return false; + } + return { + space: 'RGB', + r: parseFloat(test[1]), + g: parseFloat(test[2]), + b: parseFloat(test[3]) + }; + }, + write: colorToString + }, + CSS_RGBA: { + read: function read(original) { + var test = original.match(/^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/); + if (test === null) { + return false; + } + return { + space: 'RGB', + r: parseFloat(test[1]), + g: parseFloat(test[2]), + b: parseFloat(test[3]), + a: parseFloat(test[4]) + }; + }, + write: colorToString + } + } +}, +{ + litmus: Common.isNumber, + conversions: { + HEX: { + read: function read(original) { + return { + space: 'HEX', + hex: original, + conversionName: 'HEX' + }; + }, + write: function write(color) { + return color.hex; + } + } + } +}, +{ + litmus: Common.isArray, + conversions: { + RGB_ARRAY: { + read: function read(original) { + if (original.length !== 3) { + return false; + } + return { + space: 'RGB', + r: original[0], + g: original[1], + b: original[2] + }; + }, + write: function write(color) { + return [color.r, color.g, color.b]; + } + }, + RGBA_ARRAY: { + read: function read(original) { + if (original.length !== 4) return false; + return { + space: 'RGB', + r: original[0], + g: original[1], + b: original[2], + a: original[3] + }; + }, + write: function write(color) { + return [color.r, color.g, color.b, color.a]; + } + } + } +}, +{ + litmus: Common.isObject, + conversions: { + RGBA_OBJ: { + read: function read(original) { + if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b) && Common.isNumber(original.a)) { + return { + space: 'RGB', + r: original.r, + g: original.g, + b: original.b, + a: original.a + }; + } + return false; + }, + write: function write(color) { + return { + r: color.r, + g: color.g, + b: color.b, + a: color.a + }; + } + }, + RGB_OBJ: { + read: function read(original) { + if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b)) { + return { + space: 'RGB', + r: original.r, + g: original.g, + b: original.b + }; + } + return false; + }, + write: function write(color) { + return { + r: color.r, + g: color.g, + b: color.b + }; + } + }, + HSVA_OBJ: { + read: function read(original) { + if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v) && Common.isNumber(original.a)) { + return { + space: 'HSV', + h: original.h, + s: original.s, + v: original.v, + a: original.a + }; + } + return false; + }, + write: function write(color) { + return { + h: color.h, + s: color.s, + v: color.v, + a: color.a + }; + } + }, + HSV_OBJ: { + read: function read(original) { + if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v)) { + return { + space: 'HSV', + h: original.h, + s: original.s, + v: original.v + }; + } + return false; + }, + write: function write(color) { + return { + h: color.h, + s: color.s, + v: color.v + }; + } + } + } +}]; +var result = void 0; +var toReturn = void 0; +var interpret = function interpret() { + toReturn = false; + var original = arguments.length > 1 ? Common.toArray(arguments) : arguments[0]; + Common.each(INTERPRETATIONS, function (family) { + if (family.litmus(original)) { + Common.each(family.conversions, function (conversion, conversionName) { + result = conversion.read(original); + if (toReturn === false && result !== false) { + toReturn = result; + result.conversionName = conversionName; + result.conversion = conversion; + return Common.BREAK; + } + }); + return Common.BREAK; + } + }); + return toReturn; +}; + +var tmpComponent = void 0; +var ColorMath = { + hsv_to_rgb: function hsv_to_rgb(h, s, v) { + var hi = Math.floor(h / 60) % 6; + var f = h / 60 - Math.floor(h / 60); + var p = v * (1.0 - s); + var q = v * (1.0 - f * s); + var t = v * (1.0 - (1.0 - f) * s); + var c = [[v, t, p], [q, v, p], [p, v, t], [p, q, v], [t, p, v], [v, p, q]][hi]; + return { + r: c[0] * 255, + g: c[1] * 255, + b: c[2] * 255 + }; + }, + rgb_to_hsv: function rgb_to_hsv(r, g, b) { + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + var delta = max - min; + var h = void 0; + var s = void 0; + if (max !== 0) { + s = delta / max; + } else { + return { + h: NaN, + s: 0, + v: 0 + }; + } + if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else { + h = 4 + (r - g) / delta; + } + h /= 6; + if (h < 0) { + h += 1; + } + return { + h: h * 360, + s: s, + v: max / 255 + }; + }, + rgb_to_hex: function rgb_to_hex(r, g, b) { + var hex = this.hex_with_component(0, 2, r); + hex = this.hex_with_component(hex, 1, g); + hex = this.hex_with_component(hex, 0, b); + return hex; + }, + component_from_hex: function component_from_hex(hex, componentIndex) { + return hex >> componentIndex * 8 & 0xFF; + }, + hex_with_component: function hex_with_component(hex, componentIndex, value) { + return value << (tmpComponent = componentIndex * 8) | hex & ~(0xFF << tmpComponent); + } +}; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; + + + + + + + + + + + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + + + + + + + +var get = function get(object, property, receiver) { + if (object === null) object = Function.prototype; + var desc = Object.getOwnPropertyDescriptor(object, property); + + if (desc === undefined) { + var parent = Object.getPrototypeOf(object); + + if (parent === null) { + return undefined; + } else { + return get(parent, property, receiver); + } + } else if ("value" in desc) { + return desc.value; + } else { + var getter = desc.get; + + if (getter === undefined) { + return undefined; + } + + return getter.call(receiver); + } +}; + +var inherits = function (subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; +}; + + + + + + + + + + + +var possibleConstructorReturn = function (self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && (typeof call === "object" || typeof call === "function") ? call : self; +}; + +var Color = function () { + function Color() { + classCallCheck(this, Color); + this.__state = interpret.apply(this, arguments); + if (this.__state === false) { + throw new Error('Failed to interpret color arguments'); + } + this.__state.a = this.__state.a || 1; + } + createClass(Color, [{ + key: 'toString', + value: function toString() { + return colorToString(this); + } + }, { + key: 'toHexString', + value: function toHexString() { + return colorToString(this, true); + } + }, { + key: 'toOriginal', + value: function toOriginal() { + return this.__state.conversion.write(this); + } + }]); + return Color; +}(); +function defineRGBComponent(target, component, componentHexIndex) { + Object.defineProperty(target, component, { + get: function get$$1() { + if (this.__state.space === 'RGB') { + return this.__state[component]; + } + Color.recalculateRGB(this, component, componentHexIndex); + return this.__state[component]; + }, + set: function set$$1(v) { + if (this.__state.space !== 'RGB') { + Color.recalculateRGB(this, component, componentHexIndex); + this.__state.space = 'RGB'; + } + this.__state[component] = v; + } + }); +} +function defineHSVComponent(target, component) { + Object.defineProperty(target, component, { + get: function get$$1() { + if (this.__state.space === 'HSV') { + return this.__state[component]; + } + Color.recalculateHSV(this); + return this.__state[component]; + }, + set: function set$$1(v) { + if (this.__state.space !== 'HSV') { + Color.recalculateHSV(this); + this.__state.space = 'HSV'; + } + this.__state[component] = v; + } + }); +} +Color.recalculateRGB = function (color, component, componentHexIndex) { + if (color.__state.space === 'HEX') { + color.__state[component] = ColorMath.component_from_hex(color.__state.hex, componentHexIndex); + } else if (color.__state.space === 'HSV') { + Common.extend(color.__state, ColorMath.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v)); + } else { + throw new Error('Corrupted color state'); + } +}; +Color.recalculateHSV = function (color) { + var result = ColorMath.rgb_to_hsv(color.r, color.g, color.b); + Common.extend(color.__state, { + s: result.s, + v: result.v + }); + if (!Common.isNaN(result.h)) { + color.__state.h = result.h; + } else if (Common.isUndefined(color.__state.h)) { + color.__state.h = 0; + } +}; +Color.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a']; +defineRGBComponent(Color.prototype, 'r', 2); +defineRGBComponent(Color.prototype, 'g', 1); +defineRGBComponent(Color.prototype, 'b', 0); +defineHSVComponent(Color.prototype, 'h'); +defineHSVComponent(Color.prototype, 's'); +defineHSVComponent(Color.prototype, 'v'); +Object.defineProperty(Color.prototype, 'a', { + get: function get$$1() { + return this.__state.a; + }, + set: function set$$1(v) { + this.__state.a = v; + } +}); +Object.defineProperty(Color.prototype, 'hex', { + get: function get$$1() { + if (!this.__state.space !== 'HEX') { + this.__state.hex = ColorMath.rgb_to_hex(this.r, this.g, this.b); + } + return this.__state.hex; + }, + set: function set$$1(v) { + this.__state.space = 'HEX'; + this.__state.hex = v; + } +}); + +var Controller = function () { + function Controller(object, property) { + classCallCheck(this, Controller); + this.initialValue = object[property]; + this.domElement = document.createElement('div'); + this.object = object; + this.property = property; + this.__onChange = undefined; + this.__onFinishChange = undefined; + } + createClass(Controller, [{ + key: 'onChange', + value: function onChange(fnc) { + this.__onChange = fnc; + return this; + } + }, { + key: 'onFinishChange', + value: function onFinishChange(fnc) { + this.__onFinishChange = fnc; + return this; + } + }, { + key: 'setValue', + value: function setValue(newValue) { + this.object[this.property] = newValue; + if (this.__onChange) { + this.__onChange.call(this, newValue); + } + this.updateDisplay(); + return this; + } + }, { + key: 'getValue', + value: function getValue() { + return this.object[this.property]; + } + }, { + key: 'updateDisplay', + value: function updateDisplay() { + return this; + } + }, { + key: 'isModified', + value: function isModified() { + return this.initialValue !== this.getValue(); + } + }]); + return Controller; +}(); + +var EVENT_MAP = { + HTMLEvents: ['change'], + MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'], + KeyboardEvents: ['keydown'] +}; +var EVENT_MAP_INV = {}; +Common.each(EVENT_MAP, function (v, k) { + Common.each(v, function (e) { + EVENT_MAP_INV[e] = k; + }); +}); +var CSS_VALUE_PIXELS = /(\d+(\.\d+)?)px/; +function cssValueToPixels(val) { + if (val === '0' || Common.isUndefined(val)) { + return 0; + } + var match = val.match(CSS_VALUE_PIXELS); + if (!Common.isNull(match)) { + return parseFloat(match[1]); + } + return 0; +} +var dom = { + makeSelectable: function makeSelectable(elem, selectable) { + if (elem === undefined || elem.style === undefined) return; + elem.onselectstart = selectable ? function () { + return false; + } : function () {}; + elem.style.MozUserSelect = selectable ? 'auto' : 'none'; + elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none'; + elem.unselectable = selectable ? 'on' : 'off'; + }, + makeFullscreen: function makeFullscreen(elem, hor, vert) { + var vertical = vert; + var horizontal = hor; + if (Common.isUndefined(horizontal)) { + horizontal = true; + } + if (Common.isUndefined(vertical)) { + vertical = true; + } + elem.style.position = 'absolute'; + if (horizontal) { + elem.style.left = 0; + elem.style.right = 0; + } + if (vertical) { + elem.style.top = 0; + elem.style.bottom = 0; + } + }, + fakeEvent: function fakeEvent(elem, eventType, pars, aux) { + var params = pars || {}; + var className = EVENT_MAP_INV[eventType]; + if (!className) { + throw new Error('Event type ' + eventType + ' not supported.'); + } + var evt = document.createEvent(className); + switch (className) { + case 'MouseEvents': + { + var clientX = params.x || params.clientX || 0; + var clientY = params.y || params.clientY || 0; + evt.initMouseEvent(eventType, params.bubbles || false, params.cancelable || true, window, params.clickCount || 1, 0, + 0, + clientX, + clientY, + false, false, false, false, 0, null); + break; + } + case 'KeyboardEvents': + { + var init = evt.initKeyboardEvent || evt.initKeyEvent; + Common.defaults(params, { + cancelable: true, + ctrlKey: false, + altKey: false, + shiftKey: false, + metaKey: false, + keyCode: undefined, + charCode: undefined + }); + init(eventType, params.bubbles || false, params.cancelable, window, params.ctrlKey, params.altKey, params.shiftKey, params.metaKey, params.keyCode, params.charCode); + break; + } + default: + { + evt.initEvent(eventType, params.bubbles || false, params.cancelable || true); + break; + } + } + Common.defaults(evt, aux); + elem.dispatchEvent(evt); + }, + bind: function bind(elem, event, func, newBool) { + var bool = newBool || false; + if (elem.addEventListener) { + elem.addEventListener(event, func, bool); + } else if (elem.attachEvent) { + elem.attachEvent('on' + event, func); + } + return dom; + }, + unbind: function unbind(elem, event, func, newBool) { + var bool = newBool || false; + if (elem.removeEventListener) { + elem.removeEventListener(event, func, bool); + } else if (elem.detachEvent) { + elem.detachEvent('on' + event, func); + } + return dom; + }, + addClass: function addClass(elem, className) { + if (elem.className === undefined) { + elem.className = className; + } else if (elem.className !== className) { + var classes = elem.className.split(/ +/); + if (classes.indexOf(className) === -1) { + classes.push(className); + elem.className = classes.join(' ').replace(/^\s+/, '').replace(/\s+$/, ''); + } + } + return dom; + }, + removeClass: function removeClass(elem, className) { + if (className) { + if (elem.className === className) { + elem.removeAttribute('class'); + } else { + var classes = elem.className.split(/ +/); + var index = classes.indexOf(className); + if (index !== -1) { + classes.splice(index, 1); + elem.className = classes.join(' '); + } + } + } else { + elem.className = undefined; + } + return dom; + }, + hasClass: function hasClass(elem, className) { + return new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)').test(elem.className) || false; + }, + getWidth: function getWidth(elem) { + var style = getComputedStyle(elem); + return cssValueToPixels(style['border-left-width']) + cssValueToPixels(style['border-right-width']) + cssValueToPixels(style['padding-left']) + cssValueToPixels(style['padding-right']) + cssValueToPixels(style.width); + }, + getHeight: function getHeight(elem) { + var style = getComputedStyle(elem); + return cssValueToPixels(style['border-top-width']) + cssValueToPixels(style['border-bottom-width']) + cssValueToPixels(style['padding-top']) + cssValueToPixels(style['padding-bottom']) + cssValueToPixels(style.height); + }, + getOffset: function getOffset(el) { + var elem = el; + var offset = { left: 0, top: 0 }; + if (elem.offsetParent) { + do { + offset.left += elem.offsetLeft; + offset.top += elem.offsetTop; + elem = elem.offsetParent; + } while (elem); + } + return offset; + }, + isActive: function isActive(elem) { + return elem === document.activeElement && (elem.type || elem.href); + } +}; + +var BooleanController = function (_Controller) { + inherits(BooleanController, _Controller); + function BooleanController(object, property) { + classCallCheck(this, BooleanController); + var _this2 = possibleConstructorReturn(this, (BooleanController.__proto__ || Object.getPrototypeOf(BooleanController)).call(this, object, property)); + var _this = _this2; + _this2.__prev = _this2.getValue(); + _this2.__checkbox = document.createElement('input'); + _this2.__checkbox.setAttribute('type', 'checkbox'); + function onChange() { + _this.setValue(!_this.__prev); + } + dom.bind(_this2.__checkbox, 'change', onChange, false); + _this2.domElement.appendChild(_this2.__checkbox); + _this2.updateDisplay(); + return _this2; + } + createClass(BooleanController, [{ + key: 'setValue', + value: function setValue(v) { + var toReturn = get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'setValue', this).call(this, v); + if (this.__onFinishChange) { + this.__onFinishChange.call(this, this.getValue()); + } + this.__prev = this.getValue(); + return toReturn; + } + }, { + key: 'updateDisplay', + value: function updateDisplay() { + if (this.getValue() === true) { + this.__checkbox.setAttribute('checked', 'checked'); + this.__checkbox.checked = true; + this.__prev = true; + } else { + this.__checkbox.checked = false; + this.__prev = false; + } + return get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'updateDisplay', this).call(this); + } + }]); + return BooleanController; +}(Controller); + +var OptionController = function (_Controller) { + inherits(OptionController, _Controller); + function OptionController(object, property, opts) { + classCallCheck(this, OptionController); + var _this2 = possibleConstructorReturn(this, (OptionController.__proto__ || Object.getPrototypeOf(OptionController)).call(this, object, property)); + var options = opts; + var _this = _this2; + _this2.__select = document.createElement('select'); + if (Common.isArray(options)) { + var map = {}; + Common.each(options, function (element) { + map[element] = element; + }); + options = map; + } + Common.each(options, function (value, key) { + var opt = document.createElement('option'); + opt.innerHTML = key; + opt.setAttribute('value', value); + _this.__select.appendChild(opt); + }); + _this2.updateDisplay(); + dom.bind(_this2.__select, 'change', function () { + var desiredValue = this.options[this.selectedIndex].value; + _this.setValue(desiredValue); + }); + _this2.domElement.appendChild(_this2.__select); + return _this2; + } + createClass(OptionController, [{ + key: 'setValue', + value: function setValue(v) { + var toReturn = get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'setValue', this).call(this, v); + if (this.__onFinishChange) { + this.__onFinishChange.call(this, this.getValue()); + } + return toReturn; + } + }, { + key: 'updateDisplay', + value: function updateDisplay() { + if (dom.isActive(this.__select)) return this; + this.__select.value = this.getValue(); + return get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'updateDisplay', this).call(this); + } + }]); + return OptionController; +}(Controller); + +var StringController = function (_Controller) { + inherits(StringController, _Controller); + function StringController(object, property) { + classCallCheck(this, StringController); + var _this2 = possibleConstructorReturn(this, (StringController.__proto__ || Object.getPrototypeOf(StringController)).call(this, object, property)); + var _this = _this2; + function onChange() { + _this.setValue(_this.__input.value); + } + function onBlur() { + if (_this.__onFinishChange) { + _this.__onFinishChange.call(_this, _this.getValue()); + } + } + _this2.__input = document.createElement('input'); + _this2.__input.setAttribute('type', 'text'); + dom.bind(_this2.__input, 'keyup', onChange); + dom.bind(_this2.__input, 'change', onChange); + dom.bind(_this2.__input, 'blur', onBlur); + dom.bind(_this2.__input, 'keydown', function (e) { + if (e.keyCode === 13) { + this.blur(); + } + }); + _this2.updateDisplay(); + _this2.domElement.appendChild(_this2.__input); + return _this2; + } + createClass(StringController, [{ + key: 'updateDisplay', + value: function updateDisplay() { + if (!dom.isActive(this.__input)) { + this.__input.value = this.getValue(); + } + return get(StringController.prototype.__proto__ || Object.getPrototypeOf(StringController.prototype), 'updateDisplay', this).call(this); + } + }]); + return StringController; +}(Controller); + +function numDecimals(x) { + var _x = x.toString(); + if (_x.indexOf('.') > -1) { + return _x.length - _x.indexOf('.') - 1; + } + return 0; +} +var NumberController = function (_Controller) { + inherits(NumberController, _Controller); + function NumberController(object, property, params) { + classCallCheck(this, NumberController); + var _this = possibleConstructorReturn(this, (NumberController.__proto__ || Object.getPrototypeOf(NumberController)).call(this, object, property)); + var _params = params || {}; + _this.__min = _params.min; + _this.__max = _params.max; + _this.__step = _params.step; + if (Common.isUndefined(_this.__step)) { + if (_this.initialValue === 0) { + _this.__impliedStep = 1; + } else { + _this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(_this.initialValue)) / Math.LN10)) / 10; + } + } else { + _this.__impliedStep = _this.__step; + } + _this.__precision = numDecimals(_this.__impliedStep); + return _this; + } + createClass(NumberController, [{ + key: 'setValue', + value: function setValue(v) { + var _v = v; + if (this.__min !== undefined && _v < this.__min) { + _v = this.__min; + } else if (this.__max !== undefined && _v > this.__max) { + _v = this.__max; + } + if (this.__step !== undefined && _v % this.__step !== 0) { + _v = Math.round(_v / this.__step) * this.__step; + } + return get(NumberController.prototype.__proto__ || Object.getPrototypeOf(NumberController.prototype), 'setValue', this).call(this, _v); + } + }, { + key: 'min', + value: function min(minValue) { + this.__min = minValue; + return this; + } + }, { + key: 'max', + value: function max(maxValue) { + this.__max = maxValue; + return this; + } + }, { + key: 'step', + value: function step(stepValue) { + this.__step = stepValue; + this.__impliedStep = stepValue; + this.__precision = numDecimals(stepValue); + return this; + } + }]); + return NumberController; +}(Controller); + +function roundToDecimal(value, decimals) { + var tenTo = Math.pow(10, decimals); + return Math.round(value * tenTo) / tenTo; +} +var NumberControllerBox = function (_NumberController) { + inherits(NumberControllerBox, _NumberController); + function NumberControllerBox(object, property, params) { + classCallCheck(this, NumberControllerBox); + var _this2 = possibleConstructorReturn(this, (NumberControllerBox.__proto__ || Object.getPrototypeOf(NumberControllerBox)).call(this, object, property, params)); + _this2.__truncationSuspended = false; + var _this = _this2; + var prevY = void 0; + function onChange() { + var attempted = parseFloat(_this.__input.value); + if (!Common.isNaN(attempted)) { + _this.setValue(attempted); + } + } + function onFinish() { + if (_this.__onFinishChange) { + _this.__onFinishChange.call(_this, _this.getValue()); + } + } + function onBlur() { + onFinish(); + } + function onMouseDrag(e) { + var diff = prevY - e.clientY; + _this.setValue(_this.getValue() + diff * _this.__impliedStep); + prevY = e.clientY; + } + function onMouseUp() { + dom.unbind(window, 'mousemove', onMouseDrag); + dom.unbind(window, 'mouseup', onMouseUp); + onFinish(); + } + function onMouseDown(e) { + dom.bind(window, 'mousemove', onMouseDrag); + dom.bind(window, 'mouseup', onMouseUp); + prevY = e.clientY; + } + _this2.__input = document.createElement('input'); + _this2.__input.setAttribute('type', 'text'); + dom.bind(_this2.__input, 'change', onChange); + dom.bind(_this2.__input, 'blur', onBlur); + dom.bind(_this2.__input, 'mousedown', onMouseDown); + dom.bind(_this2.__input, 'keydown', function (e) { + if (e.keyCode === 13) { + _this.__truncationSuspended = true; + this.blur(); + _this.__truncationSuspended = false; + onFinish(); + } + }); + _this2.updateDisplay(); + _this2.domElement.appendChild(_this2.__input); + return _this2; + } + createClass(NumberControllerBox, [{ + key: 'updateDisplay', + value: function updateDisplay() { + this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision); + return get(NumberControllerBox.prototype.__proto__ || Object.getPrototypeOf(NumberControllerBox.prototype), 'updateDisplay', this).call(this); + } + }]); + return NumberControllerBox; +}(NumberController); + +function map(v, i1, i2, o1, o2) { + return o1 + (o2 - o1) * ((v - i1) / (i2 - i1)); +} +var NumberControllerSlider = function (_NumberController) { + inherits(NumberControllerSlider, _NumberController); + function NumberControllerSlider(object, property, min, max, step) { + classCallCheck(this, NumberControllerSlider); + var _this2 = possibleConstructorReturn(this, (NumberControllerSlider.__proto__ || Object.getPrototypeOf(NumberControllerSlider)).call(this, object, property, { min: min, max: max, step: step })); + var _this = _this2; + _this2.__background = document.createElement('div'); + _this2.__foreground = document.createElement('div'); + dom.bind(_this2.__background, 'mousedown', onMouseDown); + dom.bind(_this2.__background, 'touchstart', onTouchStart); + dom.addClass(_this2.__background, 'slider'); + dom.addClass(_this2.__foreground, 'slider-fg'); + function onMouseDown(e) { + document.activeElement.blur(); + dom.bind(window, 'mousemove', onMouseDrag); + dom.bind(window, 'mouseup', onMouseUp); + onMouseDrag(e); + } + function onMouseDrag(e) { + e.preventDefault(); + var bgRect = _this.__background.getBoundingClientRect(); + _this.setValue(map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max)); + return false; + } + function onMouseUp() { + dom.unbind(window, 'mousemove', onMouseDrag); + dom.unbind(window, 'mouseup', onMouseUp); + if (_this.__onFinishChange) { + _this.__onFinishChange.call(_this, _this.getValue()); + } + } + function onTouchStart(e) { + if (e.touches.length !== 1) { + return; + } + dom.bind(window, 'touchmove', onTouchMove); + dom.bind(window, 'touchend', onTouchEnd); + onTouchMove(e); + } + function onTouchMove(e) { + var clientX = e.touches[0].clientX; + var bgRect = _this.__background.getBoundingClientRect(); + _this.setValue(map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max)); + } + function onTouchEnd() { + dom.unbind(window, 'touchmove', onTouchMove); + dom.unbind(window, 'touchend', onTouchEnd); + if (_this.__onFinishChange) { + _this.__onFinishChange.call(_this, _this.getValue()); + } + } + _this2.updateDisplay(); + _this2.__background.appendChild(_this2.__foreground); + _this2.domElement.appendChild(_this2.__background); + return _this2; + } + createClass(NumberControllerSlider, [{ + key: 'updateDisplay', + value: function updateDisplay() { + var pct = (this.getValue() - this.__min) / (this.__max - this.__min); + this.__foreground.style.width = pct * 100 + '%'; + return get(NumberControllerSlider.prototype.__proto__ || Object.getPrototypeOf(NumberControllerSlider.prototype), 'updateDisplay', this).call(this); + } + }]); + return NumberControllerSlider; +}(NumberController); + +var FunctionController = function (_Controller) { + inherits(FunctionController, _Controller); + function FunctionController(object, property, text) { + classCallCheck(this, FunctionController); + var _this2 = possibleConstructorReturn(this, (FunctionController.__proto__ || Object.getPrototypeOf(FunctionController)).call(this, object, property)); + var _this = _this2; + _this2.__button = document.createElement('div'); + _this2.__button.innerHTML = text === undefined ? 'Fire' : text; + dom.bind(_this2.__button, 'click', function (e) { + e.preventDefault(); + _this.fire(); + return false; + }); + dom.addClass(_this2.__button, 'button'); + _this2.domElement.appendChild(_this2.__button); + return _this2; + } + createClass(FunctionController, [{ + key: 'fire', + value: function fire() { + if (this.__onChange) { + this.__onChange.call(this); + } + this.getValue().call(this.object); + if (this.__onFinishChange) { + this.__onFinishChange.call(this, this.getValue()); + } + } + }]); + return FunctionController; +}(Controller); + +var ColorController = function (_Controller) { + inherits(ColorController, _Controller); + function ColorController(object, property) { + classCallCheck(this, ColorController); + var _this2 = possibleConstructorReturn(this, (ColorController.__proto__ || Object.getPrototypeOf(ColorController)).call(this, object, property)); + _this2.__color = new Color(_this2.getValue()); + _this2.__temp = new Color(0); + var _this = _this2; + _this2.domElement = document.createElement('div'); + dom.makeSelectable(_this2.domElement, false); + _this2.__selector = document.createElement('div'); + _this2.__selector.className = 'selector'; + _this2.__saturation_field = document.createElement('div'); + _this2.__saturation_field.className = 'saturation-field'; + _this2.__field_knob = document.createElement('div'); + _this2.__field_knob.className = 'field-knob'; + _this2.__field_knob_border = '2px solid '; + _this2.__hue_knob = document.createElement('div'); + _this2.__hue_knob.className = 'hue-knob'; + _this2.__hue_field = document.createElement('div'); + _this2.__hue_field.className = 'hue-field'; + _this2.__input = document.createElement('input'); + _this2.__input.type = 'text'; + _this2.__input_textShadow = '0 1px 1px '; + dom.bind(_this2.__input, 'keydown', function (e) { + if (e.keyCode === 13) { + onBlur.call(this); + } + }); + dom.bind(_this2.__input, 'blur', onBlur); + dom.bind(_this2.__selector, 'mousedown', function () { + dom.addClass(this, 'drag').bind(window, 'mouseup', function () { + dom.removeClass(_this.__selector, 'drag'); + }); + }); + dom.bind(_this2.__selector, 'touchstart', function () { + dom.addClass(this, 'drag').bind(window, 'touchend', function () { + dom.removeClass(_this.__selector, 'drag'); + }); + }); + var valueField = document.createElement('div'); + Common.extend(_this2.__selector.style, { + width: '122px', + height: '102px', + padding: '3px', + backgroundColor: '#222', + boxShadow: '0px 1px 3px rgba(0,0,0,0.3)' + }); + Common.extend(_this2.__field_knob.style, { + position: 'absolute', + width: '12px', + height: '12px', + border: _this2.__field_knob_border + (_this2.__color.v < 0.5 ? '#fff' : '#000'), + boxShadow: '0px 1px 3px rgba(0,0,0,0.5)', + borderRadius: '12px', + zIndex: 1 + }); + Common.extend(_this2.__hue_knob.style, { + position: 'absolute', + width: '15px', + height: '2px', + borderRight: '4px solid #fff', + zIndex: 1 + }); + Common.extend(_this2.__saturation_field.style, { + width: '100px', + height: '100px', + border: '1px solid #555', + marginRight: '3px', + display: 'inline-block', + cursor: 'pointer' + }); + Common.extend(valueField.style, { + width: '100%', + height: '100%', + background: 'none' + }); + linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000'); + Common.extend(_this2.__hue_field.style, { + width: '15px', + height: '100px', + border: '1px solid #555', + cursor: 'ns-resize', + position: 'absolute', + top: '3px', + right: '3px' + }); + hueGradient(_this2.__hue_field); + Common.extend(_this2.__input.style, { + outline: 'none', + textAlign: 'center', + color: '#fff', + border: 0, + fontWeight: 'bold', + textShadow: _this2.__input_textShadow + 'rgba(0,0,0,0.7)' + }); + dom.bind(_this2.__saturation_field, 'mousedown', fieldDown); + dom.bind(_this2.__saturation_field, 'touchstart', fieldDown); + dom.bind(_this2.__field_knob, 'mousedown', fieldDown); + dom.bind(_this2.__field_knob, 'touchstart', fieldDown); + dom.bind(_this2.__hue_field, 'mousedown', fieldDownH); + dom.bind(_this2.__hue_field, 'touchstart', fieldDownH); + function fieldDown(e) { + setSV(e); + dom.bind(window, 'mousemove', setSV); + dom.bind(window, 'touchmove', setSV); + dom.bind(window, 'mouseup', fieldUpSV); + dom.bind(window, 'touchend', fieldUpSV); + } + function fieldDownH(e) { + setH(e); + dom.bind(window, 'mousemove', setH); + dom.bind(window, 'touchmove', setH); + dom.bind(window, 'mouseup', fieldUpH); + dom.bind(window, 'touchend', fieldUpH); + } + function fieldUpSV() { + dom.unbind(window, 'mousemove', setSV); + dom.unbind(window, 'touchmove', setSV); + dom.unbind(window, 'mouseup', fieldUpSV); + dom.unbind(window, 'touchend', fieldUpSV); + onFinish(); + } + function fieldUpH() { + dom.unbind(window, 'mousemove', setH); + dom.unbind(window, 'touchmove', setH); + dom.unbind(window, 'mouseup', fieldUpH); + dom.unbind(window, 'touchend', fieldUpH); + onFinish(); + } + function onBlur() { + var i = interpret(this.value); + if (i !== false) { + _this.__color.__state = i; + _this.setValue(_this.__color.toOriginal()); + } else { + this.value = _this.__color.toString(); + } + } + function onFinish() { + if (_this.__onFinishChange) { + _this.__onFinishChange.call(_this, _this.__color.toOriginal()); + } + } + _this2.__saturation_field.appendChild(valueField); + _this2.__selector.appendChild(_this2.__field_knob); + _this2.__selector.appendChild(_this2.__saturation_field); + _this2.__selector.appendChild(_this2.__hue_field); + _this2.__hue_field.appendChild(_this2.__hue_knob); + _this2.domElement.appendChild(_this2.__input); + _this2.domElement.appendChild(_this2.__selector); + _this2.updateDisplay(); + function setSV(e) { + if (e.type.indexOf('touch') === -1) { + e.preventDefault(); + } + var fieldRect = _this.__saturation_field.getBoundingClientRect(); + var _ref = e.touches && e.touches[0] || e, + clientX = _ref.clientX, + clientY = _ref.clientY; + var s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left); + var v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top); + if (v > 1) { + v = 1; + } else if (v < 0) { + v = 0; + } + if (s > 1) { + s = 1; + } else if (s < 0) { + s = 0; + } + _this.__color.v = v; + _this.__color.s = s; + _this.setValue(_this.__color.toOriginal()); + return false; + } + function setH(e) { + if (e.type.indexOf('touch') === -1) { + e.preventDefault(); + } + var fieldRect = _this.__hue_field.getBoundingClientRect(); + var _ref2 = e.touches && e.touches[0] || e, + clientY = _ref2.clientY; + var h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top); + if (h > 1) { + h = 1; + } else if (h < 0) { + h = 0; + } + _this.__color.h = h * 360; + _this.setValue(_this.__color.toOriginal()); + return false; + } + return _this2; + } + createClass(ColorController, [{ + key: 'updateDisplay', + value: function updateDisplay() { + var i = interpret(this.getValue()); + if (i !== false) { + var mismatch = false; + Common.each(Color.COMPONENTS, function (component) { + if (!Common.isUndefined(i[component]) && !Common.isUndefined(this.__color.__state[component]) && i[component] !== this.__color.__state[component]) { + mismatch = true; + return {}; + } + }, this); + if (mismatch) { + Common.extend(this.__color.__state, i); + } + } + Common.extend(this.__temp.__state, this.__color.__state); + this.__temp.a = 1; + var flip = this.__color.v < 0.5 || this.__color.s > 0.5 ? 255 : 0; + var _flip = 255 - flip; + Common.extend(this.__field_knob.style, { + marginLeft: 100 * this.__color.s - 7 + 'px', + marginTop: 100 * (1 - this.__color.v) - 7 + 'px', + backgroundColor: this.__temp.toHexString(), + border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')' + }); + this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px'; + this.__temp.s = 1; + this.__temp.v = 1; + linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString()); + this.__input.value = this.__color.toString(); + Common.extend(this.__input.style, { + backgroundColor: this.__color.toHexString(), + color: 'rgb(' + flip + ',' + flip + ',' + flip + ')', + textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)' + }); + } + }]); + return ColorController; +}(Controller); +var vendors = ['-moz-', '-o-', '-webkit-', '-ms-', '']; +function linearGradient(elem, x, a, b) { + elem.style.background = ''; + Common.each(vendors, function (vendor) { + elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); '; + }); +} +function hueGradient(elem) { + elem.style.background = ''; + elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);'; + elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; + elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; + elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; + elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; +} + +var ControllerFactory = function ControllerFactory(object, property) { + var initialValue = object[property]; + if (Common.isArray(arguments[2]) || Common.isObject(arguments[2])) { + return new OptionController(object, property, arguments[2]); + } + if (Common.isNumber(initialValue)) { + if (Common.isNumber(arguments[2]) && Common.isNumber(arguments[3])) { + if (Common.isNumber(arguments[4])) { + return new NumberControllerSlider(object, property, arguments[2], arguments[3], arguments[4]); + } + return new NumberControllerSlider(object, property, arguments[2], arguments[3]); + } + if (Common.isNumber(arguments[4])) { + return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3], step: arguments[4] }); + } + return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] }); + } + if (Common.isString(initialValue)) { + return new StringController(object, property); + } + if (Common.isFunction(initialValue)) { + return new FunctionController(object, property, ''); + } + if (Common.isBoolean(initialValue)) { + return new BooleanController(object, property); + } + return null; +}; + +var CustomController = function (_Controller) { + inherits(CustomController, _Controller); + function CustomController(object, property) { + classCallCheck(this, CustomController); + var _this = possibleConstructorReturn(this, (CustomController.__proto__ || Object.getPrototypeOf(CustomController)).call(this, object, property)); + _this.arguments = { + object: object, property: property, opts: Array.prototype.slice.call(arguments, 2) + }; + if (object.property) _this.property = object.property(_this); + return _this; + } + createClass(CustomController, [{ + key: 'controller', + set: function set$$1(newController) { + this._controller = newController; + }, + get: function get$$1() { + return this._controller; + } + }]); + return CustomController; +}(Controller); + +var css = { + load: function load(url, indoc) { + var doc = indoc || document; + var link = doc.createElement('link'); + link.type = 'text/css'; + link.rel = 'stylesheet'; + link.href = url; + doc.getElementsByTagName('head')[0].appendChild(link); + }, + inject: function inject(cssContent, indoc) { + var doc = indoc || document; + var injected = document.createElement('style'); + injected.type = 'text/css'; + injected.innerHTML = cssContent; + var head = doc.getElementsByTagName('head')[0]; + try { + head.appendChild(injected); + } catch (e) { + } + } +}; + +var saveDialogContents = "
\n\n Here's the new load parameter for your GUI's constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI's constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n\n
\n\n
\n\n
"; + +function requestAnimationFrame(callback) { + setTimeout(callback, 1000 / 60); +} +var requestAnimationFrame$1 = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || requestAnimationFrame; + +var CenteredDiv = function () { + function CenteredDiv() { + classCallCheck(this, CenteredDiv); + this.backgroundElement = document.createElement('div'); + Common.extend(this.backgroundElement.style, { + backgroundColor: 'rgba(0,0,0,0.8)', + top: 0, + left: 0, + display: 'none', + zIndex: '1000', + opacity: 0, + WebkitTransition: 'opacity 0.2s linear', + transition: 'opacity 0.2s linear' + }); + dom.makeFullscreen(this.backgroundElement); + this.backgroundElement.style.position = 'fixed'; + this.domElement = document.createElement('div'); + Common.extend(this.domElement.style, { + position: 'fixed', + display: 'none', + zIndex: '1001', + opacity: 0, + WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear', + transition: 'transform 0.2s ease-out, opacity 0.2s linear' + }); + document.body.appendChild(this.backgroundElement); + document.body.appendChild(this.domElement); + var _this = this; + dom.bind(this.backgroundElement, 'click', function () { + _this.hide(); + }); + } + createClass(CenteredDiv, [{ + key: 'show', + value: function show() { + var _this = this; + this.backgroundElement.style.display = 'block'; + this.domElement.style.display = 'block'; + this.domElement.style.opacity = 0; + this.domElement.style.webkitTransform = 'scale(1.1)'; + this.layout(); + Common.defer(function () { + _this.backgroundElement.style.opacity = 1; + _this.domElement.style.opacity = 1; + _this.domElement.style.webkitTransform = 'scale(1)'; + }); + } + }, { + key: 'hide', + value: function hide() { + var _this = this; + var hide = function hide() { + _this.domElement.style.display = 'none'; + _this.backgroundElement.style.display = 'none'; + dom.unbind(_this.domElement, 'webkitTransitionEnd', hide); + dom.unbind(_this.domElement, 'transitionend', hide); + dom.unbind(_this.domElement, 'oTransitionEnd', hide); + }; + dom.bind(this.domElement, 'webkitTransitionEnd', hide); + dom.bind(this.domElement, 'transitionend', hide); + dom.bind(this.domElement, 'oTransitionEnd', hide); + this.backgroundElement.style.opacity = 0; + this.domElement.style.opacity = 0; + this.domElement.style.webkitTransform = 'scale(1.1)'; + } + }, { + key: 'layout', + value: function layout() { + this.domElement.style.left = window.innerWidth / 2 - dom.getWidth(this.domElement) / 2 + 'px'; + this.domElement.style.top = window.innerHeight / 2 - dom.getHeight(this.domElement) / 2 + 'px'; + } + }]); + return CenteredDiv; +}(); + +var styleSheet = ___$insertStyle(".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n"); + +css.inject(styleSheet); +var CSS_NAMESPACE = 'dg'; +var HIDE_KEY_CODE = 72; +var CLOSE_BUTTON_HEIGHT = 20; +var DEFAULT_DEFAULT_PRESET_NAME = 'Default'; +var SUPPORTS_LOCAL_STORAGE = function () { + try { + return !!window.localStorage; + } catch (e) { + return false; + } +}(); +var SAVE_DIALOGUE = void 0; +var autoPlaceVirgin = true; +var autoPlaceContainer = void 0; +var hide = false; +var hideableGuis = []; +var GUI = function GUI(pars) { + var _this = this; + var params = pars || {}; + this.domElement = document.createElement('div'); + this.__ul = document.createElement('ul'); + this.domElement.appendChild(this.__ul); + dom.addClass(this.domElement, CSS_NAMESPACE); + this.__folders = {}; + this.__controllers = []; + this.__rememberedObjects = []; + this.__rememberedObjectIndecesToControllers = []; + this.__listening = []; + params = Common.defaults(params, { + closeOnTop: false, + autoPlace: true, + width: GUI.DEFAULT_WIDTH + }); + params = Common.defaults(params, { + resizable: params.autoPlace, + hideable: params.autoPlace + }); + if (!Common.isUndefined(params.load)) { + if (params.preset) { + params.load.preset = params.preset; + } + } else { + params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME }; + } + if (Common.isUndefined(params.parent) && params.hideable) { + hideableGuis.push(this); + } + params.resizable = Common.isUndefined(params.parent) && params.resizable; + if (params.autoPlace && Common.isUndefined(params.scrollable)) { + params.scrollable = true; + } + var useLocalStorage = SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true'; + var saveToLocalStorage = void 0; + var titleRow = void 0; + Object.defineProperties(this, + { + parent: { + get: function get$$1() { + return params.parent; + } + }, + scrollable: { + get: function get$$1() { + return params.scrollable; + } + }, + autoPlace: { + get: function get$$1() { + return params.autoPlace; + } + }, + closeOnTop: { + get: function get$$1() { + return params.closeOnTop; + } + }, + preset: { + get: function get$$1() { + if (_this.parent) { + return _this.getRoot().preset; + } + return params.load.preset; + }, + set: function set$$1(v) { + if (_this.parent) { + _this.getRoot().preset = v; + } else { + params.load.preset = v; + } + setPresetSelectIndex(this); + _this.revert(); + } + }, + width: { + get: function get$$1() { + return params.width; + }, + set: function set$$1(v) { + params.width = v; + setWidth(_this, v); + } + }, + name: { + get: function get$$1() { + return params.name; + }, + set: function set$$1(v) { + params.name = v; + if (titleRow) { + titleRow.innerHTML = params.name; + } + } + }, + closed: { + get: function get$$1() { + return params.closed; + }, + set: function set$$1(v) { + params.closed = v; + if (params.closed) { + dom.addClass(_this.__ul, GUI.CLASS_CLOSED); + } else { + dom.removeClass(_this.__ul, GUI.CLASS_CLOSED); + } + this.onResize(); + if (_this.__closeButton) { + _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED; + } + } + }, + load: { + get: function get$$1() { + return params.load; + } + }, + useLocalStorage: { + get: function get$$1() { + return useLocalStorage; + }, + set: function set$$1(bool) { + if (SUPPORTS_LOCAL_STORAGE) { + useLocalStorage = bool; + if (bool) { + dom.bind(window, 'unload', saveToLocalStorage); + } else { + dom.unbind(window, 'unload', saveToLocalStorage); + } + localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool); + } + } + } + }); + if (Common.isUndefined(params.parent)) { + this.closed = params.closed || false; + dom.addClass(this.domElement, GUI.CLASS_MAIN); + dom.makeSelectable(this.domElement, false); + if (SUPPORTS_LOCAL_STORAGE) { + if (useLocalStorage) { + _this.useLocalStorage = true; + var savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui')); + if (savedGui) { + params.load = JSON.parse(savedGui); + } + } + } + this.__closeButton = document.createElement('div'); + this.__closeButton.innerHTML = GUI.TEXT_CLOSED; + dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON); + if (params.closeOnTop) { + dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP); + this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]); + } else { + dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM); + this.domElement.appendChild(this.__closeButton); + } + dom.bind(this.__closeButton, 'click', function () { + _this.closed = !_this.closed; + }); + } else { + if (params.closed === undefined) { + params.closed = true; + } + var titleRowName = document.createTextNode(params.name); + dom.addClass(titleRowName, 'controller-name'); + titleRow = addRow(_this, titleRowName); + var onClickTitle = function onClickTitle(e) { + e.preventDefault(); + _this.closed = !_this.closed; + return false; + }; + dom.addClass(this.__ul, GUI.CLASS_CLOSED); + dom.addClass(titleRow, 'title'); + dom.bind(titleRow, 'click', onClickTitle); + if (!params.closed) { + this.closed = false; + } + } + if (params.autoPlace) { + if (Common.isUndefined(params.parent)) { + if (autoPlaceVirgin) { + autoPlaceContainer = document.createElement('div'); + dom.addClass(autoPlaceContainer, CSS_NAMESPACE); + dom.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER); + document.body.appendChild(autoPlaceContainer); + autoPlaceVirgin = false; + } + autoPlaceContainer.appendChild(this.domElement); + dom.addClass(this.domElement, GUI.CLASS_AUTO_PLACE); + } + if (!this.parent) { + setWidth(_this, params.width); + } + } + this.__resizeHandler = function () { + _this.onResizeDebounced(); + }; + dom.bind(window, 'resize', this.__resizeHandler); + dom.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler); + dom.bind(this.__ul, 'transitionend', this.__resizeHandler); + dom.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler); + this.onResize(); + if (params.resizable) { + addResizeHandle(this); + } + saveToLocalStorage = function saveToLocalStorage() { + if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') { + localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject())); + } + }; + this.saveToLocalStorageIfPossible = saveToLocalStorage; + function resetWidth() { + var root = _this.getRoot(); + root.width += 1; + Common.defer(function () { + root.width -= 1; + }); + } + if (!params.parent) { + resetWidth(); + } +}; +GUI.toggleHide = function () { + hide = !hide; + Common.each(hideableGuis, function (gui) { + gui.domElement.style.display = hide ? 'none' : ''; + }); +}; +GUI.CLASS_AUTO_PLACE = 'a'; +GUI.CLASS_AUTO_PLACE_CONTAINER = 'ac'; +GUI.CLASS_MAIN = 'main'; +GUI.CLASS_CONTROLLER_ROW = 'cr'; +GUI.CLASS_TOO_TALL = 'taller-than-window'; +GUI.CLASS_CLOSED = 'closed'; +GUI.CLASS_CLOSE_BUTTON = 'close-button'; +GUI.CLASS_CLOSE_TOP = 'close-top'; +GUI.CLASS_CLOSE_BOTTOM = 'close-bottom'; +GUI.CLASS_DRAG = 'drag'; +GUI.DEFAULT_WIDTH = 245; +GUI.TEXT_CLOSED = 'Close Controls'; +GUI.TEXT_OPEN = 'Open Controls'; +GUI._keydownHandler = function (e) { + if (document.activeElement.type !== 'text' && (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) { + GUI.toggleHide(); + } +}; +dom.bind(window, 'keydown', GUI._keydownHandler, false); +Common.extend(GUI.prototype, +{ + add: function add(object, property) { + return _add(this, object, property, { + factoryArgs: Array.prototype.slice.call(arguments, 2) + }); + }, + addColor: function addColor(object, property) { + return _add(this, object, property, { + color: true + }); + }, + remove: function remove(controller) { + this.__ul.removeChild(controller.__li); + this.__controllers.splice(this.__controllers.indexOf(controller), 1); + var _this = this; + Common.defer(function () { + _this.onResize(); + }); + }, + destroy: function destroy() { + if (this.parent) { + throw new Error('Only the root GUI should be removed with .destroy(). ' + 'For subfolders, use gui.removeFolder(folder) instead.'); + } + if (this.autoPlace) { + autoPlaceContainer.removeChild(this.domElement); + } + var _this = this; + Common.each(this.__folders, function (subfolder) { + _this.removeFolder(subfolder); + }); + dom.unbind(window, 'keydown', GUI._keydownHandler, false); + removeListeners(this); + }, + addFolder: function addFolder(name) { + if (this.__folders[name] !== undefined) { + throw new Error('You already have a folder in this GUI by the' + ' name "' + name + '"'); + } + var newGuiParams = { name: name, parent: this }; + newGuiParams.autoPlace = this.autoPlace; + if (this.load && + this.load.folders && + this.load.folders[name]) { + newGuiParams.closed = this.load.folders[name].closed; + newGuiParams.load = this.load.folders[name]; + } + var gui = new GUI(newGuiParams); + this.__folders[name] = gui; + var li = addRow(this, gui.domElement); + dom.addClass(li, 'folder'); + return gui; + }, + removeFolder: function removeFolder(folder) { + this.__ul.removeChild(folder.domElement.parentElement); + delete this.__folders[folder.name]; + if (this.load && + this.load.folders && + this.load.folders[folder.name]) { + delete this.load.folders[folder.name]; + } + removeListeners(folder); + var _this = this; + Common.each(folder.__folders, function (subfolder) { + folder.removeFolder(subfolder); + }); + Common.defer(function () { + _this.onResize(); + }); + }, + open: function open() { + this.closed = false; + }, + close: function close() { + this.closed = true; + }, + hide: function hide() { + this.domElement.style.display = 'none'; + }, + show: function show() { + this.domElement.style.display = ''; + }, + onResize: function onResize() { + var root = this.getRoot(); + if (root.scrollable) { + var top = dom.getOffset(root.__ul).top; + var h = 0; + Common.each(root.__ul.childNodes, function (node) { + if (!(root.autoPlace && node === root.__save_row)) { + h += dom.getHeight(node); + } + }); + if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) { + dom.addClass(root.domElement, GUI.CLASS_TOO_TALL); + root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px'; + } else { + dom.removeClass(root.domElement, GUI.CLASS_TOO_TALL); + root.__ul.style.height = 'auto'; + } + } + if (root.__resize_handle) { + Common.defer(function () { + root.__resize_handle.style.height = root.__ul.offsetHeight + 'px'; + }); + } + if (root.__closeButton) { + root.__closeButton.style.width = root.width + 'px'; + } + }, + onResizeDebounced: Common.debounce(function () { + this.onResize(); + }, 50), + remember: function remember() { + if (Common.isUndefined(SAVE_DIALOGUE)) { + SAVE_DIALOGUE = new CenteredDiv(); + SAVE_DIALOGUE.domElement.innerHTML = saveDialogContents; + } + if (this.parent) { + throw new Error('You can only call remember on a top level GUI.'); + } + var _this = this; + Common.each(Array.prototype.slice.call(arguments), function (object) { + if (_this.__rememberedObjects.length === 0) { + addSaveMenu(_this); + } + if (_this.__rememberedObjects.indexOf(object) === -1) { + _this.__rememberedObjects.push(object); + } + }); + if (this.autoPlace) { + setWidth(this, this.width); + } + }, + getRoot: function getRoot() { + var gui = this; + while (gui.parent) { + gui = gui.parent; + } + return gui; + }, + getSaveObject: function getSaveObject() { + var toReturn = this.load; + toReturn.closed = this.closed; + if (this.__rememberedObjects.length > 0) { + toReturn.preset = this.preset; + if (!toReturn.remembered) { + toReturn.remembered = {}; + } + toReturn.remembered[this.preset] = getCurrentPreset(this); + } + toReturn.folders = {}; + Common.each(this.__folders, function (element, key) { + toReturn.folders[key] = element.getSaveObject(); + }); + return toReturn; + }, + save: function save() { + if (!this.load.remembered) { + this.load.remembered = {}; + } + this.load.remembered[this.preset] = getCurrentPreset(this); + markPresetModified(this, false); + this.saveToLocalStorageIfPossible(); + }, + saveAs: function saveAs(presetName) { + if (!this.load.remembered) { + this.load.remembered = {}; + this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true); + } + this.load.remembered[presetName] = getCurrentPreset(this); + this.preset = presetName; + addPresetOption(this, presetName, true); + this.saveToLocalStorageIfPossible(); + }, + revert: function revert(gui) { + Common.each(this.__controllers, function (controller) { + if (!this.getRoot().load.remembered) { + controller.setValue(controller.initialValue); + } else { + recallSavedValue(gui || this.getRoot(), controller); + } + if (controller.__onFinishChange) { + controller.__onFinishChange.call(controller, controller.getValue()); + } + }, this); + Common.each(this.__folders, function (folder) { + folder.revert(folder); + }); + if (!gui) { + markPresetModified(this.getRoot(), false); + } + }, + listen: function listen(controller) { + var init = this.__listening.length === 0; + this.__listening.push(controller); + if (init) { + updateDisplays(this.__listening); + } + }, + updateDisplay: function updateDisplay() { + Common.each(this.__controllers, function (controller) { + controller.updateDisplay(); + }); + Common.each(this.__folders, function (folder) { + folder.updateDisplay(); + }); + } +}); +function addRow(gui, newDom, liBefore) { + var li = document.createElement('li'); + if (newDom) { + li.appendChild(newDom); + } + if (liBefore) { + gui.__ul.insertBefore(li, liBefore); + } else { + gui.__ul.appendChild(li); + } + gui.onResize(); + return li; +} +function removeListeners(gui) { + dom.unbind(window, 'resize', gui.__resizeHandler); + if (gui.saveToLocalStorageIfPossible) { + dom.unbind(window, 'unload', gui.saveToLocalStorageIfPossible); + } +} +function markPresetModified(gui, modified) { + var opt = gui.__preset_select[gui.__preset_select.selectedIndex]; + if (modified) { + opt.innerHTML = opt.value + '*'; + } else { + opt.innerHTML = opt.value; + } +} +function augmentController(gui, li, controller) { + controller.__li = li; + controller.__gui = gui; + Common.extend(controller, { + options: function options(_options) { + if (arguments.length > 1) { + var nextSibling = controller.__li.nextElementSibling; + controller.remove(); + return _add(gui, controller.object, controller.property, { + before: nextSibling, + factoryArgs: [Common.toArray(arguments)] + }); + } + if (Common.isArray(_options) || Common.isObject(_options)) { + var _nextSibling = controller.__li.nextElementSibling; + controller.remove(); + return _add(gui, controller.object, controller.property, { + before: _nextSibling, + factoryArgs: [_options] + }); + } + }, + name: function name(_name) { + controller.__li.firstElementChild.firstElementChild.innerHTML = _name; + return controller; + }, + listen: function listen() { + controller.__gui.listen(controller); + return controller; + }, + remove: function remove() { + controller.__gui.remove(controller); + return controller; + } + }); + if (controller instanceof NumberControllerSlider) { + var box = new NumberControllerBox(controller.object, controller.property, { min: controller.__min, max: controller.__max, step: controller.__step }); + Common.each(['updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max'], function (method) { + var pc = controller[method]; + var pb = box[method]; + controller[method] = box[method] = function () { + var args = Array.prototype.slice.call(arguments); + pb.apply(box, args); + return pc.apply(controller, args); + }; + }); + dom.addClass(li, 'has-slider'); + controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild); + } else if (controller instanceof NumberControllerBox) { + var r = function r(returned) { + if (Common.isNumber(controller.__min) && Common.isNumber(controller.__max)) { + var oldName = controller.__li.firstElementChild.firstElementChild.innerHTML; + var wasListening = controller.__gui.__listening.indexOf(controller) > -1; + controller.remove(); + var newController = _add(gui, controller.object, controller.property, { + before: controller.__li.nextElementSibling, + factoryArgs: [controller.__min, controller.__max, controller.__step] + }); + newController.name(oldName); + if (wasListening) newController.listen(); + return newController; + } + return returned; + }; + controller.min = Common.compose(r, controller.min); + controller.max = Common.compose(r, controller.max); + } else if (controller instanceof BooleanController) { + dom.bind(li, 'click', function () { + dom.fakeEvent(controller.__checkbox, 'click'); + }); + dom.bind(controller.__checkbox, 'click', function (e) { + e.stopPropagation(); + }); + } else if (controller instanceof FunctionController) { + dom.bind(li, 'click', function () { + dom.fakeEvent(controller.__button, 'click'); + }); + dom.bind(li, 'mouseover', function () { + dom.addClass(controller.__button, 'hover'); + }); + dom.bind(li, 'mouseout', function () { + dom.removeClass(controller.__button, 'hover'); + }); + } else if (controller instanceof ColorController) { + dom.addClass(li, 'color'); + controller.updateDisplay = Common.compose(function (val) { + li.style.borderLeftColor = controller.__color.toString(); + return val; + }, controller.updateDisplay); + controller.updateDisplay(); + } + controller.setValue = Common.compose(function (val) { + if (gui.getRoot().__preset_select && controller.isModified()) { + markPresetModified(gui.getRoot(), true); + } + return val; + }, controller.setValue); +} +function recallSavedValue(gui, controller) { + var root = gui.getRoot(); + var matchedIndex = root.__rememberedObjects.indexOf(controller.object); + if (matchedIndex !== -1) { + var controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex]; + if (controllerMap === undefined) { + controllerMap = {}; + root.__rememberedObjectIndecesToControllers[matchedIndex] = controllerMap; + } + controllerMap[controller.property] = controller; + if (root.load && root.load.remembered) { + var presetMap = root.load.remembered; + var preset = void 0; + if (presetMap[gui.preset]) { + preset = presetMap[gui.preset]; + } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) { + preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME]; + } else { + return; + } + if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) { + var value = preset[matchedIndex][controller.property]; + controller.initialValue = value; + controller.setValue(value); + } + } + } +} +function _add(gui, object, property, params) { + var customObject; + if (object.arguments) { + customObject = object; + object = customObject.arguments.object; + property = customObject.arguments.property; + params = { + factoryArgs: customObject.arguments.opts + }; + } + if (customObject === undefined && object[property] === undefined) { + throw new Error('Object "' + object + '" has no property "' + property + '"'); + } + var controller = void 0; + if (params.color) { + controller = new ColorController(object, property); + } else if (customObject !== undefined && typeof customObject.property === "string") { + controller = customObject; + } else { + var factoryArgs = [object, property].concat(params.factoryArgs); + controller = ControllerFactory.apply(gui, factoryArgs); + } + if (controller === null) controller = customObject;else if (customObject !== undefined) customObject.controller = controller; + if (params.before instanceof Controller) { + params.before = params.before.__li; + } + recallSavedValue(gui, controller); + dom.addClass(controller.domElement, 'c'); + var name = document.createElement('span'); + dom.addClass(name, 'property-name'); + if (customObject !== undefined && _typeof(customObject.property) === "object") { + for (var propertyName in customObject.property) { + name.appendChild(customObject.property[propertyName]); + } + } else name.innerHTML = controller.property; + var container = document.createElement('div'); + container.appendChild(name); + container.appendChild(controller.domElement); + var li = addRow(gui, container, params.before); + dom.addClass(li, GUI.CLASS_CONTROLLER_ROW); + if (controller instanceof ColorController) { + dom.addClass(li, 'color'); + } else { + dom.addClass(li, _typeof(controller.getValue())); + } + augmentController(gui, li, controller); + gui.__controllers.push(controller); + return controller; +} +function getLocalStorageHash(gui, key) { + return document.location.href + '.' + key; +} +function addPresetOption(gui, name, setSelected) { + var opt = document.createElement('option'); + opt.innerHTML = name; + opt.value = name; + gui.__preset_select.appendChild(opt); + if (setSelected) { + gui.__preset_select.selectedIndex = gui.__preset_select.length - 1; + } +} +function showHideExplain(gui, explain) { + explain.style.display = gui.useLocalStorage ? 'block' : 'none'; +} +function addSaveMenu(gui) { + var div = gui.__save_row = document.createElement('li'); + dom.addClass(gui.domElement, 'has-save'); + gui.__ul.insertBefore(div, gui.__ul.firstChild); + dom.addClass(div, 'save-row'); + var gears = document.createElement('span'); + gears.innerHTML = ' '; + dom.addClass(gears, 'button gears'); + var button = document.createElement('span'); + button.innerHTML = 'Save'; + dom.addClass(button, 'button'); + dom.addClass(button, 'save'); + var button2 = document.createElement('span'); + button2.innerHTML = 'New'; + dom.addClass(button2, 'button'); + dom.addClass(button2, 'save-as'); + var button3 = document.createElement('span'); + button3.innerHTML = 'Revert'; + dom.addClass(button3, 'button'); + dom.addClass(button3, 'revert'); + var select = gui.__preset_select = document.createElement('select'); + if (gui.load && gui.load.remembered) { + Common.each(gui.load.remembered, function (value, key) { + addPresetOption(gui, key, key === gui.preset); + }); + } else { + addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false); + } + dom.bind(select, 'change', function () { + for (var index = 0; index < gui.__preset_select.length; index++) { + gui.__preset_select[index].innerHTML = gui.__preset_select[index].value; + } + gui.preset = this.value; + }); + div.appendChild(select); + div.appendChild(gears); + div.appendChild(button); + div.appendChild(button2); + div.appendChild(button3); + if (SUPPORTS_LOCAL_STORAGE) { + var explain = document.getElementById('dg-local-explain'); + var localStorageCheckBox = document.getElementById('dg-local-storage'); + var saveLocally = document.getElementById('dg-save-locally'); + saveLocally.style.display = 'block'; + if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') { + localStorageCheckBox.setAttribute('checked', 'checked'); + } + showHideExplain(gui, explain); + dom.bind(localStorageCheckBox, 'change', function () { + gui.useLocalStorage = !gui.useLocalStorage; + showHideExplain(gui, explain); + }); + } + var newConstructorTextArea = document.getElementById('dg-new-constructor'); + dom.bind(newConstructorTextArea, 'keydown', function (e) { + if (e.metaKey && (e.which === 67 || e.keyCode === 67)) { + SAVE_DIALOGUE.hide(); + } + }); + dom.bind(gears, 'click', function () { + newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2); + SAVE_DIALOGUE.show(); + newConstructorTextArea.focus(); + newConstructorTextArea.select(); + }); + dom.bind(button, 'click', function () { + gui.save(); + }); + dom.bind(button2, 'click', function () { + var presetName = prompt('Enter a new preset name.'); + if (presetName) { + gui.saveAs(presetName); + } + }); + dom.bind(button3, 'click', function () { + gui.revert(); + }); +} +function addResizeHandle(gui) { + var pmouseX = void 0; + gui.__resize_handle = document.createElement('div'); + Common.extend(gui.__resize_handle.style, { + width: '6px', + marginLeft: '-3px', + height: '200px', + cursor: 'ew-resize', + position: 'absolute' + }); + function drag(e) { + e.preventDefault(); + gui.width += pmouseX - e.clientX; + gui.onResize(); + pmouseX = e.clientX; + return false; + } + function dragStop() { + dom.removeClass(gui.__closeButton, GUI.CLASS_DRAG); + dom.unbind(window, 'mousemove', drag); + dom.unbind(window, 'mouseup', dragStop); + } + function dragStart(e) { + e.preventDefault(); + pmouseX = e.clientX; + dom.addClass(gui.__closeButton, GUI.CLASS_DRAG); + dom.bind(window, 'mousemove', drag); + dom.bind(window, 'mouseup', dragStop); + return false; + } + dom.bind(gui.__resize_handle, 'mousedown', dragStart); + dom.bind(gui.__closeButton, 'mousedown', dragStart); + gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild); +} +function setWidth(gui, w) { + gui.domElement.style.width = w + 'px'; + if (gui.__save_row && gui.autoPlace) { + gui.__save_row.style.width = w + 'px'; + } + if (gui.__closeButton) { + gui.__closeButton.style.width = w + 'px'; + } +} +function getCurrentPreset(gui, useInitialValues) { + var toReturn = {}; + Common.each(gui.__rememberedObjects, function (val, index) { + var savedValues = {}; + var controllerMap = gui.__rememberedObjectIndecesToControllers[index]; + Common.each(controllerMap, function (controller, property) { + savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue(); + }); + toReturn[index] = savedValues; + }); + return toReturn; +} +function setPresetSelectIndex(gui) { + for (var index = 0; index < gui.__preset_select.length; index++) { + if (gui.__preset_select[index].value === gui.preset) { + gui.__preset_select.selectedIndex = index; + } + } +} +function updateDisplays(controllerArray) { + if (controllerArray.length !== 0) { + requestAnimationFrame$1.call(window, function () { + updateDisplays(controllerArray); + }); + } + Common.each(controllerArray, function (c) { + c.updateDisplay(); + }); +} + +var color = { + Color: Color, + math: ColorMath, + interpret: interpret +}; +var controllers = { + Controller: Controller, + BooleanController: BooleanController, + OptionController: OptionController, + StringController: StringController, + NumberController: NumberController, + NumberControllerBox: NumberControllerBox, + NumberControllerSlider: NumberControllerSlider, + FunctionController: FunctionController, + ColorController: ColorController, + CustomController: CustomController +}; +var dom$1 = { dom: dom }; +var gui = { GUI: GUI }; +var GUI$1 = GUI; +var index = { + color: color, + controllers: controllers, + dom: dom$1, + gui: gui, + GUI: GUI$1 +}; + +export { color, controllers, dom$1 as dom, gui, GUI$1 as GUI }; +export default index; +//# sourceMappingURL=dat.gui.module.js.map diff --git a/build/dat.gui.module.js.map b/build/dat.gui.module.js.map new file mode 100644 index 0000000..42b2575 --- /dev/null +++ b/build/dat.gui.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dat.gui.module.js","sources":["../src/dat/color/toString.js","../src/dat/utils/common.js","../src/dat/color/interpret.js","../src/dat/color/math.js","../src/dat/color/Color.js","../src/dat/controllers/Controller.js","../src/dat/dom/dom.js","../src/dat/controllers/BooleanController.js","../src/dat/controllers/OptionController.js","../src/dat/controllers/StringController.js","../src/dat/controllers/NumberController.js","../src/dat/controllers/NumberControllerBox.js","../src/dat/controllers/NumberControllerSlider.js","../src/dat/controllers/FunctionController.js","../src/dat/controllers/ColorController.js","../src/dat/controllers/ControllerFactory.js","../src/dat/controllers/CustomController.js","../src/dat/utils/css.js","../src/dat/gui/saveDialogue.html.js","../src/dat/utils/requestAnimationFrame.js","../src/dat/dom/CenteredDiv.js","../src/dat/gui/GUI.js","../src/dat/index.js"],"sourcesContent":["/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nexport default function(color, forceCSSHex) {\r\n const colorFormat = color.__state.conversionName.toString();\r\n\r\n const r = Math.round(color.r);\r\n const g = Math.round(color.g);\r\n const b = Math.round(color.b);\r\n const a = color.a;\r\n const h = Math.round(color.h);\r\n const s = color.s.toFixed(1);\r\n const v = color.v.toFixed(1);\r\n\r\n if (forceCSSHex || (colorFormat === 'THREE_CHAR_HEX') || (colorFormat === 'SIX_CHAR_HEX')) {\r\n let str = color.hex.toString(16);\r\n while (str.length < 6) {\r\n str = '0' + str;\r\n }\r\n return '#' + str;\r\n } else if (colorFormat === 'CSS_RGB') {\r\n return 'rgb(' + r + ',' + g + ',' + b + ')';\r\n } else if (colorFormat === 'CSS_RGBA') {\r\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\r\n } else if (colorFormat === 'HEX') {\r\n return '0x' + color.hex.toString(16);\r\n } else if (colorFormat === 'RGB_ARRAY') {\r\n return '[' + r + ',' + g + ',' + b + ']';\r\n } else if (colorFormat === 'RGBA_ARRAY') {\r\n return '[' + r + ',' + g + ',' + b + ',' + a + ']';\r\n } else if (colorFormat === 'RGB_OBJ') {\r\n return '{r:' + r + ',g:' + g + ',b:' + b + '}';\r\n } else if (colorFormat === 'RGBA_OBJ') {\r\n return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}';\r\n } else if (colorFormat === 'HSV_OBJ') {\r\n return '{h:' + h + ',s:' + s + ',v:' + v + '}';\r\n } else if (colorFormat === 'HSVA_OBJ') {\r\n return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}';\r\n }\r\n\r\n return 'unknown format';\r\n}\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nconst ARR_EACH = Array.prototype.forEach;\r\nconst ARR_SLICE = Array.prototype.slice;\r\n\r\n/**\r\n * Band-aid methods for things that should be a lot easier in JavaScript.\r\n * Implementation and structure inspired by underscore.js\r\n * http://documentcloud.github.com/underscore/\r\n */\r\n\r\nconst Common = {\r\n BREAK: {},\r\n\r\n extend: function(target) {\r\n this.each(ARR_SLICE.call(arguments, 1), function(obj) {\r\n const keys = this.isObject(obj) ? Object.keys(obj) : [];\r\n keys.forEach(function(key) {\r\n if (!this.isUndefined(obj[key])) {\r\n target[key] = obj[key];\r\n }\r\n }.bind(this));\r\n }, this);\r\n\r\n return target;\r\n },\r\n\r\n defaults: function(target) {\r\n this.each(ARR_SLICE.call(arguments, 1), function(obj) {\r\n const keys = this.isObject(obj) ? Object.keys(obj) : [];\r\n keys.forEach(function(key) {\r\n if (this.isUndefined(target[key])) {\r\n target[key] = obj[key];\r\n }\r\n }.bind(this));\r\n }, this);\r\n\r\n return target;\r\n },\r\n\r\n compose: function() {\r\n const toCall = ARR_SLICE.call(arguments);\r\n return function() {\r\n let args = ARR_SLICE.call(arguments);\r\n for (let i = toCall.length - 1; i >= 0; i--) {\r\n args = [toCall[i].apply(this, args)];\r\n }\r\n return args[0];\r\n };\r\n },\r\n\r\n each: function(obj, itr, scope) {\r\n if (!obj) {\r\n return;\r\n }\r\n\r\n if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) {\r\n obj.forEach(itr, scope);\r\n } else if (obj.length === obj.length + 0) { // Is number but not NaN\r\n let key;\r\n let l;\r\n for (key = 0, l = obj.length; key < l; key++) {\r\n if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) {\r\n return;\r\n }\r\n }\r\n } else {\r\n for (const key in obj) {\r\n if (itr.call(scope, obj[key], key) === this.BREAK) {\r\n return;\r\n }\r\n }\r\n }\r\n },\r\n\r\n defer: function(fnc) {\r\n setTimeout(fnc, 0);\r\n },\r\n\r\n // if the function is called repeatedly, wait until threshold passes until we execute the function\r\n debounce: function(func, threshold, callImmediately) {\r\n let timeout;\r\n\r\n return function() {\r\n const obj = this;\r\n const args = arguments;\r\n function delayed() {\r\n timeout = null;\r\n if (!callImmediately) func.apply(obj, args);\r\n }\r\n\r\n const callNow = callImmediately || !timeout;\r\n\r\n clearTimeout(timeout);\r\n timeout = setTimeout(delayed, threshold);\r\n\r\n if (callNow) {\r\n func.apply(obj, args);\r\n }\r\n };\r\n },\r\n\r\n toArray: function(obj) {\r\n if (obj.toArray) return obj.toArray();\r\n return ARR_SLICE.call(obj);\r\n },\r\n\r\n isUndefined: function(obj) {\r\n return obj === undefined;\r\n },\r\n\r\n isNull: function(obj) {\r\n return obj === null;\r\n },\r\n\r\n isNaN: function(obj) {\r\n return isNaN(obj);\r\n },\r\n\r\n isArray: Array.isArray || function(obj) {\r\n return obj.constructor === Array;\r\n },\r\n\r\n isObject: function(obj) {\r\n return obj === Object(obj);\r\n },\r\n\r\n isNumber: function(obj) {\r\n return obj === obj + 0;\r\n },\r\n\r\n isString: function(obj) {\r\n return obj === obj + '';\r\n },\r\n\r\n isBoolean: function(obj) {\r\n return obj === false || obj === true;\r\n },\r\n\r\n isFunction: function(obj) {\r\n return Object.prototype.toString.call(obj) === '[object Function]';\r\n }\r\n\r\n};\r\n\r\nexport default Common;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport toString from './toString';\r\nimport common from '../utils/common';\r\n\r\nconst INTERPRETATIONS = [\r\n // Strings\r\n {\r\n litmus: common.isString,\r\n conversions: {\r\n THREE_CHAR_HEX: {\r\n read: function(original) {\r\n const test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);\r\n if (test === null) {\r\n return false;\r\n }\r\n\r\n return {\r\n space: 'HEX',\r\n hex: parseInt(\r\n '0x' +\r\n test[1].toString() + test[1].toString() +\r\n test[2].toString() + test[2].toString() +\r\n test[3].toString() + test[3].toString(), 0)\r\n };\r\n },\r\n\r\n write: toString\r\n },\r\n\r\n SIX_CHAR_HEX: {\r\n read: function(original) {\r\n const test = original.match(/^#([A-F0-9]{6})$/i);\r\n if (test === null) {\r\n return false;\r\n }\r\n\r\n return {\r\n space: 'HEX',\r\n hex: parseInt('0x' + test[1].toString(), 0)\r\n };\r\n },\r\n\r\n write: toString\r\n },\r\n\r\n CSS_RGB: {\r\n read: function(original) {\r\n const test = original.match(/^rgb\\(\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*\\)/);\r\n if (test === null) {\r\n return false;\r\n }\r\n\r\n return {\r\n space: 'RGB',\r\n r: parseFloat(test[1]),\r\n g: parseFloat(test[2]),\r\n b: parseFloat(test[3])\r\n };\r\n },\r\n\r\n write: toString\r\n },\r\n\r\n CSS_RGBA: {\r\n read: function(original) {\r\n const test = original.match(/^rgba\\(\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*\\)/);\r\n if (test === null) {\r\n return false;\r\n }\r\n\r\n return {\r\n space: 'RGB',\r\n r: parseFloat(test[1]),\r\n g: parseFloat(test[2]),\r\n b: parseFloat(test[3]),\r\n a: parseFloat(test[4])\r\n };\r\n },\r\n\r\n write: toString\r\n }\r\n }\r\n },\r\n\r\n // Numbers\r\n {\r\n litmus: common.isNumber,\r\n\r\n conversions: {\r\n\r\n HEX: {\r\n read: function(original) {\r\n return {\r\n space: 'HEX',\r\n hex: original,\r\n conversionName: 'HEX'\r\n };\r\n },\r\n\r\n write: function(color) {\r\n return color.hex;\r\n }\r\n }\r\n\r\n }\r\n\r\n },\r\n\r\n // Arrays\r\n {\r\n litmus: common.isArray,\r\n conversions: {\r\n RGB_ARRAY: {\r\n read: function(original) {\r\n if (original.length !== 3) {\r\n return false;\r\n }\r\n\r\n return {\r\n space: 'RGB',\r\n r: original[0],\r\n g: original[1],\r\n b: original[2]\r\n };\r\n },\r\n\r\n write: function(color) {\r\n return [color.r, color.g, color.b];\r\n }\r\n },\r\n\r\n RGBA_ARRAY: {\r\n read: function(original) {\r\n if (original.length !== 4) return false;\r\n return {\r\n space: 'RGB',\r\n r: original[0],\r\n g: original[1],\r\n b: original[2],\r\n a: original[3]\r\n };\r\n },\r\n\r\n write: function(color) {\r\n return [color.r, color.g, color.b, color.a];\r\n }\r\n }\r\n }\r\n },\r\n\r\n // Objects\r\n {\r\n litmus: common.isObject,\r\n conversions: {\r\n\r\n RGBA_OBJ: {\r\n read: function(original) {\r\n if (common.isNumber(original.r) &&\r\n common.isNumber(original.g) &&\r\n common.isNumber(original.b) &&\r\n common.isNumber(original.a)) {\r\n return {\r\n space: 'RGB',\r\n r: original.r,\r\n g: original.g,\r\n b: original.b,\r\n a: original.a\r\n };\r\n }\r\n return false;\r\n },\r\n\r\n write: function(color) {\r\n return {\r\n r: color.r,\r\n g: color.g,\r\n b: color.b,\r\n a: color.a\r\n };\r\n }\r\n },\r\n\r\n RGB_OBJ: {\r\n read: function(original) {\r\n if (common.isNumber(original.r) &&\r\n common.isNumber(original.g) &&\r\n common.isNumber(original.b)) {\r\n return {\r\n space: 'RGB',\r\n r: original.r,\r\n g: original.g,\r\n b: original.b\r\n };\r\n }\r\n return false;\r\n },\r\n\r\n write: function(color) {\r\n return {\r\n r: color.r,\r\n g: color.g,\r\n b: color.b\r\n };\r\n }\r\n },\r\n\r\n HSVA_OBJ: {\r\n read: function(original) {\r\n if (common.isNumber(original.h) &&\r\n common.isNumber(original.s) &&\r\n common.isNumber(original.v) &&\r\n common.isNumber(original.a)) {\r\n return {\r\n space: 'HSV',\r\n h: original.h,\r\n s: original.s,\r\n v: original.v,\r\n a: original.a\r\n };\r\n }\r\n return false;\r\n },\r\n\r\n write: function(color) {\r\n return {\r\n h: color.h,\r\n s: color.s,\r\n v: color.v,\r\n a: color.a\r\n };\r\n }\r\n },\r\n\r\n HSV_OBJ: {\r\n read: function(original) {\r\n if (common.isNumber(original.h) &&\r\n common.isNumber(original.s) &&\r\n common.isNumber(original.v)) {\r\n return {\r\n space: 'HSV',\r\n h: original.h,\r\n s: original.s,\r\n v: original.v\r\n };\r\n }\r\n return false;\r\n },\r\n\r\n write: function(color) {\r\n return {\r\n h: color.h,\r\n s: color.s,\r\n v: color.v\r\n };\r\n }\r\n }\r\n }\r\n }\r\n];\r\n\r\nlet result;\r\nlet toReturn;\r\n\r\nconst interpret = function() {\r\n toReturn = false;\r\n\r\n const original = arguments.length > 1 ? common.toArray(arguments) : arguments[0];\r\n common.each(INTERPRETATIONS, function(family) {\r\n if (family.litmus(original)) {\r\n common.each(family.conversions, function(conversion, conversionName) {\r\n result = conversion.read(original);\r\n\r\n if (toReturn === false && result !== false) {\r\n toReturn = result;\r\n result.conversionName = conversionName;\r\n result.conversion = conversion;\r\n return common.BREAK;\r\n }\r\n });\r\n\r\n return common.BREAK;\r\n }\r\n });\r\n\r\n return toReturn;\r\n};\r\n\r\nexport default interpret;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nlet tmpComponent;\r\n\r\nconst ColorMath = {\r\n hsv_to_rgb: function(h, s, v) {\r\n const hi = Math.floor(h / 60) % 6;\r\n\r\n const f = h / 60 - Math.floor(h / 60);\r\n const p = v * (1.0 - s);\r\n const q = v * (1.0 - (f * s));\r\n const t = v * (1.0 - ((1.0 - f) * s));\r\n\r\n const c = [\r\n [v, t, p],\r\n [q, v, p],\r\n [p, v, t],\r\n [p, q, v],\r\n [t, p, v],\r\n [v, p, q]\r\n ][hi];\r\n\r\n return {\r\n r: c[0] * 255,\r\n g: c[1] * 255,\r\n b: c[2] * 255\r\n };\r\n },\r\n\r\n rgb_to_hsv: function(r, g, b) {\r\n const min = Math.min(r, g, b);\r\n const max = Math.max(r, g, b);\r\n const delta = max - min;\r\n let h;\r\n let s;\r\n\r\n if (max !== 0) {\r\n s = delta / max;\r\n } else {\r\n return {\r\n h: NaN,\r\n s: 0,\r\n v: 0\r\n };\r\n }\r\n\r\n if (r === max) {\r\n h = (g - b) / delta;\r\n } else if (g === max) {\r\n h = 2 + (b - r) / delta;\r\n } else {\r\n h = 4 + (r - g) / delta;\r\n }\r\n h /= 6;\r\n if (h < 0) {\r\n h += 1;\r\n }\r\n\r\n return {\r\n h: h * 360,\r\n s: s,\r\n v: max / 255\r\n };\r\n },\r\n\r\n rgb_to_hex: function(r, g, b) {\r\n let hex = this.hex_with_component(0, 2, r);\r\n hex = this.hex_with_component(hex, 1, g);\r\n hex = this.hex_with_component(hex, 0, b);\r\n return hex;\r\n },\r\n\r\n component_from_hex: function(hex, componentIndex) {\r\n return (hex >> (componentIndex * 8)) & 0xFF;\r\n },\r\n\r\n hex_with_component: function(hex, componentIndex, value) {\r\n return value << (tmpComponent = componentIndex * 8) | (hex & ~(0xFF << tmpComponent));\r\n }\r\n};\r\n\r\nexport default ColorMath;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport interpret from './interpret';\r\nimport math from './math';\r\nimport colorToString from './toString';\r\nimport common from '../utils/common';\r\n\r\nclass Color {\r\n constructor() {\r\n this.__state = interpret.apply(this, arguments);\r\n\r\n if (this.__state === false) {\r\n throw new Error('Failed to interpret color arguments');\r\n }\r\n\r\n this.__state.a = this.__state.a || 1;\r\n }\r\n\r\n toString() {\r\n return colorToString(this);\r\n }\r\n\r\n toHexString() {\r\n return colorToString(this, true);\r\n }\r\n\r\n toOriginal() {\r\n return this.__state.conversion.write(this);\r\n }\r\n}\r\n\r\nfunction defineRGBComponent(target, component, componentHexIndex) {\r\n Object.defineProperty(target, component, {\r\n get: function() {\r\n if (this.__state.space === 'RGB') {\r\n return this.__state[component];\r\n }\r\n\r\n Color.recalculateRGB(this, component, componentHexIndex);\r\n\r\n return this.__state[component];\r\n },\r\n\r\n set: function(v) {\r\n if (this.__state.space !== 'RGB') {\r\n Color.recalculateRGB(this, component, componentHexIndex);\r\n this.__state.space = 'RGB';\r\n }\r\n\r\n this.__state[component] = v;\r\n }\r\n });\r\n}\r\n\r\nfunction defineHSVComponent(target, component) {\r\n Object.defineProperty(target, component, {\r\n get: function() {\r\n if (this.__state.space === 'HSV') {\r\n return this.__state[component];\r\n }\r\n\r\n Color.recalculateHSV(this);\r\n\r\n return this.__state[component];\r\n },\r\n\r\n set: function(v) {\r\n if (this.__state.space !== 'HSV') {\r\n Color.recalculateHSV(this);\r\n this.__state.space = 'HSV';\r\n }\r\n\r\n this.__state[component] = v;\r\n }\r\n });\r\n}\r\n\r\n\r\nColor.recalculateRGB = function(color, component, componentHexIndex) {\r\n if (color.__state.space === 'HEX') {\r\n color.__state[component] = math.component_from_hex(color.__state.hex, componentHexIndex);\r\n } else if (color.__state.space === 'HSV') {\r\n common.extend(color.__state, math.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v));\r\n } else {\r\n throw new Error('Corrupted color state');\r\n }\r\n};\r\n\r\nColor.recalculateHSV = function(color) {\r\n const result = math.rgb_to_hsv(color.r, color.g, color.b);\r\n\r\n common.extend(color.__state,\r\n {\r\n s: result.s,\r\n v: result.v\r\n }\r\n );\r\n\r\n if (!common.isNaN(result.h)) {\r\n color.__state.h = result.h;\r\n } else if (common.isUndefined(color.__state.h)) {\r\n color.__state.h = 0;\r\n }\r\n};\r\n\r\nColor.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a'];\r\n\r\ndefineRGBComponent(Color.prototype, 'r', 2);\r\ndefineRGBComponent(Color.prototype, 'g', 1);\r\ndefineRGBComponent(Color.prototype, 'b', 0);\r\n\r\ndefineHSVComponent(Color.prototype, 'h');\r\ndefineHSVComponent(Color.prototype, 's');\r\ndefineHSVComponent(Color.prototype, 'v');\r\n\r\nObject.defineProperty(Color.prototype, 'a', {\r\n get: function() {\r\n return this.__state.a;\r\n },\r\n\r\n set: function(v) {\r\n this.__state.a = v;\r\n }\r\n});\r\n\r\nObject.defineProperty(Color.prototype, 'hex', {\r\n get: function() {\r\n if (!this.__state.space !== 'HEX') {\r\n this.__state.hex = math.rgb_to_hex(this.r, this.g, this.b);\r\n }\r\n\r\n return this.__state.hex;\r\n },\r\n\r\n set: function(v) {\r\n this.__state.space = 'HEX';\r\n this.__state.hex = v;\r\n }\r\n});\r\n\r\nexport default Color;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\n/**\r\n * @class An \"abstract\" class that represents a given property of an object.\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n */\r\nclass Controller {\r\n constructor(object, property) {\r\n this.initialValue = object[property];\r\n\r\n /**\r\n * Those who extend this class will put their DOM elements in here.\r\n * @type {DOMElement}\r\n */\r\n this.domElement = document.createElement('div');\r\n\r\n /**\r\n * The object to manipulate\r\n * @type {Object}\r\n */\r\n this.object = object;\r\n\r\n /**\r\n * The name of the property to manipulate\r\n * @type {String}\r\n */\r\n this.property = property;\r\n\r\n /**\r\n * The function to be called on change.\r\n * @type {Function}\r\n * @ignore\r\n */\r\n this.__onChange = undefined;\r\n\r\n /**\r\n * The function to be called on finishing change.\r\n * @type {Function}\r\n * @ignore\r\n */\r\n this.__onFinishChange = undefined;\r\n }\r\n\r\n /**\r\n * Specify that a function fire every time someone changes the value with\r\n * this Controller.\r\n *\r\n * @param {Function} fnc This function will be called whenever the value\r\n * is modified via this Controller.\r\n * @returns {Controller} this\r\n */\r\n onChange(fnc) {\r\n this.__onChange = fnc;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specify that a function fire every time someone \"finishes\" changing\r\n * the value wih this Controller. Useful for values that change\r\n * incrementally like numbers or strings.\r\n *\r\n * @param {Function} fnc This function will be called whenever\r\n * someone \"finishes\" changing the value via this Controller.\r\n * @returns {Controller} this\r\n */\r\n onFinishChange(fnc) {\r\n this.__onFinishChange = fnc;\r\n return this;\r\n }\r\n\r\n /**\r\n * Change the value of object[property]\r\n *\r\n * @param {Object} newValue The new value of object[property]\r\n */\r\n setValue(newValue) {\r\n this.object[this.property] = newValue;\r\n if (this.__onChange) {\r\n this.__onChange.call(this, newValue);\r\n }\r\n\r\n this.updateDisplay();\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the value of object[property]\r\n *\r\n * @returns {Object} The current value of object[property]\r\n */\r\n getValue() {\r\n return this.object[this.property];\r\n }\r\n\r\n /**\r\n * Refreshes the visual display of a Controller in order to keep sync\r\n * with the object's current value.\r\n * @returns {Controller} this\r\n */\r\n updateDisplay() {\r\n return this;\r\n }\r\n\r\n /**\r\n * @returns {Boolean} true if the value has deviated from initialValue\r\n */\r\n isModified() {\r\n return this.initialValue !== this.getValue();\r\n }\r\n}\r\n\r\nexport default Controller;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport common from '../utils/common';\r\n\r\nconst EVENT_MAP = {\r\n HTMLEvents: ['change'],\r\n MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'],\r\n KeyboardEvents: ['keydown']\r\n};\r\n\r\nconst EVENT_MAP_INV = {};\r\ncommon.each(EVENT_MAP, function(v, k) {\r\n common.each(v, function(e) {\r\n EVENT_MAP_INV[e] = k;\r\n });\r\n});\r\n\r\nconst CSS_VALUE_PIXELS = /(\\d+(\\.\\d+)?)px/;\r\n\r\nfunction cssValueToPixels(val) {\r\n if (val === '0' || common.isUndefined(val)) {\r\n return 0;\r\n }\r\n\r\n const match = val.match(CSS_VALUE_PIXELS);\r\n\r\n if (!common.isNull(match)) {\r\n return parseFloat(match[1]);\r\n }\r\n\r\n // TODO ...ems? %?\r\n\r\n return 0;\r\n}\r\n\r\n/**\r\n * @namespace\r\n * @member dat.dom\r\n */\r\nconst dom = {\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param selectable\r\n */\r\n makeSelectable: function(elem, selectable) {\r\n if (elem === undefined || elem.style === undefined) return;\r\n\r\n elem.onselectstart = selectable ? function() {\r\n return false;\r\n } : function() {\r\n };\r\n\r\n elem.style.MozUserSelect = selectable ? 'auto' : 'none';\r\n elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none';\r\n elem.unselectable = selectable ? 'on' : 'off';\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param horizontal\r\n * @param vert\r\n */\r\n makeFullscreen: function(elem, hor, vert) {\r\n let vertical = vert;\r\n let horizontal = hor;\r\n\r\n if (common.isUndefined(horizontal)) {\r\n horizontal = true;\r\n }\r\n\r\n if (common.isUndefined(vertical)) {\r\n vertical = true;\r\n }\r\n\r\n elem.style.position = 'absolute';\r\n\r\n if (horizontal) {\r\n elem.style.left = 0;\r\n elem.style.right = 0;\r\n }\r\n if (vertical) {\r\n elem.style.top = 0;\r\n elem.style.bottom = 0;\r\n }\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param eventType\r\n * @param params\r\n */\r\n fakeEvent: function(elem, eventType, pars, aux) {\r\n const params = pars || {};\r\n const className = EVENT_MAP_INV[eventType];\r\n if (!className) {\r\n throw new Error('Event type ' + eventType + ' not supported.');\r\n }\r\n const evt = document.createEvent(className);\r\n switch (className) {\r\n case 'MouseEvents':\r\n {\r\n const clientX = params.x || params.clientX || 0;\r\n const clientY = params.y || params.clientY || 0;\r\n evt.initMouseEvent(eventType, params.bubbles || false,\r\n params.cancelable || true, window, params.clickCount || 1,\r\n 0, // screen X\r\n 0, // screen Y\r\n clientX, // client X\r\n clientY, // client Y\r\n false, false, false, false, 0, null);\r\n break;\r\n }\r\n case 'KeyboardEvents':\r\n {\r\n const init = evt.initKeyboardEvent || evt.initKeyEvent; // webkit || moz\r\n common.defaults(params, {\r\n cancelable: true,\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n metaKey: false,\r\n keyCode: undefined,\r\n charCode: undefined\r\n });\r\n init(eventType, params.bubbles || false,\r\n params.cancelable, window,\r\n params.ctrlKey, params.altKey,\r\n params.shiftKey, params.metaKey,\r\n params.keyCode, params.charCode);\r\n break;\r\n }\r\n default:\r\n {\r\n evt.initEvent(eventType, params.bubbles || false, params.cancelable || true);\r\n break;\r\n }\r\n }\r\n common.defaults(evt, aux);\r\n elem.dispatchEvent(evt);\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param event\r\n * @param func\r\n * @param bool\r\n */\r\n bind: function(elem, event, func, newBool) {\r\n const bool = newBool || false;\r\n if (elem.addEventListener) {\r\n elem.addEventListener(event, func, bool);\r\n } else if (elem.attachEvent) {\r\n elem.attachEvent('on' + event, func);\r\n }\r\n return dom;\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param event\r\n * @param func\r\n * @param bool\r\n */\r\n unbind: function(elem, event, func, newBool) {\r\n const bool = newBool || false;\r\n if (elem.removeEventListener) {\r\n elem.removeEventListener(event, func, bool);\r\n } else if (elem.detachEvent) {\r\n elem.detachEvent('on' + event, func);\r\n }\r\n return dom;\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param className\r\n */\r\n addClass: function(elem, className) {\r\n if (elem.className === undefined) {\r\n elem.className = className;\r\n } else if (elem.className !== className) {\r\n const classes = elem.className.split(/ +/);\r\n if (classes.indexOf(className) === -1) {\r\n classes.push(className);\r\n elem.className = classes.join(' ').replace(/^\\s+/, '').replace(/\\s+$/, '');\r\n }\r\n }\r\n return dom;\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param className\r\n */\r\n removeClass: function(elem, className) {\r\n if (className) {\r\n if (elem.className === className) {\r\n elem.removeAttribute('class');\r\n } else {\r\n const classes = elem.className.split(/ +/);\r\n const index = classes.indexOf(className);\r\n if (index !== -1) {\r\n classes.splice(index, 1);\r\n elem.className = classes.join(' ');\r\n }\r\n }\r\n } else {\r\n elem.className = undefined;\r\n }\r\n return dom;\r\n },\r\n\r\n hasClass: function(elem, className) {\r\n return new RegExp('(?:^|\\\\s+)' + className + '(?:\\\\s+|$)').test(elem.className) || false;\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n */\r\n getWidth: function(elem) {\r\n const style = getComputedStyle(elem);\r\n\r\n return cssValueToPixels(style['border-left-width']) +\r\n cssValueToPixels(style['border-right-width']) +\r\n cssValueToPixels(style['padding-left']) +\r\n cssValueToPixels(style['padding-right']) +\r\n cssValueToPixels(style.width);\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n */\r\n getHeight: function(elem) {\r\n const style = getComputedStyle(elem);\r\n\r\n return cssValueToPixels(style['border-top-width']) +\r\n cssValueToPixels(style['border-bottom-width']) +\r\n cssValueToPixels(style['padding-top']) +\r\n cssValueToPixels(style['padding-bottom']) +\r\n cssValueToPixels(style.height);\r\n },\r\n\r\n /**\r\n *\r\n * @param el\r\n */\r\n getOffset: function(el) {\r\n let elem = el;\r\n const offset = { left: 0, top: 0 };\r\n if (elem.offsetParent) {\r\n do {\r\n offset.left += elem.offsetLeft;\r\n offset.top += elem.offsetTop;\r\n elem = elem.offsetParent;\r\n } while (elem);\r\n }\r\n return offset;\r\n },\r\n\r\n // http://stackoverflow.com/posts/2684561/revisions\r\n /**\r\n *\r\n * @param elem\r\n */\r\n isActive: function(elem) {\r\n return elem === document.activeElement && (elem.type || elem.href);\r\n }\r\n\r\n};\r\n\r\nexport default dom;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Controller from './Controller';\r\nimport dom from '../dom/dom';\r\n\r\n/**\r\n * @class Provides a checkbox input to alter the boolean property of an object.\r\n *\r\n * @extends dat.controllers.Controller\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n */\r\nclass BooleanController extends Controller {\r\n constructor(object, property) {\r\n super(object, property);\r\n\r\n const _this = this;\r\n this.__prev = this.getValue();\r\n\r\n this.__checkbox = document.createElement('input');\r\n this.__checkbox.setAttribute('type', 'checkbox');\r\n\r\n function onChange() {\r\n _this.setValue(!_this.__prev);\r\n }\r\n\r\n dom.bind(this.__checkbox, 'change', onChange, false);\r\n\r\n this.domElement.appendChild(this.__checkbox);\r\n\r\n // Match original value\r\n this.updateDisplay();\r\n }\r\n\r\n setValue(v) {\r\n const toReturn = super.setValue(v);\r\n if (this.__onFinishChange) {\r\n this.__onFinishChange.call(this, this.getValue());\r\n }\r\n this.__prev = this.getValue();\r\n return toReturn;\r\n }\r\n\r\n updateDisplay() {\r\n if (this.getValue() === true) {\r\n this.__checkbox.setAttribute('checked', 'checked');\r\n this.__checkbox.checked = true;\r\n this.__prev = true;\r\n } else {\r\n this.__checkbox.checked = false;\r\n this.__prev = false;\r\n }\r\n\r\n return super.updateDisplay();\r\n }\r\n}\r\n\r\nexport default BooleanController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Controller from './Controller';\r\nimport dom from '../dom/dom';\r\nimport common from '../utils/common';\r\n\r\n/**\r\n * @class Provides a select input to alter the property of an object, using a\r\n * list of accepted values.\r\n *\r\n * @extends dat.controllers.Controller\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n * @param {Object|string[]} options A map of labels to acceptable values, or\r\n * a list of acceptable string values.\r\n */\r\nclass OptionController extends Controller {\r\n constructor(object, property, opts) {\r\n super(object, property);\r\n\r\n let options = opts;\r\n\r\n const _this = this;\r\n\r\n /**\r\n * The drop down menu\r\n * @ignore\r\n */\r\n this.__select = document.createElement('select');\r\n\r\n if (common.isArray(options)) {\r\n const map = {};\r\n common.each(options, function(element) {\r\n map[element] = element;\r\n });\r\n options = map;\r\n }\r\n\r\n common.each(options, function(value, key) {\r\n const opt = document.createElement('option');\r\n opt.innerHTML = key;\r\n opt.setAttribute('value', value);\r\n _this.__select.appendChild(opt);\r\n });\r\n\r\n // Acknowledge original value\r\n this.updateDisplay();\r\n\r\n dom.bind(this.__select, 'change', function() {\r\n const desiredValue = this.options[this.selectedIndex].value;\r\n _this.setValue(desiredValue);\r\n });\r\n\r\n this.domElement.appendChild(this.__select);\r\n }\r\n\r\n setValue(v) {\r\n const toReturn = super.setValue(v);\r\n\r\n if (this.__onFinishChange) {\r\n this.__onFinishChange.call(this, this.getValue());\r\n }\r\n return toReturn;\r\n }\r\n\r\n updateDisplay() {\r\n if (dom.isActive(this.__select)) return this; // prevent number from updating if user is trying to manually update\r\n this.__select.value = this.getValue();\r\n return super.updateDisplay();\r\n }\r\n}\r\n\r\nexport default OptionController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Controller from './Controller';\r\nimport dom from '../dom/dom';\r\n\r\n/**\r\n * @class Provides a text input to alter the string property of an object.\r\n *\r\n * @extends dat.controllers.Controller\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n */\r\nclass StringController extends Controller {\r\n constructor(object, property) {\r\n super(object, property);\r\n\r\n const _this = this;\r\n\r\n function onChange() {\r\n _this.setValue(_this.__input.value);\r\n }\r\n\r\n function onBlur() {\r\n if (_this.__onFinishChange) {\r\n _this.__onFinishChange.call(_this, _this.getValue());\r\n }\r\n }\r\n\r\n this.__input = document.createElement('input');\r\n this.__input.setAttribute('type', 'text');\r\n\r\n dom.bind(this.__input, 'keyup', onChange);\r\n dom.bind(this.__input, 'change', onChange);\r\n dom.bind(this.__input, 'blur', onBlur);\r\n dom.bind(this.__input, 'keydown', function(e) {\r\n if (e.keyCode === 13) {\r\n this.blur();\r\n }\r\n });\r\n\r\n this.updateDisplay();\r\n\r\n this.domElement.appendChild(this.__input);\r\n }\r\n\r\n updateDisplay() {\r\n // Stops the caret from moving on account of:\r\n // keyup -> setValue -> updateDisplay\r\n if (!dom.isActive(this.__input)) {\r\n this.__input.value = this.getValue();\r\n }\r\n return super.updateDisplay();\r\n }\r\n}\r\n\r\nexport default StringController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Controller from './Controller';\r\nimport common from '../utils/common';\r\n\r\nfunction numDecimals(x) {\r\n const _x = x.toString();\r\n if (_x.indexOf('.') > -1) {\r\n return _x.length - _x.indexOf('.') - 1;\r\n }\r\n\r\n return 0;\r\n}\r\n\r\n/**\r\n * @class Represents a given property of an object that is a number.\r\n *\r\n * @extends dat.controllers.Controller\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n * @param {Object} [params] Optional parameters\r\n * @param {Number} [params.min] Minimum allowed value\r\n * @param {Number} [params.max] Maximum allowed value\r\n * @param {Number} [params.step] Increment by which to change value\r\n */\r\nclass NumberController extends Controller {\r\n constructor(object, property, params) {\r\n super(object, property);\r\n\r\n const _params = params || {};\r\n\r\n this.__min = _params.min;\r\n this.__max = _params.max;\r\n this.__step = _params.step;\r\n\r\n if (common.isUndefined(this.__step)) {\r\n if (this.initialValue === 0) {\r\n this.__impliedStep = 1; // What are we, psychics?\r\n } else {\r\n // Hey Doug, check this out.\r\n this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(this.initialValue)) / Math.LN10)) / 10;\r\n }\r\n } else {\r\n this.__impliedStep = this.__step;\r\n }\r\n\r\n this.__precision = numDecimals(this.__impliedStep);\r\n }\r\n\r\n setValue(v) {\r\n let _v = v;\r\n\r\n if (this.__min !== undefined && _v < this.__min) {\r\n _v = this.__min;\r\n } else if (this.__max !== undefined && _v > this.__max) {\r\n _v = this.__max;\r\n }\r\n\r\n if (this.__step !== undefined && _v % this.__step !== 0) {\r\n _v = Math.round(_v / this.__step) * this.__step;\r\n }\r\n\r\n return super.setValue(_v);\r\n }\r\n\r\n /**\r\n * Specify a minimum value for object[property].\r\n *\r\n * @param {Number} minValue The minimum value for\r\n * object[property]\r\n * @returns {dat.controllers.NumberController} this\r\n */\r\n min(minValue) {\r\n this.__min = minValue;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specify a maximum value for object[property].\r\n *\r\n * @param {Number} maxValue The maximum value for\r\n * object[property]\r\n * @returns {dat.controllers.NumberController} this\r\n */\r\n max(maxValue) {\r\n this.__max = maxValue;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specify a step value that dat.controllers.NumberController\r\n * increments by.\r\n *\r\n * @param {Number} stepValue The step value for\r\n * dat.controllers.NumberController\r\n * @default if minimum and maximum specified increment is 1% of the\r\n * difference otherwise stepValue is 1\r\n * @returns {dat.controllers.NumberController} this\r\n */\r\n step(stepValue) {\r\n this.__step = stepValue;\r\n this.__impliedStep = stepValue;\r\n this.__precision = numDecimals(stepValue);\r\n return this;\r\n }\r\n}\r\n\r\nexport default NumberController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport NumberController from './NumberController';\r\nimport dom from '../dom/dom';\r\nimport common from '../utils/common';\r\n\r\nfunction roundToDecimal(value, decimals) {\r\n const tenTo = Math.pow(10, decimals);\r\n return Math.round(value * tenTo) / tenTo;\r\n}\r\n\r\n/**\r\n * @class Represents a given property of an object that is a number and\r\n * provides an input element with which to manipulate it.\r\n *\r\n * @extends dat.controllers.Controller\r\n * @extends dat.controllers.NumberController\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n * @param {Object} [params] Optional parameters\r\n * @param {Number} [params.min] Minimum allowed value\r\n * @param {Number} [params.max] Maximum allowed value\r\n * @param {Number} [params.step] Increment by which to change value\r\n */\r\nclass NumberControllerBox extends NumberController {\r\n constructor(object, property, params) {\r\n super(object, property, params);\r\n\r\n this.__truncationSuspended = false;\r\n\r\n const _this = this;\r\n\r\n /**\r\n * {Number} Previous mouse y position\r\n * @ignore\r\n */\r\n let prevY;\r\n\r\n function onChange() {\r\n const attempted = parseFloat(_this.__input.value);\r\n if (!common.isNaN(attempted)) {\r\n _this.setValue(attempted);\r\n }\r\n }\r\n\r\n function onFinish() {\r\n if (_this.__onFinishChange) {\r\n _this.__onFinishChange.call(_this, _this.getValue());\r\n }\r\n }\r\n\r\n function onBlur() {\r\n onFinish();\r\n }\r\n\r\n function onMouseDrag(e) {\r\n const diff = prevY - e.clientY;\r\n _this.setValue(_this.getValue() + diff * _this.__impliedStep);\r\n\r\n prevY = e.clientY;\r\n }\r\n\r\n function onMouseUp() {\r\n dom.unbind(window, 'mousemove', onMouseDrag);\r\n dom.unbind(window, 'mouseup', onMouseUp);\r\n onFinish();\r\n }\r\n\r\n function onMouseDown(e) {\r\n dom.bind(window, 'mousemove', onMouseDrag);\r\n dom.bind(window, 'mouseup', onMouseUp);\r\n prevY = e.clientY;\r\n }\r\n\r\n this.__input = document.createElement('input');\r\n this.__input.setAttribute('type', 'text');\r\n\r\n // Makes it so manually specified values are not truncated.\r\n\r\n dom.bind(this.__input, 'change', onChange);\r\n dom.bind(this.__input, 'blur', onBlur);\r\n dom.bind(this.__input, 'mousedown', onMouseDown);\r\n dom.bind(this.__input, 'keydown', function(e) {\r\n // When pressing enter, you can be as precise as you want.\r\n if (e.keyCode === 13) {\r\n _this.__truncationSuspended = true;\r\n this.blur();\r\n _this.__truncationSuspended = false;\r\n onFinish();\r\n }\r\n });\r\n\r\n this.updateDisplay();\r\n\r\n this.domElement.appendChild(this.__input);\r\n }\r\n\r\n updateDisplay() {\r\n this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision);\r\n return super.updateDisplay();\r\n }\r\n}\r\n\r\nexport default NumberControllerBox;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport NumberController from './NumberController';\r\nimport dom from '../dom/dom';\r\n\r\nfunction map(v, i1, i2, o1, o2) {\r\n return o1 + (o2 - o1) * ((v - i1) / (i2 - i1));\r\n}\r\n\r\n/**\r\n * @class Represents a given property of an object that is a number, contains\r\n * a minimum and maximum, and provides a slider element with which to\r\n * manipulate it. It should be noted that the slider element is made up of\r\n * <div> tags, not the html5\r\n * <slider> element.\r\n *\r\n * @extends dat.controllers.Controller\r\n * @extends dat.controllers.NumberController\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n * @param {Number} minValue Minimum allowed value\r\n * @param {Number} maxValue Maximum allowed value\r\n * @param {Number} stepValue Increment by which to change value\r\n */\r\nclass NumberControllerSlider extends NumberController {\r\n constructor(object, property, min, max, step) {\r\n super(object, property, { min: min, max: max, step: step });\r\n\r\n const _this = this;\r\n\r\n this.__background = document.createElement('div');\r\n this.__foreground = document.createElement('div');\r\n\r\n dom.bind(this.__background, 'mousedown', onMouseDown);\r\n dom.bind(this.__background, 'touchstart', onTouchStart);\r\n\r\n dom.addClass(this.__background, 'slider');\r\n dom.addClass(this.__foreground, 'slider-fg');\r\n\r\n function onMouseDown(e) {\r\n document.activeElement.blur();\r\n\r\n dom.bind(window, 'mousemove', onMouseDrag);\r\n dom.bind(window, 'mouseup', onMouseUp);\r\n\r\n onMouseDrag(e);\r\n }\r\n\r\n function onMouseDrag(e) {\r\n e.preventDefault();\r\n\r\n const bgRect = _this.__background.getBoundingClientRect();\r\n\r\n _this.setValue(\r\n map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max)\r\n );\r\n\r\n return false;\r\n }\r\n\r\n function onMouseUp() {\r\n dom.unbind(window, 'mousemove', onMouseDrag);\r\n dom.unbind(window, 'mouseup', onMouseUp);\r\n if (_this.__onFinishChange) {\r\n _this.__onFinishChange.call(_this, _this.getValue());\r\n }\r\n }\r\n\r\n function onTouchStart(e) {\r\n if (e.touches.length !== 1) { return; }\r\n dom.bind(window, 'touchmove', onTouchMove);\r\n dom.bind(window, 'touchend', onTouchEnd);\r\n onTouchMove(e);\r\n }\r\n\r\n function onTouchMove(e) {\r\n const clientX = e.touches[0].clientX;\r\n const bgRect = _this.__background.getBoundingClientRect();\r\n\r\n _this.setValue(\r\n map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max)\r\n );\r\n }\r\n\r\n function onTouchEnd() {\r\n dom.unbind(window, 'touchmove', onTouchMove);\r\n dom.unbind(window, 'touchend', onTouchEnd);\r\n if (_this.__onFinishChange) {\r\n _this.__onFinishChange.call(_this, _this.getValue());\r\n }\r\n }\r\n\r\n this.updateDisplay();\r\n\r\n this.__background.appendChild(this.__foreground);\r\n this.domElement.appendChild(this.__background);\r\n }\r\n\r\n updateDisplay() {\r\n const pct = (this.getValue() - this.__min) / (this.__max - this.__min);\r\n this.__foreground.style.width = pct * 100 + '%';\r\n return super.updateDisplay();\r\n }\r\n}\r\n\r\nexport default NumberControllerSlider;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Controller from './Controller';\r\nimport dom from '../dom/dom';\r\n\r\n/**\r\n * @class Provides a GUI interface to fire a specified method, a property of an object.\r\n *\r\n * @extends dat.controllers.Controller\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n */\r\nclass FunctionController extends Controller {\r\n constructor(object, property, text) {\r\n super(object, property);\r\n\r\n const _this = this;\r\n\r\n this.__button = document.createElement('div');\r\n this.__button.innerHTML = text === undefined ? 'Fire' : text;\r\n\r\n dom.bind(this.__button, 'click', function(e) {\r\n e.preventDefault();\r\n _this.fire();\r\n return false;\r\n });\r\n\r\n dom.addClass(this.__button, 'button');\r\n\r\n this.domElement.appendChild(this.__button);\r\n }\r\n\r\n fire() {\r\n if (this.__onChange) {\r\n this.__onChange.call(this);\r\n }\r\n this.getValue().call(this.object);\r\n if (this.__onFinishChange) {\r\n this.__onFinishChange.call(this, this.getValue());\r\n }\r\n }\r\n}\r\n\r\nexport default FunctionController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Controller from './Controller';\r\nimport dom from '../dom/dom';\r\nimport Color from '../color/Color';\r\nimport interpret from '../color/interpret';\r\nimport common from '../utils/common';\r\n\r\n/**\r\n * @class Represents a given property of an object that is a color.\r\n * @param {Object} object\r\n * @param {string} property\r\n */\r\nclass ColorController extends Controller {\r\n constructor(object, property) {\r\n super(object, property);\r\n\r\n this.__color = new Color(this.getValue());\r\n this.__temp = new Color(0);\r\n\r\n const _this = this;\r\n\r\n this.domElement = document.createElement('div');\r\n\r\n dom.makeSelectable(this.domElement, false);\r\n\r\n this.__selector = document.createElement('div');\r\n this.__selector.className = 'selector';\r\n\r\n this.__saturation_field = document.createElement('div');\r\n this.__saturation_field.className = 'saturation-field';\r\n\r\n this.__field_knob = document.createElement('div');\r\n this.__field_knob.className = 'field-knob';\r\n this.__field_knob_border = '2px solid ';\r\n\r\n this.__hue_knob = document.createElement('div');\r\n this.__hue_knob.className = 'hue-knob';\r\n\r\n this.__hue_field = document.createElement('div');\r\n this.__hue_field.className = 'hue-field';\r\n\r\n this.__input = document.createElement('input');\r\n this.__input.type = 'text';\r\n this.__input_textShadow = '0 1px 1px ';\r\n\r\n dom.bind(this.__input, 'keydown', function(e) {\r\n if (e.keyCode === 13) { // on enter\r\n onBlur.call(this);\r\n }\r\n });\r\n\r\n dom.bind(this.__input, 'blur', onBlur);\r\n\r\n dom.bind(this.__selector, 'mousedown', function(/* e */) {\r\n dom\r\n .addClass(this, 'drag')\r\n .bind(window, 'mouseup', function(/* e */) {\r\n dom.removeClass(_this.__selector, 'drag');\r\n });\r\n });\r\n\r\n dom.bind(this.__selector, 'touchstart', function(/* e */) {\r\n dom\r\n .addClass(this, 'drag')\r\n .bind(window, 'touchend', function(/* e */) {\r\n dom.removeClass(_this.__selector, 'drag');\r\n });\r\n });\r\n\r\n const valueField = document.createElement('div');\r\n\r\n common.extend(this.__selector.style, {\r\n width: '122px',\r\n height: '102px',\r\n padding: '3px',\r\n backgroundColor: '#222',\r\n boxShadow: '0px 1px 3px rgba(0,0,0,0.3)'\r\n });\r\n\r\n common.extend(this.__field_knob.style, {\r\n position: 'absolute',\r\n width: '12px',\r\n height: '12px',\r\n border: this.__field_knob_border + (this.__color.v < 0.5 ? '#fff' : '#000'),\r\n boxShadow: '0px 1px 3px rgba(0,0,0,0.5)',\r\n borderRadius: '12px',\r\n zIndex: 1\r\n });\r\n\r\n common.extend(this.__hue_knob.style, {\r\n position: 'absolute',\r\n width: '15px',\r\n height: '2px',\r\n borderRight: '4px solid #fff',\r\n zIndex: 1\r\n });\r\n\r\n common.extend(this.__saturation_field.style, {\r\n width: '100px',\r\n height: '100px',\r\n border: '1px solid #555',\r\n marginRight: '3px',\r\n display: 'inline-block',\r\n cursor: 'pointer'\r\n });\r\n\r\n common.extend(valueField.style, {\r\n width: '100%',\r\n height: '100%',\r\n background: 'none'\r\n });\r\n\r\n linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000');\r\n\r\n common.extend(this.__hue_field.style, {\r\n width: '15px',\r\n height: '100px',\r\n border: '1px solid #555',\r\n cursor: 'ns-resize',\r\n position: 'absolute',\r\n top: '3px',\r\n right: '3px'\r\n });\r\n\r\n hueGradient(this.__hue_field);\r\n\r\n common.extend(this.__input.style, {\r\n outline: 'none',\r\n// width: '120px',\r\n textAlign: 'center',\r\n// padding: '4px',\r\n// marginBottom: '6px',\r\n color: '#fff',\r\n border: 0,\r\n fontWeight: 'bold',\r\n textShadow: this.__input_textShadow + 'rgba(0,0,0,0.7)'\r\n });\r\n\r\n dom.bind(this.__saturation_field, 'mousedown', fieldDown);\r\n dom.bind(this.__saturation_field, 'touchstart', fieldDown);\r\n\r\n dom.bind(this.__field_knob, 'mousedown', fieldDown);\r\n dom.bind(this.__field_knob, 'touchstart', fieldDown);\r\n\r\n dom.bind(this.__hue_field, 'mousedown', fieldDownH);\r\n dom.bind(this.__hue_field, 'touchstart', fieldDownH);\r\n\r\n function fieldDown(e) {\r\n setSV(e);\r\n dom.bind(window, 'mousemove', setSV);\r\n dom.bind(window, 'touchmove', setSV);\r\n dom.bind(window, 'mouseup', fieldUpSV);\r\n dom.bind(window, 'touchend', fieldUpSV);\r\n }\r\n\r\n function fieldDownH(e) {\r\n setH(e);\r\n dom.bind(window, 'mousemove', setH);\r\n dom.bind(window, 'touchmove', setH);\r\n dom.bind(window, 'mouseup', fieldUpH);\r\n dom.bind(window, 'touchend', fieldUpH);\r\n }\r\n\r\n function fieldUpSV() {\r\n dom.unbind(window, 'mousemove', setSV);\r\n dom.unbind(window, 'touchmove', setSV);\r\n dom.unbind(window, 'mouseup', fieldUpSV);\r\n dom.unbind(window, 'touchend', fieldUpSV);\r\n onFinish();\r\n }\r\n\r\n function fieldUpH() {\r\n dom.unbind(window, 'mousemove', setH);\r\n dom.unbind(window, 'touchmove', setH);\r\n dom.unbind(window, 'mouseup', fieldUpH);\r\n dom.unbind(window, 'touchend', fieldUpH);\r\n onFinish();\r\n }\r\n\r\n function onBlur() {\r\n const i = interpret(this.value);\r\n if (i !== false) {\r\n _this.__color.__state = i;\r\n _this.setValue(_this.__color.toOriginal());\r\n } else {\r\n this.value = _this.__color.toString();\r\n }\r\n }\r\n\r\n function onFinish() {\r\n if (_this.__onFinishChange) {\r\n _this.__onFinishChange.call(_this, _this.__color.toOriginal());\r\n }\r\n }\r\n\r\n this.__saturation_field.appendChild(valueField);\r\n this.__selector.appendChild(this.__field_knob);\r\n this.__selector.appendChild(this.__saturation_field);\r\n this.__selector.appendChild(this.__hue_field);\r\n this.__hue_field.appendChild(this.__hue_knob);\r\n\r\n this.domElement.appendChild(this.__input);\r\n this.domElement.appendChild(this.__selector);\r\n\r\n this.updateDisplay();\r\n\r\n function setSV(e) {\r\n if (e.type.indexOf('touch') === -1) { e.preventDefault(); }\r\n\r\n const fieldRect = _this.__saturation_field.getBoundingClientRect();\r\n const { clientX, clientY } = (e.touches && e.touches[0]) || e;\r\n let s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left);\r\n let v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\r\n\r\n if (v > 1) {\r\n v = 1;\r\n } else if (v < 0) {\r\n v = 0;\r\n }\r\n\r\n if (s > 1) {\r\n s = 1;\r\n } else if (s < 0) {\r\n s = 0;\r\n }\r\n\r\n _this.__color.v = v;\r\n _this.__color.s = s;\r\n\r\n _this.setValue(_this.__color.toOriginal());\r\n\r\n\r\n return false;\r\n }\r\n\r\n function setH(e) {\r\n if (e.type.indexOf('touch') === -1) { e.preventDefault(); }\r\n\r\n const fieldRect = _this.__hue_field.getBoundingClientRect();\r\n const { clientY } = (e.touches && e.touches[0]) || e;\r\n let h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\r\n\r\n if (h > 1) {\r\n h = 1;\r\n } else if (h < 0) {\r\n h = 0;\r\n }\r\n\r\n _this.__color.h = h * 360;\r\n\r\n _this.setValue(_this.__color.toOriginal());\r\n\r\n return false;\r\n }\r\n }\r\n\r\n updateDisplay() {\r\n const i = interpret(this.getValue());\r\n\r\n if (i !== false) {\r\n let mismatch = false;\r\n\r\n // Check for mismatch on the interpreted value.\r\n\r\n common.each(Color.COMPONENTS, function(component) {\r\n if (!common.isUndefined(i[component]) && !common.isUndefined(this.__color.__state[component]) &&\r\n i[component] !== this.__color.__state[component]) {\r\n mismatch = true;\r\n return {}; // break\r\n }\r\n }, this);\r\n\r\n // If nothing diverges, we keep our previous values\r\n // for statefulness, otherwise we recalculate fresh\r\n if (mismatch) {\r\n common.extend(this.__color.__state, i);\r\n }\r\n }\r\n\r\n common.extend(this.__temp.__state, this.__color.__state);\r\n\r\n this.__temp.a = 1;\r\n\r\n const flip = (this.__color.v < 0.5 || this.__color.s > 0.5) ? 255 : 0;\r\n const _flip = 255 - flip;\r\n\r\n common.extend(this.__field_knob.style, {\r\n marginLeft: 100 * this.__color.s - 7 + 'px',\r\n marginTop: 100 * (1 - this.__color.v) - 7 + 'px',\r\n backgroundColor: this.__temp.toHexString(),\r\n border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')'\r\n });\r\n\r\n this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px';\r\n\r\n this.__temp.s = 1;\r\n this.__temp.v = 1;\r\n\r\n linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString());\r\n\r\n this.__input.value = this.__color.toString();\r\n\r\n common.extend(this.__input.style, {\r\n backgroundColor: this.__color.toHexString(),\r\n color: 'rgb(' + flip + ',' + flip + ',' + flip + ')',\r\n textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)'\r\n });\r\n }\r\n}\r\n\r\nconst vendors = ['-moz-', '-o-', '-webkit-', '-ms-', ''];\r\n\r\nfunction linearGradient(elem, x, a, b) {\r\n elem.style.background = '';\r\n common.each(vendors, function(vendor) {\r\n elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); ';\r\n });\r\n}\r\n\r\nfunction hueGradient(elem) {\r\n elem.style.background = '';\r\n elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);';\r\n elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\r\n elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\r\n elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\r\n elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\r\n}\r\n\r\nexport default ColorController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport OptionController from './OptionController';\r\nimport NumberControllerBox from './NumberControllerBox';\r\nimport NumberControllerSlider from './NumberControllerSlider';\r\nimport StringController from './StringController';\r\nimport FunctionController from './FunctionController';\r\nimport BooleanController from './BooleanController';\r\nimport common from '../utils/common';\r\n\r\nconst ControllerFactory = function(object, property) {\r\n const initialValue = object[property];\r\n\r\n // Providing options?\r\n if (common.isArray(arguments[2]) || common.isObject(arguments[2])) {\r\n return new OptionController(object, property, arguments[2]);\r\n }\r\n\r\n // Providing a map?\r\n if (common.isNumber(initialValue)) {\r\n // Has min and max? (slider)\r\n if (common.isNumber(arguments[2]) && common.isNumber(arguments[3])) {\r\n // has step?\r\n if (common.isNumber(arguments[4])) {\r\n return new NumberControllerSlider(object, property,\r\n arguments[2], arguments[3], arguments[4]);\r\n }\r\n\r\n return new NumberControllerSlider(object, property, arguments[2], arguments[3]);\r\n }\r\n\r\n // number box\r\n if (common.isNumber(arguments[4])) { // has step\r\n return new NumberControllerBox(object, property,\r\n { min: arguments[2], max: arguments[3], step: arguments[4] });\r\n }\r\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] });\r\n }\r\n\r\n if (common.isString(initialValue)) {\r\n return new StringController(object, property);\r\n }\r\n\r\n if (common.isFunction(initialValue)) {\r\n return new FunctionController(object, property, '');\r\n }\r\n\r\n if (common.isBoolean(initialValue)) {\r\n return new BooleanController(object, property);\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport default ControllerFactory;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * @author Andrej Hristoliubov https://anhr.github.io/AboutMe/\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport Controller from './Controller';\r\nimport ControllerFactory from './ControllerFactory';\r\n\r\n/**\r\n * @class Represents a custom controller.\r\n *\r\n * @extends dat.controllers.Controller\r\n *\r\n */\r\nclass CustomController extends Controller{\r\n /**\r\n * Represents a custom controller.\r\n * @param {Object} object The object to be manipulated\r\n * @param {Function} [object.property] Returns an object with elements for adding into \"property-name\" class element.\r\n * @param {string} property The name of the property to be manipulated\r\n * @param {Object} [params] Optional parameters\r\n */\r\n constructor(object, property) {\r\n super(object, property);\r\n\r\n this.arguments = {\r\n object: object, property: property, opts: Array.prototype.slice.call(arguments, 2)\r\n }\r\n if(object.property)\r\n this.property = object.property( this );\r\n }\r\n set controller( newController ){\r\n this._controller = newController;\r\n }\r\n get controller(){\r\n return this._controller;\r\n }\r\n}\r\n\r\nexport default CustomController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nconst css = {\r\n load: function(url, indoc) {\r\n const doc = indoc || document;\r\n const link = doc.createElement('link');\r\n link.type = 'text/css';\r\n link.rel = 'stylesheet';\r\n link.href = url;\r\n doc.getElementsByTagName('head')[0].appendChild(link);\r\n },\r\n\r\n inject: function(cssContent, indoc) {\r\n const doc = indoc || document;\r\n const injected = document.createElement('style');\r\n injected.type = 'text/css';\r\n injected.innerHTML = cssContent;\r\n const head = doc.getElementsByTagName('head')[0];\r\n try {\r\n head.appendChild(injected);\r\n } catch (e) { // Unable to inject CSS, probably because of a Content Security Policy\r\n }\r\n }\r\n};\r\n\r\nexport default css;\r\n","const saveDialogContents = `
\r\n\r\n Here's the new load parameter for your GUI's constructor:\r\n\r\n \r\n\r\n
\r\n\r\n Automatically save\r\n values to localStorage on exit.\r\n\r\n
The values saved to localStorage will\r\n override those passed to dat.GUI's constructor. This makes it\r\n easier to work incrementally, but localStorage is fragile,\r\n and your friends may not see the same values you do.\r\n\r\n
\r\n\r\n
\r\n\r\n
`;\r\n\r\nexport default saveDialogContents;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nfunction requestAnimationFrame(callback) {\r\n setTimeout(callback, 1000 / 60);\r\n}\r\n\r\nexport default window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n window.msRequestAnimationFrame ||\r\n requestAnimationFrame;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport dom from '../dom/dom';\r\nimport common from '../utils/common';\r\n\r\nclass CenteredDiv {\r\n constructor() {\r\n this.backgroundElement = document.createElement('div');\r\n common.extend(this.backgroundElement.style, {\r\n backgroundColor: 'rgba(0,0,0,0.8)',\r\n top: 0,\r\n left: 0,\r\n display: 'none',\r\n zIndex: '1000',\r\n opacity: 0,\r\n WebkitTransition: 'opacity 0.2s linear',\r\n transition: 'opacity 0.2s linear'\r\n });\r\n\r\n dom.makeFullscreen(this.backgroundElement);\r\n this.backgroundElement.style.position = 'fixed';\r\n\r\n this.domElement = document.createElement('div');\r\n common.extend(this.domElement.style, {\r\n position: 'fixed',\r\n display: 'none',\r\n zIndex: '1001',\r\n opacity: 0,\r\n WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear',\r\n transition: 'transform 0.2s ease-out, opacity 0.2s linear'\r\n });\r\n\r\n\r\n document.body.appendChild(this.backgroundElement);\r\n document.body.appendChild(this.domElement);\r\n\r\n const _this = this;\r\n dom.bind(this.backgroundElement, 'click', function() {\r\n _this.hide();\r\n });\r\n }\r\n\r\n show() {\r\n const _this = this;\r\n\r\n this.backgroundElement.style.display = 'block';\r\n\r\n this.domElement.style.display = 'block';\r\n this.domElement.style.opacity = 0;\r\n// this.domElement.style.top = '52%';\r\n this.domElement.style.webkitTransform = 'scale(1.1)';\r\n\r\n this.layout();\r\n\r\n common.defer(function() {\r\n _this.backgroundElement.style.opacity = 1;\r\n _this.domElement.style.opacity = 1;\r\n _this.domElement.style.webkitTransform = 'scale(1)';\r\n });\r\n }\r\n\r\n /**\r\n * Hide centered div\r\n */\r\n hide() {\r\n const _this = this;\r\n\r\n const hide = function() {\r\n _this.domElement.style.display = 'none';\r\n _this.backgroundElement.style.display = 'none';\r\n\r\n dom.unbind(_this.domElement, 'webkitTransitionEnd', hide);\r\n dom.unbind(_this.domElement, 'transitionend', hide);\r\n dom.unbind(_this.domElement, 'oTransitionEnd', hide);\r\n };\r\n\r\n dom.bind(this.domElement, 'webkitTransitionEnd', hide);\r\n dom.bind(this.domElement, 'transitionend', hide);\r\n dom.bind(this.domElement, 'oTransitionEnd', hide);\r\n\r\n this.backgroundElement.style.opacity = 0;\r\n// this.domElement.style.top = '48%';\r\n this.domElement.style.opacity = 0;\r\n this.domElement.style.webkitTransform = 'scale(1.1)';\r\n }\r\n\r\n layout() {\r\n this.domElement.style.left = window.innerWidth / 2 - dom.getWidth(this.domElement) / 2 + 'px';\r\n this.domElement.style.top = window.innerHeight / 2 - dom.getHeight(this.domElement) / 2 + 'px';\r\n }\r\n}\r\n\r\nexport default CenteredDiv;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport css from '../utils/css';\r\nimport saveDialogueContents from './saveDialogue.html';\r\nimport ControllerFactory from '../controllers/ControllerFactory';\r\nimport Controller from '../controllers/Controller';\r\nimport BooleanController from '../controllers/BooleanController';\r\nimport FunctionController from '../controllers/FunctionController';\r\nimport NumberControllerBox from '../controllers/NumberControllerBox';\r\nimport NumberControllerSlider from '../controllers/NumberControllerSlider';\r\nimport ColorController from '../controllers/ColorController';\r\nimport CustomController from '../controllers/CustomController';\r\nimport requestAnimationFrame from '../utils/requestAnimationFrame';\r\nimport CenteredDiv from '../dom/CenteredDiv';\r\nimport dom from '../dom/dom';\r\nimport common from '../utils/common';\r\n\r\nimport styleSheet from './style.scss'; // CSS to embed in build\r\n\r\ncss.inject(styleSheet);\r\n\r\n/** @ignore Outer-most className for GUI's */\r\nconst CSS_NAMESPACE = 'dg';\r\n\r\nconst HIDE_KEY_CODE = 72;\r\n\r\n/** @ignore The only value shared between the JS and SCSS. Use caution. */\r\nconst CLOSE_BUTTON_HEIGHT = 20;\r\n\r\nconst DEFAULT_DEFAULT_PRESET_NAME = 'Default';\r\n\r\nconst SUPPORTS_LOCAL_STORAGE = (function() {\r\n try {\r\n return !!window.localStorage;\r\n } catch (e) {\r\n return false;\r\n }\r\n}());\r\n\r\nlet SAVE_DIALOGUE;\r\n\r\n/** @ignore Have we yet to create an autoPlace GUI? */\r\nlet autoPlaceVirgin = true;\r\n\r\n/** @ignore Fixed position div that auto place GUI's go inside */\r\nlet autoPlaceContainer;\r\n\r\n/** @ignore Are we hiding the GUI's ? */\r\nlet hide = false;\r\n\r\n/** @private GUI's which should be hidden */\r\nconst hideableGuis = [];\r\n\r\n/**\r\n * @class A lightweight controller library for JavaScript. It allows you to easily\r\n * manipulate variables and fire functions on the fly.\r\n *\r\n * @typicalname gui\r\n *\r\n * @example\r\n * // Creating a GUI with options.\r\n * var gui = new dat.GUI({name: 'My GUI'});\r\n *\r\n * @example\r\n * // Creating a GUI and a subfolder.\r\n * var gui = new dat.GUI();\r\n * var folder1 = gui.addFolder('Flow Field');\r\n *\r\n * @param {Object} [params]\r\n * @param {String} [params.name] The name of this GUI.\r\n * @param {Object} [params.load] JSON object representing the saved state of\r\n * this GUI.\r\n * @param {dat.gui.GUI} [params.parent] The GUI I'm nested in.\r\n * @param {Boolean} [params.autoPlace=true]\r\n * @param {Boolean} [params.hideable=true] If true, GUI is shown/hidden by h keypress.\r\n * @param {Boolean} [params.closed=false] If true, starts closed\r\n * @param {Boolean} [params.closeOnTop=false] If true, close/open button shows on top of the GUI\r\n */\r\nconst GUI = function(pars) {\r\n const _this = this;\r\n\r\n let params = pars || {};\r\n\r\n /**\r\n * Outermost DOM Element\r\n * @type {DOMElement}\r\n */\r\n this.domElement = document.createElement('div');\r\n this.__ul = document.createElement('ul');\r\n this.domElement.appendChild(this.__ul);\r\n\r\n dom.addClass(this.domElement, CSS_NAMESPACE);\r\n\r\n /**\r\n * Nested GUI's by name\r\n * @ignore\r\n */\r\n this.__folders = {};\r\n\r\n this.__controllers = [];\r\n\r\n /**\r\n * List of objects I'm remembering for save, only used in top level GUI\r\n * @ignore\r\n */\r\n this.__rememberedObjects = [];\r\n\r\n /**\r\n * Maps the index of remembered objects to a map of controllers, only used\r\n * in top level GUI.\r\n *\r\n * @private\r\n * @ignore\r\n *\r\n * @example\r\n * [\r\n * {\r\n * propertyName: Controller,\r\n * anotherPropertyName: Controller\r\n * },\r\n * {\r\n * propertyName: Controller\r\n * }\r\n * ]\r\n */\r\n this.__rememberedObjectIndecesToControllers = [];\r\n\r\n this.__listening = [];\r\n\r\n // Default parameters\r\n params = common.defaults(params, {\r\n closeOnTop: false,\r\n autoPlace: true,\r\n width: GUI.DEFAULT_WIDTH\r\n });\r\n\r\n params = common.defaults(params, {\r\n resizable: params.autoPlace,\r\n hideable: params.autoPlace\r\n });\r\n\r\n if (!common.isUndefined(params.load)) {\r\n // Explicit preset\r\n if (params.preset) {\r\n params.load.preset = params.preset;\r\n }\r\n } else {\r\n params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME };\r\n }\r\n\r\n if (common.isUndefined(params.parent) && params.hideable) {\r\n hideableGuis.push(this);\r\n }\r\n\r\n // Only root level GUI's are resizable.\r\n params.resizable = common.isUndefined(params.parent) && params.resizable;\r\n\r\n if (params.autoPlace && common.isUndefined(params.scrollable)) {\r\n params.scrollable = true;\r\n }\r\n// params.scrollable = common.isUndefined(params.parent) && params.scrollable === true;\r\n\r\n // Not part of params because I don't want people passing this in via\r\n // constructor. Should be a 'remembered' value.\r\n let useLocalStorage =\r\n SUPPORTS_LOCAL_STORAGE &&\r\n localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true';\r\n\r\n let saveToLocalStorage;\r\n let titleRow;\r\n\r\n Object.defineProperties(this,\r\n /** @lends GUI.prototype */\r\n {\r\n /**\r\n * The parent GUI\r\n * @type dat.gui.GUI\r\n */\r\n parent: {\r\n get: function() {\r\n return params.parent;\r\n }\r\n },\r\n\r\n scrollable: {\r\n get: function() {\r\n return params.scrollable;\r\n }\r\n },\r\n\r\n /**\r\n * Handles GUI's element placement for you\r\n * @type Boolean\r\n */\r\n autoPlace: {\r\n get: function() {\r\n return params.autoPlace;\r\n }\r\n },\r\n\r\n /**\r\n * Handles GUI's position of open/close button\r\n * @type Boolean\r\n */\r\n closeOnTop: {\r\n get: function() {\r\n return params.closeOnTop;\r\n }\r\n },\r\n\r\n /**\r\n * The identifier for a set of saved values\r\n * @type String\r\n */\r\n preset: {\r\n get: function() {\r\n if (_this.parent) {\r\n return _this.getRoot().preset;\r\n }\r\n\r\n return params.load.preset;\r\n },\r\n\r\n set: function(v) {\r\n if (_this.parent) {\r\n _this.getRoot().preset = v;\r\n } else {\r\n params.load.preset = v;\r\n }\r\n setPresetSelectIndex(this);\r\n _this.revert();\r\n }\r\n },\r\n\r\n /**\r\n * The width of GUI element\r\n * @type Number\r\n */\r\n width: {\r\n get: function() {\r\n return params.width;\r\n },\r\n set: function(v) {\r\n params.width = v;\r\n setWidth(_this, v);\r\n }\r\n },\r\n\r\n /**\r\n * The name of GUI. Used for folders. i.e\r\n * a folder's name\r\n * @type String\r\n */\r\n name: {\r\n get: function() {\r\n return params.name;\r\n },\r\n set: function(v) {\r\n // TODO Check for collisions among sibling folders\r\n params.name = v;\r\n if (titleRow) {\r\n titleRow.innerHTML = params.name;\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Whether the GUI is collapsed or not\r\n * @type Boolean\r\n */\r\n closed: {\r\n get: function() {\r\n return params.closed;\r\n },\r\n set: function(v) {\r\n params.closed = v;\r\n if (params.closed) {\r\n dom.addClass(_this.__ul, GUI.CLASS_CLOSED);\r\n } else {\r\n dom.removeClass(_this.__ul, GUI.CLASS_CLOSED);\r\n }\r\n // For browsers that aren't going to respect the CSS transition,\r\n // Lets just check our height against the window height right off\r\n // the bat.\r\n this.onResize();\r\n\r\n if (_this.__closeButton) {\r\n _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED;\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Contains all presets\r\n * @type Object\r\n */\r\n load: {\r\n get: function() {\r\n return params.load;\r\n }\r\n },\r\n\r\n /**\r\n * Determines whether or not to use localStorage as the means for\r\n * remembering\r\n * @type Boolean\r\n */\r\n useLocalStorage: {\r\n\r\n get: function() {\r\n return useLocalStorage;\r\n },\r\n set: function(bool) {\r\n if (SUPPORTS_LOCAL_STORAGE) {\r\n useLocalStorage = bool;\r\n if (bool) {\r\n dom.bind(window, 'unload', saveToLocalStorage);\r\n } else {\r\n dom.unbind(window, 'unload', saveToLocalStorage);\r\n }\r\n localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool);\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Are we a root level GUI?\r\n if (common.isUndefined(params.parent)) {\r\n this.closed = params.closed || false;\r\n\r\n dom.addClass(this.domElement, GUI.CLASS_MAIN);\r\n dom.makeSelectable(this.domElement, false);\r\n\r\n // Are we supposed to be loading locally?\r\n if (SUPPORTS_LOCAL_STORAGE) {\r\n if (useLocalStorage) {\r\n _this.useLocalStorage = true;\r\n\r\n const savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui'));\r\n\r\n if (savedGui) {\r\n params.load = JSON.parse(savedGui);\r\n }\r\n }\r\n }\r\n\r\n this.__closeButton = document.createElement('div');\r\n this.__closeButton.innerHTML = GUI.TEXT_CLOSED;\r\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON);\r\n if (params.closeOnTop) {\r\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP);\r\n this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]);\r\n } else {\r\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM);\r\n this.domElement.appendChild(this.__closeButton);\r\n }\r\n\r\n dom.bind(this.__closeButton, 'click', function() {\r\n _this.closed = !_this.closed;\r\n });\r\n // Oh, you're a nested GUI!\r\n } else {\r\n if (params.closed === undefined) {\r\n params.closed = true;\r\n }\r\n\r\n const titleRowName = document.createTextNode(params.name);\r\n dom.addClass(titleRowName, 'controller-name');\r\n\r\n titleRow = addRow(_this, titleRowName);\r\n\r\n const onClickTitle = function(e) {\r\n e.preventDefault();\r\n _this.closed = !_this.closed;\r\n return false;\r\n };\r\n\r\n dom.addClass(this.__ul, GUI.CLASS_CLOSED);\r\n\r\n dom.addClass(titleRow, 'title');\r\n dom.bind(titleRow, 'click', onClickTitle);\r\n\r\n if (!params.closed) {\r\n this.closed = false;\r\n }\r\n }\r\n\r\n if (params.autoPlace) {\r\n if (common.isUndefined(params.parent)) {\r\n if (autoPlaceVirgin) {\r\n autoPlaceContainer = document.createElement('div');\r\n dom.addClass(autoPlaceContainer, CSS_NAMESPACE);\r\n dom.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER);\r\n document.body.appendChild(autoPlaceContainer);\r\n autoPlaceVirgin = false;\r\n }\r\n\r\n // Put it in the dom for you.\r\n autoPlaceContainer.appendChild(this.domElement);\r\n\r\n // Apply the auto styles\r\n dom.addClass(this.domElement, GUI.CLASS_AUTO_PLACE);\r\n }\r\n\r\n\r\n // Make it not elastic.\r\n if (!this.parent) {\r\n setWidth(_this, params.width);\r\n }\r\n }\r\n\r\n this.__resizeHandler = function() {\r\n _this.onResizeDebounced();\r\n };\r\n\r\n dom.bind(window, 'resize', this.__resizeHandler);\r\n dom.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler);\r\n dom.bind(this.__ul, 'transitionend', this.__resizeHandler);\r\n dom.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler);\r\n this.onResize();\r\n\r\n if (params.resizable) {\r\n addResizeHandle(this);\r\n }\r\n\r\n saveToLocalStorage = function() {\r\n if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') {\r\n localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject()));\r\n }\r\n };\r\n\r\n // expose this method publicly\r\n this.saveToLocalStorageIfPossible = saveToLocalStorage;\r\n\r\n function resetWidth() {\r\n const root = _this.getRoot();\r\n root.width += 1;\r\n common.defer(function() {\r\n root.width -= 1;\r\n });\r\n }\r\n\r\n if (!params.parent) {\r\n resetWidth();\r\n }\r\n};\r\n\r\nGUI.toggleHide = function() {\r\n hide = !hide;\r\n common.each(hideableGuis, function(gui) {\r\n gui.domElement.style.display = hide ? 'none' : '';\r\n });\r\n};\r\n\r\nGUI.CLASS_AUTO_PLACE = 'a';\r\nGUI.CLASS_AUTO_PLACE_CONTAINER = 'ac';\r\nGUI.CLASS_MAIN = 'main';\r\nGUI.CLASS_CONTROLLER_ROW = 'cr';\r\nGUI.CLASS_TOO_TALL = 'taller-than-window';\r\nGUI.CLASS_CLOSED = 'closed';\r\nGUI.CLASS_CLOSE_BUTTON = 'close-button';\r\nGUI.CLASS_CLOSE_TOP = 'close-top';\r\nGUI.CLASS_CLOSE_BOTTOM = 'close-bottom';\r\nGUI.CLASS_DRAG = 'drag';\r\n\r\nGUI.DEFAULT_WIDTH = 245;\r\nGUI.TEXT_CLOSED = 'Close Controls';\r\nGUI.TEXT_OPEN = 'Open Controls';\r\n\r\nGUI._keydownHandler = function(e) {\r\n if (document.activeElement.type !== 'text' &&\r\n (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) {\r\n GUI.toggleHide();\r\n }\r\n};\r\ndom.bind(window, 'keydown', GUI._keydownHandler, false);\r\n\r\ncommon.extend(\r\n GUI.prototype,\r\n\r\n /** @lends GUI.prototype */\r\n {\r\n\r\n /**\r\n * Adds a new {@link Controller} to the GUI. The type of controller created\r\n * is inferred from the initial value of object[property]. For\r\n * color properties, see {@link addColor}.\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {String} property The name of the property to be manipulated\r\n * @param {Number} [min] Minimum allowed value\r\n * @param {Number} [max] Maximum allowed value\r\n * @param {Number} [step] Increment by which to change value\r\n * @returns {Controller} The controller that was added to the GUI.\r\n * @instance\r\n *\r\n * @example\r\n * // Add a string controller.\r\n * var person = {name: 'Sam'};\r\n * gui.add(person, 'name');\r\n *\r\n * @example\r\n * // Add a number controller slider.\r\n * var person = {age: 45};\r\n * gui.add(person, 'age', 0, 100);\r\n */\r\n add: function(object, property) {\r\n return add(\r\n this,\r\n object,\r\n property,\r\n {\r\n factoryArgs: Array.prototype.slice.call(arguments, 2)\r\n }\r\n );\r\n },\r\n\r\n /**\r\n * Adds a new color controller to the GUI.\r\n *\r\n * @param object\r\n * @param property\r\n * @returns {Controller} The controller that was added to the GUI.\r\n * @instance\r\n *\r\n * @example\r\n * var palette = {\r\n * color1: '#FF0000', // CSS string\r\n * color2: [ 0, 128, 255 ], // RGB array\r\n * color3: [ 0, 128, 255, 0.3 ], // RGB with alpha\r\n * color4: { h: 350, s: 0.9, v: 0.3 } // Hue, saturation, value\r\n * };\r\n * gui.addColor(palette, 'color1');\r\n * gui.addColor(palette, 'color2');\r\n * gui.addColor(palette, 'color3');\r\n * gui.addColor(palette, 'color4');\r\n */\r\n addColor: function(object, property) {\r\n return add(\r\n this,\r\n object,\r\n property,\r\n {\r\n color: true\r\n }\r\n );\r\n },\r\n\r\n /**\r\n * Removes the given controller from the GUI.\r\n * @param {Controller} controller\r\n * @instance\r\n */\r\n remove: function(controller) {\r\n // TODO listening?\r\n this.__ul.removeChild(controller.__li);\r\n this.__controllers.splice(this.__controllers.indexOf(controller), 1);\r\n const _this = this;\r\n common.defer(function() {\r\n _this.onResize();\r\n });\r\n },\r\n\r\n /**\r\n * Removes the root GUI from the document and unbinds all event listeners.\r\n * For subfolders, use `gui.removeFolder(folder)` instead.\r\n * @instance\r\n */\r\n destroy: function() {\r\n if (this.parent) {\r\n throw new Error(\r\n 'Only the root GUI should be removed with .destroy(). ' +\r\n 'For subfolders, use gui.removeFolder(folder) instead.'\r\n );\r\n }\r\n\r\n if (this.autoPlace) {\r\n autoPlaceContainer.removeChild(this.domElement);\r\n }\r\n\r\n const _this = this;\r\n common.each(this.__folders, function(subfolder) {\r\n _this.removeFolder(subfolder);\r\n });\r\n\r\n dom.unbind(window, 'keydown', GUI._keydownHandler, false);\r\n\r\n removeListeners(this);\r\n },\r\n\r\n /**\r\n * Creates a new subfolder GUI instance.\r\n * @param name\r\n * @returns {dat.gui.GUI} The new folder.\r\n * @throws {Error} if this GUI already has a folder by the specified\r\n * name\r\n * @instance\r\n */\r\n addFolder: function(name) {\r\n // We have to prevent collisions on names in order to have a key\r\n // by which to remember saved values\r\n if (this.__folders[name] !== undefined) {\r\n throw new Error('You already have a folder in this GUI by the' +\r\n ' name \"' + name + '\"');\r\n }\r\n\r\n const newGuiParams = { name: name, parent: this };\r\n\r\n // We need to pass down the autoPlace trait so that we can\r\n // attach event listeners to open/close folder actions to\r\n // ensure that a scrollbar appears if the window is too short.\r\n newGuiParams.autoPlace = this.autoPlace;\r\n\r\n // Do we have saved appearance data for this folder?\r\n if (this.load && // Anything loaded?\r\n this.load.folders && // Was my parent a dead-end?\r\n this.load.folders[name]) { // Did daddy remember me?\r\n // Start me closed if I was closed\r\n newGuiParams.closed = this.load.folders[name].closed;\r\n\r\n // Pass down the loaded data\r\n newGuiParams.load = this.load.folders[name];\r\n }\r\n\r\n const gui = new GUI(newGuiParams);\r\n this.__folders[name] = gui;\r\n\r\n const li = addRow(this, gui.domElement);\r\n dom.addClass(li, 'folder');\r\n return gui;\r\n },\r\n\r\n /**\r\n * Removes a subfolder GUI instance.\r\n * @param {dat.gui.GUI} folder The folder to remove.\r\n * @instance\r\n */\r\n removeFolder: function(folder) {\r\n this.__ul.removeChild(folder.domElement.parentElement);\r\n\r\n delete this.__folders[folder.name];\r\n\r\n // Do we have saved appearance data for this folder?\r\n if (this.load && // Anything loaded?\r\n this.load.folders && // Was my parent a dead-end?\r\n this.load.folders[folder.name]) {\r\n delete this.load.folders[folder.name];\r\n }\r\n\r\n removeListeners(folder);\r\n\r\n const _this = this;\r\n\r\n common.each(folder.__folders, function(subfolder) {\r\n folder.removeFolder(subfolder);\r\n });\r\n\r\n common.defer(function() {\r\n _this.onResize();\r\n });\r\n },\r\n\r\n /**\r\n * Opens the GUI.\r\n */\r\n open: function() {\r\n this.closed = false;\r\n },\r\n\r\n /**\r\n * Closes the GUI.\r\n */\r\n close: function() {\r\n this.closed = true;\r\n },\r\n\r\n /**\r\n * Hides the GUI.\r\n */\r\n hide: function() {\r\n this.domElement.style.display = 'none';\r\n },\r\n\r\n /**\r\n * Shows the GUI.\r\n */\r\n show: function() {\r\n this.domElement.style.display = '';\r\n },\r\n\r\n\r\n onResize: function() {\r\n // we debounce this function to prevent performance issues when rotating on tablet/mobile\r\n const root = this.getRoot();\r\n if (root.scrollable) {\r\n const top = dom.getOffset(root.__ul).top;\r\n let h = 0;\r\n\r\n common.each(root.__ul.childNodes, function(node) {\r\n if (!(root.autoPlace && node === root.__save_row)) {\r\n h += dom.getHeight(node);\r\n }\r\n });\r\n\r\n if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) {\r\n dom.addClass(root.domElement, GUI.CLASS_TOO_TALL);\r\n root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px';\r\n } else {\r\n dom.removeClass(root.domElement, GUI.CLASS_TOO_TALL);\r\n root.__ul.style.height = 'auto';\r\n }\r\n }\r\n\r\n if (root.__resize_handle) {\r\n common.defer(function() {\r\n root.__resize_handle.style.height = root.__ul.offsetHeight + 'px';\r\n });\r\n }\r\n\r\n if (root.__closeButton) {\r\n root.__closeButton.style.width = root.width + 'px';\r\n }\r\n },\r\n\r\n onResizeDebounced: common.debounce(function() { this.onResize(); }, 50),\r\n\r\n /**\r\n * Mark objects for saving. The order of these objects cannot change as\r\n * the GUI grows. When remembering new objects, append them to the end\r\n * of the list.\r\n *\r\n * @param {...Object} objects\r\n * @throws {Error} if not called on a top level GUI.\r\n * @instance\r\n * @ignore\r\n */\r\n remember: function() {\r\n if (common.isUndefined(SAVE_DIALOGUE)) {\r\n SAVE_DIALOGUE = new CenteredDiv();\r\n SAVE_DIALOGUE.domElement.innerHTML = saveDialogueContents;\r\n }\r\n\r\n if (this.parent) {\r\n throw new Error('You can only call remember on a top level GUI.');\r\n }\r\n\r\n const _this = this;\r\n\r\n common.each(Array.prototype.slice.call(arguments), function(object) {\r\n if (_this.__rememberedObjects.length === 0) {\r\n addSaveMenu(_this);\r\n }\r\n if (_this.__rememberedObjects.indexOf(object) === -1) {\r\n _this.__rememberedObjects.push(object);\r\n }\r\n });\r\n\r\n if (this.autoPlace) {\r\n // Set save row width\r\n setWidth(this, this.width);\r\n }\r\n },\r\n\r\n /**\r\n * @returns {dat.gui.GUI} the topmost parent GUI of a nested GUI.\r\n * @instance\r\n */\r\n getRoot: function() {\r\n let gui = this;\r\n while (gui.parent) {\r\n gui = gui.parent;\r\n }\r\n return gui;\r\n },\r\n\r\n /**\r\n * @returns {Object} a JSON object representing the current state of\r\n * this GUI as well as its remembered properties.\r\n * @instance\r\n */\r\n getSaveObject: function() {\r\n const toReturn = this.load;\r\n toReturn.closed = this.closed;\r\n\r\n // Am I remembering any values?\r\n if (this.__rememberedObjects.length > 0) {\r\n toReturn.preset = this.preset;\r\n\r\n if (!toReturn.remembered) {\r\n toReturn.remembered = {};\r\n }\r\n\r\n toReturn.remembered[this.preset] = getCurrentPreset(this);\r\n }\r\n\r\n toReturn.folders = {};\r\n common.each(this.__folders, function(element, key) {\r\n toReturn.folders[key] = element.getSaveObject();\r\n });\r\n\r\n return toReturn;\r\n },\r\n\r\n save: function() {\r\n if (!this.load.remembered) {\r\n this.load.remembered = {};\r\n }\r\n\r\n this.load.remembered[this.preset] = getCurrentPreset(this);\r\n markPresetModified(this, false);\r\n this.saveToLocalStorageIfPossible();\r\n },\r\n\r\n saveAs: function(presetName) {\r\n if (!this.load.remembered) {\r\n // Retain default values upon first save\r\n this.load.remembered = {};\r\n this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true);\r\n }\r\n\r\n this.load.remembered[presetName] = getCurrentPreset(this);\r\n this.preset = presetName;\r\n addPresetOption(this, presetName, true);\r\n this.saveToLocalStorageIfPossible();\r\n },\r\n\r\n revert: function(gui) {\r\n common.each(this.__controllers, function(controller) {\r\n // Make revert work on Default.\r\n if (!this.getRoot().load.remembered) {\r\n controller.setValue(controller.initialValue);\r\n } else {\r\n recallSavedValue(gui || this.getRoot(), controller);\r\n }\r\n\r\n // fire onFinishChange callback\r\n if (controller.__onFinishChange) {\r\n controller.__onFinishChange.call(controller, controller.getValue());\r\n }\r\n }, this);\r\n\r\n common.each(this.__folders, function(folder) {\r\n folder.revert(folder);\r\n });\r\n\r\n if (!gui) {\r\n markPresetModified(this.getRoot(), false);\r\n }\r\n },\r\n\r\n listen: function(controller) {\r\n const init = this.__listening.length === 0;\r\n this.__listening.push(controller);\r\n if (init) {\r\n updateDisplays(this.__listening);\r\n }\r\n },\r\n\r\n updateDisplay: function() {\r\n common.each(this.__controllers, function(controller) {\r\n controller.updateDisplay();\r\n });\r\n common.each(this.__folders, function(folder) {\r\n folder.updateDisplay();\r\n });\r\n }\r\n }\r\n);\r\n\r\n/**\r\n * Add a row to the end of the GUI or before another row.\r\n *\r\n * @param gui\r\n * @param [newDom] If specified, inserts the dom content in the new row\r\n * @param [liBefore] If specified, places the new row before another row\r\n *\r\n * @ignore\r\n */\r\nfunction addRow(gui, newDom, liBefore) {\r\n const li = document.createElement('li');\r\n if (newDom) {\r\n li.appendChild(newDom);\r\n }\r\n\r\n if (liBefore) {\r\n gui.__ul.insertBefore(li, liBefore);\r\n } else {\r\n gui.__ul.appendChild(li);\r\n }\r\n gui.onResize();\r\n return li;\r\n}\r\n\r\nfunction removeListeners(gui) {\r\n dom.unbind(window, 'resize', gui.__resizeHandler);\r\n\r\n if (gui.saveToLocalStorageIfPossible) {\r\n dom.unbind(window, 'unload', gui.saveToLocalStorageIfPossible);\r\n }\r\n}\r\n\r\nfunction markPresetModified(gui, modified) {\r\n const opt = gui.__preset_select[gui.__preset_select.selectedIndex];\r\n\r\n if (modified) {\r\n opt.innerHTML = opt.value + '*';\r\n } else {\r\n opt.innerHTML = opt.value;\r\n }\r\n}\r\n\r\nfunction augmentController(gui, li, controller) {\r\n controller.__li = li;\r\n controller.__gui = gui;\r\n\r\n common.extend(controller, /** @lends Controller.prototype */ {\r\n /**\r\n * @param {Array|Object} options\r\n * @return {Controller}\r\n */\r\n options: function(options) {\r\n if (arguments.length > 1) {\r\n const nextSibling = controller.__li.nextElementSibling;\r\n controller.remove();\r\n\r\n return add(\r\n gui,\r\n controller.object,\r\n controller.property,\r\n {\r\n before: nextSibling,\r\n factoryArgs: [common.toArray(arguments)]\r\n }\r\n );\r\n }\r\n\r\n if (common.isArray(options) || common.isObject(options)) {\r\n const nextSibling = controller.__li.nextElementSibling;\r\n controller.remove();\r\n\r\n return add(\r\n gui,\r\n controller.object,\r\n controller.property,\r\n {\r\n before: nextSibling,\r\n factoryArgs: [options]\r\n }\r\n );\r\n }\r\n },\r\n\r\n /**\r\n * Sets the name of the controller.\r\n * @param {string} name\r\n * @return {Controller}\r\n */\r\n name: function(name) {\r\n controller.__li.firstElementChild.firstElementChild.innerHTML = name;\r\n return controller;\r\n },\r\n\r\n /**\r\n * Sets controller to listen for changes on its underlying object.\r\n * @return {Controller}\r\n */\r\n listen: function() {\r\n controller.__gui.listen(controller);\r\n return controller;\r\n },\r\n\r\n /**\r\n * Removes the controller from its parent GUI.\r\n * @return {Controller}\r\n */\r\n remove: function() {\r\n controller.__gui.remove(controller);\r\n return controller;\r\n }\r\n });\r\n\r\n // All sliders should be accompanied by a box.\r\n if (controller instanceof NumberControllerSlider) {\r\n const box = new NumberControllerBox(controller.object, controller.property,\r\n { min: controller.__min, max: controller.__max, step: controller.__step });\r\n\r\n common.each(['updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max'], function(method) {\r\n const pc = controller[method];\r\n const pb = box[method];\r\n controller[method] = box[method] = function() {\r\n const args = Array.prototype.slice.call(arguments);\r\n pb.apply(box, args);\r\n return pc.apply(controller, args);\r\n };\r\n });\r\n\r\n dom.addClass(li, 'has-slider');\r\n controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild);\r\n } else if (controller instanceof NumberControllerBox) {\r\n const r = function(returned) {\r\n // Have we defined both boundaries?\r\n if (common.isNumber(controller.__min) && common.isNumber(controller.__max)) {\r\n // Well, then lets just replace this with a slider.\r\n\r\n // lets remember if the old controller had a specific name or was listening\r\n const oldName = controller.__li.firstElementChild.firstElementChild.innerHTML;\r\n const wasListening = controller.__gui.__listening.indexOf(controller) > -1;\r\n\r\n controller.remove();\r\n const newController = add(\r\n gui,\r\n controller.object,\r\n controller.property,\r\n {\r\n before: controller.__li.nextElementSibling,\r\n factoryArgs: [controller.__min, controller.__max, controller.__step]\r\n });\r\n\r\n newController.name(oldName);\r\n if (wasListening) newController.listen();\r\n\r\n return newController;\r\n }\r\n\r\n return returned;\r\n };\r\n\r\n controller.min = common.compose(r, controller.min);\r\n controller.max = common.compose(r, controller.max);\r\n } else if (controller instanceof BooleanController) {\r\n dom.bind(li, 'click', function() {\r\n dom.fakeEvent(controller.__checkbox, 'click');\r\n });\r\n\r\n dom.bind(controller.__checkbox, 'click', function(e) {\r\n e.stopPropagation(); // Prevents double-toggle\r\n });\r\n } else if (controller instanceof FunctionController) {\r\n dom.bind(li, 'click', function() {\r\n dom.fakeEvent(controller.__button, 'click');\r\n });\r\n\r\n dom.bind(li, 'mouseover', function() {\r\n dom.addClass(controller.__button, 'hover');\r\n });\r\n\r\n dom.bind(li, 'mouseout', function() {\r\n dom.removeClass(controller.__button, 'hover');\r\n });\r\n } else if (controller instanceof ColorController) {\r\n dom.addClass(li, 'color');\r\n controller.updateDisplay = common.compose(function(val) {\r\n li.style.borderLeftColor = controller.__color.toString();\r\n return val;\r\n }, controller.updateDisplay);\r\n\r\n controller.updateDisplay();\r\n }\r\n\r\n controller.setValue = common.compose(function(val) {\r\n if (gui.getRoot().__preset_select && controller.isModified()) {\r\n markPresetModified(gui.getRoot(), true);\r\n }\r\n\r\n return val;\r\n }, controller.setValue);\r\n}\r\n\r\nfunction recallSavedValue(gui, controller) {\r\n // Find the topmost GUI, that's where remembered objects live.\r\n const root = gui.getRoot();\r\n\r\n // Does the object we're controlling match anything we've been told to\r\n // remember?\r\n const matchedIndex = root.__rememberedObjects.indexOf(controller.object);\r\n\r\n // Why yes, it does!\r\n if (matchedIndex !== -1) {\r\n // Let me fetch a map of controllers for thcommon.isObject.\r\n let controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex];\r\n\r\n // Ohp, I believe this is the first controller we've created for this\r\n // object. Lets make the map fresh.\r\n if (controllerMap === undefined) {\r\n controllerMap = {};\r\n root.__rememberedObjectIndecesToControllers[matchedIndex] =\r\n controllerMap;\r\n }\r\n\r\n // Keep track of this controller\r\n controllerMap[controller.property] = controller;\r\n\r\n // Okay, now have we saved any values for this controller?\r\n if (root.load && root.load.remembered) {\r\n const presetMap = root.load.remembered;\r\n\r\n // Which preset are we trying to load?\r\n let preset;\r\n\r\n if (presetMap[gui.preset]) {\r\n preset = presetMap[gui.preset];\r\n } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) {\r\n // Uhh, you can have the default instead?\r\n preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME];\r\n } else {\r\n // Nada.\r\n return;\r\n }\r\n\r\n // Did the loaded object remember thcommon.isObject? && Did we remember this particular property?\r\n if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) {\r\n // We did remember something for this guy ...\r\n const value = preset[matchedIndex][controller.property];\r\n\r\n // And that's what it is.\r\n controller.initialValue = value;\r\n controller.setValue(value);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction add(gui, object, property, params) {\r\n var customObject;\r\n if( object.arguments ){\r\n //custom controller\r\n customObject = object;\r\n object = customObject.arguments.object;\r\n property = customObject.arguments.property;\r\n params = {\r\n factoryArgs: customObject.arguments.opts\r\n }\r\n }\r\n if ( ( customObject === undefined ) && ( object[property] === undefined ) ) {\r\n throw new Error(`Object \"${object}\" has no property \"${property}\"`);\r\n }\r\n\r\n let controller;\r\n\r\n if (params.color) {\r\n controller = new ColorController(object, property);\r\n } else if ( ( customObject !== undefined ) && ( typeof customObject.property === \"string\" ) ) {\r\n controller = customObject;\r\n } else {\r\n const factoryArgs = [object, property].concat(params.factoryArgs);\r\n controller = ControllerFactory.apply(gui, factoryArgs);\r\n }\r\n if ( controller === null )\r\n \tcontroller = customObject;\r\n else if( customObject !== undefined )\r\n customObject.controller = controller;\r\n\r\n if (params.before instanceof Controller) {\r\n params.before = params.before.__li;\r\n }\r\n\r\n recallSavedValue(gui, controller);\r\n\r\n dom.addClass(controller.domElement, 'c');\r\n\r\n const name = document.createElement('span');\r\n dom.addClass(name, 'property-name');\r\n if( ( customObject !== undefined ) && typeof customObject.property === \"object\" ){\r\n for(var propertyName in customObject.property)\r\n name.appendChild(customObject.property[propertyName]);\r\n }\r\n else name.innerHTML = controller.property;\r\n\r\n const container = document.createElement('div');\r\n container.appendChild(name);\r\n container.appendChild(controller.domElement);\r\n\r\n const li = addRow(gui, container, params.before);\r\n\r\n dom.addClass(li, GUI.CLASS_CONTROLLER_ROW);\r\n if (controller instanceof ColorController) {\r\n dom.addClass(li, 'color');\r\n } else {\r\n dom.addClass(li, typeof controller.getValue());\r\n }\r\n\r\n augmentController(gui, li, controller);\r\n\r\n gui.__controllers.push(controller);\r\n\r\n return controller;\r\n}\r\n\r\nfunction getLocalStorageHash(gui, key) {\r\n // TODO how does this deal with multiple GUI's?\r\n return document.location.href + '.' + key;\r\n}\r\n\r\nfunction addPresetOption(gui, name, setSelected) {\r\n const opt = document.createElement('option');\r\n opt.innerHTML = name;\r\n opt.value = name;\r\n gui.__preset_select.appendChild(opt);\r\n if (setSelected) {\r\n gui.__preset_select.selectedIndex = gui.__preset_select.length - 1;\r\n }\r\n}\r\n\r\nfunction showHideExplain(gui, explain) {\r\n explain.style.display = gui.useLocalStorage ? 'block' : 'none';\r\n}\r\n\r\nfunction addSaveMenu(gui) {\r\n const div = gui.__save_row = document.createElement('li');\r\n\r\n dom.addClass(gui.domElement, 'has-save');\r\n\r\n gui.__ul.insertBefore(div, gui.__ul.firstChild);\r\n\r\n dom.addClass(div, 'save-row');\r\n\r\n const gears = document.createElement('span');\r\n gears.innerHTML = ' ';\r\n dom.addClass(gears, 'button gears');\r\n\r\n // TODO replace with FunctionController\r\n const button = document.createElement('span');\r\n button.innerHTML = 'Save';\r\n dom.addClass(button, 'button');\r\n dom.addClass(button, 'save');\r\n\r\n const button2 = document.createElement('span');\r\n button2.innerHTML = 'New';\r\n dom.addClass(button2, 'button');\r\n dom.addClass(button2, 'save-as');\r\n\r\n const button3 = document.createElement('span');\r\n button3.innerHTML = 'Revert';\r\n dom.addClass(button3, 'button');\r\n dom.addClass(button3, 'revert');\r\n\r\n const select = gui.__preset_select = document.createElement('select');\r\n\r\n if (gui.load && gui.load.remembered) {\r\n common.each(gui.load.remembered, function(value, key) {\r\n addPresetOption(gui, key, key === gui.preset);\r\n });\r\n } else {\r\n addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false);\r\n }\r\n\r\n dom.bind(select, 'change', function() {\r\n for (let index = 0; index < gui.__preset_select.length; index++) {\r\n gui.__preset_select[index].innerHTML = gui.__preset_select[index].value;\r\n }\r\n\r\n gui.preset = this.value;\r\n });\r\n\r\n div.appendChild(select);\r\n div.appendChild(gears);\r\n div.appendChild(button);\r\n div.appendChild(button2);\r\n div.appendChild(button3);\r\n\r\n if (SUPPORTS_LOCAL_STORAGE) {\r\n const explain = document.getElementById('dg-local-explain');\r\n const localStorageCheckBox = document.getElementById('dg-local-storage');\r\n const saveLocally = document.getElementById('dg-save-locally');\r\n\r\n saveLocally.style.display = 'block';\r\n\r\n if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') {\r\n localStorageCheckBox.setAttribute('checked', 'checked');\r\n }\r\n\r\n showHideExplain(gui, explain);\r\n\r\n // TODO: Use a boolean controller, fool!\r\n dom.bind(localStorageCheckBox, 'change', function() {\r\n gui.useLocalStorage = !gui.useLocalStorage;\r\n showHideExplain(gui, explain);\r\n });\r\n }\r\n\r\n const newConstructorTextArea = document.getElementById('dg-new-constructor');\r\n\r\n dom.bind(newConstructorTextArea, 'keydown', function(e) {\r\n if (e.metaKey && (e.which === 67 || e.keyCode === 67)) {\r\n SAVE_DIALOGUE.hide();\r\n }\r\n });\r\n\r\n dom.bind(gears, 'click', function() {\r\n newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2);\r\n SAVE_DIALOGUE.show();\r\n newConstructorTextArea.focus();\r\n newConstructorTextArea.select();\r\n });\r\n\r\n dom.bind(button, 'click', function() {\r\n gui.save();\r\n });\r\n\r\n dom.bind(button2, 'click', function() {\r\n const presetName = prompt('Enter a new preset name.');\r\n if (presetName) {\r\n gui.saveAs(presetName);\r\n }\r\n });\r\n\r\n dom.bind(button3, 'click', function() {\r\n gui.revert();\r\n });\r\n\r\n // div.appendChild(button2);\r\n}\r\n\r\nfunction addResizeHandle(gui) {\r\n let pmouseX;\r\n\r\n gui.__resize_handle = document.createElement('div');\r\n\r\n common.extend(gui.__resize_handle.style, {\r\n\r\n width: '6px',\r\n marginLeft: '-3px',\r\n height: '200px',\r\n cursor: 'ew-resize',\r\n position: 'absolute'\r\n // border: '1px solid blue'\r\n\r\n });\r\n\r\n function drag(e) {\r\n e.preventDefault();\r\n\r\n gui.width += pmouseX - e.clientX;\r\n gui.onResize();\r\n pmouseX = e.clientX;\r\n\r\n return false;\r\n }\r\n\r\n function dragStop() {\r\n dom.removeClass(gui.__closeButton, GUI.CLASS_DRAG);\r\n dom.unbind(window, 'mousemove', drag);\r\n dom.unbind(window, 'mouseup', dragStop);\r\n }\r\n\r\n function dragStart(e) {\r\n e.preventDefault();\r\n\r\n pmouseX = e.clientX;\r\n\r\n dom.addClass(gui.__closeButton, GUI.CLASS_DRAG);\r\n dom.bind(window, 'mousemove', drag);\r\n dom.bind(window, 'mouseup', dragStop);\r\n\r\n return false;\r\n }\r\n\r\n dom.bind(gui.__resize_handle, 'mousedown', dragStart);\r\n dom.bind(gui.__closeButton, 'mousedown', dragStart);\r\n\r\n gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild);\r\n}\r\n\r\nfunction setWidth(gui, w) {\r\n gui.domElement.style.width = w + 'px';\r\n // Auto placed save-rows are position fixed, so we have to\r\n // set the width manually if we want it to bleed to the edge\r\n if (gui.__save_row && gui.autoPlace) {\r\n gui.__save_row.style.width = w + 'px';\r\n }\r\n if (gui.__closeButton) {\r\n gui.__closeButton.style.width = w + 'px';\r\n }\r\n}\r\n\r\nfunction getCurrentPreset(gui, useInitialValues) {\r\n const toReturn = {};\r\n\r\n // For each object I'm remembering\r\n common.each(gui.__rememberedObjects, function(val, index) {\r\n const savedValues = {};\r\n\r\n // The controllers I've made for thcommon.isObject by property\r\n const controllerMap =\r\n gui.__rememberedObjectIndecesToControllers[index];\r\n\r\n // Remember each value for each property\r\n common.each(controllerMap, function(controller, property) {\r\n savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue();\r\n });\r\n\r\n // Save the values for thcommon.isObject\r\n toReturn[index] = savedValues;\r\n });\r\n\r\n return toReturn;\r\n}\r\n\r\nfunction setPresetSelectIndex(gui) {\r\n for (let index = 0; index < gui.__preset_select.length; index++) {\r\n if (gui.__preset_select[index].value === gui.preset) {\r\n gui.__preset_select.selectedIndex = index;\r\n }\r\n }\r\n}\r\n\r\nfunction updateDisplays(controllerArray) {\r\n if (controllerArray.length !== 0) {\r\n requestAnimationFrame.call(window, function() {\r\n updateDisplays(controllerArray);\r\n });\r\n }\r\n\r\n common.each(controllerArray, function(c) {\r\n c.updateDisplay();\r\n });\r\n}\r\n\r\nexport default GUI;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Color from './color/Color';\r\nimport math from './color/math';\r\nimport interpret from './color/interpret';\r\n\r\nimport Controller from './controllers/Controller';\r\nimport BooleanController from './controllers/BooleanController';\r\nimport OptionController from './controllers/OptionController';\r\nimport StringController from './controllers/StringController';\r\nimport NumberController from './controllers/NumberController';\r\nimport NumberControllerBox from './controllers/NumberControllerBox';\r\nimport NumberControllerSlider from './controllers/NumberControllerSlider';\r\nimport FunctionController from './controllers/FunctionController';\r\nimport ColorController from './controllers/ColorController';\r\nimport CustomController from './controllers/CustomController';\r\n\r\nimport domImport from './dom/dom';\r\nimport GUIImport from './gui/GUI';\r\n\r\nexport const color = {\r\n Color: Color,\r\n math: math,\r\n interpret: interpret\r\n};\r\n\r\nexport const controllers = {\r\n Controller: Controller,\r\n BooleanController: BooleanController,\r\n OptionController: OptionController,\r\n StringController: StringController,\r\n NumberController: NumberController,\r\n NumberControllerBox: NumberControllerBox,\r\n NumberControllerSlider: NumberControllerSlider,\r\n FunctionController: FunctionController,\r\n ColorController: ColorController,\r\n CustomController: CustomController\r\n};\r\n\r\nexport const dom = { dom: domImport };\r\n\r\nexport const gui = { GUI: GUIImport };\r\n\r\nexport const GUI = GUIImport;\r\n\r\nexport default {\r\n color,\r\n controllers,\r\n dom,\r\n gui,\r\n GUI\r\n};\r\n"],"names":["color","forceCSSHex","colorFormat","__state","conversionName","toString","r","Math","round","g","b","a","h","s","toFixed","v","str","hex","length","ARR_EACH","Array","prototype","forEach","ARR_SLICE","slice","Common","target","each","call","arguments","obj","keys","isObject","Object","key","isUndefined","bind","toCall","args","i","apply","itr","scope","l","BREAK","fnc","func","threshold","callImmediately","timeout","delayed","callNow","setTimeout","toArray","undefined","isNaN","isArray","constructor","INTERPRETATIONS","common","isString","original","test","match","parseInt","parseFloat","isNumber","result","toReturn","interpret","family","litmus","conversions","conversion","read","tmpComponent","ColorMath","hi","floor","f","p","q","t","c","min","max","delta","NaN","hex_with_component","componentIndex","value","Color","Error","colorToString","write","defineRGBComponent","component","componentHexIndex","defineProperty","space","recalculateRGB","defineHSVComponent","recalculateHSV","math","component_from_hex","extend","hsv_to_rgb","rgb_to_hsv","COMPONENTS","rgb_to_hex","Controller","object","property","initialValue","domElement","document","createElement","__onChange","__onFinishChange","newValue","updateDisplay","getValue","EVENT_MAP","EVENT_MAP_INV","k","e","CSS_VALUE_PIXELS","cssValueToPixels","val","isNull","dom","elem","selectable","style","onselectstart","MozUserSelect","KhtmlUserSelect","unselectable","hor","vert","vertical","horizontal","position","left","right","top","bottom","eventType","pars","aux","params","className","evt","createEvent","clientX","x","clientY","y","initMouseEvent","bubbles","cancelable","window","clickCount","init","initKeyboardEvent","initKeyEvent","defaults","ctrlKey","altKey","shiftKey","metaKey","keyCode","charCode","initEvent","dispatchEvent","event","newBool","bool","addEventListener","attachEvent","removeEventListener","detachEvent","classes","split","indexOf","push","join","replace","removeAttribute","index","splice","RegExp","getComputedStyle","width","height","el","offset","offsetParent","offsetLeft","offsetTop","activeElement","type","href","BooleanController","_this","__prev","__checkbox","setAttribute","onChange","setValue","appendChild","checked","OptionController","opts","options","__select","map","element","opt","innerHTML","desiredValue","selectedIndex","isActive","StringController","__input","onBlur","blur","numDecimals","_x","NumberController","_params","__min","__max","__step","step","__impliedStep","pow","log","abs","LN10","__precision","_v","minValue","maxValue","stepValue","roundToDecimal","decimals","tenTo","NumberControllerBox","__truncationSuspended","prevY","attempted","onFinish","onMouseDrag","diff","onMouseUp","unbind","onMouseDown","i1","i2","o1","o2","NumberControllerSlider","__background","__foreground","onTouchStart","addClass","preventDefault","bgRect","getBoundingClientRect","touches","onTouchMove","onTouchEnd","pct","FunctionController","text","__button","fire","ColorController","__color","__temp","makeSelectable","__selector","__saturation_field","__field_knob","__field_knob_border","__hue_knob","__hue_field","__input_textShadow","removeClass","valueField","fieldDown","fieldDownH","setSV","fieldUpSV","setH","fieldUpH","toOriginal","fieldRect","mismatch","flip","_flip","toHexString","marginTop","vendors","linearGradient","background","vendor","cssText","hueGradient","ControllerFactory","isFunction","isBoolean","CustomController","newController","_controller","css","url","indoc","doc","link","rel","getElementsByTagName","cssContent","injected","head","saveDialogContents","requestAnimationFrame","callback","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","CenteredDiv","backgroundElement","makeFullscreen","body","hide","display","opacity","webkitTransform","layout","defer","innerWidth","getWidth","innerHeight","getHeight","inject","styleSheet","CSS_NAMESPACE","HIDE_KEY_CODE","CLOSE_BUTTON_HEIGHT","DEFAULT_DEFAULT_PRESET_NAME","SUPPORTS_LOCAL_STORAGE","localStorage","SAVE_DIALOGUE","autoPlaceVirgin","autoPlaceContainer","hideableGuis","GUI","__ul","__folders","__controllers","__rememberedObjects","__rememberedObjectIndecesToControllers","__listening","DEFAULT_WIDTH","autoPlace","load","preset","parent","hideable","resizable","scrollable","useLocalStorage","getItem","getLocalStorageHash","saveToLocalStorage","titleRow","defineProperties","closeOnTop","getRoot","revert","name","closed","CLASS_CLOSED","onResize","__closeButton","TEXT_OPEN","TEXT_CLOSED","setItem","CLASS_MAIN","savedGui","JSON","parse","CLASS_CLOSE_BUTTON","CLASS_CLOSE_TOP","insertBefore","childNodes","CLASS_CLOSE_BOTTOM","titleRowName","createTextNode","addRow","onClickTitle","CLASS_AUTO_PLACE_CONTAINER","CLASS_AUTO_PLACE","__resizeHandler","onResizeDebounced","stringify","getSaveObject","saveToLocalStorageIfPossible","resetWidth","root","toggleHide","gui","CLASS_CONTROLLER_ROW","CLASS_TOO_TALL","CLASS_DRAG","_keydownHandler","which","add","controller","removeChild","__li","subfolder","removeFolder","newGuiParams","folders","li","folder","parentElement","getOffset","node","__save_row","__resize_handle","offsetHeight","debounce","saveDialogueContents","remembered","getCurrentPreset","presetName","newDom","liBefore","removeListeners","markPresetModified","modified","__preset_select","augmentController","__gui","nextSibling","nextElementSibling","remove","firstElementChild","listen","box","method","pc","pb","returned","oldName","wasListening","compose","fakeEvent","stopPropagation","borderLeftColor","isModified","recallSavedValue","matchedIndex","controllerMap","presetMap","customObject","factoryArgs","concat","before","babelHelpers.typeof","propertyName","container","location","addPresetOption","setSelected","showHideExplain","explain","addSaveMenu","div","firstChild","gears","button","button2","button3","select","getElementById","localStorageCheckBox","saveLocally","newConstructorTextArea","show","focus","save","prompt","saveAs","addResizeHandle","pmouseX","drag","dragStop","dragStart","setWidth","w","useInitialValues","savedValues","setPresetSelectIndex","updateDisplays","controllerArray","controllers","domImport","GUIImport"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..fc87912 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6011 @@ +{ + "name": "dat.gui", + "version": "0.7.6", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "2.1.18", + "negotiator": "0.6.1" + }, + "dependencies": { + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "requires": { + "mime-db": "1.33.0" + } + } + } + }, + "acorn": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", + "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", + "dev": true + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "3.3.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "address": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", + "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==", + "dev": true + }, + "ajv-keywords": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "ansi-escape-sequences": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz", + "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==", + "dev": true, + "requires": { + "array-back": "2.0.0" + } + }, + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "arch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.0.tgz", + "integrity": "sha1-NhOqRhSQZLPB8GB5Gb8dR4boKIk=", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.3" + } + }, + "arg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-2.0.0.tgz", + "integrity": "sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w==", + "dev": true + }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "args": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/args/-/args-4.0.0.tgz", + "integrity": "sha512-4b7lVF58nlo7sNtq8s2OueroOY/UHn0Nt/NVjsx9zn28u6yDVb9bQ/uy/5jKtHCbUDil4MlMyDLF5+OHEgnTug==", + "dev": true, + "requires": { + "camelcase": "5.0.0", + "chalk": "2.3.2", + "leven": "2.1.0", + "mri": "1.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "dev": true + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "argv-tools": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz", + "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "find-replace": "2.0.1" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "dev": true, + "requires": { + "typical": "2.6.1" + } + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.1", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-external-helpers": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz", + "integrity": "sha1-IoX0iwK9Xe3oUXXK+MYuhq3M76E=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "0.10.1" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-preset-env": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", + "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0", + "browserslist": "3.2.8", + "invariant": "2.2.4", + "semver": "5.4.1" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "6.26.3", + "babel-runtime": "6.26.0", + "core-js": "2.5.2", + "home-or-tmp": "2.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "2.5.2", + "regenerator-runtime": "0.11.1" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.4", + "lodash": "4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "basic-auth": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz", + "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dev": true, + "requires": { + "ansi-align": "2.0.0", + "camelcase": "4.1.0", + "chalk": "2.4.1", + "cli-boxes": "1.0.0", + "string-width": "2.1.1", + "term-size": "1.2.0", + "widest-line": "2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000847", + "electron-to-chromium": "1.3.48" + } + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cache-point": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cache-point/-/cache-point-0.4.1.tgz", + "integrity": "sha512-4TgWfe9SF+bUy5cCql8gWHqKNrviufNwSYxLjf2utB0pY4+bdcuFwMmY1hDB+67Gz/L1vmhFNhePAjJTFBtV+Q==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "fs-then-native": "2.0.0", + "mkdirp2": "1.0.3" + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + } + }, + "caniuse-lite": { + "version": "1.0.30000847", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000847.tgz", + "integrity": "sha512-Weo+tRtVWcN2da782Ebx/27hFNEb+KP+uP6tdqAa+2S5bp1zOJhVH9tEpDygagrfvU4QjeuPwi/5VGsgT4SLaA==", + "dev": true + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true + }, + "catharsis": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", + "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", + "dev": true, + "requires": { + "underscore-contrib": "0.3.0" + } + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "clipboardy": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-1.2.3.tgz", + "integrity": "sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==", + "dev": true, + "requires": { + "arch": "2.1.0", + "execa": "0.8.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "execa": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + } + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collect-all": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-all/-/collect-all-1.0.3.tgz", + "integrity": "sha512-0y0rBgoX8IzIjBAUnO73SEtSb4Mhk3IoceWJq5zZSxb9mWORhWH8xLYo4EDSOE1jRBk1LhmfjqWFFt10h/+MEA==", + "dev": true, + "requires": { + "stream-connect": "1.0.2", + "stream-via": "1.0.4" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "command-line-args": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.1.tgz", + "integrity": "sha512-gRJDcIjFSzMcmG/GrJlgL0wWoAxr11mVzCq32bjka0endupm9meLwvoJUKc4HDeFiEIB2X3GvNrhF5cKO4Bd4A==", + "dev": true, + "requires": { + "argv-tools": "0.1.1", + "array-back": "2.0.0", + "find-replace": "2.0.1", + "lodash.camelcase": "4.3.0", + "typical": "2.6.1" + } + }, + "command-line-tool": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/command-line-tool/-/command-line-tool-0.8.0.tgz", + "integrity": "sha512-Xw18HVx/QzQV3Sc5k1vy3kgtOeGmsKIqwtFFoyjI4bbcpSgnw2CWVULvtakyw4s6fhyAdI6soQQhXc2OzJy62g==", + "dev": true, + "requires": { + "ansi-escape-sequences": "4.0.0", + "array-back": "2.0.0", + "command-line-args": "5.0.1", + "command-line-usage": "4.1.0", + "typical": "2.6.1" + } + }, + "command-line-usage": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz", + "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==", + "dev": true, + "requires": { + "ansi-escape-sequences": "4.0.0", + "array-back": "2.0.0", + "table-layout": "0.4.2", + "typical": "2.6.1" + } + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "common-sequence": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/common-sequence/-/common-sequence-1.0.2.tgz", + "integrity": "sha1-MOB/P49vf5s97oVPILLTnu4Ibeg=", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "compressible": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz", + "integrity": "sha1-DRAgq5JLL9tNYnmHXH1tq6a6p6k=", + "dev": true, + "requires": { + "mime-db": "1.34.0" + }, + "dependencies": { + "mime-db": { + "version": "1.34.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.34.0.tgz", + "integrity": "sha1-RS0Oz/XDA0am3B5kseruDTcZ/5o=", + "dev": true + } + } + }, + "compression": { + "version": "1.7.2", + "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz", + "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", + "dev": true, + "requires": { + "accepts": "1.3.5", + "bytes": "3.0.0", + "compressible": "2.0.13", + "debug": "2.6.9", + "on-headers": "1.0.1", + "safe-buffer": "5.1.1", + "vary": "1.1.2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "typedarray": "0.0.6" + } + }, + "concurrently": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-3.5.1.tgz", + "integrity": "sha512-689HrwGw8Rbk1xtV9C4dY6TPJAvIYZbRbnKSAtfJ7tHqICFGoZ0PCWYjxfmerRyxBG0o3sbG3pe7N8vqPwIHuQ==", + "dev": true, + "requires": { + "chalk": "0.5.1", + "commander": "2.6.0", + "date-fns": "1.29.0", + "lodash": "4.17.4", + "rx": "2.3.24", + "spawn-command": "0.0.2-1", + "supports-color": "3.2.3", + "tree-kill": "1.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", + "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", + "dev": true + }, + "ansi-styles": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", + "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", + "dev": true + }, + "chalk": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", + "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", + "dev": true, + "requires": { + "ansi-styles": "1.1.0", + "escape-string-regexp": "1.0.5", + "has-ansi": "0.1.0", + "strip-ansi": "0.3.0", + "supports-color": "0.2.0" + }, + "dependencies": { + "supports-color": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", + "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", + "dev": true + } + } + }, + "commander": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", + "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=", + "dev": true + }, + "has-ansi": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", + "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", + "dev": true, + "requires": { + "ansi-regex": "0.2.1" + } + }, + "strip-ansi": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", + "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", + "dev": true, + "requires": { + "ansi-regex": "0.2.1" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "config-master": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/config-master/-/config-master-3.1.0.tgz", + "integrity": "sha1-ZnZjWQUFooO/JqSE1oSJ10xUhdo=", + "dev": true, + "requires": { + "walk-back": "2.0.1" + }, + "dependencies": { + "walk-back": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-2.0.1.tgz", + "integrity": "sha1-VU4qnYdPrEeoywBr9EwvDEmYoKQ=", + "dev": true + } + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "core-js": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.2.tgz", + "integrity": "sha1-vEZIZW59ydyA19PHu8Fy2W50TmM=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "which": "1.3.0" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "d": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", + "integrity": "sha1-2hhMU10Y2O57oqoim5FACfrhEwk=", + "dev": true, + "requires": { + "es5-ext": "0.10.37" + } + }, + "dargs": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-5.1.0.tgz", + "integrity": "sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "date-fns": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", + "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-extend": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz", + "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "detect-port": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.2.3.tgz", + "integrity": "sha512-IDbrX6PxqnYy8jV4wSHBaJlErYKTJvW8OQb9F7xivl1iQLqiUYHGa+nZ61Do6+N5uuOn/pReXKNqI9rUn04vug==", + "dev": true, + "requires": { + "address": "1.0.3", + "debug": "2.6.9" + } + }, + "dmd": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/dmd/-/dmd-3.0.10.tgz", + "integrity": "sha512-+tRZIFV9fII538XFZSoRP1abtIy55RYa4waGvtKB36LD97NRorWsYT3V3HEURmnXpA4eGIFQph1E2f+51hWrTg==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "cache-point": "0.4.1", + "common-sequence": "1.0.2", + "file-set": "1.1.1", + "handlebars": "4.0.11", + "marked": "0.3.12", + "object-get": "2.1.0", + "reduce-flatten": "1.0.1", + "reduce-unique": "1.0.0", + "reduce-without": "1.0.1", + "test-value": "3.0.0", + "walk-back": "3.0.0" + } + }, + "doctrine": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.2.tgz", + "integrity": "sha512-y0tm5Pq6ywp3qSTZ1vPgVdAnbDEoeoc5wlOHXoY1c4Wug/a7JvqHIl7BTvwodaHmejWkK/9dSb3sCYfyo/om8A==", + "dev": true, + "requires": { + "esutils": "2.0.2" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.48", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.48.tgz", + "integrity": "sha1-07DYWTgUBE4JLs4hCPw6ya6kuQA=", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es5-ext": { + "version": "0.10.37", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.37.tgz", + "integrity": "sha1-DudB0Ui4AGm6J9AgOTdWryV978M=", + "dev": true, + "requires": { + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + }, + "dependencies": { + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "0.10.37" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37" + } + } + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37", + "es6-symbol": "3.1.1" + }, + "dependencies": { + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "0.10.37" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37" + } + } + } + }, + "es6-map": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.3.tgz", + "integrity": "sha1-/ljGZUxqzVTkOXzbcjedWbatWJQ=", + "dev": true, + "requires": { + "d": "0.1.1", + "es5-ext": "0.10.37", + "es6-iterator": "2.0.3", + "es6-set": "0.1.5", + "es6-symbol": "3.0.2", + "event-emitter": "0.3.5" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + }, + "dependencies": { + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "0.10.37" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37" + } + } + } + }, + "es6-symbol": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.0.2.tgz", + "integrity": "sha1-HpKIeMb15jVBYltLtN9K8H0VQhk=", + "dev": true, + "requires": { + "d": "0.1.1", + "es5-ext": "0.10.37" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + }, + "dependencies": { + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "0.10.37" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37" + } + } + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "0.1.3", + "es6-weak-map": "2.0.2", + "esrecurse": "4.2.0", + "estraverse": "4.2.0" + } + }, + "eslint": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", + "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "chalk": "1.1.3", + "concat-stream": "1.6.0", + "debug": "2.6.9", + "doctrine": "2.0.2", + "escope": "3.6.0", + "espree": "3.5.2", + "esquery": "1.0.0", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "glob": "7.1.2", + "globals": "9.18.0", + "ignore": "3.3.7", + "imurmurhash": "0.1.4", + "inquirer": "0.12.0", + "is-my-json-valid": "2.16.1", + "is-resolvable": "1.0.0", + "js-yaml": "3.7.0", + "json-stable-stringify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "1.2.1", + "progress": "1.1.8", + "require-uncached": "1.0.3", + "shelljs": "0.7.8", + "strip-bom": "3.0.0", + "strip-json-comments": "2.0.1", + "table": "3.8.3", + "text-table": "0.2.0", + "user-home": "2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "eslint-config-airbnb-base": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-7.2.0.tgz", + "integrity": "sha1-Gi/3fMXUq8Lhxdrr5BBvzpX/fCo=", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz", + "integrity": "sha1-Wt2BBujJKNssuiMrzZ76hG49oWw=", + "dev": true, + "requires": { + "debug": "2.6.9", + "object-assign": "4.1.1", + "resolve": "1.1.7" + } + }, + "eslint-loader": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-1.9.0.tgz", + "integrity": "sha512-40aN976qSNPyb9ejTqjEthZITpls1SVKtwguahmH1dzGCwQU/vySE+xX33VZmD8csU0ahVNCtFlsPgKqRBiqgg==", + "dev": true, + "requires": { + "loader-fs-cache": "1.0.1", + "loader-utils": "1.1.0", + "object-assign": "4.1.1", + "object-hash": "1.2.0", + "rimraf": "2.6.2" + }, + "dependencies": { + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + } + } + }, + "eslint-plugin-import": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-1.16.0.tgz", + "integrity": "sha1-svoH68xTUE0PKkR3WC7Iv/GHG58=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1", + "contains-path": "0.1.0", + "debug": "2.6.9", + "doctrine": "1.3.0", + "es6-map": "0.1.3", + "es6-set": "0.1.5", + "eslint-import-resolver-node": "0.2.3", + "has": "1.0.1", + "lodash.cond": "4.5.2", + "lodash.endswith": "4.2.1", + "lodash.find": "4.6.0", + "lodash.findindex": "4.6.0", + "minimatch": "3.0.4", + "object-assign": "4.1.1", + "pkg-dir": "1.0.0", + "pkg-up": "1.0.0" + }, + "dependencies": { + "doctrine": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.3.0.tgz", + "integrity": "sha1-E+dWgrVVGEJCdvfBc3g0Vu+RPSY=", + "dev": true, + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "espree": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz", + "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==", + "dev": true, + "requires": { + "acorn": "5.2.1", + "acorn-jsx": "3.0.1" + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esquery": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", + "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "esrecurse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "dev": true, + "requires": { + "estraverse": "4.2.0", + "object-assign": "4.1.1" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "estree-walker": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.2.1.tgz", + "integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37" + }, + "dependencies": { + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "0.10.37" + } + } + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + } + } + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.4" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "figlet": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.2.0.tgz", + "integrity": "sha1-bEZTc3j6tkkUa1phQ92gGbQwtBA=", + "dev": true + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "1.3.0", + "object-assign": "4.1.1" + } + }, + "file-set": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/file-set/-/file-set-1.1.1.tgz", + "integrity": "sha1-0+xwwIDsjxjyBLod4QZ4DJBWkms=", + "dev": true, + "requires": { + "array-back": "1.0.4", + "glob": "7.1.2" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + } + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true + }, + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "3.0.0", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.0" + } + }, + "find-replace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz", + "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "test-value": "3.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "dev": true, + "requires": { + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.17" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.1.1" + } + }, + "fs-then-native": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fs-then-native/-/fs-then-native-2.0.0.tgz", + "integrity": "sha1-GaEk2U2QwiyOBF8ujdbr6jbUjGc=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "gaze": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", + "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", + "dev": true, + "requires": { + "globule": "1.2.0" + } + }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "1.0.2" + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "globule": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", + "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", + "dev": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.4", + "minimatch": "3.0.4" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "handlebars": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "optional": true + } + } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "har-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.15.1", + "is-my-json-valid": "2.16.1", + "pinkie-promise": "2.0.1" + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.5.0" + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + }, + "ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inquirer": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "dev": true, + "requires": { + "ansi-escapes": "1.4.0", + "ansi-regex": "2.1.1", + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-width": "2.2.0", + "figures": "1.7.0", + "lodash": "4.17.4", + "readline2": "1.0.1", + "run-async": "0.1.0", + "rx-lite": "3.1.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "through": "2.3.8" + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-my-json-valid": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", + "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", + "dev": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-resolvable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", + "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", + "dev": true, + "requires": { + "tryit": "1.0.3" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "js-base64": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", + "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==", + "dev": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "2.7.3" + } + }, + "js2xmlparser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz", + "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=", + "dev": true, + "requires": { + "xmlcreate": "1.0.2" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsdoc": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz", + "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==", + "dev": true, + "requires": { + "babylon": "7.0.0-beta.19", + "bluebird": "3.5.1", + "catharsis": "0.8.9", + "escape-string-regexp": "1.0.5", + "js2xmlparser": "3.0.0", + "klaw": "2.0.0", + "marked": "0.3.12", + "mkdirp": "0.5.1", + "requizzle": "0.2.1", + "strip-json-comments": "2.0.1", + "taffydb": "2.6.2", + "underscore": "1.8.3" + }, + "dependencies": { + "babylon": { + "version": "7.0.0-beta.19", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz", + "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==", + "dev": true + } + } + }, + "jsdoc-api": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsdoc-api/-/jsdoc-api-4.0.1.tgz", + "integrity": "sha512-qCzHGQxfd9toMRjQft9E44Y40zWDPgf13pt3n+xExk8+wmVd7aueW6cTSQOHyjQG1v07INunQD8AcCAPxhZVmw==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "cache-point": "0.4.1", + "collect-all": "1.0.3", + "file-set": "1.1.1", + "fs-then-native": "2.0.0", + "jsdoc": "3.5.5", + "object-to-spawn-args": "1.1.1", + "temp-path": "1.0.0", + "walk-back": "3.0.0" + } + }, + "jsdoc-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsdoc-parse/-/jsdoc-parse-3.0.1.tgz", + "integrity": "sha512-btZLp4wYl90vcAfgk4hoGQbO17iBVrhh3LJRMKZNtZgniO3F8H2CjxXld0owBIB1XxN+j3bAcWZnZKMnSj3iMA==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "lodash.omit": "4.5.0", + "lodash.pick": "4.4.0", + "reduce-extract": "1.0.0", + "sort-array": "2.0.0", + "test-value": "3.0.0" + } + }, + "jsdoc-to-markdown": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsdoc-to-markdown/-/jsdoc-to-markdown-4.0.1.tgz", + "integrity": "sha512-LHJRoLoLyDdxNcColgkLoB/rFG5iRP+PNJjMILI0x+95IdEAtyjSt0wJ6ZlKxRpkhBYtQXTQQ119hMqPIUZzTQ==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "command-line-tool": "0.8.0", + "config-master": "3.1.0", + "dmd": "3.0.10", + "jsdoc-api": "4.0.1", + "jsdoc-parse": "3.0.1", + "walk-back": "3.0.0" + } + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "klaw": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", + "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "loader-fs-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz", + "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", + "dev": true, + "requires": { + "find-cache-dir": "0.1.1", + "mkdirp": "0.5.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.cond": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", + "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", + "dev": true + }, + "lodash.endswith": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.endswith/-/lodash.endswith-4.2.1.tgz", + "integrity": "sha1-/tWawXOO0+I27dcGTsRWRIs3vAk=", + "dev": true + }, + "lodash.find": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz", + "integrity": "sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=", + "dev": true + }, + "lodash.findindex": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.findindex/-/lodash.findindex-4.6.0.tgz", + "integrity": "sha1-oyRd7mH7m24GJLU1ElYku2nBEQY=", + "dev": true + }, + "lodash.mergewith": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", + "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", + "dev": true + }, + "lodash.omit": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", + "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=", + "dev": true + }, + "lodash.padend": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", + "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=", + "dev": true + }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "dev": true, + "requires": { + "vlq": "0.2.3" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "marked": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.12.tgz", + "integrity": "sha512-k4NaW+vS7ytQn6MgJn3fYpQt20/mOgYM5Ft9BYMfQJDz2QT6yEeS9XJ8k2Nw8JTeWK/znPPW2n3UJGzyYEiMoA==", + "dev": true + }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "micro": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/micro/-/micro-9.3.1.tgz", + "integrity": "sha512-83uimpPJqfwkfKvJl2WWontBlV3hmzrIgyJ+L2uhDXKNk7Ll+/ezK3zBz7TljubpKPqjM0JdT2Ker4MTPmhjgA==", + "dev": true, + "requires": { + "arg": "2.0.0", + "chalk": "2.4.0", + "content-type": "1.0.4", + "is-stream": "1.1.0", + "raw-body": "2.3.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "micro-compress": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micro-compress/-/micro-compress-1.0.0.tgz", + "integrity": "sha1-U/WoC0rQMgyhZaVZtuPfFF1PcE8=", + "dev": true, + "requires": { + "compression": "1.7.2" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, + "mime-db": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", + "dev": true + }, + "mime-types": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "dev": true, + "requires": { + "mime-db": "1.30.0" + } + }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "mkdirp2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/mkdirp2/-/mkdirp2-1.0.3.tgz", + "integrity": "sha1-zI3YJl8fBuLY9bELblL04FC+0hs=", + "dev": true + }, + "mri": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.0.tgz", + "integrity": "sha1-XAo/KcjM/7ux7JQdzsCdcfoy82o=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "dev": true + }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "node-gyp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", + "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", + "dev": true, + "requires": { + "fstream": "1.0.11", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.1.2", + "osenv": "0.1.5", + "request": "2.79.0", + "rimraf": "2.6.2", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.3.0" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, + "node-sass": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.0.tgz", + "integrity": "sha512-QFHfrZl6lqRU3csypwviz2XLgGNOoWQbo2GOvtsfQqOfL4cy1BtWnhx/XUeAO9LT3ahBzSRXcEO6DdvAH9DzSg==", + "dev": true, + "requires": { + "async-foreach": "0.1.3", + "chalk": "1.1.3", + "cross-spawn": "3.0.1", + "gaze": "1.1.2", + "get-stdin": "4.0.1", + "glob": "7.1.2", + "in-publish": "2.0.0", + "lodash.assign": "4.2.0", + "lodash.clonedeep": "4.5.0", + "lodash.mergewith": "4.6.1", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "nan": "2.10.0", + "node-gyp": "3.6.2", + "npmlog": "4.1.2", + "request": "2.79.0", + "sass-graph": "2.2.4", + "stdout-stream": "1.4.0", + "true-case-path": "1.0.2" + } + }, + "node-version": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/node-version/-/node-version-1.1.3.tgz", + "integrity": "sha512-rEwE51JWn0yN3Wl5BXeGn5d52OGbSXzWiiXRjAQeuyvcGKyvuSILW2rb3G7Xh+nexzLwhTpek6Ehxd6IjvHePg==", + "dev": true + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.4.1", + "validate-npm-package-license": "3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-get": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object-get/-/object-get-2.1.0.tgz", + "integrity": "sha1-ciu9tgA576R8rTxtws5RqFwCxa4=", + "dev": true + }, + "object-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.2.0.tgz", + "integrity": "sha512-smRWXzkvxw72VquyZ0wggySl7PFUtoDhvhpdwgESXxUrH7vVhhp9asfup1+rVLrhsl7L45Ee1Q/l5R2Ul4MwUg==", + "dev": true + }, + "object-to-spawn-args": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-to-spawn-args/-/object-to-spawn-args-1.1.1.tgz", + "integrity": "sha1-d9qIJ/Bz0BHJ4bFz+JV4FHAkZ4U=", + "dev": true + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "openssl-self-signed-certificate": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/openssl-self-signed-certificate/-/openssl-self-signed-certificate-1.1.6.tgz", + "integrity": "sha1-nTpHdrGlfphHNQOSEUrS+RWoPdQ=", + "dev": true + }, + "opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "requires": { + "is-wsl": "1.1.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", + "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", + "dev": true + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.1.0" + } + }, + "parent-require": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-require/-/parent-require-1.0.0.tgz", + "integrity": "sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc=", + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "1.1.2" + } + }, + "pkg-up": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz", + "integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=", + "dev": true, + "requires": { + "find-up": "1.1.2" + } + }, + "pluralize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qs": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", + "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", + "dev": true + }, + "randomatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", + "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", + "dev": true, + "requires": { + "is-number": "4.0.0", + "kind-of": "6.0.2", + "math-random": "1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "0.6.0", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "mute-stream": "0.0.5" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "1.1.7" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "reduce-extract": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/reduce-extract/-/reduce-extract-1.0.0.tgz", + "integrity": "sha1-Z/I4W+2mUGG19fQxJmLosIDKFSU=", + "dev": true, + "requires": { + "test-value": "1.1.0" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + }, + "test-value": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/test-value/-/test-value-1.1.0.tgz", + "integrity": "sha1-oJE29y7AQ9J8iTcHwrFZv6196T8=", + "dev": true, + "requires": { + "array-back": "1.0.4", + "typical": "2.6.1" + } + } + } + }, + "reduce-flatten": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz", + "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=", + "dev": true + }, + "reduce-unique": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/reduce-unique/-/reduce-unique-1.0.0.tgz", + "integrity": "sha1-flhrz4ek4ytter2Cd/rWzeyfSAM=", + "dev": true + }, + "reduce-without": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/reduce-without/-/reduce-without-1.0.1.tgz", + "integrity": "sha1-aK0OrRGFXJo31OglbBW7+Hly/Iw=", + "dev": true, + "requires": { + "test-value": "2.1.0" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + }, + "test-value": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", + "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=", + "dev": true, + "requires": { + "array-back": "1.0.4", + "typical": "2.6.1" + } + } + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "1.4.0", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "dev": true, + "requires": { + "rc": "1.2.8", + "safe-buffer": "5.1.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "1.2.8" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "replace-between": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/replace-between/-/replace-between-0.0.8.tgz", + "integrity": "sha512-aqnkNuHwDAy+mF9nwU37JFOSQG9YWuRHs148Z3NTjur9nUZUZz94a3wbFRaR/uZ2x6Yk7Rxbg4F1XZeP7kXh7w==", + "dev": true, + "requires": { + "chalk": "2.3.0", + "fs-extra": "4.0.3", + "get-stdin": "5.0.1", + "yargonaut": "1.1.2", + "yargs": "9.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", + "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", + "dev": true, + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + } + } + } + }, + "request": { + "version": "2.79.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", + "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.7.0", + "caseless": "0.11.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "qs": "6.3.2", + "stringstream": "0.0.5", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.4.3", + "uuid": "3.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + } + }, + "requizzle": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz", + "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", + "dev": true, + "requires": { + "underscore": "1.6.0" + }, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "rollup": { + "version": "0.54.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.54.1.tgz", + "integrity": "sha512-ebUUgUQ7K/sLn67CtO8Jj8H3RgKAoVWrpiJA7enOkwZPZzTCl8GC8CZ00g5jowjX80KgBmzs4Z1MV6cgglT86A==", + "dev": true + }, + "rollup-plugin-babel": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-3.0.4.tgz", + "integrity": "sha512-TGhQbliTZnRoUhd2214K3r4KJUBu9J1DPzcrAnkluVXOVrveU9OvAaYQ16KyOmujAoq+LMC1+x6YF2xBrU7t+g==", + "dev": true, + "requires": { + "rollup-pluginutils": "1.5.2" + } + }, + "rollup-plugin-cleanup": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-cleanup/-/rollup-plugin-cleanup-2.0.1.tgz", + "integrity": "sha512-Z2UpMe3l2Oo8jzoB2gAWcb3UqIyiGxlh8kKlcs/W53yTPtwdF8RGfhuTx+/kjRlkSc5TC03t3sX3Lj3B40k9Eg==", + "dev": true, + "requires": { + "acorn": "4.0.13", + "magic-string": "0.22.5", + "rollup-pluginutils": "2.3.0" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + }, + "estree-walker": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", + "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", + "dev": true + }, + "rollup-pluginutils": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.0.tgz", + "integrity": "sha512-xB6hsRsjdJdIYWEyYUJy/3ki5g69wrf0luHPGNK3ZSocV6HLNfio59l3dZ3TL4xUwEKgROhFi9jOCt6c5gfUWw==", + "dev": true, + "requires": { + "estree-walker": "0.5.2", + "micromatch": "2.3.11" + } + } + } + }, + "rollup-plugin-node-resolve": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.3.0.tgz", + "integrity": "sha512-9zHGr3oUJq6G+X0oRMYlzid9fXicBdiydhwGChdyeNRGPcN/majtegApRKHLR5drboUvEWU+QeUmGTyEZQs3WA==", + "dev": true, + "requires": { + "builtin-modules": "2.0.0", + "is-module": "1.0.0", + "resolve": "1.1.7" + }, + "dependencies": { + "builtin-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-2.0.0.tgz", + "integrity": "sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg==", + "dev": true + } + } + }, + "rollup-plugin-sass": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-sass/-/rollup-plugin-sass-0.6.1.tgz", + "integrity": "sha512-VdRscVb5Zy2XtxR6EWokbNoIdQigBZtfKTwdcw6zoSysmeUlHuMOkvKz6bYxvtiwRsl9VF620vPslqbV+vdbAw==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "fs-extra": "0.30.0", + "node-sass": "4.9.0", + "rollup-pluginutils": "1.5.2" + }, + "dependencies": { + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.2" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + } + } + }, + "rollup-plugin-uglify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-uglify/-/rollup-plugin-uglify-2.0.1.tgz", + "integrity": "sha1-Z7N60e/a+9g69MNrQMGJ7khmyWk=", + "dev": true, + "requires": { + "uglify-js": "3.0.28" + } + }, + "rollup-pluginutils": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz", + "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=", + "dev": true, + "requires": { + "estree-walker": "0.2.1", + "minimatch": "3.0.4" + } + }, + "run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "rx": { + "version": "2.3.24", + "resolved": "https://registry.npmjs.org/rx/-/rx-2.3.24.tgz", + "integrity": "sha1-FPlQpCF9fjXapxu8vljv9o6ksrc=", + "dev": true + }, + "rx-lite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "dev": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.4", + "scss-tokenizer": "0.2.3", + "yargs": "7.1.0" + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "requires": { + "js-base64": "2.4.3", + "source-map": "0.4.4" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } + } + }, + "serve": { + "version": "6.5.8", + "resolved": "https://registry.npmjs.org/serve/-/serve-6.5.8.tgz", + "integrity": "sha512-GZYlJz7f6E7Xq6xbg1rTSvQQV9x4v/yYB/sum6egzSBLa/mdk1PViDSX2JvL0Me83sxu3JpEpQELfakDKbGcrw==", + "dev": true, + "requires": { + "args": "4.0.0", + "basic-auth": "2.0.0", + "bluebird": "3.5.1", + "boxen": "1.3.0", + "chalk": "2.4.1", + "clipboardy": "1.2.3", + "dargs": "5.1.0", + "detect-port": "1.2.3", + "filesize": "3.6.1", + "fs-extra": "6.0.1", + "handlebars": "4.0.11", + "ip": "1.1.5", + "micro": "9.3.1", + "micro-compress": "1.0.0", + "mime-types": "2.1.18", + "node-version": "1.1.3", + "openssl-self-signed-certificate": "1.1.6", + "opn": "5.3.0", + "path-is-inside": "1.0.2", + "path-type": "3.0.0", + "send": "0.16.2", + "update-check": "1.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" + } + }, + "fs-extra": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", + "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "requires": { + "mime-db": "1.33.0" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "dev": true, + "requires": { + "glob": "7.1.2", + "interpret": "1.1.0", + "rechoir": "0.6.2" + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sort-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-array/-/sort-array-2.0.0.tgz", + "integrity": "sha1-OKnG2if9fRR7QuYFVPKBGHtN9HI=", + "dev": true, + "requires": { + "array-back": "1.0.4", + "object-get": "2.1.0", + "typical": "2.6.1" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stdout-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", + "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "stream-connect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-connect/-/stream-connect-1.0.2.tgz", + "integrity": "sha1-GLyB8u2zW4tdmoAJIAqYUxRCipc=", + "dev": true, + "requires": { + "array-back": "1.0.4" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + } + } + }, + "stream-via": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stream-via/-/stream-via-1.0.4.tgz", + "integrity": "sha512-DBp0lSvX5G9KGRDTkR/R+a29H+Wk2xItOF+MpZLLNDWbEV9tGPnqLPxHEYjmiz8xGtJHRIqmI+hCjmNzqoA4nQ==", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "table": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", + "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", + "dev": true, + "requires": { + "ajv": "4.11.8", + "ajv-keywords": "1.5.1", + "chalk": "1.1.3", + "lodash": "4.17.4", + "slice-ansi": "0.0.4", + "string-width": "2.1.1" + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "table-layout": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz", + "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "deep-extend": "0.5.0", + "lodash.padend": "4.6.1", + "typical": "2.6.1", + "wordwrapjs": "3.0.0" + } + }, + "taffydb": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", + "dev": true + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "temp-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-path/-/temp-path-1.0.0.tgz", + "integrity": "sha1-JLFUOXOrRCiW2a02fdnL2/r+kYs=", + "dev": true + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "0.7.0" + } + }, + "test-value": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz", + "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "typical": "2.6.1" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tree-kill": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.0.tgz", + "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "true-case-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz", + "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=", + "dev": true, + "requires": { + "glob": "6.0.4" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + } + } + }, + "tryit": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", + "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", + "dev": true + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typical": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=", + "dev": true + }, + "uglify-js": { + "version": "3.0.28", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.28.tgz", + "integrity": "sha512-0h/qGay016GG2lVav3Kz174F3T2Vjlz2v6HCt+WDQpoXfco0hWwF5gHK9yh88mUYvIC+N7Z8NT8WpjSp1yoqGA==", + "dev": true, + "requires": { + "commander": "2.11.0", + "source-map": "0.5.7" + }, + "dependencies": { + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "dev": true + }, + "underscore-contrib": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", + "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=", + "dev": true, + "requires": { + "underscore": "1.6.0" + }, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, + "universalify": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", + "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "update-check": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.1.tgz", + "integrity": "sha512-M3rjq5KwSrWZrm2GVPIQIF+NXpIn5I9mIV67gGoydptQvzRjLp9ZbM6ctFJeNuaWSm5+mNP7aInELjSiLcIw6A==", + "dev": true, + "requires": { + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0" + } + }, + "user-home": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + }, + "walk-back": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-3.0.0.tgz", + "integrity": "sha1-I1h4ejXakQMtrV6S+AsSNw2HlcU=", + "dev": true + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "dev": true, + "requires": { + "string-width": "1.0.2" + } + }, + "widest-line": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", + "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", + "dev": true, + "requires": { + "string-width": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "optional": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wordwrapjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz", + "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==", + "dev": true, + "requires": { + "reduce-flatten": "1.0.1", + "typical": "2.6.1" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "0.5.1" + } + }, + "xmlcreate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz", + "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargonaut": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.2.tgz", + "integrity": "sha1-7nuJ6YEho/JB+pJqKm4bZkHIGz8=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "figlet": "1.2.0", + "parent-require": "1.0.0" + } + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + } + } +} diff --git a/src/dat/controllers/CustomController.js b/src/dat/controllers/CustomController.js index 1a7f45a..8f62a56 100644 --- a/src/dat/controllers/CustomController.js +++ b/src/dat/controllers/CustomController.js @@ -22,14 +22,14 @@ import ControllerFactory from './ControllerFactory'; * */ class CustomController extends Controller{ - /** - * Represents a custom controller. - * @param {Object} object The object to be manipulated - * @param {Function} [object.property] Returns an object with elements for adding into "property-name" class element. - * @param {string} property The name of the property to be manipulated - * @param {Object} [params] Optional parameters - */ - constructor(object, property) { + /** + * Represents a custom controller. + * @param {Object} object The object to be manipulated + * @param {Function} [object.property] Returns an object with elements for adding into "property-name" class element. + * @param {string} property The name of the property to be manipulated + * @param {Object} [params] Optional parameters + */ + constructor(object, property) { super(object, property); this.arguments = {