vis-util 5.0.6 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/declarations/deep-object-assign.d.ts +1 -3
  2. package/declarations/deep-object-assign.d.ts.map +1 -1
  3. package/declarations/entry-esnext.d.ts +4 -4
  4. package/declarations/entry-esnext.d.ts.map +1 -1
  5. package/declarations/index.d.ts +2 -2
  6. package/declarations/index.d.ts.map +1 -1
  7. package/declarations/random/alea.d.ts +1 -3
  8. package/declarations/random/alea.d.ts.map +1 -1
  9. package/declarations/random/index.d.ts +1 -1
  10. package/declarations/random/index.d.ts.map +1 -1
  11. package/declarations/shared/configurator-types.d.ts +9 -10
  12. package/declarations/shared/configurator-types.d.ts.map +1 -1
  13. package/declarations/shared/index.d.ts +1 -2
  14. package/declarations/shared/index.d.ts.map +1 -1
  15. package/declarations/util.d.ts +2 -63
  16. package/declarations/util.d.ts.map +1 -1
  17. package/esnext/esm/vis-util.js +1629 -1757
  18. package/esnext/esm/vis-util.js.map +1 -1
  19. package/esnext/esm/vis-util.min.js +3 -3
  20. package/esnext/esm/vis-util.min.js.map +1 -1
  21. package/esnext/esm/vis-util.min.mjs +27 -0
  22. package/esnext/esm/vis-util.min.mjs.map +1 -0
  23. package/esnext/esm/vis-util.mjs +3924 -0
  24. package/esnext/esm/vis-util.mjs.map +1 -0
  25. package/esnext/umd/vis-util.cjs +3924 -0
  26. package/esnext/umd/vis-util.cjs.map +1 -0
  27. package/esnext/umd/vis-util.js +3610 -3802
  28. package/esnext/umd/vis-util.js.map +1 -1
  29. package/esnext/umd/vis-util.min.cjs +27 -0
  30. package/esnext/umd/vis-util.min.cjs.map +1 -0
  31. package/esnext/umd/vis-util.min.js +3 -3
  32. package/esnext/umd/vis-util.min.js.map +1 -1
  33. package/package.json +163 -32
  34. package/peer/esm/vis-util.js +7793 -6553
  35. package/peer/esm/vis-util.js.map +1 -1
  36. package/peer/esm/vis-util.min.js +4 -4
  37. package/peer/esm/vis-util.min.js.map +1 -1
  38. package/peer/esm/vis-util.min.mjs +34 -0
  39. package/peer/esm/vis-util.min.mjs.map +1 -0
  40. package/peer/esm/vis-util.mjs +12696 -0
  41. package/peer/esm/vis-util.mjs.map +1 -0
  42. package/peer/umd/vis-util.cjs +12763 -0
  43. package/peer/umd/vis-util.cjs.map +1 -0
  44. package/peer/umd/vis-util.js +7793 -6553
  45. package/peer/umd/vis-util.js.map +1 -1
  46. package/peer/umd/vis-util.min.cjs +34 -0
  47. package/peer/umd/vis-util.min.cjs.map +1 -0
  48. package/peer/umd/vis-util.min.js +4 -4
  49. package/peer/umd/vis-util.min.js.map +1 -1
  50. package/standalone/esm/vis-util.js +7793 -6553
  51. package/standalone/esm/vis-util.js.map +1 -1
  52. package/standalone/esm/vis-util.min.js +4 -4
  53. package/standalone/esm/vis-util.min.js.map +1 -1
  54. package/standalone/esm/vis-util.min.mjs +34 -0
  55. package/standalone/esm/vis-util.min.mjs.map +1 -0
  56. package/standalone/esm/vis-util.mjs +12696 -0
  57. package/standalone/esm/vis-util.mjs.map +1 -0
  58. package/standalone/umd/vis-util.cjs +12763 -0
  59. package/standalone/umd/vis-util.cjs.map +1 -0
  60. package/standalone/umd/vis-util.js +7793 -6553
  61. package/standalone/umd/vis-util.js.map +1 -1
  62. package/standalone/umd/vis-util.min.cjs +34 -0
  63. package/standalone/umd/vis-util.min.cjs.map +1 -0
  64. package/standalone/umd/vis-util.min.js +4 -4
  65. package/standalone/umd/vis-util.min.js.map +1 -1
