-
Notifications
You must be signed in to change notification settings - Fork 3
/
aframe-colorwheel-component.min.js.map
1 lines (1 loc) · 143 KB
/
aframe-colorwheel-component.min.js.map
1
{"version":3,"sources":["webpack:///aframe-colorwheel-component.min.js","webpack:///webpack/bootstrap bc4f0768de88c6412e38","webpack:///./index.js","webpack:///./~/copy-to-clipboard/index.js","webpack:///./~/copy-to-clipboard/~/toggle-selection/index.js","webpack:///./~/lodash.difference/index.js","webpack:///./src/utils.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","_copyToClipboard","_copyToClipboard2","_lodash","_lodash2","Event","AFRAME","registerComponent","dependencies","tweenDuration","tweenEasing","TWEEN","Easing","Cubic","Out","padding","hsv","h","s","v","defaultMaterial","color","flatShading","transparent","shader","fog","side","schema","disabled","type","backgroundColor","wheelSize","showSelection","selectionSize","showHexValue","showSwatches","swatches","init","_this","this","that","swatchReady","backgroundWidth","backgroundHeight","data","brightnessSliderHeight","brightnessSliderWidth","components","hasOwnProperty","background","document","createElement","setAttribute","x","y","z","el","appendChild","swatchContainer","addEventListener","onSwatchReady","bind","hexValueHeight","hexValueWidth","hexValueText","primitive","width","height","align","baseline","wrapCount","onHexValueClicked","colorWheel","brightnessSlider","selectionEl","colorCursorOptions","cursorRadius","cursorSegments","cursorColor","THREE","Color","cursorMaterial","MeshBasicMaterial","colorCursor","brightnessCursor","geometry","TorusBufferGeometry","setObject3D","Mesh","bindMethods","setTimeout","initColorWheel","initBrightnessSlider","refreshRaycaster","generateSwatches","onColorWheelClicked","onBrightnessSliderClicked","setPositionTween","item","fromPosition","toPosition","tween","Tween","to","onUpdate","position","easing","start","setColorTween","fromColor","toColor","r","g","b","evt","onHueDown","detail","intersection","point","onBrightnessDown","getAttribute","value","swatchData","undefined","containerWidth","containerHeight","swatchWidth","length","i","swatch","onSwatchClicked","updateColor","clearSwatches","firstChild","removeChild","raycasterEl","scenes","querySelector","raycaster","refreshObjects","vertexShader","fragmentShader","material","ShaderMaterial","uniforms","color1","color2","getObject3D","needsUpdate","brightness","rgb","hexToRgb","rgbToHsv","angle","Math","PI","radius","cos","sin","colorPosition","Vector3","localToWorld","offset","bY","brightnessPosition","updateMatrixWorld","worldToLocal","cursorOffset","updatedPosition","polarPosition","sqrt","theta","atan2","hsvToRgb","hex","getHexString","eventDetail","style","emit","body","replace","substring","match","map","parseInt","max","min","d","arguments","f","q","t","clamp","floor","round","update","oldData","swatchesChanged","filter","tick","remove","removeEventListener","children","forEach","child","pause","play","registerPrimitive","defaultComponents","colorwheel","mappings","backgroundcolor","showselection","wheelsize","selectionsize","showhexvalue","showswatches","format","message","copyKey","test","navigator","userAgent","copy","text","options","debug","reselectPrevious","range","selection","mark","success","deselectCurrent","createRange","getSelection","textContent","all","top","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","selectNode","addRange","successful","execCommand","Error","err","console","error","warn","window","clipboardData","setData","defaultMessage","prompt","removeRange","removeAllRanges","rangeCount","active","activeElement","ranges","push","getRangeAt","tagName","toUpperCase","blur","focus","global","apply","func","thisArg","args","arrayIncludes","array","baseIndexOf","arrayIncludesWith","comparator","index","arrayMap","iteratee","result","Array","arrayPush","values","baseFindIndex","predicate","fromIndex","fromRight","baseIsNaN","baseUnary","cacheHas","cache","key","has","getValue","object","isHostObject","toString","e","Hash","entries","clear","entry","set","hashClear","__data__","nativeCreate","hashDelete","hashGet","HASH_UNDEFINED","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","lastIndex","pop","splice","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","hash","Map","string","mapCacheDelete","getMapData","mapCacheGet","get","mapCacheHas","mapCacheSet","SetCache","add","setCacheAdd","setCacheHas","eq","baseDifference","includes","isCommon","valuesLength","LARGE_ARRAY_SIZE","outer","computed","valuesIndex","baseFlatten","depth","isStrict","isFlattenable","baseIsNative","isObject","isMasked","pattern","isFunction","reIsNative","reIsHostCtor","toSource","baseRest","nativeMax","otherArgs","isKeyable","getNative","isArray","isArguments","spreadableSymbol","maskSrcKey","funcToString","other","isArrayLikeObject","propertyIsEnumerable","objectToString","argsTag","isArrayLike","isLength","isObjectLike","tag","funcTag","genTag","MAX_SAFE_INTEGER","reRegExpChar","freeGlobal","Object","freeSelf","self","root","Function","arrayProto","prototype","funcProto","objectProto","coreJsData","uid","exec","keys","IE_PROTO","RegExp","Symbol","isConcatSpreadable","difference","name","dispatchEvent","CustomEvent"],"mappings":"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","file":"aframe-colorwheel-component.min.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _copyToClipboard = __webpack_require__(2);\n\t\n\tvar _copyToClipboard2 = _interopRequireDefault(_copyToClipboard);\n\t\n\tvar _lodash = __webpack_require__(4);\n\t\n\tvar _lodash2 = _interopRequireDefault(_lodash);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * Colorwheel for A-FRAME Material\n\t * @author Mo Kargas (DEVLAD) [email protected]\n\t */\n\t\n\tvar Event = __webpack_require__(5);\n\t\n\tAFRAME.registerComponent('colorwheel', {\n\t dependencies: ['raycaster'],\n\t tweenDuration: 280,\n\t tweenEasing: TWEEN.Easing.Cubic.Out,\n\t padding: 0.15,\n\t hsv: {\n\t h: 0.0,\n\t s: 0.0,\n\t v: 1.0\n\t },\n\t defaultMaterial: {\n\t color: '#ffffff',\n\t flatShading: true,\n\t transparent: true,\n\t shader: 'flat',\n\t fog: false,\n\t side: 'double'\n\t },\n\t color: '#ffffff',\n\t schema: {\n\t disabled: {\n\t type: 'boolean',\n\t default: false\n\t },\n\t backgroundColor: {\n\t type: 'color',\n\t default: '#FFF'\n\t },\n\t //Size of the colorWheel. NOTE: Assumed in metres.\n\t wheelSize: {\n\t type: 'number',\n\t default: 0.4\n\t },\n\t //Show color choice in an element\n\t showSelection: {\n\t type: 'boolean',\n\t default: true\n\t },\n\t selectionSize: {\n\t type: 'number',\n\t default: 0.10\n\t },\n\t showHexValue: {\n\t type: 'boolean',\n\t default: false\n\t },\n\t showSwatches: {\n\t type: 'boolean',\n\t default: false\n\t },\n\t swatches: {\n\t type: 'array',\n\t default: ['#000000', '#FFFFFF', '#ff0045', '#2aa8dc', '#ffed00', '#4c881d', '#b14bff']\n\t }\n\t },\n\t\n\t init: function init() {\n\t var _this = this;\n\t\n\t var that = this,\n\t padding = this.padding,\n\t defaultMaterial = this.defaultMaterial;\n\t\n\t this.swatchReady = false;\n\t\n\t //Background color of this interface\n\t //TODO: Expose sizing for deeper customisation?\n\t this.backgroundWidth = this.backgroundHeight = this.data.wheelSize * 2;\n\t this.brightnessSliderHeight = (this.data.wheelSize + padding) * 2;\n\t this.brightnessSliderWidth = 0.10;\n\t\n\t //Check if we have the a-rounded component\n\t if (AFRAME.components.hasOwnProperty('rounded')) {\n\t this.background = document.createElement('a-rounded');\n\t this.background.setAttribute('radius', 0.02);\n\t this.background.setAttribute('position', {\n\t x: -(this.data.wheelSize + padding),\n\t y: -(this.data.wheelSize + padding),\n\t z: -0.001\n\t });\n\t } else {\n\t this.background = document.createElement('a-plane');\n\t this.background.setAttribute('position', {\n\t x: 0,\n\t y: 0,\n\t z: -0.001\n\t });\n\t }\n\t this.background.setAttribute('width', this.backgroundWidth + 2 * padding);\n\t this.background.setAttribute('height', this.backgroundHeight + 2 * padding);\n\t this.background.setAttribute('material', 'shader', 'flat');\n\t this.background.setAttribute('side', 'double');\n\t this.el.appendChild(this.background);\n\t\n\t //Show Swatches\n\t this.swatchContainer = document.createElement('a-plane');\n\t this.swatchContainer.setAttribute('class', 'swatch-container');\n\t this.swatchContainer.setAttribute('material', this.defaultMaterial);\n\t this.swatchContainer.addEventListener('loaded', this.onSwatchReady.bind(this));\n\t\n\t //Give swatch panel a rakish angle\n\t this.swatchContainer.setAttribute('rotation', {\n\t x: -30,\n\t y: 0,\n\t z: 0\n\t });\n\t this.el.appendChild(this.swatchContainer);\n\t\n\t //Show hex value display\n\t if (this.data.showHexValue) {\n\t var hexValueHeight = 0.1,\n\t hexValueWidth = 2 * (this.data.wheelSize + padding);\n\t\n\t this.hexValueText = document.createElement('a-entity');\n\t\n\t //A basic geo is required for interactions\n\t this.hexValueText.setAttribute('geometry', {\n\t primitive: 'plane',\n\t width: hexValueWidth - this.brightnessSliderWidth,\n\t height: hexValueHeight\n\t });\n\t\n\t this.hexValueText.setAttribute('material', defaultMaterial);\n\t this.hexValueText.setAttribute('position', {\n\t x: -this.brightnessSliderWidth,\n\t y: this.data.wheelSize + hexValueHeight,\n\t z: 0.0\n\t });\n\t\n\t this.hexValueText.setAttribute('material', 'opacity', 0);\n\t this.hexValueText.setAttribute('text', {\n\t width: hexValueWidth,\n\t height: hexValueHeight,\n\t align: 'right',\n\t baseline: 'center',\n\t wrapCount: 20.4,\n\t color: '#666'\n\t });\n\t\n\t //Copy value to clipboard on click\n\t this.hexValueText.addEventListener('click', this.onHexValueClicked.bind(this));\n\t this.el.appendChild(this.hexValueText);\n\t }\n\t\n\t //Circle for colorwheel\n\t this.colorWheel = document.createElement('a-circle');\n\t this.colorWheel.setAttribute('radius', this.data.wheelSize);\n\t this.colorWheel.setAttribute('material', defaultMaterial);\n\t this.colorWheel.setAttribute('position', {\n\t x: 0,\n\t y: 0,\n\t z: 0.001\n\t });\n\t this.el.appendChild(this.colorWheel);\n\t\n\t //Plane for the brightness slider\n\t this.brightnessSlider = document.createElement('a-plane');\n\t this.brightnessSlider.setAttribute('width', this.brightnessSliderWidth);\n\t this.brightnessSlider.setAttribute('height', this.brightnessSliderHeight);\n\t this.brightnessSlider.setAttribute('material', defaultMaterial);\n\t this.brightnessSlider.setAttribute('position', {\n\t x: this.data.wheelSize + this.brightnessSliderWidth,\n\t y: 0,\n\t z: 0.001\n\t });\n\t this.el.appendChild(this.brightnessSlider);\n\t\n\t //Plane the color selection element will inhabit\n\t if (this.data.showSelection) {\n\t this.selectionEl = document.createElement('a-circle');\n\t this.selectionEl.setAttribute('radius', this.data.selectionSize);\n\t this.selectionEl.setAttribute('material', defaultMaterial);\n\t\n\t //Place in top left, lift slightly\n\t this.selectionEl.setAttribute('position', {\n\t x: -this.data.wheelSize,\n\t y: this.data.wheelSize,\n\t z: 0.001\n\t });\n\t this.el.appendChild(this.selectionEl);\n\t }\n\t\n\t //Color 'cursor'. We'll use this to indicate a rough color selection\n\t this.colorCursorOptions = {\n\t cursorRadius: 0.025,\n\t cursorSegments: 32,\n\t cursorColor: new THREE.Color(0x000000)\n\t };\n\t\n\t this.colorCursorOptions.cursorMaterial = new THREE.MeshBasicMaterial({\n\t color: this.colorCursorOptions.cursorColor,\n\t transparent: true\n\t });\n\t\n\t this.colorCursor = document.createElement('a-entity');\n\t this.brightnessCursor = document.createElement('a-entity');\n\t\n\t var geometry = new THREE.TorusBufferGeometry(this.colorCursorOptions.cursorRadius, this.colorCursorOptions.cursorRadius - 0.02, this.colorCursorOptions.cursorSegments, this.colorCursorOptions.cursorSegments / 4);\n\t this.colorCursor.setObject3D('mesh', new THREE.Mesh(geometry, this.colorCursorOptions.cursorMaterial));\n\t this.brightnessCursor.setObject3D('mesh', new THREE.Mesh(geometry, this.colorCursorOptions.cursorMaterial));\n\t\n\t this.el.appendChild(this.colorCursor);\n\t this.brightnessSlider.appendChild(this.brightnessCursor);\n\t this.brightnessCursor.setAttribute('position', {\n\t x: 0,\n\t y: this.brightnessSliderHeight / 2,\n\t z: 0\n\t });\n\t\n\t //Handlers\n\t this.bindMethods();\n\t\n\t //TODO: Replace setTimeout as it can be unreliable\n\t setTimeout(function () {\n\t that.el.initColorWheel();\n\t that.el.initBrightnessSlider();\n\t that.el.refreshRaycaster();\n\t if (that.data.showSwatches) that.el.generateSwatches(that.data.swatches);\n\t that.colorWheel.addEventListener('click', _this.onColorWheelClicked.bind(_this));\n\t that.brightnessSlider.addEventListener('click', _this.onBrightnessSliderClicked.bind(_this));\n\t }, 5);\n\t },\n\t //Util to animate between positions. Item represents a mesh or object containing a position\n\t setPositionTween: function setPositionTween(item, fromPosition, toPosition) {\n\t this.tween = new TWEEN.Tween(fromPosition).to(toPosition, this.tweenDuration).onUpdate(function () {\n\t item.position.x = this.x;\n\t item.position.y = this.y;\n\t item.position.z = this.z;\n\t }).easing(this.tweenEasing).start();\n\t\n\t return this.tween;\n\t },\n\t //Util to animate between colors. Item represents a mesh or object's material\n\t setColorTween: function setColorTween(item, fromColor, toColor) {\n\t this.tween = new TWEEN.Tween(new THREE.Color(fromColor)).to(toColor, this.tweenDuration).onUpdate(function () {\n\t item.color.r = this.r;\n\t item.color.g = this.g;\n\t item.color.b = this.b;\n\t }).easing(this.tweenEasing).start();\n\t\n\t return this.tween;\n\t },\n\t onColorWheelClicked: function onColorWheelClicked(evt) {\n\t if (this.data.disabled) return;\n\t this.el.onHueDown(evt.detail.intersection.point);\n\t },\n\t onBrightnessSliderClicked: function onBrightnessSliderClicked(evt) {\n\t if (this.data.disabled) return;\n\t this.el.onBrightnessDown(evt.detail.intersection.point);\n\t },\n\t onHexValueClicked: function onHexValueClicked() {\n\t (0, _copyToClipboard2.default)(this.hexValueText.getAttribute('text').value);\n\t },\n\t generateSwatches: function generateSwatches(swatchData) {\n\t //Generate clickable swatch elements from a given array\n\t if (swatchData === undefined) return;\n\t\n\t var containerWidth = (this.data.wheelSize + this.padding) * 2,\n\t containerHeight = 0.15,\n\t swatchWidth = containerWidth / swatchData.length;\n\t\n\t this.swatchContainer.setAttribute('width', containerWidth);\n\t this.swatchContainer.setAttribute('height', containerHeight);\n\t this.swatchContainer.setAttribute('position', {\n\t x: 0,\n\t y: -this.backgroundHeight + containerHeight,\n\t z: 0.03\n\t });\n\t\n\t //Loop through swatches and create elements\n\t for (var i = 0; i < swatchData.length; i++) {\n\t var color = swatchData[i];\n\t var swatch = document.createElement('a-plane');\n\t\n\t swatch.setAttribute('material', this.defaultMaterial);\n\t swatch.setAttribute('width', swatchWidth);\n\t swatch.setAttribute('height', containerHeight);\n\t swatch.setAttribute('color', color);\n\t swatch.setAttribute('class', 'swatch');\n\t swatch.setAttribute('position', {\n\t x: -(containerWidth - swatchWidth) / 2 + i * swatchWidth,\n\t y: 0,\n\t z: 0.001 //prevent z-fighting\n\t });\n\t swatch.addEventListener('click', this.onSwatchClicked.bind(this, color));\n\t this.swatchContainer.appendChild(swatch);\n\t }\n\t this.el.refreshRaycaster();\n\t },\n\t bindMethods: function bindMethods() {\n\t this.el.generateSwatches = this.generateSwatches.bind(this);\n\t this.el.initColorWheel = this.initColorWheel.bind(this);\n\t this.el.initBrightnessSlider = this.initBrightnessSlider.bind(this);\n\t this.el.updateColor = this.updateColor.bind(this);\n\t this.el.onHueDown = this.onHueDown.bind(this);\n\t this.el.onBrightnessDown = this.onBrightnessDown.bind(this);\n\t this.el.refreshRaycaster = this.refreshRaycaster.bind(this);\n\t this.el.clearSwatches = this.clearSwatches.bind(this);\n\t },\n\t onSwatchReady: function onSwatchReady() {\n\t this.swatchReady = true;\n\t },\n\t clearSwatches: function clearSwatches() {\n\t if (this.swatchReady) while (this.swatchContainer.firstChild) {\n\t this.swatchContainer.removeChild(this.swatchContainer.firstChild);\n\t }\n\t },\n\t refreshRaycaster: function refreshRaycaster() {\n\t var raycasterEl = AFRAME.scenes[0].querySelector('[raycaster]');\n\t raycasterEl.components.raycaster.refreshObjects();\n\t },\n\t initBrightnessSlider: function initBrightnessSlider() {\n\t /*\n\t * NOTE:\n\t *\n\t * In A-Painter, the brightness slider is actually a model submesh / element.\n\t * Here we generate it using GLSL and add it to our plane material\n\t */\n\t\n\t var vertexShader = '\\n varying vec2 vUv;\\n void main(){\\n vUv = uv;\\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\\n }\\n ';\n\t\n\t var fragmentShader = '\\n uniform vec3 color1;\\n uniform vec3 color2;\\n varying vec2 vUv;\\n\\n void main(){\\n vec4 c1 = vec4(color1, 1.0);\\n \\t vec4 c2 = vec4(color2, 1.0);\\n\\n vec4 color = mix(c2, c1, smoothstep(0.0, 1.0, vUv.y));\\n gl_FragColor = color;\\n }\\n ';\n\t\n\t var material = new THREE.ShaderMaterial({\n\t uniforms: {\n\t color1: {\n\t type: 'c',\n\t value: new THREE.Color(0xFFFFFF)\n\t },\n\t color2: {\n\t type: 'c',\n\t value: new THREE.Color(0x000000)\n\t }\n\t },\n\t vertexShader: vertexShader,\n\t fragmentShader: fragmentShader\n\t });\n\t\n\t this.brightnessSlider.getObject3D('mesh').material = material;\n\t this.brightnessSlider.getObject3D('mesh').material.needsUpdate = true;\n\t },\n\t initColorWheel: function initColorWheel() {\n\t var colorWheel = this.colorWheel.getObject3D('mesh');\n\t var vertexShader = '\\n\\n varying vec2 vUv;\\n void main() {\\n vUv = uv;\\n vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);\\n gl_Position = projectionMatrix * mvPosition;\\n }\\n ';\n\t\n\t var fragmentShader = '\\n #define M_PI2 6.28318530718\\n uniform float brightness;\\n varying vec2 vUv;\\n vec3 hsb2rgb(in vec3 c){\\n vec3 rgb = clamp(abs(mod(c.x * 6.0 + vec3(0.0, 4.0, 2.0), 6.0) - 3.0) - 1.0, 0.0, 1.0 );\\n rgb = rgb * rgb * (3.0 - 2.0 * rgb);\\n return c.z * mix( vec3(1.0), rgb, c.y);\\n }\\n\\n void main() {\\n vec2 toCenter = vec2(0.5) - vUv;\\n float angle = atan(toCenter.y, toCenter.x);\\n float radius = length(toCenter) * 2.0;\\n vec3 color = hsb2rgb(vec3((angle / M_PI2) + 0.5, radius, brightness));\\n gl_FragColor = vec4(color, 1.0);\\n }\\n ';\n\t\n\t var material = new THREE.ShaderMaterial({\n\t uniforms: {\n\t brightness: {\n\t type: 'f',\n\t value: this.hsv.v\n\t }\n\t },\n\t vertexShader: vertexShader,\n\t fragmentShader: fragmentShader\n\t });\n\t\n\t colorWheel.material = material;\n\t colorWheel.material.needsUpdate = true;\n\t },\n\t onSwatchClicked: function onSwatchClicked(color) {\n\t var colorWheel = this.colorWheel.getObject3D('mesh'),\n\t brightnessCursor = this.brightnessCursor.getObject3D('mesh'),\n\t brightnessSlider = this.brightnessSlider.getObject3D('mesh');\n\t\n\t var rgb = this.hexToRgb(color);\n\t this.hsv = this.rgbToHsv(rgb.r, rgb.g, rgb.b);\n\t\n\t var angle = this.hsv.h * 2 * Math.PI,\n\t radius = this.hsv.s * this.data.wheelSize;\n\t\n\t var x = radius * Math.cos(angle),\n\t y = radius * Math.sin(angle),\n\t z = colorWheel.position.z;\n\t\n\t var colorPosition = new THREE.Vector3(x, y, z);\n\t colorWheel.localToWorld(colorPosition);\n\t //We can reuse hueDown for this\n\t this.onHueDown(colorPosition);\n\t\n\t //Need to do the reverse of onbrightnessdown\n\t var offset = this.hsv.v * this.brightnessSliderHeight;\n\t var bY = offset - this.brightnessSliderHeight;\n\t var brightnessPosition = new THREE.Vector3(0, bY, 0);\n\t this.setPositionTween(brightnessCursor, brightnessCursor.position, brightnessPosition);\n\t colorWheel.material.uniforms['brightness'].value = this.hsv.v;\n\t },\n\t onBrightnessDown: function onBrightnessDown(position) {\n\t var brightnessSlider = this.brightnessSlider.getObject3D('mesh'),\n\t brightnessCursor = this.brightnessCursor.getObject3D('mesh'),\n\t colorWheel = this.colorWheel.getObject3D('mesh');\n\t\n\t brightnessSlider.updateMatrixWorld();\n\t brightnessSlider.worldToLocal(position);\n\t\n\t //Brightness is a value between 0 and 1. The parent plane is centre registered, hence offset\n\t var cursorOffset = position.y + this.brightnessSliderHeight / 2;\n\t var brightness = cursorOffset / this.brightnessSliderHeight;\n\t var updatedPosition = {\n\t x: 0,\n\t y: position.y - this.brightnessSliderHeight / 2,\n\t z: 0\n\t\n\t //Set brightness cursor position to offset position\n\t // Uncomment to remove anims: brightnessCursor.position.copy(updatedPosition)\n\t };this.setPositionTween(brightnessCursor, brightnessCursor.position, updatedPosition);\n\t\n\t //Update material brightness\n\t colorWheel.material.uniforms['brightness'].value = brightness;\n\t this.hsv.v = brightness;\n\t this.el.updateColor();\n\t },\n\t onHueDown: function onHueDown(position) {\n\t var colorWheel = this.colorWheel.getObject3D('mesh'),\n\t colorCursor = this.colorCursor.getObject3D('mesh'),\n\t radius = this.data.wheelSize;\n\t\n\t colorWheel.updateMatrixWorld();\n\t colorWheel.worldToLocal(position);\n\t\n\t // Uncomment to remove anims: this.colorCursor.getObject3D('mesh').position.copy(position)\n\t this.setPositionTween(colorCursor, colorCursor.position, position);\n\t\n\t //Determine Hue and Saturation value from polar co-ordinates\n\t var polarPosition = {\n\t r: Math.sqrt(position.x * position.x + position.y * position.y),\n\t theta: Math.PI + Math.atan2(position.y, position.x)\n\t };\n\t\n\t var angle = (polarPosition.theta * (180 / Math.PI) + 180) % 360;\n\t this.hsv.h = angle / 360;\n\t this.hsv.s = polarPosition.r / radius;\n\t\n\t this.el.updateColor();\n\t },\n\t\n\t updateColor: function updateColor() {\n\t\n\t var rgb = this.hsvToRgb(this.hsv),\n\t color = 'rgb(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ')',\n\t hex = '#' + new THREE.Color(color).getHexString();\n\t\n\t var selectionEl = this.selectionEl.getObject3D('mesh'),\n\t colorCursor = this.colorCursor.getObject3D('mesh'),\n\t brightnessCursor = this.brightnessCursor.getObject3D('mesh');\n\t\n\t //Update indicator element of selected color\n\t if (this.data.showSelection) {\n\t //Uncomment for no tweens: selectionEl.material.color.set(color)\n\t this.setColorTween(selectionEl.material, selectionEl.material.color, new THREE.Color(color));\n\t selectionEl.material.needsUpdate = true;\n\t }\n\t\n\t //Change cursor colors based on brightness\n\t if (this.hsv.v >= 0.5) {\n\t this.setColorTween(colorCursor.material, colorCursor.material.color, new THREE.Color(0x000000));\n\t this.setColorTween(brightnessCursor.material, brightnessCursor.material.color, new THREE.Color(0x000000));\n\t } else {\n\t this.setColorTween(colorCursor.material, colorCursor.material.color, new THREE.Color(0xFFFFFF));\n\t this.setColorTween(brightnessCursor.material, brightnessCursor.material.color, new THREE.Color(0xFFFFFF));\n\t }\n\t\n\t //showHexValue set to true, update text\n\t if (this.data.showHexValue) this.hexValueText.setAttribute('text', 'value', hex);\n\t\n\t //Notify listeners the color has changed.\n\t var eventDetail = {\n\t style: color,\n\t rgb: rgb,\n\t hsv: this.hsv,\n\t hex: hex\n\t };\n\t\n\t Event.emit(this.el, 'changecolor', eventDetail);\n\t Event.emit(document.body, 'didchangecolor', eventDetail);\n\t },\n\t hexToRgb: function hexToRgb(hex) {\n\t var rgb = hex.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i, function (m, r, g, b) {\n\t return '#' + r + r + g + g + b + b;\n\t }).substring(1).match(/.{2}/g).map(function (x) {\n\t return parseInt(x, 16);\n\t });\n\t\n\t return {\n\t r: rgb[0],\n\t g: rgb[1],\n\t b: rgb[2]\n\t };\n\t },\n\t rgbToHsv: function rgbToHsv(r, g, b) {\n\t var max = Math.max(r, g, b);\n\t var min = Math.min(r, g, b);\n\t var d = max - min;\n\t var h;\n\t var s = max === 0 ? 0 : d / max;\n\t var v = max;\n\t\n\t if (arguments.length === 1) {\n\t g = r.g;\n\t b = r.b;\n\t r = r.r;\n\t }\n\t\n\t switch (max) {\n\t case min:\n\t h = 0;\n\t break;\n\t case r:\n\t h = g - b + d * (g < b ? 6 : 0);\n\t h /= 6 * d;\n\t break;\n\t case g:\n\t h = b - r + d * 2;\n\t h /= 6 * d;\n\t break;\n\t case b:\n\t h = r - g + d * 4;\n\t h /= 6 * d;\n\t break;\n\t }\n\t return {\n\t h: h,\n\t s: s,\n\t v: v / 255\n\t };\n\t },\n\t hsvToRgb: function hsvToRgb(hsv) {\n\t var r, g, b, i, f, p, q, t;\n\t var h = THREE.Math.clamp(hsv.h, 0, 1);\n\t var s = THREE.Math.clamp(hsv.s, 0, 1);\n\t var v = hsv.v;\n\t\n\t i = Math.floor(h * 6);\n\t f = h * 6 - i;\n\t p = v * (1 - s);\n\t q = v * (1 - f * s);\n\t t = v * (1 - (1 - f) * s);\n\t switch (i % 6) {\n\t case 0:\n\t r = v;\n\t g = t;\n\t b = p;\n\t break;\n\t case 1:\n\t r = q;\n\t g = v;\n\t b = p;\n\t break;\n\t case 2:\n\t r = p;\n\t g = v;\n\t b = t;\n\t break;\n\t case 3:\n\t r = p;\n\t g = q;\n\t b = v;\n\t break;\n\t case 4:\n\t r = t;\n\t g = p;\n\t b = v;\n\t break;\n\t case 5:\n\t r = v;\n\t g = p;\n\t b = q;\n\t break;\n\t }\n\t return {\n\t r: Math.round(r * 255),\n\t g: Math.round(g * 255),\n\t b: Math.round(b * 255)\n\t };\n\t },\n\t update: function update(oldData) {\n\t if (!oldData) return;\n\t if (this.data.backgroundColor !== oldData.backgroundColor) this.background.setAttribute('color', this.data.backgroundColor);\n\t\n\t var swatchesChanged = (0, _lodash2.default)(oldData.swatches, this.data.swatches).length > 0;\n\t if (swatchesChanged && this.data.showSwatches && this.data.swatches.filter(function (item) {\n\t return item.length === 7;\n\t }).length === this.data.swatches.length) {\n\t if (this.swatchReady) {\n\t this.el.clearSwatches();\n\t this.el.generateSwatches(this.data.swatches);\n\t }\n\t }\n\t },\n\t tick: function tick() {},\n\t remove: function remove() {\n\t var that = this;\n\t //Kill any listeners\n\t this.colorWheel.removeEventListener('click', this.onColorWheelClicked);\n\t this.brightnessSlider.removeEventListener('click', this.onBrightnessSliderClicked);\n\t this.swatchContainer.removeEventListener('loaded', this.onSwatchReady);\n\t this.hexValueText.removeEventListener('click', this.onHexValueClicked);\n\t\n\t if (this.swatchContainer) this.swatchContainer.getObject3D('mesh').children.forEach(function (child) {\n\t return child.removeEventListener('click', that);\n\t });\n\t },\n\t pause: function pause() {},\n\t play: function play() {}\n\t});\n\t\n\tAFRAME.registerPrimitive('a-colorwheel', {\n\t defaultComponents: {\n\t colorwheel: {}\n\t },\n\t mappings: {\n\t disabled: 'colorwheel.disabled',\n\t backgroundcolor: 'colorwheel.backgroundColor',\n\t showselection: 'colorwheel.showSelection',\n\t wheelsize: 'colorwheel.wheelSize',\n\t selectionsize: 'colorwheel.selectionSize',\n\t showhexvalue: 'colorwheel.showHexValue',\n\t showswatches: 'colorwheel.showSwatches',\n\t swatches: 'colorwheel.swatches'\n\t }\n\t});\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar deselectCurrent = __webpack_require__(3);\n\t\n\tvar defaultMessage = 'Copy to clipboard: #{key}, Enter';\n\t\n\tfunction format(message) {\n\t var copyKey = (/mac os x/i.test(navigator.userAgent) ? '⌘' : 'Ctrl') + '+C';\n\t return message.replace(/#{\\s*key\\s*}/g, copyKey);\n\t}\n\t\n\tfunction copy(text, options) {\n\t var debug, message, reselectPrevious, range, selection, mark, success = false;\n\t if (!options) { options = {}; }\n\t debug = options.debug || false;\n\t try {\n\t reselectPrevious = deselectCurrent();\n\t\n\t range = document.createRange();\n\t selection = document.getSelection();\n\t\n\t mark = document.createElement('span');\n\t mark.textContent = text;\n\t // reset user styles for span element\n\t mark.style.all = 'unset';\n\t // prevents scrolling to the end of the page\n\t mark.style.position = 'fixed';\n\t mark.style.top = 0;\n\t mark.style.clip = 'rect(0, 0, 0, 0)';\n\t // used to preserve spaces and line breaks\n\t mark.style.whiteSpace = 'pre';\n\t // do not inherit user-select (it may be `none`)\n\t mark.style.webkitUserSelect = 'text';\n\t mark.style.MozUserSelect = 'text';\n\t mark.style.msUserSelect = 'text';\n\t mark.style.userSelect = 'text';\n\t\n\t document.body.appendChild(mark);\n\t\n\t range.selectNode(mark);\n\t selection.addRange(range);\n\t\n\t var successful = document.execCommand('copy');\n\t if (!successful) {\n\t throw new Error('copy command was unsuccessful');\n\t }\n\t success = true;\n\t } catch (err) {\n\t debug && console.error('unable to copy using execCommand: ', err);\n\t debug && console.warn('trying IE specific stuff');\n\t try {\n\t window.clipboardData.setData('text', text);\n\t success = true;\n\t } catch (err) {\n\t debug && console.error('unable to copy using clipboardData: ', err);\n\t debug && console.error('falling back to prompt');\n\t message = format('message' in options ? options.message : defaultMessage);\n\t window.prompt(message, text);\n\t }\n\t } finally {\n\t if (selection) {\n\t if (typeof selection.removeRange == 'function') {\n\t selection.removeRange(range);\n\t } else {\n\t selection.removeAllRanges();\n\t }\n\t }\n\t\n\t if (mark) {\n\t document.body.removeChild(mark);\n\t }\n\t reselectPrevious();\n\t }\n\t\n\t return success;\n\t}\n\t\n\tmodule.exports = copy;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t\n\tmodule.exports = function () {\n\t var selection = document.getSelection();\n\t if (!selection.rangeCount) {\n\t return function () {};\n\t }\n\t var active = document.activeElement;\n\t\n\t var ranges = [];\n\t for (var i = 0; i < selection.rangeCount; i++) {\n\t ranges.push(selection.getRangeAt(i));\n\t }\n\t\n\t switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n\t case 'INPUT':\n\t case 'TEXTAREA':\n\t active.blur();\n\t break;\n\t\n\t default:\n\t active = null;\n\t break;\n\t }\n\t\n\t selection.removeAllRanges();\n\t return function () {\n\t selection.type === 'Caret' &&\n\t selection.removeAllRanges();\n\t\n\t if (!selection.rangeCount) {\n\t ranges.forEach(function(range) {\n\t selection.addRange(range);\n\t });\n\t }\n\t\n\t active &&\n\t active.focus();\n\t };\n\t};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {/**\n\t * lodash (Custom Build) <https://lodash.com/>\n\t * Build: `lodash modularize exports=\"npm\" -o ./`\n\t * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n\t * Released under MIT license <https://lodash.com/license>\n\t * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n\t * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t */\n\t\n\t/** Used as the size to enable large array optimizations. */\n\tvar LARGE_ARRAY_SIZE = 200;\n\t\n\t/** Used to stand-in for `undefined` hash values. */\n\tvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\t\n\t/** Used as references for various `Number` constants. */\n\tvar MAX_SAFE_INTEGER = 9007199254740991;\n\t\n\t/** `Object#toString` result references. */\n\tvar argsTag = '[object Arguments]',\n\t funcTag = '[object Function]',\n\t genTag = '[object GeneratorFunction]';\n\t\n\t/**\n\t * Used to match `RegExp`\n\t * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n\t */\n\tvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\t\n\t/** Used to detect host constructors (Safari). */\n\tvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\t\n\t/** Detect free variable `global` from Node.js. */\n\tvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\t\n\t/** Detect free variable `self`. */\n\tvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\t\n\t/** Used as a reference to the global object. */\n\tvar root = freeGlobal || freeSelf || Function('return this')();\n\t\n\t/**\n\t * A faster alternative to `Function#apply`, this function invokes `func`\n\t * with the `this` binding of `thisArg` and the arguments of `args`.\n\t *\n\t * @private\n\t * @param {Function} func The function to invoke.\n\t * @param {*} thisArg The `this` binding of `func`.\n\t * @param {Array} args The arguments to invoke `func` with.\n\t * @returns {*} Returns the result of `func`.\n\t */\n\tfunction apply(func, thisArg, args) {\n\t switch (args.length) {\n\t case 0: return func.call(thisArg);\n\t case 1: return func.call(thisArg, args[0]);\n\t case 2: return func.call(thisArg, args[0], args[1]);\n\t case 3: return func.call(thisArg, args[0], args[1], args[2]);\n\t }\n\t return func.apply(thisArg, args);\n\t}\n\t\n\t/**\n\t * A specialized version of `_.includes` for arrays without support for\n\t * specifying an index to search from.\n\t *\n\t * @private\n\t * @param {Array} [array] The array to inspect.\n\t * @param {*} target The value to search for.\n\t * @returns {boolean} Returns `true` if `target` is found, else `false`.\n\t */\n\tfunction arrayIncludes(array, value) {\n\t var length = array ? array.length : 0;\n\t return !!length && baseIndexOf(array, value, 0) > -1;\n\t}\n\t\n\t/**\n\t * This function is like `arrayIncludes` except that it accepts a comparator.\n\t *\n\t * @private\n\t * @param {Array} [array] The array to inspect.\n\t * @param {*} target The value to search for.\n\t * @param {Function} comparator The comparator invoked per element.\n\t * @returns {boolean} Returns `true` if `target` is found, else `false`.\n\t */\n\tfunction arrayIncludesWith(array, value, comparator) {\n\t var index = -1,\n\t length = array ? array.length : 0;\n\t\n\t while (++index < length) {\n\t if (comparator(value, array[index])) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t}\n\t\n\t/**\n\t * A specialized version of `_.map` for arrays without support for iteratee\n\t * shorthands.\n\t *\n\t * @private\n\t * @param {Array} [array] The array to iterate over.\n\t * @param {Function} iteratee The function invoked per iteration.\n\t * @returns {Array} Returns the new mapped array.\n\t */\n\tfunction arrayMap(array, iteratee) {\n\t var index = -1,\n\t length = array ? array.length : 0,\n\t result = Array(length);\n\t\n\t while (++index < length) {\n\t result[index] = iteratee(array[index], index, array);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Appends the elements of `values` to `array`.\n\t *\n\t * @private\n\t * @param {Array} array The array to modify.\n\t * @param {Array} values The values to append.\n\t * @returns {Array} Returns `array`.\n\t */\n\tfunction arrayPush(array, values) {\n\t var index = -1,\n\t length = values.length,\n\t offset = array.length;\n\t\n\t while (++index < length) {\n\t array[offset + index] = values[index];\n\t }\n\t return array;\n\t}\n\t\n\t/**\n\t * The base implementation of `_.findIndex` and `_.findLastIndex` without\n\t * support for iteratee shorthands.\n\t *\n\t * @private\n\t * @param {Array} array The array to inspect.\n\t * @param {Function} predicate The function invoked per iteration.\n\t * @param {number} fromIndex The index to search from.\n\t * @param {boolean} [fromRight] Specify iterating from right to left.\n\t * @returns {number} Returns the index of the matched value, else `-1`.\n\t */\n\tfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n\t var length = array.length,\n\t index = fromIndex + (fromRight ? 1 : -1);\n\t\n\t while ((fromRight ? index-- : ++index < length)) {\n\t if (predicate(array[index], index, array)) {\n\t return index;\n\t }\n\t }\n\t return -1;\n\t}\n\t\n\t/**\n\t * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n\t *\n\t * @private\n\t * @param {Array} array The array to inspect.\n\t * @param {*} value The value to search for.\n\t * @param {number} fromIndex The index to search from.\n\t * @returns {number} Returns the index of the matched value, else `-1`.\n\t */\n\tfunction baseIndexOf(array, value, fromIndex) {\n\t if (value !== value) {\n\t return baseFindIndex(array, baseIsNaN, fromIndex);\n\t }\n\t var index = fromIndex - 1,\n\t length = array.length;\n\t\n\t while (++index < length) {\n\t if (array[index] === value) {\n\t return index;\n\t }\n\t }\n\t return -1;\n\t}\n\t\n\t/**\n\t * The base implementation of `_.isNaN` without support for number objects.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n\t */\n\tfunction baseIsNaN(value) {\n\t return value !== value;\n\t}\n\t\n\t/**\n\t * The base implementation of `_.unary` without support for storing metadata.\n\t *\n\t * @private\n\t * @param {Function} func The function to cap arguments for.\n\t * @returns {Function} Returns the new capped function.\n\t */\n\tfunction baseUnary(func) {\n\t return function(value) {\n\t return func(value);\n\t };\n\t}\n\t\n\t/**\n\t * Checks if a cache value for `key` exists.\n\t *\n\t * @private\n\t * @param {Object} cache The cache to query.\n\t * @param {string} key The key of the entry to check.\n\t * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n\t */\n\tfunction cacheHas(cache, key) {\n\t return cache.has(key);\n\t}\n\t\n\t/**\n\t * Gets the value at `key` of `object`.\n\t *\n\t * @private\n\t * @param {Object} [object] The object to query.\n\t * @param {string} key The key of the property to get.\n\t * @returns {*} Returns the property value.\n\t */\n\tfunction getValue(object, key) {\n\t return object == null ? undefined : object[key];\n\t}\n\t\n\t/**\n\t * Checks if `value` is a host object in IE < 9.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n\t */\n\tfunction isHostObject(value) {\n\t // Many host objects are `Object` objects that can coerce to strings\n\t // despite having improperly defined `toString` methods.\n\t var result = false;\n\t if (value != null && typeof value.toString != 'function') {\n\t try {\n\t result = !!(value + '');\n\t } catch (e) {}\n\t }\n\t return result;\n\t}\n\t\n\t/** Used for built-in method references. */\n\tvar arrayProto = Array.prototype,\n\t funcProto = Function.prototype,\n\t objectProto = Object.prototype;\n\t\n\t/** Used to detect overreaching core-js shims. */\n\tvar coreJsData = root['__core-js_shared__'];\n\t\n\t/** Used to detect methods masquerading as native. */\n\tvar maskSrcKey = (function() {\n\t var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n\t return uid ? ('Symbol(src)_1.' + uid) : '';\n\t}());\n\t\n\t/** Used to resolve the decompiled source of functions. */\n\tvar funcToString = funcProto.toString;\n\t\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\t\n\t/**\n\t * Used to resolve the\n\t * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n\t * of values.\n\t */\n\tvar objectToString = objectProto.toString;\n\t\n\t/** Used to detect if a method is native. */\n\tvar reIsNative = RegExp('^' +\n\t funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n\t);\n\t\n\t/** Built-in value references. */\n\tvar Symbol = root.Symbol,\n\t propertyIsEnumerable = objectProto.propertyIsEnumerable,\n\t splice = arrayProto.splice,\n\t spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\t\n\t/* Built-in method references for those with the same name as other `lodash` methods. */\n\tvar nativeMax = Math.max;\n\t\n\t/* Built-in method references that are verified to be native. */\n\tvar Map = getNative(root, 'Map'),\n\t nativeCreate = getNative(Object, 'create');\n\t\n\t/**\n\t * Creates a hash object.\n\t *\n\t * @private\n\t * @constructor\n\t * @param {Array} [entries] The key-value pairs to cache.\n\t */\n\tfunction Hash(entries) {\n\t var index = -1,\n\t length = entries ? entries.length : 0;\n\t\n\t this.clear();\n\t while (++index < length) {\n\t var entry = entries[index];\n\t this.set(entry[0], entry[1]);\n\t }\n\t}\n\t\n\t/**\n\t * Removes all key-value entries from the hash.\n\t *\n\t * @private\n\t * @name clear\n\t * @memberOf Hash\n\t */\n\tfunction hashClear() {\n\t this.__data__ = nativeCreate ? nativeCreate(null) : {};\n\t}\n\t\n\t/**\n\t * Removes `key` and its value from the hash.\n\t *\n\t * @private\n\t * @name delete\n\t * @memberOf Hash\n\t * @param {Object} hash The hash to modify.\n\t * @param {string} key The key of the value to remove.\n\t * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n\t */\n\tfunction hashDelete(key) {\n\t return this.has(key) && delete this.__data__[key];\n\t}\n\t\n\t/**\n\t * Gets the hash value for `key`.\n\t *\n\t * @private\n\t * @name get\n\t * @memberOf Hash\n\t * @param {string} key The key of the value to get.\n\t * @returns {*} Returns the entry value.\n\t */\n\tfunction hashGet(key) {\n\t var data = this.__data__;\n\t if (nativeCreate) {\n\t var result = data[key];\n\t return result === HASH_UNDEFINED ? undefined : result;\n\t }\n\t return hasOwnProperty.call(data, key) ? data[key] : undefined;\n\t}\n\t\n\t/**\n\t * Checks if a hash value for `key` exists.\n\t *\n\t * @private\n\t * @name has\n\t * @memberOf Hash\n\t * @param {string} key The key of the entry to check.\n\t * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n\t */\n\tfunction hashHas(key) {\n\t var data = this.__data__;\n\t return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n\t}\n\t\n\t/**\n\t * Sets the hash `key` to `value`.\n\t *\n\t * @private\n\t * @name set\n\t * @memberOf Hash\n\t * @param {string} key The key of the value to set.\n\t * @param {*} value The value to set.\n\t * @returns {Object} Returns the hash instance.\n\t */\n\tfunction hashSet(key, value) {\n\t var data = this.__data__;\n\t data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n\t return this;\n\t}\n\t\n\t// Add methods to `Hash`.\n\tHash.prototype.clear = hashClear;\n\tHash.prototype['delete'] = hashDelete;\n\tHash.prototype.get = hashGet;\n\tHash.prototype.has = hashHas;\n\tHash.prototype.set = hashSet;\n\t\n\t/**\n\t * Creates an list cache object.\n\t *\n\t * @private\n\t * @constructor\n\t * @param {Array} [entries] The key-value pairs to cache.\n\t */\n\tfunction ListCache(entries) {\n\t var index = -1,\n\t length = entries ? entries.length : 0;\n\t\n\t this.clear();\n\t while (++index < length) {\n\t var entry = entries[index];\n\t this.set(entry[0], entry[1]);\n\t }\n\t}\n\t\n\t/**\n\t * Removes all key-value entries from the list cache.\n\t *\n\t * @private\n\t * @name clear\n\t * @memberOf ListCache\n\t */\n\tfunction listCacheClear() {\n\t this.__data__ = [];\n\t}\n\t\n\t/**\n\t * Removes `key` and its value from the list cache.\n\t *\n\t * @private\n\t * @name delete\n\t * @memberOf ListCache\n\t * @param {string} key The key of the value to remove.\n\t * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n\t */\n\tfunction listCacheDelete(key) {\n\t var data = this.__data__,\n\t index = assocIndexOf(data, key);\n\t\n\t if (index < 0) {\n\t return false;\n\t }\n\t var lastIndex = data.length - 1;\n\t if (index == lastIndex) {\n\t data.pop();\n\t } else {\n\t splice.call(data, index, 1);\n\t }\n\t return true;\n\t}\n\t\n\t/**\n\t * Gets the list cache value for `key`.\n\t *\n\t * @private\n\t * @name get\n\t * @memberOf ListCache\n\t * @param {string} key The key of the value to get.\n\t * @returns {*} Returns the entry value.\n\t */\n\tfunction listCacheGet(key) {\n\t var data = this.__data__,\n\t index = assocIndexOf(data, key);\n\t\n\t return index < 0 ? undefined : data[index][1];\n\t}\n\t\n\t/**\n\t * Checks if a list cache value for `key` exists.\n\t *\n\t * @private\n\t * @name has\n\t * @memberOf ListCache\n\t * @param {string} key The key of the entry to check.\n\t * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n\t */\n\tfunction listCacheHas(key) {\n\t return assocIndexOf(this.__data__, key) > -1;\n\t}\n\t\n\t/**\n\t * Sets the list cache `key` to `value`.\n\t *\n\t * @private\n\t * @name set\n\t * @memberOf ListCache\n\t * @param {string} key The key of the value to set.\n\t * @param {*} value The value to set.\n\t * @returns {Object} Returns the list cache instance.\n\t */\n\tfunction listCacheSet(key, value) {\n\t var data = this.__data__,\n\t index = assocIndexOf(data, key);\n\t\n\t if (index < 0) {\n\t data.push([key, value]);\n\t } else {\n\t data[index][1] = value;\n\t }\n\t return this;\n\t}\n\t\n\t// Add methods to `ListCache`.\n\tListCache.prototype.clear = listCacheClear;\n\tListCache.prototype['delete'] = listCacheDelete;\n\tListCache.prototype.get = listCacheGet;\n\tListCache.prototype.has = listCacheHas;\n\tListCache.prototype.set = listCacheSet;\n\t\n\t/**\n\t * Creates a map cache object to store key-value pairs.\n\t *\n\t * @private\n\t * @constructor\n\t * @param {Array} [entries] The key-value pairs to cache.\n\t */\n\tfunction MapCache(entries) {\n\t var index = -1,\n\t length = entries ? entries.length : 0;\n\t\n\t this.clear();\n\t while (++index < length) {\n\t var entry = entries[index];\n\t this.set(entry[0], entry[1]);\n\t }\n\t}\n\t\n\t/**\n\t * Removes all key-value entries from the map.\n\t *\n\t * @private\n\t * @name clear\n\t * @memberOf MapCache\n\t */\n\tfunction mapCacheClear() {\n\t this.__data__ = {\n\t 'hash': new Hash,\n\t 'map': new (Map || ListCache),\n\t 'string': new Hash\n\t };\n\t}\n\t\n\t/**\n\t * Removes `key` and its value from the map.\n\t *\n\t * @private\n\t * @name delete\n\t * @memberOf MapCache\n\t * @param {string} key The key of the value to remove.\n\t * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n\t */\n\tfunction mapCacheDelete(key) {\n\t return getMapData(this, key)['delete'](key);\n\t}\n\t\n\t/**\n\t * Gets the map value for `key`.\n\t *\n\t * @private\n\t * @name get\n\t * @memberOf MapCache\n\t * @param {string} key The key of the value to get.\n\t * @returns {*} Returns the entry value.\n\t */\n\tfunction mapCacheGet(key) {\n\t return getMapData(this, key).get(key);\n\t}\n\t\n\t/**\n\t * Checks if a map value for `key` exists.\n\t *\n\t * @private\n\t * @name has\n\t * @memberOf MapCache\n\t * @param {string} key The key of the entry to check.\n\t * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n\t */\n\tfunction mapCacheHas(key) {\n\t return getMapData(this, key).has(key);\n\t}\n\t\n\t/**\n\t * Sets the map `key` to `value`.\n\t *\n\t * @private\n\t * @name set\n\t * @memberOf MapCache\n\t * @param {string} key The key of the value to set.\n\t * @param {*} value The value to set.\n\t * @returns {Object} Returns the map cache instance.\n\t */\n\tfunction mapCacheSet(key, value) {\n\t getMapData(this, key).set(key, value);\n\t return this;\n\t}\n\t\n\t// Add methods to `MapCache`.\n\tMapCache.prototype.clear = mapCacheClear;\n\tMapCache.prototype['delete'] = mapCacheDelete;\n\tMapCache.prototype.get = mapCacheGet;\n\tMapCache.prototype.has = mapCacheHas;\n\tMapCache.prototype.set = mapCacheSet;\n\t\n\t/**\n\t *\n\t * Creates an array cache object to store unique values.\n\t *\n\t * @private\n\t * @constructor\n\t * @param {Array} [values] The values to cache.\n\t */\n\tfunction SetCache(values) {\n\t var index = -1,\n\t length = values ? values.length : 0;\n\t\n\t this.__data__ = new MapCache;\n\t while (++index < length) {\n\t this.add(values[index]);\n\t }\n\t}\n\t\n\t/**\n\t * Adds `value` to the array cache.\n\t *\n\t * @private\n\t * @name add\n\t * @memberOf SetCache\n\t * @alias push\n\t * @param {*} value The value to cache.\n\t * @returns {Object} Returns the cache instance.\n\t */\n\tfunction setCacheAdd(value) {\n\t this.__data__.set(value, HASH_UNDEFINED);\n\t return this;\n\t}\n\t\n\t/**\n\t * Checks if `value` is in the array cache.\n\t *\n\t * @private\n\t * @name has\n\t * @memberOf SetCache\n\t * @param {*} value The value to search for.\n\t * @returns {number} Returns `true` if `value` is found, else `false`.\n\t */\n\tfunction setCacheHas(value) {\n\t return this.__data__.has(value);\n\t}\n\t\n\t// Add methods to `SetCache`.\n\tSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n\tSetCache.prototype.has = setCacheHas;\n\t\n\t/**\n\t * Gets the index at which the `key` is found in `array` of key-value pairs.\n\t *\n\t * @private\n\t * @param {Array} array The array to inspect.\n\t * @param {*} key The key to search for.\n\t * @returns {number} Returns the index of the matched value, else `-1`.\n\t */\n\tfunction assocIndexOf(array, key) {\n\t var length = array.length;\n\t while (length--) {\n\t if (eq(array[length][0], key)) {\n\t return length;\n\t }\n\t }\n\t return -1;\n\t}\n\t\n\t/**\n\t * The base implementation of methods like `_.difference` without support\n\t * for excluding multiple arrays or iteratee shorthands.\n\t *\n\t * @private\n\t * @param {Array} array The array to inspect.\n\t * @param {Array} values The values to exclude.\n\t * @param {Function} [iteratee] The iteratee invoked per element.\n\t * @param {Function} [comparator] The comparator invoked per element.\n\t * @returns {Array} Returns the new array of filtered values.\n\t */\n\tfunction baseDifference(array, values, iteratee, comparator) {\n\t var index = -1,\n\t includes = arrayIncludes,\n\t isCommon = true,\n\t length = array.length,\n\t result = [],\n\t valuesLength = values.length;\n\t\n\t if (!length) {\n\t return result;\n\t }\n\t if (iteratee) {\n\t values = arrayMap(values, baseUnary(iteratee));\n\t }\n\t if (comparator) {\n\t includes = arrayIncludesWith;\n\t isCommon = false;\n\t }\n\t else if (values.length >= LARGE_ARRAY_SIZE) {\n\t includes = cacheHas;\n\t isCommon = false;\n\t values = new SetCache(values);\n\t }\n\t outer:\n\t while (++index < length) {\n\t var value = array[index],\n\t computed = iteratee ? iteratee(value) : value;\n\t\n\t value = (comparator || value !== 0) ? value : 0;\n\t if (isCommon && computed === computed) {\n\t var valuesIndex = valuesLength;\n\t while (valuesIndex--) {\n\t if (values[valuesIndex] === computed) {\n\t continue outer;\n\t }\n\t }\n\t result.push(value);\n\t }\n\t else if (!includes(values, computed, comparator)) {\n\t result.push(value);\n\t }\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * The base implementation of `_.flatten` with support for restricting flattening.\n\t *\n\t * @private\n\t * @param {Array} array The array to flatten.\n\t * @param {number} depth The maximum recursion depth.\n\t * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n\t * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n\t * @param {Array} [result=[]] The initial result value.\n\t * @returns {Array} Returns the new flattened array.\n\t */\n\tfunction baseFlatten(array, depth, predicate, isStrict, result) {\n\t var index = -1,\n\t length = array.length;\n\t\n\t predicate || (predicate = isFlattenable);\n\t result || (result = []);\n\t\n\t while (++index < length) {\n\t var value = array[index];\n\t if (depth > 0 && predicate(value)) {\n\t if (depth > 1) {\n\t // Recursively flatten arrays (susceptible to call stack limits).\n\t baseFlatten(value, depth - 1, predicate, isStrict, result);\n\t } else {\n\t arrayPush(result, value);\n\t }\n\t } else if (!isStrict) {\n\t result[result.length] = value;\n\t }\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * The base implementation of `_.isNative` without bad shim checks.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a native function,\n\t * else `false`.\n\t */\n\tfunction baseIsNative(value) {\n\t if (!isObject(value) || isMasked(value)) {\n\t return false;\n\t }\n\t var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n\t return pattern.test(toSource(value));\n\t}\n\t\n\t/**\n\t * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n\t *\n\t * @private\n\t * @param {Function} func The function to apply a rest parameter to.\n\t * @param {number} [start=func.length-1] The start position of the rest parameter.\n\t * @returns {Function} Returns the new function.\n\t */\n\tfunction baseRest(func, start) {\n\t start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n\t return function() {\n\t var args = arguments,\n\t index = -1,\n\t length = nativeMax(args.length - start, 0),\n\t array = Array(length);\n\t\n\t while (++index < length) {\n\t array[index] = args[start + index];\n\t }\n\t index = -1;\n\t var otherArgs = Array(start + 1);\n\t while (++index < start) {\n\t otherArgs[index] = args[index];\n\t }\n\t otherArgs[start] = array;\n\t return apply(func, this, otherArgs);\n\t };\n\t}\n\t\n\t/**\n\t * Gets the data for `map`.\n\t *\n\t * @private\n\t * @param {Object} map The map to query.\n\t * @param {string} key The reference key.\n\t * @returns {*} Returns the map data.\n\t */\n\tfunction getMapData(map, key) {\n\t var data = map.__data__;\n\t return isKeyable(key)\n\t ? data[typeof key == 'string' ? 'string' : 'hash']\n\t : data.map;\n\t}\n\t\n\t/**\n\t * Gets the native function at `key` of `object`.\n\t *\n\t * @private\n\t * @param {Object} object The object to query.\n\t * @param {string} key The key of the method to get.\n\t * @returns {*} Returns the function if it's native, else `undefined`.\n\t */\n\tfunction getNative(object, key) {\n\t var value = getValue(object, key);\n\t return baseIsNative(value) ? value : undefined;\n\t}\n\t\n\t/**\n\t * Checks if `value` is a flattenable `arguments` object or array.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n\t */\n\tfunction isFlattenable(value) {\n\t return isArray(value) || isArguments(value) ||\n\t !!(spreadableSymbol && value && value[spreadableSymbol]);\n\t}\n\t\n\t/**\n\t * Checks if `value` is suitable for use as unique object key.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n\t */\n\tfunction isKeyable(value) {\n\t var type = typeof value;\n\t return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n\t ? (value !== '__proto__')\n\t : (value === null);\n\t}\n\t\n\t/**\n\t * Checks if `func` has its source masked.\n\t *\n\t * @private\n\t * @param {Function} func The function to check.\n\t * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n\t */\n\tfunction isMasked(func) {\n\t return !!maskSrcKey && (maskSrcKey in func);\n\t}\n\t\n\t/**\n\t * Converts `func` to its source code.\n\t *\n\t * @private\n\t * @param {Function} func The function to process.\n\t * @returns {string} Returns the source code.\n\t */\n\tfunction toSource(func) {\n\t if (func != null) {\n\t try {\n\t return funcToString.call(func);\n\t } catch (e) {}\n\t try {\n\t return (func + '');\n\t } catch (e) {}\n\t }\n\t return '';\n\t}\n\t\n\t/**\n\t * Creates an array of `array` values not included in the other given arrays\n\t * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n\t * for equality comparisons. The order of result values is determined by the\n\t * order they occur in the first array.\n\t *\n\t * **Note:** Unlike `_.pullAll`, this method returns a new array.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Array\n\t * @param {Array} array The array to inspect.\n\t * @param {...Array} [values] The values to exclude.\n\t * @returns {Array} Returns the new array of filtered values.\n\t * @see _.without, _.xor\n\t * @example\n\t *\n\t * _.difference([2, 1], [2, 3]);\n\t * // => [1]\n\t */\n\tvar difference = baseRest(function(array, values) {\n\t return isArrayLikeObject(array)\n\t ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n\t : [];\n\t});\n\t\n\t/**\n\t * Performs a\n\t * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n\t * comparison between two values to determine if they are equivalent.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to compare.\n\t * @param {*} other The other value to compare.\n\t * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n\t * @example\n\t *\n\t * var object = { 'a': 1 };\n\t * var other = { 'a': 1 };\n\t *\n\t * _.eq(object, object);\n\t * // => true\n\t *\n\t * _.eq(object, other);\n\t * // => false\n\t *\n\t * _.eq('a', 'a');\n\t * // => true\n\t *\n\t * _.eq('a', Object('a'));\n\t * // => false\n\t *\n\t * _.eq(NaN, NaN);\n\t * // => true\n\t */\n\tfunction eq(value, other) {\n\t return value === other || (value !== value && other !== other);\n\t}\n\t\n\t/**\n\t * Checks if `value` is likely an `arguments` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n\t * else `false`.\n\t * @example\n\t *\n\t * _.isArguments(function() { return arguments; }());\n\t * // => true\n\t *\n\t * _.isArguments([1, 2, 3]);\n\t * // => false\n\t */\n\tfunction isArguments(value) {\n\t // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n\t return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n\t (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n\t}\n\t\n\t/**\n\t * Checks if `value` is classified as an `Array` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n\t * @example\n\t *\n\t * _.isArray([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isArray(document.body.children);\n\t * // => false\n\t *\n\t * _.isArray('abc');\n\t * // => false\n\t *\n\t * _.isArray(_.noop);\n\t * // => false\n\t */\n\tvar isArray = Array.isArray;\n\t\n\t/**\n\t * Checks if `value` is array-like. A value is considered array-like if it's\n\t * not a function and has a `value.length` that's an integer greater than or\n\t * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n\t * @example\n\t *\n\t * _.isArrayLike([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isArrayLike(document.body.children);\n\t * // => true\n\t *\n\t * _.isArrayLike('abc');\n\t * // => true\n\t *\n\t * _.isArrayLike(_.noop);\n\t * // => false\n\t */\n\tfunction isArrayLike(value) {\n\t return value != null && isLength(value.length) && !isFunction(value);\n\t}\n\t\n\t/**\n\t * This method is like `_.isArrayLike` except that it also checks if `value`\n\t * is an object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an array-like object,\n\t * else `false`.\n\t * @example\n\t *\n\t * _.isArrayLikeObject([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isArrayLikeObject(document.body.children);\n\t * // => true\n\t *\n\t * _.isArrayLikeObject('abc');\n\t * // => false\n\t *\n\t * _.isArrayLikeObject(_.noop);\n\t * // => false\n\t */\n\tfunction isArrayLikeObject(value) {\n\t return isObjectLike(value) && isArrayLike(value);\n\t}\n\t\n\t/**\n\t * Checks if `value` is classified as a `Function` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n\t * @example\n\t *\n\t * _.isFunction(_);\n\t * // => true\n\t *\n\t * _.isFunction(/abc/);\n\t * // => false\n\t */\n\tfunction isFunction(value) {\n\t // The use of `Object#toString` avoids issues with the `typeof` operator\n\t // in Safari 8-9 which returns 'object' for typed array and other constructors.\n\t var tag = isObject(value) ? objectToString.call(value) : '';\n\t return tag == funcTag || tag == genTag;\n\t}\n\t\n\t/**\n\t * Checks if `value` is a valid array-like length.\n\t *\n\t * **Note:** This method is loosely based on\n\t * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n\t * @example\n\t *\n\t * _.isLength(3);\n\t * // => true\n\t *\n\t * _.isLength(Number.MIN_VALUE);\n\t * // => false\n\t *\n\t * _.isLength(Infinity);\n\t * // => false\n\t *\n\t * _.isLength('3');\n\t * // => false\n\t */\n\tfunction isLength(value) {\n\t return typeof value == 'number' &&\n\t value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n\t}\n\t\n\t/**\n\t * Checks if `value` is the\n\t * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n\t * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n\t * @example\n\t *\n\t * _.isObject({});\n\t * // => true\n\t *\n\t * _.isObject([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObject(_.noop);\n\t * // => true\n\t *\n\t * _.isObject(null);\n\t * // => false\n\t */\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return !!value && (type == 'object' || type == 'function');\n\t}\n\t\n\t/**\n\t * Checks if `value` is object-like. A value is object-like if it's not `null`\n\t * and has a `typeof` result of \"object\".\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n\t * @example\n\t *\n\t * _.isObjectLike({});\n\t * // => true\n\t *\n\t * _.isObjectLike([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObjectLike(_.noop);\n\t * // => false\n\t *\n\t * _.isObjectLike(null);\n\t * // => false\n\t */\n\tfunction isObjectLike(value) {\n\t return !!value && typeof value == 'object';\n\t}\n\t\n\tmodule.exports = difference;\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\t\n\tmodule.exports = {\n\t emit: function emit(el, name, data) {\n\t el.dispatchEvent(new CustomEvent(name, { detail: data }));\n\t }\n\t};\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// aframe-colorwheel-component.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/dist/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap bc4f0768de88c6412e38","/**\n * Colorwheel for A-FRAME Material\n * @author Mo Kargas (DEVLAD) [email protected]\n */\n\nconst Event = require('./src/utils')\n\nimport copy from 'copy-to-clipboard'\nimport difference from 'lodash.difference'\n\nAFRAME.registerComponent('colorwheel', {\n dependencies: ['raycaster'],\n tweenDuration: 280,\n tweenEasing: TWEEN.Easing.Cubic.Out,\n padding: 0.15,\n hsv: {\n h: 0.0,\n s: 0.0,\n v: 1.0\n },\n defaultMaterial: {\n color: '#ffffff',\n flatShading: true,\n transparent: true,\n shader: 'flat',\n fog: false,\n side: 'double'\n },\n color: '#ffffff',\n schema: {\n disabled: {\n type: 'boolean',\n default: false\n },\n backgroundColor: {\n type: 'color',\n default: '#FFF'\n },\n //Size of the colorWheel. NOTE: Assumed in metres.\n wheelSize: {\n type: 'number',\n default: 0.4\n },\n //Show color choice in an element\n showSelection: {\n type: 'boolean',\n default: true\n },\n selectionSize: {\n type: 'number',\n default: 0.10\n },\n showHexValue: {\n type: 'boolean',\n default: false\n },\n showSwatches: {\n type: 'boolean',\n default: false\n },\n swatches: {\n type: 'array',\n default: ['#000000', '#FFFFFF', '#ff0045', '#2aa8dc', '#ffed00', '#4c881d', '#b14bff']\n }\n },\n\n init: function() {\n const that = this,\n padding = this.padding,\n defaultMaterial = this.defaultMaterial\n\n this.swatchReady = false\n\n //Background color of this interface\n //TODO: Expose sizing for deeper customisation?\n this.backgroundWidth = this.backgroundHeight = this.data.wheelSize * 2\n this.brightnessSliderHeight = (this.data.wheelSize + padding) * 2\n this.brightnessSliderWidth = 0.10\n\n //Check if we have the a-rounded component\n if (AFRAME.components.hasOwnProperty('rounded')) {\n this.background = document.createElement('a-rounded')\n this.background.setAttribute('radius', 0.02)\n this.background.setAttribute('position', {\n x: -(this.data.wheelSize + padding),\n y: -(this.data.wheelSize + padding),\n z: -0.001\n })\n } else {\n this.background = document.createElement('a-plane')\n this.background.setAttribute('position', {\n x: 0,\n y: 0,\n z: -0.001\n })\n }\n this.background.setAttribute('width', this.backgroundWidth + 2 * padding)\n this.background.setAttribute('height', this.backgroundHeight + 2 * padding)\n this.background.setAttribute('material', 'shader', 'flat')\n this.background.setAttribute('side', 'double')\n this.el.appendChild(this.background)\n\n //Show Swatches\n this.swatchContainer = document.createElement('a-plane')\n this.swatchContainer.setAttribute('class', 'swatch-container')\n this.swatchContainer.setAttribute('material', this.defaultMaterial)\n this.swatchContainer.addEventListener('loaded', this.onSwatchReady.bind(this))\n\n //Give swatch panel a rakish angle\n this.swatchContainer.setAttribute('rotation', {\n x: -30,\n y: 0,\n z: 0\n })\n this.el.appendChild(this.swatchContainer)\n\n //Show hex value display\n if (this.data.showHexValue) {\n let hexValueHeight = 0.1,\n hexValueWidth = 2 * (this.data.wheelSize + padding)\n\n this.hexValueText = document.createElement('a-entity')\n\n //A basic geo is required for interactions\n this.hexValueText.setAttribute('geometry', {\n primitive: 'plane',\n width: hexValueWidth - this.brightnessSliderWidth,\n height: hexValueHeight\n })\n\n this.hexValueText.setAttribute('material', defaultMaterial)\n this.hexValueText.setAttribute('position', {\n x: -this.brightnessSliderWidth,\n y: this.data.wheelSize + hexValueHeight,\n z: 0.0\n })\n\n this.hexValueText.setAttribute('material', 'opacity', 0)\n this.hexValueText.setAttribute('text', {\n width: hexValueWidth,\n height: hexValueHeight,\n align: 'right',\n baseline: 'center',\n wrapCount: 20.4,\n color: '#666'\n })\n\n //Copy value to clipboard on click\n this.hexValueText.addEventListener('click', this.onHexValueClicked.bind(this))\n this.el.appendChild(this.hexValueText)\n }\n\n //Circle for colorwheel\n this.colorWheel = document.createElement('a-circle')\n this.colorWheel.setAttribute('radius', this.data.wheelSize)\n this.colorWheel.setAttribute('material', defaultMaterial)\n this.colorWheel.setAttribute('position', {\n x: 0,\n y: 0,\n z: 0.001\n })\n this.el.appendChild(this.colorWheel)\n\n //Plane for the brightness slider\n this.brightnessSlider = document.createElement('a-plane')\n this.brightnessSlider.setAttribute('width', this.brightnessSliderWidth)\n this.brightnessSlider.setAttribute('height', this.brightnessSliderHeight)\n this.brightnessSlider.setAttribute('material', defaultMaterial)\n this.brightnessSlider.setAttribute('position', {\n x: this.data.wheelSize + this.brightnessSliderWidth,\n y: 0,\n z: 0.001\n })\n this.el.appendChild(this.brightnessSlider)\n\n //Plane the color selection element will inhabit\n if (this.data.showSelection) {\n this.selectionEl = document.createElement('a-circle')\n this.selectionEl.setAttribute('radius', this.data.selectionSize)\n this.selectionEl.setAttribute('material', defaultMaterial)\n\n //Place in top left, lift slightly\n this.selectionEl.setAttribute('position', {\n x: -this.data.wheelSize,\n y: this.data.wheelSize,\n z: 0.001\n })\n this.el.appendChild(this.selectionEl)\n }\n\n //Color 'cursor'. We'll use this to indicate a rough color selection\n this.colorCursorOptions = {\n cursorRadius: 0.025,\n cursorSegments: 32,\n cursorColor: new THREE.Color(0x000000)\n }\n\n this.colorCursorOptions.cursorMaterial = new THREE.MeshBasicMaterial({\n color: this.colorCursorOptions.cursorColor,\n transparent: true\n });\n\n this.colorCursor = document.createElement('a-entity')\n this.brightnessCursor = document.createElement('a-entity')\n\n let geometry = new THREE.TorusBufferGeometry(this.colorCursorOptions.cursorRadius, this.colorCursorOptions.cursorRadius - 0.02, this.colorCursorOptions.cursorSegments, this.colorCursorOptions.cursorSegments / 4)\n this.colorCursor.setObject3D('mesh', new THREE.Mesh(geometry, this.colorCursorOptions.cursorMaterial))\n this.brightnessCursor.setObject3D('mesh', new THREE.Mesh(geometry, this.colorCursorOptions.cursorMaterial))\n\n this.el.appendChild(this.colorCursor)\n this.brightnessSlider.appendChild(this.brightnessCursor)\n this.brightnessCursor.setAttribute('position', {\n x: 0,\n y: this.brightnessSliderHeight / 2,\n z: 0\n })\n\n //Handlers\n this.bindMethods()\n\n //TODO: Replace setTimeout as it can be unreliable\n setTimeout(() => {\n that.el.initColorWheel()\n that.el.initBrightnessSlider()\n that.el.refreshRaycaster()\n if (that.data.showSwatches) that.el.generateSwatches(that.data.swatches)\n that.colorWheel.addEventListener('click', this.onColorWheelClicked.bind(this))\n that.brightnessSlider.addEventListener('click', this.onBrightnessSliderClicked.bind(this))\n }, 5)\n },\n //Util to animate between positions. Item represents a mesh or object containing a position\n setPositionTween: function(item, fromPosition, toPosition) {\n this.tween = new TWEEN.Tween(fromPosition).to(toPosition, this.tweenDuration).onUpdate(function() {\n item.position.x = this.x\n item.position.y = this.y\n item.position.z = this.z\n }).easing(this.tweenEasing).start()\n\n return this.tween\n },\n //Util to animate between colors. Item represents a mesh or object's material\n setColorTween: function(item, fromColor, toColor) {\n this.tween = new TWEEN.Tween(new THREE.Color(fromColor)).to(toColor, this.tweenDuration).onUpdate(function() {\n item.color.r = this.r\n item.color.g = this.g\n item.color.b = this.b\n }).easing(this.tweenEasing).start()\n\n return this.tween\n },\n onColorWheelClicked: function(evt) {\n if (this.data.disabled) return;\n this.el.onHueDown(evt.detail.intersection.point)\n },\n onBrightnessSliderClicked: function(evt) {\n if (this.data.disabled) return;\n this.el.onBrightnessDown(evt.detail.intersection.point)\n },\n onHexValueClicked: function() {\n copy(this.hexValueText.getAttribute('text').value)\n },\n generateSwatches: function(swatchData) {\n //Generate clickable swatch elements from a given array\n if (swatchData === undefined) return\n\n const containerWidth = (this.data.wheelSize + this.padding) * 2,\n containerHeight = 0.15,\n swatchWidth = containerWidth / swatchData.length\n\n this.swatchContainer.setAttribute('width', containerWidth)\n this.swatchContainer.setAttribute('height', containerHeight)\n this.swatchContainer.setAttribute('position', {\n x: 0,\n y: -this.backgroundHeight + containerHeight,\n z: 0.03\n })\n\n //Loop through swatches and create elements\n for (let i = 0; i < swatchData.length; i++) {\n const color = swatchData[i]\n let swatch = document.createElement('a-plane')\n\n swatch.setAttribute('material', this.defaultMaterial)\n swatch.setAttribute('width', swatchWidth)\n swatch.setAttribute('height', containerHeight)\n swatch.setAttribute('color', color)\n swatch.setAttribute('class', 'swatch')\n swatch.setAttribute('position', {\n x: -(containerWidth - swatchWidth) / 2 + i * swatchWidth,\n y: 0,\n z: 0.001 //prevent z-fighting\n })\n swatch.addEventListener('click', this.onSwatchClicked.bind(this, color))\n this.swatchContainer.appendChild(swatch)\n }\n this.el.refreshRaycaster()\n },\n bindMethods: function() {\n this.el.generateSwatches = this.generateSwatches.bind(this)\n this.el.initColorWheel = this.initColorWheel.bind(this)\n this.el.initBrightnessSlider = this.initBrightnessSlider.bind(this)\n this.el.updateColor = this.updateColor.bind(this)\n this.el.onHueDown = this.onHueDown.bind(this)\n this.el.onBrightnessDown = this.onBrightnessDown.bind(this)\n this.el.refreshRaycaster = this.refreshRaycaster.bind(this)\n this.el.clearSwatches = this.clearSwatches.bind(this)\n },\n onSwatchReady: function() {\n this.swatchReady = true\n },\n clearSwatches: function() {\n if (this.swatchReady) while (this.swatchContainer.firstChild) this.swatchContainer.removeChild(this.swatchContainer.firstChild)\n },\n refreshRaycaster: function() {\n const raycasterEl = AFRAME.scenes[0].querySelector('[raycaster]')\n raycasterEl.components.raycaster.refreshObjects()\n },\n initBrightnessSlider: function() {\n /*\n * NOTE:\n *\n * In A-Painter, the brightness slider is actually a model submesh / element.\n * Here we generate it using GLSL and add it to our plane material\n */\n\n const vertexShader = `\n varying vec2 vUv;\n void main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n }\n `\n\n const fragmentShader = `\n uniform vec3 color1;\n uniform vec3 color2;\n varying vec2 vUv;\n\n void main(){\n vec4 c1 = vec4(color1, 1.0);\n \t vec4 c2 = vec4(color2, 1.0);\n\n vec4 color = mix(c2, c1, smoothstep(0.0, 1.0, vUv.y));\n gl_FragColor = color;\n }\n `\n\n let material = new THREE.ShaderMaterial({\n uniforms: {\n color1: {\n type: 'c',\n value: new THREE.Color(0xFFFFFF)\n },\n color2: {\n type: 'c',\n value: new THREE.Color(0x000000)\n }\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader\n })\n\n this.brightnessSlider.getObject3D('mesh').material = material;\n this.brightnessSlider.getObject3D('mesh').material.needsUpdate = true;\n\n },\n initColorWheel: function() {\n const colorWheel = this.colorWheel.getObject3D('mesh')\n const vertexShader = `\n\n varying vec2 vUv;\n void main() {\n vUv = uv;\n vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);\n gl_Position = projectionMatrix * mvPosition;\n }\n `;\n\n const fragmentShader = `\n #define M_PI2 6.28318530718\n uniform float brightness;\n varying vec2 vUv;\n vec3 hsb2rgb(in vec3 c){\n vec3 rgb = clamp(abs(mod(c.x * 6.0 + vec3(0.0, 4.0, 2.0), 6.0) - 3.0) - 1.0, 0.0, 1.0 );\n rgb = rgb * rgb * (3.0 - 2.0 * rgb);\n return c.z * mix( vec3(1.0), rgb, c.y);\n }\n\n void main() {\n vec2 toCenter = vec2(0.5) - vUv;\n float angle = atan(toCenter.y, toCenter.x);\n float radius = length(toCenter) * 2.0;\n vec3 color = hsb2rgb(vec3((angle / M_PI2) + 0.5, radius, brightness));\n gl_FragColor = vec4(color, 1.0);\n }\n `;\n\n let material = new THREE.ShaderMaterial({\n uniforms: {\n brightness: {\n type: 'f',\n value: this.hsv.v\n }\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader\n });\n\n colorWheel.material = material\n colorWheel.material.needsUpdate = true\n },\n onSwatchClicked: function(color) {\n const colorWheel = this.colorWheel.getObject3D('mesh'),\n brightnessCursor = this.brightnessCursor.getObject3D('mesh'),\n brightnessSlider = this.brightnessSlider.getObject3D('mesh')\n\n let rgb = this.hexToRgb(color)\n this.hsv = this.rgbToHsv(rgb.r, rgb.g, rgb.b)\n\n let angle = this.hsv.h * 2 * Math.PI,\n radius = this.hsv.s * this.data.wheelSize\n\n let x = radius * Math.cos(angle),\n y = radius * Math.sin(angle),\n z = colorWheel.position.z\n\n let colorPosition = new THREE.Vector3(x, y, z)\n colorWheel.localToWorld(colorPosition)\n //We can reuse hueDown for this\n this.onHueDown(colorPosition)\n\n //Need to do the reverse of onbrightnessdown\n let offset = this.hsv.v * this.brightnessSliderHeight\n let bY = offset - this.brightnessSliderHeight\n let brightnessPosition = new THREE.Vector3(0, bY, 0)\n this.setPositionTween(brightnessCursor, brightnessCursor.position, brightnessPosition)\n colorWheel.material.uniforms['brightness'].value = this.hsv.v\n\n },\n onBrightnessDown: function(position) {\n const brightnessSlider = this.brightnessSlider.getObject3D('mesh'),\n brightnessCursor = this.brightnessCursor.getObject3D('mesh'),\n colorWheel = this.colorWheel.getObject3D('mesh')\n\n brightnessSlider.updateMatrixWorld()\n brightnessSlider.worldToLocal(position)\n\n //Brightness is a value between 0 and 1. The parent plane is centre registered, hence offset\n let cursorOffset = position.y + this.brightnessSliderHeight / 2\n let brightness = cursorOffset / this.brightnessSliderHeight\n let updatedPosition = {\n x: 0,\n y: position.y - this.brightnessSliderHeight / 2,\n z: 0\n }\n\n //Set brightness cursor position to offset position\n // Uncomment to remove anims: brightnessCursor.position.copy(updatedPosition)\n this.setPositionTween(brightnessCursor, brightnessCursor.position, updatedPosition)\n\n //Update material brightness\n colorWheel.material.uniforms['brightness'].value = brightness\n this.hsv.v = brightness\n this.el.updateColor()\n },\n onHueDown: function(position) {\n const colorWheel = this.colorWheel.getObject3D('mesh'),\n colorCursor = this.colorCursor.getObject3D('mesh'),\n radius = this.data.wheelSize\n\n colorWheel.updateMatrixWorld()\n colorWheel.worldToLocal(position)\n\n // Uncomment to remove anims: this.colorCursor.getObject3D('mesh').position.copy(position)\n this.setPositionTween(colorCursor, colorCursor.position, position)\n\n //Determine Hue and Saturation value from polar co-ordinates\n let polarPosition = {\n r: Math.sqrt(position.x * position.x + position.y * position.y),\n theta: Math.PI + Math.atan2(position.y, position.x)\n }\n\n let angle = ((polarPosition.theta * (180 / Math.PI)) + 180) % 360\n this.hsv.h = angle / 360\n this.hsv.s = polarPosition.r / radius\n\n this.el.updateColor()\n },\n\n updateColor: function() {\n\n let rgb = this.hsvToRgb(this.hsv),\n color = `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`,\n hex = `#${new THREE.Color( color ).getHexString()}`\n\n const selectionEl = this.selectionEl.getObject3D('mesh'),\n colorCursor = this.colorCursor.getObject3D('mesh'),\n brightnessCursor = this.brightnessCursor.getObject3D('mesh')\n\n //Update indicator element of selected color\n if (this.data.showSelection) {\n //Uncomment for no tweens: selectionEl.material.color.set(color)\n this.setColorTween(selectionEl.material, selectionEl.material.color, new THREE.Color(color))\n selectionEl.material.needsUpdate = true\n }\n\n //Change cursor colors based on brightness\n if (this.hsv.v >= 0.5) {\n this.setColorTween(colorCursor.material, colorCursor.material.color, new THREE.Color(0x000000))\n this.setColorTween(brightnessCursor.material, brightnessCursor.material.color, new THREE.Color(0x000000))\n } else {\n this.setColorTween(colorCursor.material, colorCursor.material.color, new THREE.Color(0xFFFFFF))\n this.setColorTween(brightnessCursor.material, brightnessCursor.material.color, new THREE.Color(0xFFFFFF))\n }\n\n //showHexValue set to true, update text\n if (this.data.showHexValue) this.hexValueText.setAttribute('text', 'value', hex)\n\n //Notify listeners the color has changed.\n let eventDetail = {\n style: color,\n rgb: rgb,\n hsv: this.hsv,\n hex: hex\n };\n\n Event.emit(this.el, 'changecolor', eventDetail)\n Event.emit(document.body, 'didchangecolor', eventDetail)\n\n },\n hexToRgb: function(hex) {\n let rgb = hex.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i, (m, r, g, b) => '#' + r + r + g + g + b + b)\n .substring(1).match(/.{2}/g)\n .map(x => parseInt(x, 16))\n\n return {\n r: rgb[0],\n g: rgb[1],\n b: rgb[2]\n }\n },\n rgbToHsv: function(r, g, b) {\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var d = max - min;\n var h;\n var s = (max === 0 ? 0 : d / max);\n var v = max;\n\n if (arguments.length === 1) {\n g = r.g;\n b = r.b;\n r = r.r;\n }\n\n switch (max) {\n case min:\n h = 0;\n break;\n case r:\n h = (g - b) + d * (g < b ? 6 : 0);\n h /= 6 * d;\n break;\n case g:\n h = (b - r) + d * 2;\n h /= 6 * d;\n break;\n case b:\n h = (r - g) + d * 4;\n h /= 6 * d;\n break;\n }\n return {\n h: h,\n s: s,\n v: v / 255\n };\n },\n hsvToRgb: function(hsv) {\n var r, g, b, i, f, p, q, t;\n var h = THREE.Math.clamp(hsv.h, 0, 1);\n var s = THREE.Math.clamp(hsv.s, 0, 1);\n var v = hsv.v;\n\n i = Math.floor(h * 6);\n f = h * 6 - i;\n p = v * (1 - s);\n q = v * (1 - f * s);\n t = v * (1 - (1 - f) * s);\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n }\n return {\n r: Math.round(r * 255),\n g: Math.round(g * 255),\n b: Math.round(b * 255)\n };\n },\n update: function(oldData) {\n if (!oldData) return\n if (this.data.backgroundColor !== oldData.backgroundColor) this.background.setAttribute('color', this.data.backgroundColor)\n\n let swatchesChanged = difference(oldData.swatches, this.data.swatches).length > 0\n if (swatchesChanged && this.data.showSwatches && this.data.swatches.filter(item => item.length === 7).length === this.data.swatches.length) {\n if (this.swatchReady) {\n this.el.clearSwatches()\n this.el.generateSwatches(this.data.swatches)\n }\n }\n },\n tick: function() {},\n remove: function() {\n const that = this\n //Kill any listeners\n this.colorWheel.removeEventListener('click', this.onColorWheelClicked)\n this.brightnessSlider.removeEventListener('click', this.onBrightnessSliderClicked)\n this.swatchContainer.removeEventListener('loaded', this.onSwatchReady)\n this.hexValueText.removeEventListener('click', this.onHexValueClicked)\n\n if (this.swatchContainer) this.swatchContainer.getObject3D('mesh').children.forEach(child => child.removeEventListener('click', that))\n\n },\n pause: function() {},\n play: function() {}\n});\n\nAFRAME.registerPrimitive('a-colorwheel', {\n defaultComponents: {\n colorwheel: {}\n },\n mappings: {\n disabled: 'colorwheel.disabled',\n backgroundcolor: 'colorwheel.backgroundColor',\n showselection: 'colorwheel.showSelection',\n wheelsize: 'colorwheel.wheelSize',\n selectionsize: 'colorwheel.selectionSize',\n showhexvalue: 'colorwheel.showHexValue',\n showswatches: 'colorwheel.showSwatches',\n swatches: 'colorwheel.swatches'\n }\n});\n\n\n\n// WEBPACK FOOTER //\n// ./index.js","'use strict';\n\nvar deselectCurrent = require('toggle-selection');\n\nvar defaultMessage = 'Copy to clipboard: #{key}, Enter';\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? '⌘' : 'Ctrl') + '+C';\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug, message, reselectPrevious, range, selection, mark, success = false;\n if (!options) { options = {}; }\n debug = options.debug || false;\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement('span');\n mark.textContent = text;\n // reset user styles for span element\n mark.style.all = 'unset';\n // prevents scrolling to the end of the page\n mark.style.position = 'fixed';\n mark.style.top = 0;\n mark.style.clip = 'rect(0, 0, 0, 0)';\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = 'pre';\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = 'text';\n mark.style.MozUserSelect = 'text';\n mark.style.msUserSelect = 'text';\n mark.style.userSelect = 'text';\n\n document.body.appendChild(mark);\n\n range.selectNode(mark);\n selection.addRange(range);\n\n var successful = document.execCommand('copy');\n if (!successful) {\n throw new Error('copy command was unsuccessful');\n }\n success = true;\n } catch (err) {\n debug && console.error('unable to copy using execCommand: ', err);\n debug && console.warn('trying IE specific stuff');\n try {\n window.clipboardData.setData('text', text);\n success = true;\n } catch (err) {\n debug && console.error('unable to copy using clipboardData: ', err);\n debug && console.error('falling back to prompt');\n message = format('message' in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == 'function') {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/copy-to-clipboard/index.js\n// module id = 2\n// module chunks = 0","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/copy-to-clipboard/~/toggle-selection/index.js\n// module id = 3\n// module chunks = 0","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array ? array.length : 0;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\n/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a cache value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = array;\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order of result values is determined by the\n * order they occur in the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n});\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = difference;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash.difference/index.js\n// module id = 4\n// module chunks = 0","module.exports = {\n emit: (el, name, data)=> {\n el.dispatchEvent( new CustomEvent(name, {detail: data}) );\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils.js"],"sourceRoot":""}