@@ -0,0 +1,27 @@
1
+ /**
2
+ * vis-util
3
+ * https://github.com/visjs/vis-util
4
+ *
5
+ * utilitie collection for visjs
6
+ *
7
+ * @version 6.0.0
8
+ * @date 2025-07-12T18:02:43.836Z
9
+ *
10
+ * @copyright (c) 2011-2017 Almende B.V, http://almende.com
11
+ * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs
12
+ *
13
+ * @license
14
+ * vis.js is dual licensed under both
15
+ *
16
+ * 1. The Apache 2.0 License
17
+ * http://www.apache.org/licenses/LICENSE-2.0
18
+ *
19
+ * and
20
+ *
21
+ * 2. The MIT License
22
+ * http://opensource.org/licenses/MIT
23
+ *
24
+ * vis.js may be distributed under either license.
25
+ */
26
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("component-emitter"),require("@egjs/hammerjs")):"function"==typeof define&&define.amd?define(["exports","component-emitter","@egjs/hammerjs"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).vis=t.vis||{},t.Emitter,t.Hammer)}(this,function(t,e,i){const o=Symbol("DELETE");function n(...t){const e=r(...t);return a(e),e}function r(...t){if(t.length<2)return t[0];if(t.length>2)return r(n(t[0],t[1]),...t.slice(2));const e=t[0],i=t[1];if(e instanceof Date&&i instanceof Date)return e.setTime(i.getTime()),e;for(const t of Reflect.ownKeys(i))Object.prototype.propertyIsEnumerable.call(i,t)&&(i[t]===o?delete e[t]:null===e[t]||null===i[t]||"object"!=typeof e[t]||"object"!=typeof i[t]||Array.isArray(e[t])||Array.isArray(i[t])?e[t]=s(i[t]):e[t]=r(e[t],i[t]));return e}function s(t){return Array.isArray(t)?t.map(t=>s(t)):"object"==typeof t&&null!==t?t instanceof Date?new Date(t.getTime()):r({},t):t}function a(t){for(const e of Object.keys(t))t[e]===o?delete t[e]:"object"==typeof t[e]&&null!==t[e]&&a(t[e])}const l="undefined"!=typeof window?window.Hammer||i:function(){return function(){const t=()=>{};return{on:t,off:t,destroy:t,emit:t,get:()=>({set:t})}}()};function c(t){this._cleanupQueue=[],this.active=!1,this._dom={container:t,overlay:document.createElement("div")},this._dom.overlay.classList.add("vis-overlay"),this._dom.container.appendChild(this._dom.overlay),this._cleanupQueue.push(()=>{this._dom.overlay.parentNode.removeChild(this._dom.overlay)});const e=l(this._dom.overlay);e.on("tap",this._onTapOverlay.bind(this)),this._cleanupQueue.push(()=>{e.destroy()});["tap","doubletap","press","pinch","pan","panstart","panmove","panend"].forEach(t=>{e.on(t,t=>{t.srcEvent.stopPropagation()})}),document&&document.body&&(this._onClick=e=>{(function(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1})(e.target,t)||this.deactivate()},document.body.addEventListener("click",this._onClick),this._cleanupQueue.push(()=>{document.body.removeEventListener("click",this._onClick)})),this._escListener=t=>{("key"in t?"Escape"===t.key:27===t.keyCode)&&this.deactivate()}}e(c.prototype),c.current=null,c.prototype.destroy=function(){this.deactivate();for(const t of this._cleanupQueue.splice(0).reverse())t()},c.prototype.activate=function(){c.current&&c.current.deactivate(),c.current=this,this.active=!0,this._dom.overlay.style.display="none",this._dom.container.classList.add("vis-active"),this.emit("change"),this.emit("activate"),document.body.addEventListener("keydown",this._escListener)},c.prototype.deactivate=function(){this.active=!1,this._dom.overlay.style.display="block",this._dom.container.classList.remove("vis-active"),document.body.removeEventListener("keydown",this._escListener),this.emit("change"),this.emit("deactivate")},c.prototype._onTapOverlay=function(t){this.activate(),t.srcEvent.stopPropagation()};const h=/^\/?Date\((-?\d+)/i,d=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,u=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,p=/^rgb\( *(1?\d{1,2}|2[0-4]\d|25[0-5]) *, *(1?\d{1,2}|2[0-4]\d|25[0-5]) *, *(1?\d{1,2}|2[0-4]\d|25[0-5]) *\)$/i,f=/^rgba\( *(1?\d{1,2}|2[0-4]\d|25[0-5]) *, *(1?\d{1,2}|2[0-4]\d|25[0-5]) *, *(1?\d{1,2}|2[0-4]\d|25[0-5]) *, *([01]|0?\.\d+) *\)$/i;function g(t){return t instanceof Number||"number"==typeof t}function m(t){return t instanceof String||"string"==typeof t}function v(t){return"object"==typeof t&&null!==t}function b(t,e,i,o){let n=!1;!0===o&&(n=null===e[i]&&void 0!==t[i]),n?delete t[i]:t[i]=e[i]}const y=Object.assign;function k(t,e,i=!1,o=!1){for(const n in e)(Object.prototype.hasOwnProperty.call(e,n)||!0===i)&&("object"==typeof e[n]&&null!==e[n]&&Object.getPrototypeOf(e[n])===Object.prototype?void 0===t[n]?t[n]=k({},e[n],i):"object"==typeof t[n]&&null!==t[n]&&Object.getPrototypeOf(t[n])===Object.prototype?k(t[n],e[n],i):b(t,e,n,o):Array.isArray(e[n])?t[n]=e[n].slice():b(t,e,n,o));return t}function C(t,e){return[...t,e]}function F(t){return t.slice()}const _=Object.values;const w={asBoolean:(t,e)=>("function"==typeof t&&(t=t()),null!=t?0!=t:e||null),asNumber:(t,e)=>("function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null),asString:(t,e)=>("function"==typeof t&&(t=t()),null!=t?String(t):e||null),asSize:(t,e)=>("function"==typeof t&&(t=t()),m(t)?t:g(t)?t+"px":e||null),asElement:(t,e)=>("function"==typeof t&&(t=t()),t||e||null)};function E(t){let e;switch(t.length){case 3:case 4:return e=u.exec(t),e?{r:parseInt(e[1]+e[1],16),g:parseInt(e[2]+e[2],16),b:parseInt(e[3]+e[3],16)}:null;case 6:case 7:return e=d.exec(t),e?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}:null;default:return null}}function x(t,e,i){return"#"+((1<<24)+(t<<16)+(e<<8)+i).toString(16).slice(1)}function D(t,e,i){t/=255,e/=255,i/=255;const o=Math.min(t,Math.min(e,i)),n=Math.max(t,Math.max(e,i));if(o===n)return{h:0,s:0,v:o};return{h:60*((t===o?3:i===o?1:5)-(t===o?e-i:i===o?t-e:i-t)/(n-o))/360,s:(n-o)/n,v:n}}function O(t){const e=document.createElement("div"),i={};e.style.cssText=t;for(let t=0;t<e.style.length;++t)i[e.style[t]]=e.style.getPropertyValue(e.style[t]);return i}function P(t,e,i){let o,n,r;const s=Math.floor(6*t),a=6*t-s,l=i*(1-e),c=i*(1-a*e),h=i*(1-(1-a)*e);switch(s%6){case 0:o=i,n=h,r=l;break;case 1:o=c,n=i,r=l;break;case 2:o=l,n=i,r=h;break;case 3:o=l,n=c,r=i;break;case 4:o=h,n=l,r=i;break;case 5:o=i,n=l,r=c}return{r:Math.floor(255*o),g:Math.floor(255*n),b:Math.floor(255*r)}}function A(t,e,i){const o=P(t,e,i);return x(o.r,o.g,o.b)}function B(t){const e=E(t);if(!e)throw new TypeError(`'${t}' is not a valid color.`);return D(e.r,e.g,e.b)}function j(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function R(t){return p.test(t)}function T(t){return f.test(t)}function N(t){if(null===t||"object"!=typeof t)return null;if(t instanceof Element)return t;const e=Object.create(t);for(const i in t)Object.prototype.hasOwnProperty.call(t,i)&&"object"==typeof t[i]&&(e[i]=N(t[i]));return e}const S={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>t*(2-t),easeInOutQuad:t=>t<.5?2*t*t:(4-2*t)*t-1,easeInCubic:t=>t*t*t,easeOutCubic:t=>--t*t*t+1,easeInOutCubic:t=>t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1,easeInQuart:t=>t*t*t*t,easeOutQuart:t=>1- --t*t*t*t,easeInOutQuart:t=>t<.5?8*t*t*t*t:1-8*--t*t*t*t,easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>1+--t*t*t*t*t,easeInOutQuint:t=>t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t};const M={black:"#000000",navy:"#000080",darkblue:"#00008B",mediumblue:"#0000CD",blue:"#0000FF",darkgreen:"#006400",green:"#008000",teal:"#008080",darkcyan:"#008B8B",deepskyblue:"#00BFFF",darkturquoise:"#00CED1",mediumspringgreen:"#00FA9A",lime:"#00FF00",springgreen:"#00FF7F",aqua:"#00FFFF",cyan:"#00FFFF",midnightblue:"#191970",dodgerblue:"#1E90FF",lightseagreen:"#20B2AA",forestgreen:"#228B22",seagreen:"#2E8B57",darkslategray:"#2F4F4F",limegreen:"#32CD32",mediumseagreen:"#3CB371",turquoise:"#40E0D0",royalblue:"#4169E1",steelblue:"#4682B4",darkslateblue:"#483D8B",mediumturquoise:"#48D1CC",indigo:"#4B0082",darkolivegreen:"#556B2F",cadetblue:"#5F9EA0",cornflowerblue:"#6495ED",mediumaquamarine:"#66CDAA",dimgray:"#696969",slateblue:"#6A5ACD",olivedrab:"#6B8E23",slategray:"#708090",lightslategray:"#778899",mediumslateblue:"#7B68EE",lawngreen:"#7CFC00",chartreuse:"#7FFF00",aquamarine:"#7FFFD4",maroon:"#800000",purple:"#800080",olive:"#808000",gray:"#808080",skyblue:"#87CEEB",lightskyblue:"#87CEFA",blueviolet:"#8A2BE2",darkred:"#8B0000",darkmagenta:"#8B008B",saddlebrown:"#8B4513",darkseagreen:"#8FBC8F",lightgreen:"#90EE90",mediumpurple:"#9370D8",darkviolet:"#9400D3",palegreen:"#98FB98",darkorchid:"#9932CC",yellowgreen:"#9ACD32",sienna:"#A0522D",brown:"#A52A2A",darkgray:"#A9A9A9",lightblue:"#ADD8E6",greenyellow:"#ADFF2F",paleturquoise:"#AFEEEE",lightsteelblue:"#B0C4DE",powderblue:"#B0E0E6",firebrick:"#B22222",darkgoldenrod:"#B8860B",mediumorchid:"#BA55D3",rosybrown:"#BC8F8F",darkkhaki:"#BDB76B",silver:"#C0C0C0",mediumvioletred:"#C71585",indianred:"#CD5C5C",peru:"#CD853F",chocolate:"#D2691E",tan:"#D2B48C",lightgrey:"#D3D3D3",palevioletred:"#D87093",thistle:"#D8BFD8",orchid:"#DA70D6",goldenrod:"#DAA520",crimson:"#DC143C",gainsboro:"#DCDCDC",plum:"#DDA0DD",burlywood:"#DEB887",lightcyan:"#E0FFFF",lavender:"#E6E6FA",darksalmon:"#E9967A",violet:"#EE82EE",palegoldenrod:"#EEE8AA",lightcoral:"#F08080",khaki:"#F0E68C",aliceblue:"#F0F8FF",honeydew:"#F0FFF0",azure:"#F0FFFF",sandybrown:"#F4A460",wheat:"#F5DEB3",beige:"#F5F5DC",whitesmoke:"#F5F5F5",mintcream:"#F5FFFA",ghostwhite:"#F8F8FF",salmon:"#FA8072",antiquewhite:"#FAEBD7",linen:"#FAF0E6",lightgoldenrodyellow:"#FAFAD2",oldlace:"#FDF5E6",red:"#FF0000",fuchsia:"#FF00FF",magenta:"#FF00FF",deeppink:"#FF1493",orangered:"#FF4500",tomato:"#FF6347",hotpink:"#FF69B4",coral:"#FF7F50",darkorange:"#FF8C00",lightsalmon:"#FFA07A",orange:"#FFA500",lightpink:"#FFB6C1",pink:"#FFC0CB",gold:"#FFD700",peachpuff:"#FFDAB9",navajowhite:"#FFDEAD",moccasin:"#FFE4B5",bisque:"#FFE4C4",mistyrose:"#FFE4E1",blanchedalmond:"#FFEBCD",papayawhip:"#FFEFD5",lavenderblush:"#FFF0F5",seashell:"#FFF5EE",cornsilk:"#FFF8DC",lemonchiffon:"#FFFACD",floralwhite:"#FFFAF0",snow:"#FFFAFA",yellow:"#FFFF00",lightyellow:"#FFFFE0",ivory:"#FFFFF0",white:"#FFFFFF"};let I=class{constructor(t=1){this.pixelRatio=t,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=()=>{},this.closeCallback=()=>{},this._create()}insertTo(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}setUpdateCallback(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker update callback is not a function.");this.updateCallback=t}setCloseCallback(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker closing callback is not a function.");this.closeCallback=t}_isColorString(t){if("string"==typeof t)return M[t]}setColor(t,e=!0){if("none"===t)return;let i;const o=this._isColorString(t);if(void 0!==o&&(t=o),!0===m(t)){if(!0===R(t)){const e=t.substr(4).substr(0,t.length-5).split(",");i={r:e[0],g:e[1],b:e[2],a:1}}else if(!0===T(t)){const e=t.substr(5).substr(0,t.length-6).split(",");i={r:e[0],g:e[1],b:e[2],a:e[3]}}else if(!0===j(t)){const e=E(t);i={r:e.r,g:e.g,b:e.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){const e=void 0!==t.a?t.a:"1.0";i={r:t.r,g:t.g,b:t.b,a:e}}if(void 0===i)throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: "+JSON.stringify(t));this._setColor(i,e)}show(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display="block",this._generateHueCircle()}_hide(t=!0){!0===t&&(this.previousColor=Object.assign({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display="none",setTimeout(()=>{void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0)},0)}_save(){this.updateCallback(this.color),this.applied=!1,this._hide()}_apply(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}_loadLast(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert("There is no last color to load...")}_setColor(t,e=!0){!0===e&&(this.initialColor=Object.assign({},t)),this.color=t;const i=D(t.r,t.g,t.b),o=2*Math.PI,n=this.r*i.s,r=this.centerCoordinates.x+n*Math.sin(o*i.h),s=this.centerCoordinates.y+n*Math.cos(o*i.h);this.colorPickerSelector.style.left=r-.5*this.colorPickerSelector.clientWidth+"px",this.colorPickerSelector.style.top=s-.5*this.colorPickerSelector.clientHeight+"px",this._updatePicker(t)}_setOpacity(t){this.color.a=t/100,this._updatePicker(this.color)}_setBrightness(t){const e=D(this.color.r,this.color.g,this.color.b);e.v=t/100;const i=P(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}_updatePicker(t=this.color){const e=D(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);const o=this.colorPickerCanvas.clientWidth,n=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,o,n),i.putImageData(this.hueCircle,0,0),i.fillStyle="rgba(0,0,0,"+(1-e.v)+")",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),i.fill(),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,this.initialColorDiv.style.backgroundColor="rgba("+this.initialColor.r+","+this.initialColor.g+","+this.initialColor.b+","+this.initialColor.a+")",this.newColorDiv.style.backgroundColor="rgba("+this.color.r+","+this.color.g+","+this.color.b+","+this.color.a+")"}_setSize(){this.colorPickerCanvas.style.width="100%",this.colorPickerCanvas.style.height="100%",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}_create(){if(this.frame=document.createElement("div"),this.frame.className="vis-color-picker",this.colorPickerDiv=document.createElement("div"),this.colorPickerSelector=document.createElement("div"),this.colorPickerSelector.className="vis-selector",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement("canvas"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){const t=this.colorPickerCanvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{const t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerText="Error: your browser does not support HTML canvas",this.colorPickerCanvas.appendChild(t)}this.colorPickerDiv.className="vis-color",this.opacityDiv=document.createElement("div"),this.opacityDiv.className="vis-opacity",this.brightnessDiv=document.createElement("div"),this.brightnessDiv.className="vis-brightness",this.arrowDiv=document.createElement("div"),this.arrowDiv.className="vis-arrow",this.opacityRange=document.createElement("input");try{this.opacityRange.type="range",this.opacityRange.min="0",this.opacityRange.max="100"}catch(t){}this.opacityRange.value="100",this.opacityRange.className="vis-range",this.brightnessRange=document.createElement("input");try{this.brightnessRange.type="range",this.brightnessRange.min="0",this.brightnessRange.max="100"}catch(t){}this.brightnessRange.value="100",this.brightnessRange.className="vis-range",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);const t=this;this.opacityRange.onchange=function(){t._setOpacity(this.value)},this.opacityRange.oninput=function(){t._setOpacity(this.value)},this.brightnessRange.onchange=function(){t._setBrightness(this.value)},this.brightnessRange.oninput=function(){t._setBrightness(this.value)},this.brightnessLabel=document.createElement("div"),this.brightnessLabel.className="vis-label vis-brightness",this.brightnessLabel.innerText="brightness:",this.opacityLabel=document.createElement("div"),this.opacityLabel.className="vis-label vis-opacity",this.opacityLabel.innerText="opacity:",this.newColorDiv=document.createElement("div"),this.newColorDiv.className="vis-new-color",this.newColorDiv.innerText="new",this.initialColorDiv=document.createElement("div"),this.initialColorDiv.className="vis-initial-color",this.initialColorDiv.innerText="initial",this.cancelButton=document.createElement("div"),this.cancelButton.className="vis-button vis-cancel",this.cancelButton.innerText="cancel",this.cancelButton.onclick=this._hide.bind(this,!1),this.applyButton=document.createElement("div"),this.applyButton.className="vis-button vis-apply",this.applyButton.innerText="apply",this.applyButton.onclick=this._apply.bind(this),this.saveButton=document.createElement("div"),this.saveButton.className="vis-button vis-save",this.saveButton.innerText="save",this.saveButton.onclick=this._save.bind(this),this.loadButton=document.createElement("div"),this.loadButton.className="vis-button vis-load",this.loadButton.innerText="load last",this.loadButton.onclick=this._loadLast.bind(this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}_bindHammer(){this.drag={},this.pinch={},this.hammer=new l(this.colorPickerCanvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.on("hammer.input",t=>{t.isFirst&&this._moveSelector(t)}),this.hammer.on("tap",t=>{this._moveSelector(t)}),this.hammer.on("panstart",t=>{this._moveSelector(t)}),this.hammer.on("panmove",t=>{this._moveSelector(t)}),this.hammer.on("panend",t=>{this._moveSelector(t)})}_generateHueCircle(){if(!1===this.generated){const t=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);const e=this.colorPickerCanvas.clientWidth,i=this.colorPickerCanvas.clientHeight;let o,n,r,s;t.clearRect(0,0,e,i),this.centerCoordinates={x:.5*e,y:.5*i},this.r=.49*e;const a=2*Math.PI/360,l=1/360,c=1/this.r;let h;for(r=0;r<360;r++)for(s=0;s<this.r;s++)o=this.centerCoordinates.x+s*Math.sin(a*r),n=this.centerCoordinates.y+s*Math.cos(a*r),h=P(r*l,s*c,1),t.fillStyle="rgb("+h.r+","+h.g+","+h.b+")",t.fillRect(o-.5,n-.5,2,2);t.strokeStyle="rgba(0,0,0,1)",t.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),t.stroke(),this.hueCircle=t.getImageData(0,0,e,i)}this.generated=!0}_moveSelector(t){const e=this.colorPickerDiv.getBoundingClientRect(),i=t.center.x-e.left,o=t.center.y-e.top,n=.5*this.colorPickerDiv.clientHeight,r=.5*this.colorPickerDiv.clientWidth,s=i-r,a=o-n,l=Math.atan2(s,a),c=.98*Math.min(Math.sqrt(s*s+a*a),r),h=Math.cos(l)*c+n,d=Math.sin(l)*c+r;this.colorPickerSelector.style.top=h-.5*this.colorPickerSelector.clientHeight+"px",this.colorPickerSelector.style.left=d-.5*this.colorPickerSelector.clientWidth+"px";let u=l/(2*Math.PI);u=u<0?u+1:u;const p=c/this.r,f=D(this.color.r,this.color.g,this.color.b);f.h=u,f.s=p;const g=P(f.h,f.s,f.v);g.a=this.color.a,this.color=g,this.initialColorDiv.style.backgroundColor="rgba("+this.initialColor.r+","+this.initialColor.g+","+this.initialColor.b+","+this.initialColor.a+")",this.newColorDiv.style.backgroundColor="rgba("+this.color.r+","+this.color.g+","+this.color.b+","+this.color.a+")"}};function L(...t){if(t.length<1)throw new TypeError("Invalid arguments.");if(1===t.length)return document.createTextNode(t[0]);{const e=document.createElement(t[0]);return e.appendChild(L(...t.slice(1))),e}}let H,V=!1;const q="background: #FFeeee; color: #dd0000";const Q=c,W=I,z=class{constructor(t,e,i,o=1,n=()=>!1){this.parent=t,this.changedOptions=[],this.container=e,this.allowCreation=!1,this.hideOption=n,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},Object.assign(this.options,this.defaultOptions),this.configureOptions=i,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new I(o),this.wrapper=void 0}setOptions(t){if(void 0!==t){this.popupHistory={},this._removePopup();let e=!0;if("string"==typeof t)this.options.filter=t;else if(Array.isArray(t))this.options.filter=t.join();else if("object"==typeof t){if(null==t)throw new TypeError("options cannot be null");void 0!==t.container&&(this.options.container=t.container),void 0!==t.filter&&(this.options.filter=t.filter),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)}else"boolean"==typeof t?(this.options.filter=!0,e=t):"function"==typeof t&&(this.options.filter=t,e=!0);!1===this.options.filter&&(e=!1),this.options.enabled=e}this._clean()}setModuleOptions(t){this.moduleOptions=t,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}_create(){this._clean(),this.changedOptions=[];const t=this.options.filter;let e=0,i=!1;for(const o in this.configureOptions)Object.prototype.hasOwnProperty.call(this.configureOptions,o)&&(this.allowCreation=!1,i=!1,"function"==typeof t?(i=t(o,[]),i=i||this._handleObject(this.configureOptions[o],[o],!0)):!0!==t&&-1===t.indexOf(o)||(i=!0),!1!==i&&(this.allowCreation=!0,e>0&&this._makeItem([]),this._makeHeader(o),this._handleObject(this.configureOptions[o],[o])),e++);this._makeButton(),this._push()}_push(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-configuration-wrapper",this.container.appendChild(this.wrapper);for(let t=0;t<this.domElements.length;t++)this.wrapper.appendChild(this.domElements[t]);this._showPopupIfNeeded()}_clean(){for(let t=0;t<this.domElements.length;t++)this.wrapper.removeChild(this.domElements[t]);void 0!==this.wrapper&&(this.container.removeChild(this.wrapper),this.wrapper=void 0),this.domElements=[],this._removePopup()}_getValue(t){let e=this.moduleOptions;for(let i=0;i<t.length;i++){if(void 0===e[t[i]]){e=void 0;break}e=e[t[i]]}return e}_makeItem(t,...e){if(!0===this.allowCreation){const i=document.createElement("div");return i.className="vis-configuration vis-config-item vis-config-s"+t.length,e.forEach(t=>{i.appendChild(t)}),this.domElements.push(i),this.domElements.length}return 0}_makeHeader(t){const e=document.createElement("div");e.className="vis-configuration vis-config-header",e.innerText=t,this._makeItem([],e)}_makeLabel(t,e,i=!1){const o=document.createElement("div");if(o.className="vis-configuration vis-config-label vis-config-s"+e.length,!0===i){for(;o.firstChild;)o.removeChild(o.firstChild);o.appendChild(L("i","b",t))}else o.innerText=t+":";return o}_makeDropdown(t,e,i){const o=document.createElement("select");o.className="vis-configuration vis-config-select";let n=0;void 0!==e&&-1!==t.indexOf(e)&&(n=t.indexOf(e));for(let e=0;e<t.length;e++){const i=document.createElement("option");i.value=t[e],e===n&&(i.selected="selected"),i.innerText=t[e],o.appendChild(i)}const r=this;o.onchange=function(){r._update(this.value,i)};const s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,o)}_makeRange(t,e,i){const o=t[0],n=t[1],r=t[2],s=t[3],a=document.createElement("input");a.className="vis-configuration vis-config-range";try{a.type="range",a.min=n,a.max=r}catch(t){}a.step=s;let l="",c=0;if(void 0!==e){const t=1.2;e<0&&e*t<n?(a.min=Math.ceil(e*t),c=a.min,l="range increased"):e/t<n&&(a.min=Math.ceil(e/t),c=a.min,l="range increased"),e*t>r&&1!==r&&(a.max=Math.ceil(e*t),c=a.max,l="range increased"),a.value=e}else a.value=o;const h=document.createElement("input");h.className="vis-configuration vis-config-rangeinput",h.value=a.value;const d=this;a.onchange=function(){h.value=this.value,d._update(Number(this.value),i)},a.oninput=function(){h.value=this.value};const u=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,u,a,h);""!==l&&this.popupHistory[p]!==c&&(this.popupHistory[p]=c,this._setupPopup(l,p))}_makeButton(){if(!0===this.options.showButton){const t=document.createElement("div");t.className="vis-configuration vis-config-button",t.innerText="generate options",t.onclick=()=>{this._printOptions()},t.onmouseover=()=>{t.className="vis-configuration vis-config-button hover"},t.onmouseout=()=>{t.className="vis-configuration vis-config-button"},this.optionsContainer=document.createElement("div"),this.optionsContainer.className="vis-configuration vis-config-option-container",this.domElements.push(this.optionsContainer),this.domElements.push(t)}}_setupPopup(t,e){if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter<this.popupLimit){const i=document.createElement("div");i.id="vis-configuration-popup",i.className="vis-configuration-popup",i.innerText=t,i.onclick=()=>{this._removePopup()},this.popupCounter+=1,this.popupDiv={html:i,index:e}}}_removePopup(){void 0!==this.popupDiv.html&&(this.popupDiv.html.parentNode.removeChild(this.popupDiv.html),clearTimeout(this.popupDiv.hideTimeout),clearTimeout(this.popupDiv.deleteTimeout),this.popupDiv={})}_showPopupIfNeeded(){if(void 0!==this.popupDiv.html){const t=this.domElements[this.popupDiv.index].getBoundingClientRect();this.popupDiv.html.style.left=t.left+"px",this.popupDiv.html.style.top=t.top-30+"px",document.body.appendChild(this.popupDiv.html),this.popupDiv.hideTimeout=setTimeout(()=>{this.popupDiv.html.style.opacity=0},1500),this.popupDiv.deleteTimeout=setTimeout(()=>{this._removePopup()},1800)}}_makeCheckbox(t,e,i){const o=document.createElement("input");o.type="checkbox",o.className="vis-configuration vis-config-checkbox",o.checked=t,void 0!==e&&(o.checked=e,e!==t&&("object"==typeof t?e!==t.enabled&&this.changedOptions.push({path:i,value:e}):this.changedOptions.push({path:i,value:e})));const n=this;o.onchange=function(){n._update(this.checked,i)};const r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,o)}_makeTextInput(t,e,i){const o=document.createElement("input");o.type="text",o.className="vis-configuration vis-config-text",o.value=e,e!==t&&this.changedOptions.push({path:i,value:e});const n=this;o.onchange=function(){n._update(this.value,i)};const r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,o)}_makeColorField(t,e,i){const o=t[1],n=document.createElement("div");"none"!==(e=void 0===e?o:e)?(n.className="vis-configuration vis-config-colorBlock",n.style.backgroundColor=e):n.className="vis-configuration vis-config-colorBlock none",e=void 0===e?o:e,n.onclick=()=>{this._showColorPicker(e,n,i)};const r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}_showColorPicker(t,e,i){e.onclick=function(){},this.colorPicker.insertTo(e),this.colorPicker.show(),this.colorPicker.setColor(t),this.colorPicker.setUpdateCallback(t=>{const o="rgba("+t.r+","+t.g+","+t.b+","+t.a+")";e.style.backgroundColor=o,this._update(o,i)}),this.colorPicker.setCloseCallback(()=>{e.onclick=()=>{this._showColorPicker(t,e,i)}})}_handleObject(t,e=[],i=!1){let o=!1;const n=this.options.filter;let r=!1;for(const s in t)if(Object.prototype.hasOwnProperty.call(t,s)){o=!0;const a=t[s],l=C(e,s);if("function"==typeof n&&(o=n(s,e),!1===o&&!Array.isArray(a)&&"string"!=typeof a&&"boolean"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,o=this._handleObject(a,l,!0),this.allowCreation=!1===i)),!1!==o){r=!0;const t=this._getValue(l);if(Array.isArray(a))this._handleArray(a,t,l);else if("string"==typeof a)this._makeTextInput(a,t,l);else if("boolean"==typeof a)this._makeCheckbox(a,t,l);else if(a instanceof Object){if(!this.hideOption(e,s,this.moduleOptions))if(void 0!==a.enabled){const t=C(l,"enabled"),e=this._getValue(t);if(!0===e){const t=this._makeLabel(s,l,!0);this._makeItem(l,t),r=this._handleObject(a,l)||r}else this._makeCheckbox(a,e,l)}else{const t=this._makeLabel(s,l,!0);this._makeItem(l,t),r=this._handleObject(a,l)||r}}else console.error("dont know how to handle",a,s,l)}}return r}_handleArray(t,e,i){"string"==typeof t[0]&&"color"===t[0]?(this._makeColorField(t,e,i),t[1]!==e&&this.changedOptions.push({path:i,value:e})):"string"==typeof t[0]?(this._makeDropdown(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:e})):"number"==typeof t[0]&&(this._makeRange(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:Number(e)}))}_update(t,e){const i=this._constructOptions(t,e);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit("configChange",i),this.initialized=!0,this.parent.setOptions(i)}_constructOptions(t,e,i={}){let o=i;t="false"!==(t="true"===t||t)&&t;for(let i=0;i<e.length;i++)"global"!==e[i]&&(void 0===o[e[i]]&&(o[e[i]]={}),i!==e.length-1?o=o[e[i]]:o[e[i]]=t);return i}_printOptions(){const t=this.getOptions();for(;this.optionsContainer.firstChild;)this.optionsContainer.removeChild(this.optionsContainer.firstChild);this.optionsContainer.appendChild(L("pre","const options = "+JSON.stringify(t,null,2)))}getOptions(){const t={};for(let e=0;e<this.changedOptions.length;e++)this._constructOptions(this.changedOptions[e].value,this.changedOptions[e].path,t);return t}},$=l,G=class{constructor(t,e){this.container=t,this.overflowMethod=e||"cap",this.x=0,this.y=0,this.padding=5,this.hidden=!1,this.frame=document.createElement("div"),this.frame.className="vis-tooltip",this.container.appendChild(this.frame)}setPosition(t,e){this.x=parseInt(t),this.y=parseInt(e)}setText(t){if(t instanceof Element){for(;this.frame.firstChild;)this.frame.removeChild(this.frame.firstChild);this.frame.appendChild(t)}else this.frame.innerText=t}show(t){if(void 0===t&&(t=!0),!0===t){const t=this.frame.clientHeight,e=this.frame.clientWidth,i=this.frame.parentNode.clientHeight,o=this.frame.parentNode.clientWidth;let n=0,r=0;if("flip"==this.overflowMethod){let i=!1,s=!0;this.y-t<this.padding&&(s=!1),this.x+e>o-this.padding&&(i=!0),n=i?this.x-e:this.x,r=s?this.y-t:this.y}else r=this.y-t,r+t+this.padding>i&&(r=i-t-this.padding),r<this.padding&&(r=this.padding),n=this.x,n+e+this.padding>o&&(n=o-e-this.padding),n<this.padding&&(n=this.padding);this.frame.style.left=n+"px",this.frame.style.top=r+"px",this.frame.style.visibility="visible",this.hidden=!1}else this.hide()}hide(){this.hidden=!0,this.frame.style.left="0",this.frame.style.top="0",this.frame.style.visibility="hidden"}destroy(){this.frame.parentNode.removeChild(this.frame)}},U=q,J=class t{static validate(e,i,o){V=!1,H=i;let n=i;return void 0!==o&&(n=i[o]),t.parse(e,n,[]),V}static parse(e,i,o){for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.check(n,e,i,o)}static check(e,i,o,n){if(void 0===o[e]&&void 0===o.__any__)return void t.getSuggestion(e,o,n);let r=e,s=!0;void 0===o[e]&&void 0!==o.__any__&&(r="__any__",s="object"===t.getType(i[e]));let a=o[r];s&&void 0!==a.__type__&&(a=a.__type__),t.checkFields(e,i,o,r,a,n)}static checkFields(e,i,o,n,r,s){const a=function(i){console.error("%c"+i+t.printLocation(s,e),q)},l=t.getType(i[e]),c=r[l];void 0!==c?"array"===t.getType(c)&&-1===c.indexOf(i[e])?(a('Invalid option detected in "'+e+'". Allowed values are:'+t.print(c)+' not "'+i[e]+'". '),V=!0):"object"===l&&"__any__"!==n&&(s=C(s,e),t.parse(i[e],o[n],s)):void 0===r.any&&(a('Invalid type received for "'+e+'". Expected: '+t.print(Object.keys(r))+". Received ["+l+'] "'+i[e]+'"'),V=!0)}static getType(t){const e=typeof t;return"object"===e?null===t?"null":t instanceof Boolean?"boolean":t instanceof Number?"number":t instanceof String?"string":Array.isArray(t)?"array":t instanceof Date?"date":void 0!==t.nodeType?"dom":!0===t._isAMomentObject?"moment":"object":"number"===e?"number":"boolean"===e?"boolean":"string"===e?"string":void 0===e?"undefined":e}static getSuggestion(e,i,o){const n=t.findInOptions(e,i,o,!1),r=t.findInOptions(e,H,[],!0);let s;s=void 0!==n.indexMatch?" in "+t.printLocation(n.path,e,"")+'Perhaps it was incomplete? Did you mean: "'+n.indexMatch+'"?\n\n':r.distance<=4&&n.distance>r.distance?" in "+t.printLocation(n.path,e,"")+"Perhaps it was misplaced? Matching option found at: "+t.printLocation(r.path,r.closestMatch,""):n.distance<=8?'. Did you mean "'+n.closestMatch+'"?'+t.printLocation(n.path,e):". Did you mean one of these: "+t.print(Object.keys(i))+t.printLocation(o,e),console.error('%cUnknown option detected: "'+e+'"'+s,q),V=!0}static findInOptions(e,i,o,n=!1){let r=1e9,s="",a=[];const l=e.toLowerCase();let c;for(const h in i){let d;if(void 0!==i[h].__type__&&!0===n){const n=t.findInOptions(e,i[h],C(o,h));r>n.distance&&(s=n.closestMatch,a=n.path,r=n.distance,c=n.indexMatch)}else-1!==h.toLowerCase().indexOf(l)&&(c=h),d=t.levenshteinDistance(e,h),r>d&&(s=h,a=F(o),r=d)}return{closestMatch:s,path:a,distance:r,indexMatch:c}}static printLocation(t,e,i="Problem value found at: \n"){let o="\n\n"+i+"options = {\n";for(let e=0;e<t.length;e++){for(let t=0;t<e+1;t++)o+=" ";o+=t[e]+": {\n"}for(let e=0;e<t.length+1;e++)o+=" ";o+=e+"\n";for(let e=0;e<t.length+1;e++){for(let i=0;i<t.length-e;i++)o+=" ";o+="}\n"}return o+"\n\n"}static print(t){return JSON.stringify(t).replace(/(")|(\[)|(\])|(,"__type__")/g,"").replace(/(,)/g,", ")}static levenshteinDistance(t,e){if(0===t.length)return e.length;if(0===e.length)return t.length;const i=[];let o,n;for(o=0;o<=e.length;o++)i[o]=[o];for(n=0;n<=t.length;n++)i[0][n]=n;for(o=1;o<=e.length;o++)for(n=1;n<=t.length;n++)e.charAt(o-1)==t.charAt(n-1)?i[o][n]=i[o-1][n-1]:i[o][n]=Math.min(i[o-1][n-1]+1,Math.min(i[o][n-1]+1,i[o-1][n]+1));return i[e.length][t.length]}};t.Activator=Q,t.Alea=function(...t){return function(t){let[e,i,o]=function(...t){const e=function(){let t=4022871197;return function(e){const i=e.toString();for(let e=0;e<i.length;e++){t+=i.charCodeAt(e);let o=.02519603282416938*t;t=o>>>0,o-=t,o*=t,t=o>>>0,o-=t,t+=4294967296*o}return 2.3283064365386963e-10*(t>>>0)}}();let i=e(" "),o=e(" "),n=e(" ");for(let r=0;r<t.length;r++)i-=e(t[r]),i<0&&(i+=1),o-=e(t[r]),o<0&&(o+=1),n-=e(t[r]),n<0&&(n+=1);return[i,o,n]}(t),n=1;const r=()=>{const t=2091639*e+2.3283064365386963e-10*n;return e=i,i=o,o=t-(n=0|t)};return r.uint32=()=>4294967296*r(),r.fract53=()=>r()+11102230246251565e-32*(2097152*r()|0),r.algorithm="Alea",r.seed=t,r.version="0.9",r}(t.length?t:[Date.now()])},t.ColorPicker=W,t.Configurator=z,t.DELETE=o,t.HSVToHex=A,t.HSVToRGB=P,t.Hammer=$,t.Popup=G,t.RGBToHSV=D,t.RGBToHex=x,t.VALIDATOR_PRINT_STYLE=U,t.Validator=J,t.addClassName=function(t,e){let i=t.className.split(" ");const o=e.split(" ");i=i.concat(o.filter(function(t){return!i.includes(t)})),t.className=i.join(" ")},t.addCssText=function(t,e){const i=O(e);for(const[e,o]of Object.entries(i))t.style.setProperty(e,o)},t.binarySearchCustom=function(t,e,i,o){let n=0,r=0,s=t.length-1;for(;r<=s&&n<1e4;){const a=Math.floor((r+s)/2),l=t[a],c=e(void 0===o?l[i]:l[i][o]);if(0==c)return a;-1==c?r=a+1:s=a-1,n++}return-1},t.binarySearchValue=function(t,e,i,o,n){let r,s,a,l,c=0,h=0,d=t.length-1;for(n=null!=n?n:function(t,e){return t==e?0:t<e?-1:1};h<=d&&c<1e4;){if(l=Math.floor(.5*(d+h)),r=t[Math.max(0,l-1)][i],s=t[l][i],a=t[Math.min(t.length-1,l+1)][i],0==n(s,e))return l;if(n(r,e)<0&&n(s,e)>0)return"before"==o?Math.max(0,l-1):l;if(n(s,e)<0&&n(a,e)>0)return"before"==o?l:Math.min(t.length-1,l+1);n(s,e)<0?h=l+1:d=l-1,c++}return-1},t.bridgeObject=N,t.copyAndExtendArray=C,t.copyArray=F,t.deepExtend=k,t.deepObjectAssign=n,t.easingFunctions=S,t.equalArray=function(t,e){if(t.length!==e.length)return!1;for(let i=0,o=t.length;i<o;i++)if(t[i]!=e[i])return!1;return!0},t.extend=y,t.fillIfDefined=function t(e,i,o=!1){for(const n in e)if(void 0!==i[n])if(null===i[n]||"object"!=typeof i[n])b(e,i,n,o);else{const r=e[n],s=i[n];v(r)&&v(s)&&t(r,s,o)}},t.forEach=function(t,e){if(Array.isArray(t)){const i=t.length;for(let o=0;o<i;o++)e(t[o],o,t)}else for(const i in t)Object.prototype.hasOwnProperty.call(t,i)&&e(t[i],i,t)},t.getAbsoluteLeft=function(t){return t.getBoundingClientRect().left},t.getAbsoluteRight=function(t){return t.getBoundingClientRect().right},t.getAbsoluteTop=function(t){return t.getBoundingClientRect().top},t.getScrollBarWidth=function(){const t=document.createElement("p");t.style.width="100%",t.style.height="200px";const e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);const i=t.offsetWidth;e.style.overflow="scroll";let o=t.offsetWidth;return i==o&&(o=e.clientWidth),document.body.removeChild(e),i-o},t.getTarget=function(t=window.event){let e=null;return t&&(t.target?e=t.target:t.srcElement&&(e=t.srcElement)),e instanceof Element&&(null==e.nodeType||3!=e.nodeType||(e=e.parentNode,e instanceof Element))?e:null},t.getType=function(t){const e=typeof t;return"object"===e?null===t?"null":t instanceof Boolean?"Boolean":t instanceof Number?"Number":t instanceof String?"String":Array.isArray(t)?"Array":t instanceof Date?"Date":"Object":"number"===e?"Number":"boolean"===e?"Boolean":"string"===e?"String":void 0===e?"undefined":e},t.hasParent=function(t,e){let i=t;for(;i;){if(i===e)return!0;if(!i.parentNode)return!1;i=i.parentNode}return!1},t.hexToHSV=B,t.hexToRGB=E,t.insertSort=function(t,e){for(let i=0;i<t.length;i++){const o=t[i];let n;for(n=i;n>0&&e(o,t[n-1])<0;n--)t[n]=t[n-1];t[n]=o}return t},t.isDate=function(t){if(t instanceof Date)return!0;if(m(t)){if(h.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},t.isNumber=g,t.isObject=v,t.isString=m,t.isValidHex=j,t.isValidRGB=R,t.isValidRGBA=T,t.mergeOptions=function(t,e,i,o={}){const n=function(t){return null!=t},r=function(t){return null!==t&&"object"==typeof t};if(!r(t))throw new Error("Parameter mergeTarget must be an object");if(!r(e))throw new Error("Parameter options must be an object");if(!n(i))throw new Error("Parameter option must have a value");if(!r(o))throw new Error("Parameter globalOptions must be an object");const s=e[i],a=r(o)&&!function(t){for(const e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0}(o)?o[i]:void 0,l=a?a.enabled:void 0;if(void 0===s)return;if("boolean"==typeof s)return r(t[i])||(t[i]={}),void(t[i].enabled=s);if(null===s&&!r(t[i])){if(!n(a))return;t[i]=Object.create(a)}if(!r(s))return;let c=!0;void 0!==s.enabled?c=s.enabled:void 0!==l&&(c=a.enabled),function(t,e,i){r(t[i])||(t[i]={});const o=e[i],n=t[i];for(const t in o)Object.prototype.hasOwnProperty.call(o,t)&&(n[t]=o[t])}(t,e,i),t[i].enabled=c},t.option=w,t.overrideOpacity=function(t,e){if(t.includes("rgba"))return t;if(t.includes("rgb")){const i=t.substr(t.indexOf("(")+1).replace(")","").split(",");return"rgba("+i[0]+","+i[1]+","+i[2]+","+e+")"}{const i=E(t);return null==i?t:"rgba("+i.r+","+i.g+","+i.b+","+e+")"}},t.parseColor=function(t,e){if(m(t)){let e=t;if(R(e)){const t=e.substr(4).substr(0,e.length-5).split(",").map(function(t){return parseInt(t)});e=x(t[0],t[1],t[2])}if(!0===j(e)){const t=B(e),i={h:t.h,s:.8*t.s,v:Math.min(1,1.02*t.v)},o={h:t.h,s:Math.min(1,1.25*t.s),v:.8*t.v},n=A(o.h,o.s,o.v),r=A(i.h,i.s,i.v);return{background:e,border:n,highlight:{background:r,border:n},hover:{background:r,border:n}}}return{background:e,border:e,highlight:{background:e,border:e},hover:{background:e,border:e}}}if(e){return{background:t.background||e.background,border:t.border||e.border,highlight:m(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||e.highlight.background,border:t.highlight&&t.highlight.border||e.highlight.border},hover:m(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||e.hover.border,background:t.hover&&t.hover.background||e.hover.background}}}return{background:t.background||void 0,border:t.border||void 0,highlight:m(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||void 0,border:t.highlight&&t.highlight.border||void 0},hover:m(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||void 0,background:t.hover&&t.hover.background||void 0}}},t.preventDefault=function(t){t||(t=window.event),t&&(t.preventDefault?t.preventDefault():t.returnValue=!1)},t.pureDeepObjectAssign=function(t,...e){return n({},t,...e)},t.recursiveDOMDelete=function t(e){if(e)for(;!0===e.hasChildNodes();){const i=e.firstChild;i&&(t(i),e.removeChild(i))}},t.removeClassName=function(t,e){let i=t.className.split(" ");const o=e.split(" ");i=i.filter(function(t){return!o.includes(t)}),t.className=i.join(" ")},t.removeCssText=function(t,e){const i=O(e);for(const e of Object.keys(i))t.style.removeProperty(e)},t.selectiveBridgeObject=function(t,e){if(null!==e&&"object"==typeof e){const i=Object.create(e);for(let o=0;o<t.length;o++)Object.prototype.hasOwnProperty.call(e,t[o])&&"object"==typeof e[t[o]]&&(i[t[o]]=N(e[t[o]]));return i}return null},t.selectiveDeepExtend=function(t,e,i,o=!1){if(Array.isArray(i))throw new TypeError("Arrays are not supported by deepExtend");for(let n=0;n<t.length;n++){const r=t[n];if(Object.prototype.hasOwnProperty.call(i,r))if(i[r]&&i[r].constructor===Object)void 0===e[r]&&(e[r]={}),e[r].constructor===Object?k(e[r],i[r],!1,o):b(e,i,r,o);else{if(Array.isArray(i[r]))throw new TypeError("Arrays are not supported by deepExtend");b(e,i,r,o)}}return e},t.selectiveExtend=function(t,e,...i){if(!Array.isArray(t))throw new Error("Array with property names expected as first argument");for(const o of i)for(let i=0;i<t.length;i++){const n=t[i];o&&Object.prototype.hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},t.selectiveNotDeepExtend=function(t,e,i,o=!1){if(Array.isArray(i))throw new TypeError("Arrays are not supported by deepExtend");for(const n in i)if(Object.prototype.hasOwnProperty.call(i,n)&&!t.includes(n))if(i[n]&&i[n].constructor===Object)void 0===e[n]&&(e[n]={}),e[n].constructor===Object?k(e[n],i[n]):b(e,i,n,o);else if(Array.isArray(i[n])){e[n]=[];for(let t=0;t<i[n].length;t++)e[n].push(i[n][t])}else b(e,i,n,o);return e},t.throttle=function(t){let e=!1;return()=>{e||(e=!0,requestAnimationFrame(()=>{e=!1,t()}))}},t.toArray=_,t.topMost=function(t,e){let i;Array.isArray(e)||(e=[e]);for(const o of t)if(o){i=o[e[0]];for(let t=1;t<e.length;t++)i&&(i=i[e[t]]);if(void 0!==i)break}return i},t.updateProperty=function(t,e,i){return t[e]!==i&&(t[e]=i,!0)}});
27
+ //# sourceMappingURL=vis-util.min.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vis-util.min.cjs","sources":["../../../src/deep-object-assign.ts","../../src/shared/hammer.js","../../src/shared/activator.js","../../../src/util.ts","../../src/shared/color-picker.js","../../src/shared/configurator.js","../../src/shared/validator.js","../../../src/shared/index.ts","../../src/shared/popup.js","../../../src/random/alea.ts"],"sourcesContent":[null,"import RealHammer from \"@egjs/hammerjs\";\n\n/**\n * Setup a mock hammer.js object, for unit testing.\n *\n * Inspiration: https://github.com/uber/deck.gl/pull/658\n * @returns {{on: noop, off: noop, destroy: noop, emit: noop, get: get}}\n */\nfunction hammerMock() {\n const noop = () => {};\n\n return {\n on: noop,\n off: noop,\n destroy: noop,\n emit: noop,\n\n get() {\n return {\n set: noop,\n };\n },\n };\n}\n\nconst Hammer =\n typeof window !== \"undefined\"\n ? window.Hammer || RealHammer\n : function () {\n // hammer.js is only available in a browser, not in node.js. Replacing it with a mock object.\n return hammerMock();\n };\n\nexport { Hammer };\n","import Emitter from \"component-emitter\";\nimport { Hammer } from \"./hammer.js\";\n\n/**\n * Turn an element into an clickToUse element.\n * When not active, the element has a transparent overlay. When the overlay is\n * clicked, the mode is changed to active.\n * When active, the element is displayed with a blue border around it, and\n * the interactive contents of the element can be used. When clicked outside\n * the element, the elements mode is changed to inactive.\n * @param {Element} container\n * @class Activator\n */\nexport function Activator(container) {\n this._cleanupQueue = [];\n\n this.active = false;\n\n this._dom = {\n container,\n overlay: document.createElement(\"div\"),\n };\n\n this._dom.overlay.classList.add(\"vis-overlay\");\n\n this._dom.container.appendChild(this._dom.overlay);\n this._cleanupQueue.push(() => {\n this._dom.overlay.parentNode.removeChild(this._dom.overlay);\n });\n\n const hammer = Hammer(this._dom.overlay);\n hammer.on(\"tap\", this._onTapOverlay.bind(this));\n this._cleanupQueue.push(() => {\n hammer.destroy();\n // FIXME: cleaning up hammer instances doesn't work (Timeline not removed\n // from memory)\n });\n\n // block all touch events (except tap)\n const events = [\n \"tap\",\n \"doubletap\",\n \"press\",\n \"pinch\",\n \"pan\",\n \"panstart\",\n \"panmove\",\n \"panend\",\n ];\n events.forEach((event) => {\n hammer.on(event, (event) => {\n event.srcEvent.stopPropagation();\n });\n });\n\n // attach a click event to the window, in order to deactivate when clicking outside the timeline\n if (document && document.body) {\n this._onClick = (event) => {\n if (!_hasParent(event.target, container)) {\n this.deactivate();\n }\n };\n document.body.addEventListener(\"click\", this._onClick);\n this._cleanupQueue.push(() => {\n document.body.removeEventListener(\"click\", this._onClick);\n });\n }\n\n // prepare escape key listener for deactivating when active\n this._escListener = (event) => {\n if (\n \"key\" in event\n ? event.key === \"Escape\"\n : event.keyCode === 27 /* the keyCode is for IE11 */\n ) {\n this.deactivate();\n }\n };\n}\n\n// turn into an event emitter\nEmitter(Activator.prototype);\n\n// The currently active activator\nActivator.current = null;\n\n/**\n * Destroy the activator. Cleans up all created DOM and event listeners\n */\nActivator.prototype.destroy = function () {\n this.deactivate();\n\n for (const callback of this._cleanupQueue.splice(0).reverse()) {\n callback();\n }\n};\n\n/**\n * Activate the element\n * Overlay is hidden, element is decorated with a blue shadow border\n */\nActivator.prototype.activate = function () {\n // we allow only one active activator at a time\n if (Activator.current) {\n Activator.current.deactivate();\n }\n Activator.current = this;\n\n this.active = true;\n this._dom.overlay.style.display = \"none\";\n this._dom.container.classList.add(\"vis-active\");\n\n this.emit(\"change\");\n this.emit(\"activate\");\n\n // ugly hack: bind ESC after emitting the events, as the Network rebinds all\n // keyboard events on a 'change' event\n document.body.addEventListener(\"keydown\", this._escListener);\n};\n\n/**\n * Deactivate the element\n * Overlay is displayed on top of the element\n */\nActivator.prototype.deactivate = function () {\n this.active = false;\n this._dom.overlay.style.display = \"block\";\n this._dom.container.classList.remove(\"vis-active\");\n document.body.removeEventListener(\"keydown\", this._escListener);\n\n this.emit(\"change\");\n this.emit(\"deactivate\");\n};\n\n/**\n * Handle a tap event: activate the container\n * @param {Event} event The event\n * @private\n */\nActivator.prototype._onTapOverlay = function (event) {\n // activate the container\n this.activate();\n event.srcEvent.stopPropagation();\n};\n\n/**\n * Test whether the element has the requested parent element somewhere in\n * its chain of parent nodes.\n * @param {HTMLElement} element\n * @param {HTMLElement} parent\n * @returns {boolean} Returns true when the parent is found somewhere in the\n * chain of parent nodes.\n * @private\n */\nfunction _hasParent(element, parent) {\n while (element) {\n if (element === parent) {\n return true;\n }\n element = element.parentNode;\n }\n return false;\n}\n",null,"import { Hammer } from \"./hammer.js\";\nimport {\n HSVToRGB,\n RGBToHSV,\n hexToRGB,\n isString,\n isValidHex,\n isValidRGB,\n isValidRGBA,\n} from \"../util.ts\";\n\nconst htmlColors = {\n black: \"#000000\",\n navy: \"#000080\",\n darkblue: \"#00008B\",\n mediumblue: \"#0000CD\",\n blue: \"#0000FF\",\n darkgreen: \"#006400\",\n green: \"#008000\",\n teal: \"#008080\",\n darkcyan: \"#008B8B\",\n deepskyblue: \"#00BFFF\",\n darkturquoise: \"#00CED1\",\n mediumspringgreen: \"#00FA9A\",\n lime: \"#00FF00\",\n springgreen: \"#00FF7F\",\n aqua: \"#00FFFF\",\n cyan: \"#00FFFF\",\n midnightblue: \"#191970\",\n dodgerblue: \"#1E90FF\",\n lightseagreen: \"#20B2AA\",\n forestgreen: \"#228B22\",\n seagreen: \"#2E8B57\",\n darkslategray: \"#2F4F4F\",\n limegreen: \"#32CD32\",\n mediumseagreen: \"#3CB371\",\n turquoise: \"#40E0D0\",\n royalblue: \"#4169E1\",\n steelblue: \"#4682B4\",\n darkslateblue: \"#483D8B\",\n mediumturquoise: \"#48D1CC\",\n indigo: \"#4B0082\",\n darkolivegreen: \"#556B2F\",\n cadetblue: \"#5F9EA0\",\n cornflowerblue: \"#6495ED\",\n mediumaquamarine: \"#66CDAA\",\n dimgray: \"#696969\",\n slateblue: \"#6A5ACD\",\n olivedrab: \"#6B8E23\",\n slategray: \"#708090\",\n lightslategray: \"#778899\",\n mediumslateblue: \"#7B68EE\",\n lawngreen: \"#7CFC00\",\n chartreuse: \"#7FFF00\",\n aquamarine: \"#7FFFD4\",\n maroon: \"#800000\",\n purple: \"#800080\",\n olive: \"#808000\",\n gray: \"#808080\",\n skyblue: \"#87CEEB\",\n lightskyblue: \"#87CEFA\",\n blueviolet: \"#8A2BE2\",\n darkred: \"#8B0000\",\n darkmagenta: \"#8B008B\",\n saddlebrown: \"#8B4513\",\n darkseagreen: \"#8FBC8F\",\n lightgreen: \"#90EE90\",\n mediumpurple: \"#9370D8\",\n darkviolet: \"#9400D3\",\n palegreen: \"#98FB98\",\n darkorchid: \"#9932CC\",\n yellowgreen: \"#9ACD32\",\n sienna: \"#A0522D\",\n brown: \"#A52A2A\",\n darkgray: \"#A9A9A9\",\n lightblue: \"#ADD8E6\",\n greenyellow: \"#ADFF2F\",\n paleturquoise: \"#AFEEEE\",\n lightsteelblue: \"#B0C4DE\",\n powderblue: \"#B0E0E6\",\n firebrick: \"#B22222\",\n darkgoldenrod: \"#B8860B\",\n mediumorchid: \"#BA55D3\",\n rosybrown: \"#BC8F8F\",\n darkkhaki: \"#BDB76B\",\n silver: \"#C0C0C0\",\n mediumvioletred: \"#C71585\",\n indianred: \"#CD5C5C\",\n peru: \"#CD853F\",\n chocolate: \"#D2691E\",\n tan: \"#D2B48C\",\n lightgrey: \"#D3D3D3\",\n palevioletred: \"#D87093\",\n thistle: \"#D8BFD8\",\n orchid: \"#DA70D6\",\n goldenrod: \"#DAA520\",\n crimson: \"#DC143C\",\n gainsboro: \"#DCDCDC\",\n plum: \"#DDA0DD\",\n burlywood: \"#DEB887\",\n lightcyan: \"#E0FFFF\",\n lavender: \"#E6E6FA\",\n darksalmon: \"#E9967A\",\n violet: \"#EE82EE\",\n palegoldenrod: \"#EEE8AA\",\n lightcoral: \"#F08080\",\n khaki: \"#F0E68C\",\n aliceblue: \"#F0F8FF\",\n honeydew: \"#F0FFF0\",\n azure: \"#F0FFFF\",\n sandybrown: \"#F4A460\",\n wheat: \"#F5DEB3\",\n beige: \"#F5F5DC\",\n whitesmoke: \"#F5F5F5\",\n mintcream: \"#F5FFFA\",\n ghostwhite: \"#F8F8FF\",\n salmon: \"#FA8072\",\n antiquewhite: \"#FAEBD7\",\n linen: \"#FAF0E6\",\n lightgoldenrodyellow: \"#FAFAD2\",\n oldlace: \"#FDF5E6\",\n red: \"#FF0000\",\n fuchsia: \"#FF00FF\",\n magenta: \"#FF00FF\",\n deeppink: \"#FF1493\",\n orangered: \"#FF4500\",\n tomato: \"#FF6347\",\n hotpink: \"#FF69B4\",\n coral: \"#FF7F50\",\n darkorange: \"#FF8C00\",\n lightsalmon: \"#FFA07A\",\n orange: \"#FFA500\",\n lightpink: \"#FFB6C1\",\n pink: \"#FFC0CB\",\n gold: \"#FFD700\",\n peachpuff: \"#FFDAB9\",\n navajowhite: \"#FFDEAD\",\n moccasin: \"#FFE4B5\",\n bisque: \"#FFE4C4\",\n mistyrose: \"#FFE4E1\",\n blanchedalmond: \"#FFEBCD\",\n papayawhip: \"#FFEFD5\",\n lavenderblush: \"#FFF0F5\",\n seashell: \"#FFF5EE\",\n cornsilk: \"#FFF8DC\",\n lemonchiffon: \"#FFFACD\",\n floralwhite: \"#FFFAF0\",\n snow: \"#FFFAFA\",\n yellow: \"#FFFF00\",\n lightyellow: \"#FFFFE0\",\n ivory: \"#FFFFF0\",\n white: \"#FFFFFF\",\n};\n\n/**\n * @param {number} [pixelRatio=1]\n */\nexport class ColorPicker {\n /**\n * @param {number} [pixelRatio]\n */\n constructor(pixelRatio = 1) {\n this.pixelRatio = pixelRatio;\n this.generated = false;\n this.centerCoordinates = { x: 289 / 2, y: 289 / 2 };\n this.r = 289 * 0.49;\n this.color = { r: 255, g: 255, b: 255, a: 1.0 };\n this.hueCircle = undefined;\n this.initialColor = { r: 255, g: 255, b: 255, a: 1.0 };\n this.previousColor = undefined;\n this.applied = false;\n\n // bound by\n this.updateCallback = () => {};\n this.closeCallback = () => {};\n\n // create all DOM elements\n this._create();\n }\n\n /**\n * this inserts the colorPicker into a div from the DOM\n * @param {Element} container\n */\n insertTo(container) {\n if (this.hammer !== undefined) {\n this.hammer.destroy();\n this.hammer = undefined;\n }\n this.container = container;\n this.container.appendChild(this.frame);\n this._bindHammer();\n\n this._setSize();\n }\n\n /**\n * the callback is executed on apply and save. Bind it to the application\n * @param {Function} callback\n */\n setUpdateCallback(callback) {\n if (typeof callback === \"function\") {\n this.updateCallback = callback;\n } else {\n throw new Error(\n \"Function attempted to set as colorPicker update callback is not a function.\",\n );\n }\n }\n\n /**\n * the callback is executed on apply and save. Bind it to the application\n * @param {Function} callback\n */\n setCloseCallback(callback) {\n if (typeof callback === \"function\") {\n this.closeCallback = callback;\n } else {\n throw new Error(\n \"Function attempted to set as colorPicker closing callback is not a function.\",\n );\n }\n }\n\n /**\n *\n * @param {string} color\n * @returns {string}\n * @private\n */\n _isColorString(color) {\n if (typeof color === \"string\") {\n return htmlColors[color];\n }\n }\n\n /**\n * Set the color of the colorPicker\n * Supported formats:\n * 'red' --> HTML color string\n * '#ffffff' --> hex string\n * 'rgb(255,255,255)' --> rgb string\n * 'rgba(255,255,255,1.0)' --> rgba string\n * {r:255,g:255,b:255} --> rgb object\n * {r:255,g:255,b:255,a:1.0} --> rgba object\n * @param {string | object} color\n * @param {boolean} [setInitial]\n */\n setColor(color, setInitial = true) {\n if (color === \"none\") {\n return;\n }\n\n let rgba;\n\n // if a html color shorthand is used, convert to hex\n const htmlColor = this._isColorString(color);\n if (htmlColor !== undefined) {\n color = htmlColor;\n }\n\n // check format\n if (isString(color) === true) {\n if (isValidRGB(color) === true) {\n const rgbaArray = color\n .substr(4)\n .substr(0, color.length - 5)\n .split(\",\");\n rgba = { r: rgbaArray[0], g: rgbaArray[1], b: rgbaArray[2], a: 1.0 };\n } else if (isValidRGBA(color) === true) {\n const rgbaArray = color\n .substr(5)\n .substr(0, color.length - 6)\n .split(\",\");\n rgba = {\n r: rgbaArray[0],\n g: rgbaArray[1],\n b: rgbaArray[2],\n a: rgbaArray[3],\n };\n } else if (isValidHex(color) === true) {\n const rgbObj = hexToRGB(color);\n rgba = { r: rgbObj.r, g: rgbObj.g, b: rgbObj.b, a: 1.0 };\n }\n } else {\n if (color instanceof Object) {\n if (\n color.r !== undefined &&\n color.g !== undefined &&\n color.b !== undefined\n ) {\n const alpha = color.a !== undefined ? color.a : \"1.0\";\n rgba = { r: color.r, g: color.g, b: color.b, a: alpha };\n }\n }\n }\n\n // set color\n if (rgba === undefined) {\n throw new Error(\n \"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \" +\n JSON.stringify(color),\n );\n } else {\n this._setColor(rgba, setInitial);\n }\n }\n\n /**\n * this shows the color picker.\n * The hue circle is constructed once and stored.\n */\n show() {\n if (this.closeCallback !== undefined) {\n this.closeCallback();\n this.closeCallback = undefined;\n }\n\n this.applied = false;\n this.frame.style.display = \"block\";\n this._generateHueCircle();\n }\n\n // ------------------------------------------ PRIVATE ----------------------------- //\n\n /**\n * Hide the picker. Is called by the cancel button.\n * Optional boolean to store the previous color for easy access later on.\n * @param {boolean} [storePrevious]\n * @private\n */\n _hide(storePrevious = true) {\n // store the previous color for next time;\n if (storePrevious === true) {\n this.previousColor = Object.assign({}, this.color);\n }\n\n if (this.applied === true) {\n this.updateCallback(this.initialColor);\n }\n\n this.frame.style.display = \"none\";\n\n // call the closing callback, restoring the onclick method.\n // this is in a setTimeout because it will trigger the show again before the click is done.\n setTimeout(() => {\n if (this.closeCallback !== undefined) {\n this.closeCallback();\n this.closeCallback = undefined;\n }\n }, 0);\n }\n\n /**\n * bound to the save button. Saves and hides.\n * @private\n */\n _save() {\n this.updateCallback(this.color);\n this.applied = false;\n this._hide();\n }\n\n /**\n * Bound to apply button. Saves but does not close. Is undone by the cancel button.\n * @private\n */\n _apply() {\n this.applied = true;\n this.updateCallback(this.color);\n this._updatePicker(this.color);\n }\n\n /**\n * load the color from the previous session.\n * @private\n */\n _loadLast() {\n if (this.previousColor !== undefined) {\n this.setColor(this.previousColor, false);\n } else {\n alert(\"There is no last color to load...\");\n }\n }\n\n /**\n * set the color, place the picker\n * @param {object} rgba\n * @param {boolean} [setInitial]\n * @private\n */\n _setColor(rgba, setInitial = true) {\n // store the initial color\n if (setInitial === true) {\n this.initialColor = Object.assign({}, rgba);\n }\n\n this.color = rgba;\n const hsv = RGBToHSV(rgba.r, rgba.g, rgba.b);\n\n const angleConvert = 2 * Math.PI;\n const radius = this.r * hsv.s;\n const x =\n this.centerCoordinates.x + radius * Math.sin(angleConvert * hsv.h);\n const y =\n this.centerCoordinates.y + radius * Math.cos(angleConvert * hsv.h);\n\n this.colorPickerSelector.style.left =\n x - 0.5 * this.colorPickerSelector.clientWidth + \"px\";\n this.colorPickerSelector.style.top =\n y - 0.5 * this.colorPickerSelector.clientHeight + \"px\";\n\n this._updatePicker(rgba);\n }\n\n /**\n * bound to opacity control\n * @param {number} value\n * @private\n */\n _setOpacity(value) {\n this.color.a = value / 100;\n this._updatePicker(this.color);\n }\n\n /**\n * bound to brightness control\n * @param {number} value\n * @private\n */\n _setBrightness(value) {\n const hsv = RGBToHSV(this.color.r, this.color.g, this.color.b);\n hsv.v = value / 100;\n const rgba = HSVToRGB(hsv.h, hsv.s, hsv.v);\n rgba[\"a\"] = this.color.a;\n this.color = rgba;\n this._updatePicker();\n }\n\n /**\n * update the color picker. A black circle overlays the hue circle to mimic the brightness decreasing.\n * @param {object} rgba\n * @private\n */\n _updatePicker(rgba = this.color) {\n const hsv = RGBToHSV(rgba.r, rgba.g, rgba.b);\n const ctx = this.colorPickerCanvas.getContext(\"2d\");\n if (this.pixelRation === undefined) {\n this.pixelRatio =\n (window.devicePixelRatio || 1) /\n (ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio ||\n 1);\n }\n ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n // clear the canvas\n const w = this.colorPickerCanvas.clientWidth;\n const h = this.colorPickerCanvas.clientHeight;\n ctx.clearRect(0, 0, w, h);\n\n ctx.putImageData(this.hueCircle, 0, 0);\n ctx.fillStyle = \"rgba(0,0,0,\" + (1 - hsv.v) + \")\";\n ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n ctx.fill();\n\n this.brightnessRange.value = 100 * hsv.v;\n this.opacityRange.value = 100 * rgba.a;\n\n this.initialColorDiv.style.backgroundColor =\n \"rgba(\" +\n this.initialColor.r +\n \",\" +\n this.initialColor.g +\n \",\" +\n this.initialColor.b +\n \",\" +\n this.initialColor.a +\n \")\";\n this.newColorDiv.style.backgroundColor =\n \"rgba(\" +\n this.color.r +\n \",\" +\n this.color.g +\n \",\" +\n this.color.b +\n \",\" +\n this.color.a +\n \")\";\n }\n\n /**\n * used by create to set the size of the canvas.\n * @private\n */\n _setSize() {\n this.colorPickerCanvas.style.width = \"100%\";\n this.colorPickerCanvas.style.height = \"100%\";\n\n this.colorPickerCanvas.width = 289 * this.pixelRatio;\n this.colorPickerCanvas.height = 289 * this.pixelRatio;\n }\n\n /**\n * create all dom elements\n * TODO: cleanup, lots of similar dom elements\n * @private\n */\n _create() {\n this.frame = document.createElement(\"div\");\n this.frame.className = \"vis-color-picker\";\n\n this.colorPickerDiv = document.createElement(\"div\");\n this.colorPickerSelector = document.createElement(\"div\");\n this.colorPickerSelector.className = \"vis-selector\";\n this.colorPickerDiv.appendChild(this.colorPickerSelector);\n\n this.colorPickerCanvas = document.createElement(\"canvas\");\n this.colorPickerDiv.appendChild(this.colorPickerCanvas);\n\n if (!this.colorPickerCanvas.getContext) {\n const noCanvas = document.createElement(\"DIV\");\n noCanvas.style.color = \"red\";\n noCanvas.style.fontWeight = \"bold\";\n noCanvas.style.padding = \"10px\";\n noCanvas.innerText = \"Error: your browser does not support HTML canvas\";\n this.colorPickerCanvas.appendChild(noCanvas);\n } else {\n const ctx = this.colorPickerCanvas.getContext(\"2d\");\n this.pixelRatio =\n (window.devicePixelRatio || 1) /\n (ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio ||\n 1);\n this.colorPickerCanvas\n .getContext(\"2d\")\n .setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n }\n\n this.colorPickerDiv.className = \"vis-color\";\n\n this.opacityDiv = document.createElement(\"div\");\n this.opacityDiv.className = \"vis-opacity\";\n\n this.brightnessDiv = document.createElement(\"div\");\n this.brightnessDiv.className = \"vis-brightness\";\n\n this.arrowDiv = document.createElement(\"div\");\n this.arrowDiv.className = \"vis-arrow\";\n\n this.opacityRange = document.createElement(\"input\");\n try {\n this.opacityRange.type = \"range\"; // Not supported on IE9\n this.opacityRange.min = \"0\";\n this.opacityRange.max = \"100\";\n } catch (err) {\n // TODO: Add some error handling.\n }\n this.opacityRange.value = \"100\";\n this.opacityRange.className = \"vis-range\";\n\n this.brightnessRange = document.createElement(\"input\");\n try {\n this.brightnessRange.type = \"range\"; // Not supported on IE9\n this.brightnessRange.min = \"0\";\n this.brightnessRange.max = \"100\";\n } catch (err) {\n // TODO: Add some error handling.\n }\n this.brightnessRange.value = \"100\";\n this.brightnessRange.className = \"vis-range\";\n\n this.opacityDiv.appendChild(this.opacityRange);\n this.brightnessDiv.appendChild(this.brightnessRange);\n\n const me = this;\n this.opacityRange.onchange = function () {\n me._setOpacity(this.value);\n };\n this.opacityRange.oninput = function () {\n me._setOpacity(this.value);\n };\n this.brightnessRange.onchange = function () {\n me._setBrightness(this.value);\n };\n this.brightnessRange.oninput = function () {\n me._setBrightness(this.value);\n };\n\n this.brightnessLabel = document.createElement(\"div\");\n this.brightnessLabel.className = \"vis-label vis-brightness\";\n this.brightnessLabel.innerText = \"brightness:\";\n\n this.opacityLabel = document.createElement(\"div\");\n this.opacityLabel.className = \"vis-label vis-opacity\";\n this.opacityLabel.innerText = \"opacity:\";\n\n this.newColorDiv = document.createElement(\"div\");\n this.newColorDiv.className = \"vis-new-color\";\n this.newColorDiv.innerText = \"new\";\n\n this.initialColorDiv = document.createElement(\"div\");\n this.initialColorDiv.className = \"vis-initial-color\";\n this.initialColorDiv.innerText = \"initial\";\n\n this.cancelButton = document.createElement(\"div\");\n this.cancelButton.className = \"vis-button vis-cancel\";\n this.cancelButton.innerText = \"cancel\";\n this.cancelButton.onclick = this._hide.bind(this, false);\n\n this.applyButton = document.createElement(\"div\");\n this.applyButton.className = \"vis-button vis-apply\";\n this.applyButton.innerText = \"apply\";\n this.applyButton.onclick = this._apply.bind(this);\n\n this.saveButton = document.createElement(\"div\");\n this.saveButton.className = \"vis-button vis-save\";\n this.saveButton.innerText = \"save\";\n this.saveButton.onclick = this._save.bind(this);\n\n this.loadButton = document.createElement(\"div\");\n this.loadButton.className = \"vis-button vis-load\";\n this.loadButton.innerText = \"load last\";\n this.loadButton.onclick = this._loadLast.bind(this);\n\n this.frame.appendChild(this.colorPickerDiv);\n this.frame.appendChild(this.arrowDiv);\n this.frame.appendChild(this.brightnessLabel);\n this.frame.appendChild(this.brightnessDiv);\n this.frame.appendChild(this.opacityLabel);\n this.frame.appendChild(this.opacityDiv);\n this.frame.appendChild(this.newColorDiv);\n this.frame.appendChild(this.initialColorDiv);\n\n this.frame.appendChild(this.cancelButton);\n this.frame.appendChild(this.applyButton);\n this.frame.appendChild(this.saveButton);\n this.frame.appendChild(this.loadButton);\n }\n\n /**\n * bind hammer to the color picker\n * @private\n */\n _bindHammer() {\n this.drag = {};\n this.pinch = {};\n this.hammer = new Hammer(this.colorPickerCanvas);\n this.hammer.get(\"pinch\").set({ enable: true });\n\n this.hammer.on(\"hammer.input\", (event) => {\n if (event.isFirst) {\n this._moveSelector(event);\n }\n });\n this.hammer.on(\"tap\", (event) => {\n this._moveSelector(event);\n });\n this.hammer.on(\"panstart\", (event) => {\n this._moveSelector(event);\n });\n this.hammer.on(\"panmove\", (event) => {\n this._moveSelector(event);\n });\n this.hammer.on(\"panend\", (event) => {\n this._moveSelector(event);\n });\n }\n\n /**\n * generate the hue circle. This is relatively heavy (200ms) and is done only once on the first time it is shown.\n * @private\n */\n _generateHueCircle() {\n if (this.generated === false) {\n const ctx = this.colorPickerCanvas.getContext(\"2d\");\n if (this.pixelRation === undefined) {\n this.pixelRatio =\n (window.devicePixelRatio || 1) /\n (ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio ||\n 1);\n }\n ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n // clear the canvas\n const w = this.colorPickerCanvas.clientWidth;\n const h = this.colorPickerCanvas.clientHeight;\n ctx.clearRect(0, 0, w, h);\n\n // draw hue circle\n let x, y, hue, sat;\n this.centerCoordinates = { x: w * 0.5, y: h * 0.5 };\n this.r = 0.49 * w;\n const angleConvert = (2 * Math.PI) / 360;\n const hfac = 1 / 360;\n const sfac = 1 / this.r;\n let rgb;\n for (hue = 0; hue < 360; hue++) {\n for (sat = 0; sat < this.r; sat++) {\n x = this.centerCoordinates.x + sat * Math.sin(angleConvert * hue);\n y = this.centerCoordinates.y + sat * Math.cos(angleConvert * hue);\n rgb = HSVToRGB(hue * hfac, sat * sfac, 1);\n ctx.fillStyle = \"rgb(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \")\";\n ctx.fillRect(x - 0.5, y - 0.5, 2, 2);\n }\n }\n ctx.strokeStyle = \"rgba(0,0,0,1)\";\n ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n ctx.stroke();\n\n this.hueCircle = ctx.getImageData(0, 0, w, h);\n }\n this.generated = true;\n }\n\n /**\n * move the selector. This is called by hammer functions.\n * @param {Event} event The event\n * @private\n */\n _moveSelector(event) {\n const rect = this.colorPickerDiv.getBoundingClientRect();\n const left = event.center.x - rect.left;\n const top = event.center.y - rect.top;\n\n const centerY = 0.5 * this.colorPickerDiv.clientHeight;\n const centerX = 0.5 * this.colorPickerDiv.clientWidth;\n\n const x = left - centerX;\n const y = top - centerY;\n\n const angle = Math.atan2(x, y);\n const radius = 0.98 * Math.min(Math.sqrt(x * x + y * y), centerX);\n\n const newTop = Math.cos(angle) * radius + centerY;\n const newLeft = Math.sin(angle) * radius + centerX;\n\n this.colorPickerSelector.style.top =\n newTop - 0.5 * this.colorPickerSelector.clientHeight + \"px\";\n this.colorPickerSelector.style.left =\n newLeft - 0.5 * this.colorPickerSelector.clientWidth + \"px\";\n\n // set color\n let h = angle / (2 * Math.PI);\n h = h < 0 ? h + 1 : h;\n const s = radius / this.r;\n const hsv = RGBToHSV(this.color.r, this.color.g, this.color.b);\n hsv.h = h;\n hsv.s = s;\n const rgba = HSVToRGB(hsv.h, hsv.s, hsv.v);\n rgba[\"a\"] = this.color.a;\n this.color = rgba;\n\n // update previews\n this.initialColorDiv.style.backgroundColor =\n \"rgba(\" +\n this.initialColor.r +\n \",\" +\n this.initialColor.g +\n \",\" +\n this.initialColor.b +\n \",\" +\n this.initialColor.a +\n \")\";\n this.newColorDiv.style.backgroundColor =\n \"rgba(\" +\n this.color.r +\n \",\" +\n this.color.g +\n \",\" +\n this.color.b +\n \",\" +\n this.color.a +\n \")\";\n }\n}\n","import { copyAndExtendArray } from \"../util.ts\";\n\nimport { ColorPicker } from \"./color-picker.js\";\n\n/**\n * Wrap given text (last argument) in HTML elements (all preceding arguments).\n * @param {...any} rest - List of tag names followed by inner text.\n * @returns An element or a text node.\n */\nfunction wrapInTag(...rest) {\n if (rest.length < 1) {\n throw new TypeError(\"Invalid arguments.\");\n } else if (rest.length === 1) {\n return document.createTextNode(rest[0]);\n } else {\n const element = document.createElement(rest[0]);\n element.appendChild(wrapInTag(...rest.slice(1)));\n return element;\n }\n}\n\n/**\n * The way this works is for all properties of this.possible options, you can supply the property name in any form to list the options.\n * Boolean options are recognised as Boolean\n * Number options should be written as array: [default value, min value, max value, stepsize]\n * Colors should be written as array: ['color', '#ffffff']\n * Strings with should be written as array: [option1, option2, option3, ..]\n *\n * The options are matched with their counterparts in each of the modules and the values used in the configuration are\n */\nexport class Configurator {\n /**\n * @param {object} parentModule | the location where parentModule.setOptions() can be called\n * @param {object} defaultContainer | the default container of the module\n * @param {object} configureOptions | the fully configured and predefined options set found in allOptions.js\n * @param {number} pixelRatio | canvas pixel ratio\n * @param {Function} hideOption | custom logic to dynamically hide options\n */\n constructor(\n parentModule,\n defaultContainer,\n configureOptions,\n pixelRatio = 1,\n hideOption = () => false,\n ) {\n this.parent = parentModule;\n this.changedOptions = [];\n this.container = defaultContainer;\n this.allowCreation = false;\n this.hideOption = hideOption;\n\n this.options = {};\n this.initialized = false;\n this.popupCounter = 0;\n this.defaultOptions = {\n enabled: false,\n filter: true,\n container: undefined,\n showButton: true,\n };\n Object.assign(this.options, this.defaultOptions);\n\n this.configureOptions = configureOptions;\n this.moduleOptions = {};\n this.domElements = [];\n this.popupDiv = {};\n this.popupLimit = 5;\n this.popupHistory = {};\n this.colorPicker = new ColorPicker(pixelRatio);\n this.wrapper = undefined;\n }\n\n /**\n * refresh all options.\n * Because all modules parse their options by themselves, we just use their options. We copy them here.\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n // reset the popup history because the indices may have been changed.\n this.popupHistory = {};\n this._removePopup();\n\n let enabled = true;\n if (typeof options === \"string\") {\n this.options.filter = options;\n } else if (Array.isArray(options)) {\n this.options.filter = options.join();\n } else if (typeof options === \"object\") {\n if (options == null) {\n throw new TypeError(\"options cannot be null\");\n }\n if (options.container !== undefined) {\n this.options.container = options.container;\n }\n if (options.filter !== undefined) {\n this.options.filter = options.filter;\n }\n if (options.showButton !== undefined) {\n this.options.showButton = options.showButton;\n }\n if (options.enabled !== undefined) {\n enabled = options.enabled;\n }\n } else if (typeof options === \"boolean\") {\n this.options.filter = true;\n enabled = options;\n } else if (typeof options === \"function\") {\n this.options.filter = options;\n enabled = true;\n }\n if (this.options.filter === false) {\n enabled = false;\n }\n\n this.options.enabled = enabled;\n }\n this._clean();\n }\n\n /**\n *\n * @param {object} moduleOptions\n */\n setModuleOptions(moduleOptions) {\n this.moduleOptions = moduleOptions;\n if (this.options.enabled === true) {\n this._clean();\n if (this.options.container !== undefined) {\n this.container = this.options.container;\n }\n this._create();\n }\n }\n\n /**\n * Create all DOM elements\n * @private\n */\n _create() {\n this._clean();\n this.changedOptions = [];\n\n const filter = this.options.filter;\n let counter = 0;\n let show = false;\n for (const option in this.configureOptions) {\n if (Object.prototype.hasOwnProperty.call(this.configureOptions, option)) {\n this.allowCreation = false;\n show = false;\n if (typeof filter === \"function\") {\n show = filter(option, []);\n show =\n show ||\n this._handleObject(this.configureOptions[option], [option], true);\n } else if (filter === true || filter.indexOf(option) !== -1) {\n show = true;\n }\n\n if (show !== false) {\n this.allowCreation = true;\n\n // linebreak between categories\n if (counter > 0) {\n this._makeItem([]);\n }\n // a header for the category\n this._makeHeader(option);\n\n // get the sub options\n this._handleObject(this.configureOptions[option], [option]);\n }\n counter++;\n }\n }\n this._makeButton();\n this._push();\n //~ this.colorPicker.insertTo(this.container);\n }\n\n /**\n * draw all DOM elements on the screen\n * @private\n */\n _push() {\n this.wrapper = document.createElement(\"div\");\n this.wrapper.className = \"vis-configuration-wrapper\";\n this.container.appendChild(this.wrapper);\n for (let i = 0; i < this.domElements.length; i++) {\n this.wrapper.appendChild(this.domElements[i]);\n }\n\n this._showPopupIfNeeded();\n }\n\n /**\n * delete all DOM elements\n * @private\n */\n _clean() {\n for (let i = 0; i < this.domElements.length; i++) {\n this.wrapper.removeChild(this.domElements[i]);\n }\n\n if (this.wrapper !== undefined) {\n this.container.removeChild(this.wrapper);\n this.wrapper = undefined;\n }\n this.domElements = [];\n\n this._removePopup();\n }\n\n /**\n * get the value from the actualOptions if it exists\n * @param {Array} path | where to look for the actual option\n * @returns {*}\n * @private\n */\n _getValue(path) {\n let base = this.moduleOptions;\n for (let i = 0; i < path.length; i++) {\n if (base[path[i]] !== undefined) {\n base = base[path[i]];\n } else {\n base = undefined;\n break;\n }\n }\n return base;\n }\n\n /**\n * all option elements are wrapped in an item\n * @param {Array} path | where to look for the actual option\n * @param {Array.<Element>} domElements\n * @returns {number}\n * @private\n */\n _makeItem(path, ...domElements) {\n if (this.allowCreation === true) {\n const item = document.createElement(\"div\");\n item.className =\n \"vis-configuration vis-config-item vis-config-s\" + path.length;\n domElements.forEach((element) => {\n item.appendChild(element);\n });\n this.domElements.push(item);\n return this.domElements.length;\n }\n return 0;\n }\n\n /**\n * header for major subjects\n * @param {string} name\n * @private\n */\n _makeHeader(name) {\n const div = document.createElement(\"div\");\n div.className = \"vis-configuration vis-config-header\";\n div.innerText = name;\n this._makeItem([], div);\n }\n\n /**\n * make a label, if it is an object label, it gets different styling.\n * @param {string} name\n * @param {Array} path | where to look for the actual option\n * @param {string} objectLabel\n * @returns {HTMLElement}\n * @private\n */\n _makeLabel(name, path, objectLabel = false) {\n const div = document.createElement(\"div\");\n div.className =\n \"vis-configuration vis-config-label vis-config-s\" + path.length;\n if (objectLabel === true) {\n while (div.firstChild) {\n div.removeChild(div.firstChild);\n }\n div.appendChild(wrapInTag(\"i\", \"b\", name));\n } else {\n div.innerText = name + \":\";\n }\n return div;\n }\n\n /**\n * make a dropdown list for multiple possible string optoins\n * @param {Array.<number>} arr\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeDropdown(arr, value, path) {\n const select = document.createElement(\"select\");\n select.className = \"vis-configuration vis-config-select\";\n let selectedValue = 0;\n if (value !== undefined) {\n if (arr.indexOf(value) !== -1) {\n selectedValue = arr.indexOf(value);\n }\n }\n\n for (let i = 0; i < arr.length; i++) {\n const option = document.createElement(\"option\");\n option.value = arr[i];\n if (i === selectedValue) {\n option.selected = \"selected\";\n }\n option.innerText = arr[i];\n select.appendChild(option);\n }\n\n const me = this;\n select.onchange = function () {\n me._update(this.value, path);\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n this._makeItem(path, label, select);\n }\n\n /**\n * make a range object for numeric options\n * @param {Array.<number>} arr\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeRange(arr, value, path) {\n const defaultValue = arr[0];\n const min = arr[1];\n const max = arr[2];\n const step = arr[3];\n const range = document.createElement(\"input\");\n range.className = \"vis-configuration vis-config-range\";\n try {\n range.type = \"range\"; // not supported on IE9\n range.min = min;\n range.max = max;\n } catch (err) {\n // TODO: Add some error handling.\n }\n range.step = step;\n\n // set up the popup settings in case they are needed.\n let popupString = \"\";\n let popupValue = 0;\n\n if (value !== undefined) {\n const factor = 1.2;\n if (value < 0 && value * factor < min) {\n range.min = Math.ceil(value * factor);\n popupValue = range.min;\n popupString = \"range increased\";\n } else if (value / factor < min) {\n range.min = Math.ceil(value / factor);\n popupValue = range.min;\n popupString = \"range increased\";\n }\n if (value * factor > max && max !== 1) {\n range.max = Math.ceil(value * factor);\n popupValue = range.max;\n popupString = \"range increased\";\n }\n range.value = value;\n } else {\n range.value = defaultValue;\n }\n\n const input = document.createElement(\"input\");\n input.className = \"vis-configuration vis-config-rangeinput\";\n input.value = range.value;\n\n const me = this;\n range.onchange = function () {\n input.value = this.value;\n me._update(Number(this.value), path);\n };\n range.oninput = function () {\n input.value = this.value;\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n const itemIndex = this._makeItem(path, label, range, input);\n\n // if a popup is needed AND it has not been shown for this value, show it.\n if (popupString !== \"\" && this.popupHistory[itemIndex] !== popupValue) {\n this.popupHistory[itemIndex] = popupValue;\n this._setupPopup(popupString, itemIndex);\n }\n }\n\n /**\n * make a button object\n * @private\n */\n _makeButton() {\n if (this.options.showButton === true) {\n const generateButton = document.createElement(\"div\");\n generateButton.className = \"vis-configuration vis-config-button\";\n generateButton.innerText = \"generate options\";\n generateButton.onclick = () => {\n this._printOptions();\n };\n generateButton.onmouseover = () => {\n generateButton.className = \"vis-configuration vis-config-button hover\";\n };\n generateButton.onmouseout = () => {\n generateButton.className = \"vis-configuration vis-config-button\";\n };\n\n this.optionsContainer = document.createElement(\"div\");\n this.optionsContainer.className =\n \"vis-configuration vis-config-option-container\";\n\n this.domElements.push(this.optionsContainer);\n this.domElements.push(generateButton);\n }\n }\n\n /**\n * prepare the popup\n * @param {string} string\n * @param {number} index\n * @private\n */\n _setupPopup(string, index) {\n if (\n this.initialized === true &&\n this.allowCreation === true &&\n this.popupCounter < this.popupLimit\n ) {\n const div = document.createElement(\"div\");\n div.id = \"vis-configuration-popup\";\n div.className = \"vis-configuration-popup\";\n div.innerText = string;\n div.onclick = () => {\n this._removePopup();\n };\n this.popupCounter += 1;\n this.popupDiv = { html: div, index: index };\n }\n }\n\n /**\n * remove the popup from the dom\n * @private\n */\n _removePopup() {\n if (this.popupDiv.html !== undefined) {\n this.popupDiv.html.parentNode.removeChild(this.popupDiv.html);\n clearTimeout(this.popupDiv.hideTimeout);\n clearTimeout(this.popupDiv.deleteTimeout);\n this.popupDiv = {};\n }\n }\n\n /**\n * Show the popup if it is needed.\n * @private\n */\n _showPopupIfNeeded() {\n if (this.popupDiv.html !== undefined) {\n const correspondingElement = this.domElements[this.popupDiv.index];\n const rect = correspondingElement.getBoundingClientRect();\n this.popupDiv.html.style.left = rect.left + \"px\";\n this.popupDiv.html.style.top = rect.top - 30 + \"px\"; // 30 is the height;\n document.body.appendChild(this.popupDiv.html);\n this.popupDiv.hideTimeout = setTimeout(() => {\n this.popupDiv.html.style.opacity = 0;\n }, 1500);\n this.popupDiv.deleteTimeout = setTimeout(() => {\n this._removePopup();\n }, 1800);\n }\n }\n\n /**\n * make a checkbox for boolean options.\n * @param {number} defaultValue\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeCheckbox(defaultValue, value, path) {\n const checkbox = document.createElement(\"input\");\n checkbox.type = \"checkbox\";\n checkbox.className = \"vis-configuration vis-config-checkbox\";\n checkbox.checked = defaultValue;\n if (value !== undefined) {\n checkbox.checked = value;\n if (value !== defaultValue) {\n if (typeof defaultValue === \"object\") {\n if (value !== defaultValue.enabled) {\n this.changedOptions.push({ path: path, value: value });\n }\n } else {\n this.changedOptions.push({ path: path, value: value });\n }\n }\n }\n\n const me = this;\n checkbox.onchange = function () {\n me._update(this.checked, path);\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n this._makeItem(path, label, checkbox);\n }\n\n /**\n * make a text input field for string options.\n * @param {number} defaultValue\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeTextInput(defaultValue, value, path) {\n const checkbox = document.createElement(\"input\");\n checkbox.type = \"text\";\n checkbox.className = \"vis-configuration vis-config-text\";\n checkbox.value = value;\n if (value !== defaultValue) {\n this.changedOptions.push({ path: path, value: value });\n }\n\n const me = this;\n checkbox.onchange = function () {\n me._update(this.value, path);\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n this._makeItem(path, label, checkbox);\n }\n\n /**\n * make a color field with a color picker for color fields\n * @param {Array.<number>} arr\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeColorField(arr, value, path) {\n const defaultColor = arr[1];\n const div = document.createElement(\"div\");\n value = value === undefined ? defaultColor : value;\n\n if (value !== \"none\") {\n div.className = \"vis-configuration vis-config-colorBlock\";\n div.style.backgroundColor = value;\n } else {\n div.className = \"vis-configuration vis-config-colorBlock none\";\n }\n\n value = value === undefined ? defaultColor : value;\n div.onclick = () => {\n this._showColorPicker(value, div, path);\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n this._makeItem(path, label, div);\n }\n\n /**\n * used by the color buttons to call the color picker.\n * @param {number} value\n * @param {HTMLElement} div\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _showColorPicker(value, div, path) {\n // clear the callback from this div\n div.onclick = function () {};\n\n this.colorPicker.insertTo(div);\n this.colorPicker.show();\n\n this.colorPicker.setColor(value);\n this.colorPicker.setUpdateCallback((color) => {\n const colorString =\n \"rgba(\" + color.r + \",\" + color.g + \",\" + color.b + \",\" + color.a + \")\";\n div.style.backgroundColor = colorString;\n this._update(colorString, path);\n });\n\n // on close of the colorpicker, restore the callback.\n this.colorPicker.setCloseCallback(() => {\n div.onclick = () => {\n this._showColorPicker(value, div, path);\n };\n });\n }\n\n /**\n * parse an object and draw the correct items\n * @param {object} obj\n * @param {Array} [path] | where to look for the actual option\n * @param {boolean} [checkOnly]\n * @returns {boolean}\n * @private\n */\n _handleObject(obj, path = [], checkOnly = false) {\n let show = false;\n const filter = this.options.filter;\n let visibleInSet = false;\n for (const subObj in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, subObj)) {\n show = true;\n const item = obj[subObj];\n const newPath = copyAndExtendArray(path, subObj);\n if (typeof filter === \"function\") {\n show = filter(subObj, path);\n\n // if needed we must go deeper into the object.\n if (show === false) {\n if (\n !Array.isArray(item) &&\n typeof item !== \"string\" &&\n typeof item !== \"boolean\" &&\n item instanceof Object\n ) {\n this.allowCreation = false;\n show = this._handleObject(item, newPath, true);\n this.allowCreation = checkOnly === false;\n }\n }\n }\n\n if (show !== false) {\n visibleInSet = true;\n const value = this._getValue(newPath);\n\n if (Array.isArray(item)) {\n this._handleArray(item, value, newPath);\n } else if (typeof item === \"string\") {\n this._makeTextInput(item, value, newPath);\n } else if (typeof item === \"boolean\") {\n this._makeCheckbox(item, value, newPath);\n } else if (item instanceof Object) {\n // skip the options that are not enabled\n if (!this.hideOption(path, subObj, this.moduleOptions)) {\n // initially collapse options with an disabled enabled option.\n if (item.enabled !== undefined) {\n const enabledPath = copyAndExtendArray(newPath, \"enabled\");\n const enabledValue = this._getValue(enabledPath);\n if (enabledValue === true) {\n const label = this._makeLabel(subObj, newPath, true);\n this._makeItem(newPath, label);\n visibleInSet =\n this._handleObject(item, newPath) || visibleInSet;\n } else {\n this._makeCheckbox(item, enabledValue, newPath);\n }\n } else {\n const label = this._makeLabel(subObj, newPath, true);\n this._makeItem(newPath, label);\n visibleInSet =\n this._handleObject(item, newPath) || visibleInSet;\n }\n }\n } else {\n console.error(\"dont know how to handle\", item, subObj, newPath);\n }\n }\n }\n }\n return visibleInSet;\n }\n\n /**\n * handle the array type of option\n * @param {Array.<number>} arr\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _handleArray(arr, value, path) {\n if (typeof arr[0] === \"string\" && arr[0] === \"color\") {\n this._makeColorField(arr, value, path);\n if (arr[1] !== value) {\n this.changedOptions.push({ path: path, value: value });\n }\n } else if (typeof arr[0] === \"string\") {\n this._makeDropdown(arr, value, path);\n if (arr[0] !== value) {\n this.changedOptions.push({ path: path, value: value });\n }\n } else if (typeof arr[0] === \"number\") {\n this._makeRange(arr, value, path);\n if (arr[0] !== value) {\n this.changedOptions.push({ path: path, value: Number(value) });\n }\n }\n }\n\n /**\n * called to update the network with the new settings.\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _update(value, path) {\n const options = this._constructOptions(value, path);\n\n if (\n this.parent.body &&\n this.parent.body.emitter &&\n this.parent.body.emitter.emit\n ) {\n this.parent.body.emitter.emit(\"configChange\", options);\n }\n this.initialized = true;\n this.parent.setOptions(options);\n }\n\n /**\n *\n * @param {string | boolean} value\n * @param {Array.<string>} path\n * @param {{}} optionsObj\n * @returns {{}}\n * @private\n */\n _constructOptions(value, path, optionsObj = {}) {\n let pointer = optionsObj;\n\n // when dropdown boxes can be string or boolean, we typecast it into correct types\n value = value === \"true\" ? true : value;\n value = value === \"false\" ? false : value;\n\n for (let i = 0; i < path.length; i++) {\n if (path[i] !== \"global\") {\n if (pointer[path[i]] === undefined) {\n pointer[path[i]] = {};\n }\n if (i !== path.length - 1) {\n pointer = pointer[path[i]];\n } else {\n pointer[path[i]] = value;\n }\n }\n }\n return optionsObj;\n }\n\n /**\n * @private\n */\n _printOptions() {\n const options = this.getOptions();\n\n while (this.optionsContainer.firstChild) {\n this.optionsContainer.removeChild(this.optionsContainer.firstChild);\n }\n this.optionsContainer.appendChild(\n wrapInTag(\"pre\", \"const options = \" + JSON.stringify(options, null, 2)),\n );\n }\n\n /**\n *\n * @returns {{}} options\n */\n getOptions() {\n const options = {};\n for (let i = 0; i < this.changedOptions.length; i++) {\n this._constructOptions(\n this.changedOptions[i].value,\n this.changedOptions[i].path,\n options,\n );\n }\n return options;\n }\n}\n","import { copyAndExtendArray, copyArray } from \"../util.ts\";\n\nlet errorFound = false;\nlet allOptions;\n\nexport const VALIDATOR_PRINT_STYLE = \"background: #FFeeee; color: #dd0000\";\n\n/**\n * Used to validate options.\n */\nexport class Validator {\n /**\n * Main function to be called\n * @param {object} options\n * @param {object} referenceOptions\n * @param {object} subObject\n * @returns {boolean}\n * @static\n */\n static validate(options, referenceOptions, subObject) {\n errorFound = false;\n allOptions = referenceOptions;\n let usedOptions = referenceOptions;\n if (subObject !== undefined) {\n usedOptions = referenceOptions[subObject];\n }\n Validator.parse(options, usedOptions, []);\n return errorFound;\n }\n\n /**\n * Will traverse an object recursively and check every value\n * @param {object} options\n * @param {object} referenceOptions\n * @param {Array} path | where to look for the actual option\n * @static\n */\n static parse(options, referenceOptions, path) {\n for (const option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option)) {\n Validator.check(option, options, referenceOptions, path);\n }\n }\n }\n\n /**\n * Check every value. If the value is an object, call the parse function on that object.\n * @param {string} option\n * @param {object} options\n * @param {object} referenceOptions\n * @param {Array} path | where to look for the actual option\n * @static\n */\n static check(option, options, referenceOptions, path) {\n if (\n referenceOptions[option] === undefined &&\n referenceOptions.__any__ === undefined\n ) {\n Validator.getSuggestion(option, referenceOptions, path);\n return;\n }\n\n let referenceOption = option;\n let is_object = true;\n\n if (\n referenceOptions[option] === undefined &&\n referenceOptions.__any__ !== undefined\n ) {\n // NOTE: This only triggers if the __any__ is in the top level of the options object.\n // THAT'S A REALLY BAD PLACE TO ALLOW IT!!!!\n // TODO: Examine if needed, remove if possible\n\n // __any__ is a wildcard. Any value is accepted and will be further analysed by reference.\n referenceOption = \"__any__\";\n\n // if the any-subgroup is not a predefined object in the configurator,\n // we do not look deeper into the object.\n is_object = Validator.getType(options[option]) === \"object\";\n } else {\n // Since all options in the reference are objects, we can check whether\n // they are supposed to be the object to look for the __type__ field.\n // if this is an object, we check if the correct type has been supplied to account for shorthand options.\n }\n\n let refOptionObj = referenceOptions[referenceOption];\n if (is_object && refOptionObj.__type__ !== undefined) {\n refOptionObj = refOptionObj.__type__;\n }\n\n Validator.checkFields(\n option,\n options,\n referenceOptions,\n referenceOption,\n refOptionObj,\n path,\n );\n }\n\n /**\n *\n * @param {string} option | the option property\n * @param {object} options | The supplied options object\n * @param {object} referenceOptions | The reference options containing all options and their allowed formats\n * @param {string} referenceOption | Usually this is the same as option, except when handling an __any__ tag.\n * @param {string} refOptionObj | This is the type object from the reference options\n * @param {Array} path | where in the object is the option\n * @static\n */\n static checkFields(\n option,\n options,\n referenceOptions,\n referenceOption,\n refOptionObj,\n path,\n ) {\n const log = function (message) {\n console.error(\n \"%c\" + message + Validator.printLocation(path, option),\n VALIDATOR_PRINT_STYLE,\n );\n };\n\n const optionType = Validator.getType(options[option]);\n const refOptionType = refOptionObj[optionType];\n\n if (refOptionType !== undefined) {\n // if the type is correct, we check if it is supposed to be one of a few select values\n if (\n Validator.getType(refOptionType) === \"array\" &&\n refOptionType.indexOf(options[option]) === -1\n ) {\n log(\n 'Invalid option detected in \"' +\n option +\n '\".' +\n \" Allowed values are:\" +\n Validator.print(refOptionType) +\n ' not \"' +\n options[option] +\n '\". ',\n );\n errorFound = true;\n } else if (optionType === \"object\" && referenceOption !== \"__any__\") {\n path = copyAndExtendArray(path, option);\n Validator.parse(\n options[option],\n referenceOptions[referenceOption],\n path,\n );\n }\n } else if (refOptionObj[\"any\"] === undefined) {\n // type of the field is incorrect and the field cannot be any\n log(\n 'Invalid type received for \"' +\n option +\n '\". Expected: ' +\n Validator.print(Object.keys(refOptionObj)) +\n \". Received [\" +\n optionType +\n '] \"' +\n options[option] +\n '\"',\n );\n errorFound = true;\n }\n }\n\n /**\n *\n * @param {object | boolean | number | string | Array.<number> | Date | Node | Moment | undefined | null} object\n * @returns {string}\n * @static\n */\n static getType(object) {\n const type = typeof object;\n\n if (type === \"object\") {\n if (object === null) {\n return \"null\";\n }\n if (object instanceof Boolean) {\n return \"boolean\";\n }\n if (object instanceof Number) {\n return \"number\";\n }\n if (object instanceof String) {\n return \"string\";\n }\n if (Array.isArray(object)) {\n return \"array\";\n }\n if (object instanceof Date) {\n return \"date\";\n }\n if (object.nodeType !== undefined) {\n return \"dom\";\n }\n if (object._isAMomentObject === true) {\n return \"moment\";\n }\n return \"object\";\n } else if (type === \"number\") {\n return \"number\";\n } else if (type === \"boolean\") {\n return \"boolean\";\n } else if (type === \"string\") {\n return \"string\";\n } else if (type === undefined) {\n return \"undefined\";\n }\n return type;\n }\n\n /**\n * @param {string} option\n * @param {object} options\n * @param {Array.<string>} path\n * @static\n */\n static getSuggestion(option, options, path) {\n const localSearch = Validator.findInOptions(option, options, path, false);\n const globalSearch = Validator.findInOptions(option, allOptions, [], true);\n\n const localSearchThreshold = 8;\n const globalSearchThreshold = 4;\n\n let msg;\n if (localSearch.indexMatch !== undefined) {\n msg =\n \" in \" +\n Validator.printLocation(localSearch.path, option, \"\") +\n 'Perhaps it was incomplete? Did you mean: \"' +\n localSearch.indexMatch +\n '\"?\\n\\n';\n } else if (\n globalSearch.distance <= globalSearchThreshold &&\n localSearch.distance > globalSearch.distance\n ) {\n msg =\n \" in \" +\n Validator.printLocation(localSearch.path, option, \"\") +\n \"Perhaps it was misplaced? Matching option found at: \" +\n Validator.printLocation(\n globalSearch.path,\n globalSearch.closestMatch,\n \"\",\n );\n } else if (localSearch.distance <= localSearchThreshold) {\n msg =\n '. Did you mean \"' +\n localSearch.closestMatch +\n '\"?' +\n Validator.printLocation(localSearch.path, option);\n } else {\n msg =\n \". Did you mean one of these: \" +\n Validator.print(Object.keys(options)) +\n Validator.printLocation(path, option);\n }\n\n console.error(\n '%cUnknown option detected: \"' + option + '\"' + msg,\n VALIDATOR_PRINT_STYLE,\n );\n errorFound = true;\n }\n\n /**\n * traverse the options in search for a match.\n * @param {string} option\n * @param {object} options\n * @param {Array} path | where to look for the actual option\n * @param {boolean} [recursive]\n * @returns {{closestMatch: string, path: Array, distance: number}}\n * @static\n */\n static findInOptions(option, options, path, recursive = false) {\n let min = 1e9;\n let closestMatch = \"\";\n let closestMatchPath = [];\n const lowerCaseOption = option.toLowerCase();\n let indexMatch = undefined;\n for (const op in options) {\n let distance;\n if (options[op].__type__ !== undefined && recursive === true) {\n const result = Validator.findInOptions(\n option,\n options[op],\n copyAndExtendArray(path, op),\n );\n if (min > result.distance) {\n closestMatch = result.closestMatch;\n closestMatchPath = result.path;\n min = result.distance;\n indexMatch = result.indexMatch;\n }\n } else {\n if (op.toLowerCase().indexOf(lowerCaseOption) !== -1) {\n indexMatch = op;\n }\n distance = Validator.levenshteinDistance(option, op);\n if (min > distance) {\n closestMatch = op;\n closestMatchPath = copyArray(path);\n min = distance;\n }\n }\n }\n return {\n closestMatch: closestMatch,\n path: closestMatchPath,\n distance: min,\n indexMatch: indexMatch,\n };\n }\n\n /**\n * @param {Array.<string>} path\n * @param {object} option\n * @param {string} prefix\n * @returns {string}\n * @static\n */\n static printLocation(path, option, prefix = \"Problem value found at: \\n\") {\n let str = \"\\n\\n\" + prefix + \"options = {\\n\";\n for (let i = 0; i < path.length; i++) {\n for (let j = 0; j < i + 1; j++) {\n str += \" \";\n }\n str += path[i] + \": {\\n\";\n }\n for (let j = 0; j < path.length + 1; j++) {\n str += \" \";\n }\n str += option + \"\\n\";\n for (let i = 0; i < path.length + 1; i++) {\n for (let j = 0; j < path.length - i; j++) {\n str += \" \";\n }\n str += \"}\\n\";\n }\n return str + \"\\n\\n\";\n }\n\n /**\n * @param {object} options\n * @returns {string}\n * @static\n */\n static print(options) {\n return JSON.stringify(options)\n .replace(/(\")|(\\[)|(\\])|(,\"__type__\")/g, \"\")\n .replace(/(,)/g, \", \");\n }\n\n /**\n * Compute the edit distance between the two given strings\n * http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#JavaScript\n *\n * Copyright (c) 2011 Andrei Mackenzie\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * @param {string} a\n * @param {string} b\n * @returns {Array.<Array.<number>>}}\n * @static\n */\n static levenshteinDistance(a, b) {\n if (a.length === 0) return b.length;\n if (b.length === 0) return a.length;\n\n const matrix = [];\n\n // increment along the first column of each row\n let i;\n for (i = 0; i <= b.length; i++) {\n matrix[i] = [i];\n }\n\n // increment each column in the first row\n let j;\n for (j = 0; j <= a.length; j++) {\n matrix[0][j] = j;\n }\n\n // Fill in the rest of the matrix\n for (i = 1; i <= b.length; i++) {\n for (j = 1; j <= a.length; j++) {\n if (b.charAt(i - 1) == a.charAt(j - 1)) {\n matrix[i][j] = matrix[i - 1][j - 1];\n } else {\n matrix[i][j] = Math.min(\n matrix[i - 1][j - 1] + 1, // substitution\n Math.min(\n matrix[i][j - 1] + 1, // insertion\n matrix[i - 1][j] + 1,\n ),\n ); // deletion\n }\n }\n }\n\n return matrix[b.length][a.length];\n }\n}\n",null,"/**\n * Popup is a class to create a popup window with some text\n */\nexport class Popup {\n /**\n * @param {Element} container The container object.\n * @param {string} overflowMethod How the popup should act to overflowing ('flip' or 'cap')\n */\n constructor(container, overflowMethod) {\n this.container = container;\n this.overflowMethod = overflowMethod || \"cap\";\n\n this.x = 0;\n this.y = 0;\n this.padding = 5;\n this.hidden = false;\n\n // create the frame\n this.frame = document.createElement(\"div\");\n this.frame.className = \"vis-tooltip\";\n this.container.appendChild(this.frame);\n }\n\n /**\n * @param {number} x Horizontal position of the popup window\n * @param {number} y Vertical position of the popup window\n */\n setPosition(x, y) {\n this.x = parseInt(x);\n this.y = parseInt(y);\n }\n\n /**\n * Set the content for the popup window. This can be HTML code or text.\n * @param {string | Element} content\n */\n setText(content) {\n if (content instanceof Element) {\n while (this.frame.firstChild) {\n this.frame.removeChild(this.frame.firstChild);\n }\n this.frame.appendChild(content);\n } else {\n // String containing literal text, element has to be used for HTML due to\n // XSS risks associated with innerHTML (i.e. prevent XSS by accident).\n this.frame.innerText = content;\n }\n }\n\n /**\n * Show the popup window\n * @param {boolean} [doShow] Show or hide the window\n */\n show(doShow) {\n if (doShow === undefined) {\n doShow = true;\n }\n\n if (doShow === true) {\n const height = this.frame.clientHeight;\n const width = this.frame.clientWidth;\n const maxHeight = this.frame.parentNode.clientHeight;\n const maxWidth = this.frame.parentNode.clientWidth;\n\n let left = 0,\n top = 0;\n\n if (this.overflowMethod == \"flip\") {\n let isLeft = false,\n isTop = true; // Where around the position it's located\n\n if (this.y - height < this.padding) {\n isTop = false;\n }\n\n if (this.x + width > maxWidth - this.padding) {\n isLeft = true;\n }\n\n if (isLeft) {\n left = this.x - width;\n } else {\n left = this.x;\n }\n\n if (isTop) {\n top = this.y - height;\n } else {\n top = this.y;\n }\n } else {\n top = this.y - height;\n if (top + height + this.padding > maxHeight) {\n top = maxHeight - height - this.padding;\n }\n if (top < this.padding) {\n top = this.padding;\n }\n\n left = this.x;\n if (left + width + this.padding > maxWidth) {\n left = maxWidth - width - this.padding;\n }\n if (left < this.padding) {\n left = this.padding;\n }\n }\n\n this.frame.style.left = left + \"px\";\n this.frame.style.top = top + \"px\";\n this.frame.style.visibility = \"visible\";\n this.hidden = false;\n } else {\n this.hide();\n }\n }\n\n /**\n * Hide the popup window\n */\n hide() {\n this.hidden = true;\n this.frame.style.left = \"0\";\n this.frame.style.top = \"0\";\n this.frame.style.visibility = \"hidden\";\n }\n\n /**\n * Remove the popup window\n */\n destroy() {\n this.frame.parentNode.removeChild(this.frame); // Remove element from DOM\n }\n}\n",null],"names":["DELETE","Symbol","deepObjectAssign","values","merged","deepObjectAssignNonentry","stripDelete","length","slice","a","b","Date","setTime","getTime","prop","Reflect","ownKeys","Object","prototype","propertyIsEnumerable","call","Array","isArray","clone","map","value","keys","Hammer","window","RealHammer","noop","on","off","destroy","emit","get","set","hammerMock","Activator","container","this","_cleanupQueue","active","_dom","overlay","document","createElement","classList","add","appendChild","push","parentNode","removeChild","hammer","_onTapOverlay","bind","forEach","event","srcEvent","stopPropagation","body","_onClick","element","parent","_hasParent","target","deactivate","addEventListener","removeEventListener","_escListener","key","keyCode","Emitter","current","callback","splice","reverse","activate","style","display","remove","ASPDateRegex","fullHexRE","shortHexRE","rgbRE","rgbaRE","isNumber","Number","isString","String","isObject","copyOrDelete","allowDeletion","doDeletion","undefined","extend","assign","deepExtend","protoExtend","hasOwnProperty","getPrototypeOf","copyAndExtendArray","arr","newValue","copyArray","toArray","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","hexToRGB","hex","result","exec","r","parseInt","g","RGBToHex","red","green","blue","toString","RGBToHSV","minRGB","Math","min","maxRGB","max","h","s","v","splitCSSText","cssText","tmpEllement","styles","i","getPropertyValue","HSVToRGB","floor","f","p","q","t","HSVToHex","rgb","hexToHSV","TypeError","isValidHex","test","isValidRGB","isValidRGBA","rgba","bridgeObject","referenceObject","Element","objectTo","create","easingFunctions","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","htmlColors","black","navy","darkblue","mediumblue","darkgreen","teal","darkcyan","deepskyblue","darkturquoise","mediumspringgreen","lime","springgreen","aqua","cyan","midnightblue","dodgerblue","lightseagreen","forestgreen","seagreen","darkslategray","limegreen","mediumseagreen","turquoise","royalblue","steelblue","darkslateblue","mediumturquoise","indigo","darkolivegreen","cadetblue","cornflowerblue","mediumaquamarine","dimgray","slateblue","olivedrab","slategray","lightslategray","mediumslateblue","lawngreen","chartreuse","aquamarine","maroon","purple","olive","gray","skyblue","lightskyblue","blueviolet","darkred","darkmagenta","saddlebrown","darkseagreen","lightgreen","mediumpurple","darkviolet","palegreen","darkorchid","yellowgreen","sienna","brown","darkgray","lightblue","greenyellow","paleturquoise","lightsteelblue","powderblue","firebrick","darkgoldenrod","mediumorchid","rosybrown","darkkhaki","silver","mediumvioletred","indianred","peru","chocolate","tan","lightgrey","palevioletred","thistle","orchid","goldenrod","crimson","gainsboro","plum","burlywood","lightcyan","lavender","darksalmon","violet","palegoldenrod","lightcoral","khaki","aliceblue","honeydew","azure","sandybrown","wheat","beige","whitesmoke","mintcream","ghostwhite","salmon","antiquewhite","linen","lightgoldenrodyellow","oldlace","fuchsia","magenta","deeppink","orangered","tomato","hotpink","coral","darkorange","lightsalmon","orange","lightpink","pink","gold","peachpuff","navajowhite","moccasin","bisque","mistyrose","blanchedalmond","papayawhip","lavenderblush","seashell","cornsilk","lemonchiffon","floralwhite","snow","yellow","lightyellow","ivory","white","ColorPicker$1","constructor","pixelRatio","generated","centerCoordinates","x","y","color","hueCircle","initialColor","previousColor","applied","updateCallback","closeCallback","_create","insertTo","frame","_bindHammer","_setSize","setUpdateCallback","Error","setCloseCallback","_isColorString","setColor","setInitial","htmlColor","rgbaArray","substr","split","rgbObj","alpha","JSON","stringify","_setColor","show","_generateHueCircle","_hide","storePrevious","setTimeout","_save","_apply","_updatePicker","_loadLast","alert","hsv","angleConvert","PI","radius","sin","cos","colorPickerSelector","left","clientWidth","top","clientHeight","_setOpacity","_setBrightness","ctx","colorPickerCanvas","getContext","pixelRation","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","setTransform","w","clearRect","putImageData","fillStyle","circle","fill","brightnessRange","opacityRange","initialColorDiv","backgroundColor","newColorDiv","width","height","className","colorPickerDiv","noCanvas","fontWeight","padding","innerText","opacityDiv","brightnessDiv","arrowDiv","type","err","me","onchange","oninput","brightnessLabel","opacityLabel","cancelButton","onclick","applyButton","saveButton","loadButton","drag","pinch","enable","isFirst","_moveSelector","hue","sat","hfac","sfac","fillRect","strokeStyle","stroke","getImageData","rect","getBoundingClientRect","center","centerY","centerX","angle","atan2","sqrt","newTop","newLeft","wrapInTag","rest","createTextNode","allOptions","errorFound","VALIDATOR_PRINT_STYLE","ActivatorJS","ColorPicker","ColorPickerJS","Configurator","parentModule","defaultContainer","configureOptions","hideOption","changedOptions","allowCreation","options","initialized","popupCounter","defaultOptions","enabled","filter","showButton","moduleOptions","domElements","popupDiv","popupLimit","popupHistory","colorPicker","wrapper","setOptions","_removePopup","join","_clean","setModuleOptions","counter","_handleObject","indexOf","_makeItem","_makeHeader","_makeButton","_push","_showPopupIfNeeded","_getValue","path","base","item","name","div","_makeLabel","objectLabel","firstChild","_makeDropdown","select","selectedValue","selected","_update","label","_makeRange","step","range","popupString","popupValue","factor","ceil","input","itemIndex","_setupPopup","generateButton","_printOptions","onmouseover","onmouseout","optionsContainer","string","index","id","html","clearTimeout","hideTimeout","deleteTimeout","opacity","_makeCheckbox","checkbox","checked","_makeTextInput","_makeColorField","defaultColor","_showColorPicker","colorString","obj","checkOnly","visibleInSet","subObj","newPath","_handleArray","enabledPath","enabledValue","console","error","_constructOptions","emitter","optionsObj","pointer","getOptions","HammerJS","Popup","overflowMethod","hidden","setPosition","setText","content","doShow","maxHeight","maxWidth","isLeft","isTop","visibility","hide","VALIDATOR_PRINT_STYLE_JS","Validator","validate","referenceOptions","subObject","usedOptions","parse","check","__any__","getSuggestion","referenceOption","is_object","getType","refOptionObj","__type__","checkFields","log","message","printLocation","optionType","refOptionType","print","object","Boolean","nodeType","_isAMomentObject","localSearch","findInOptions","globalSearch","msg","indexMatch","distance","closestMatch","recursive","closestMatchPath","lowerCaseOption","toLowerCase","op","levenshteinDistance","prefix","str","j","replace","matrix","charAt","seed","s0","s1","s2","mash","n","data","charCodeAt","Mash","mashSeed","c","random","uint32","fract53","algorithm","version","AleaImplementation","now","elem","classNames","classes","newClasses","concat","includes","cssStyle","entries","setProperty","orderedItems","comparator","field","field2","iteration","low","high","middle","searchResult","sidePreference","prevValue","nextValue","len","fillIfDefined","aProp","bProp","right","inner","outer","position","overflow","w1","offsetWidth","w2","srcElement","compare","k","isNaN","mergeTarget","globalOptions","isPresent","srcOption","globalOption","isEmpty","globalEnabled","src","dst","doMerge","inputColor","colorStr","lighterColorHSV","darkerColorHSV","darkerColorHex","lighterColorHex","background","border","highlight","hover","preventDefault","returnValue","updates","recursiveDOMDelete","DOMobject","hasChildNodes","child","oldClasses","removeProperty","fields","props","others","other","propsToExclude","fn","scheduled","requestAnimationFrame","pile","accessors","candidate","member"],"mappings":"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"}