vis-util 5.0.7 → 6.0.1

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 (67) hide show
  1. package/declarations/css-shim.d.ts +2 -0
  2. package/declarations/css-shim.d.ts.map +1 -0
  3. package/declarations/deep-object-assign.d.ts +0 -2
  4. package/declarations/deep-object-assign.d.ts.map +1 -1
  5. package/declarations/entry-esnext.d.ts +4 -4
  6. package/declarations/entry-esnext.d.ts.map +1 -1
  7. package/declarations/index.d.ts +2 -2
  8. package/declarations/index.d.ts.map +1 -1
  9. package/declarations/random/alea.d.ts +0 -2
  10. package/declarations/random/alea.d.ts.map +1 -1
  11. package/declarations/random/index.d.ts +1 -1
  12. package/declarations/random/index.d.ts.map +1 -1
  13. package/declarations/shared/configurator-types.d.ts +0 -1
  14. package/declarations/shared/configurator-types.d.ts.map +1 -1
  15. package/declarations/shared/index.d.ts +1 -2
  16. package/declarations/shared/index.d.ts.map +1 -1
  17. package/declarations/util.d.ts +5 -66
  18. package/declarations/util.d.ts.map +1 -1
  19. package/esnext/esm/vis-util.js +1634 -1761
  20. package/esnext/esm/vis-util.js.map +1 -1
  21. package/esnext/esm/vis-util.min.js +3 -3
  22. package/esnext/esm/vis-util.min.js.map +1 -1
  23. package/esnext/esm/vis-util.min.mjs +27 -0
  24. package/esnext/esm/vis-util.min.mjs.map +1 -0
  25. package/esnext/esm/vis-util.mjs +3925 -0
  26. package/esnext/esm/vis-util.mjs.map +1 -0
  27. package/esnext/umd/vis-util.cjs +3925 -0
  28. package/esnext/umd/vis-util.cjs.map +1 -0
  29. package/esnext/umd/vis-util.js +3611 -3802
  30. package/esnext/umd/vis-util.js.map +1 -1
  31. package/esnext/umd/vis-util.min.cjs +27 -0
  32. package/esnext/umd/vis-util.min.cjs.map +1 -0
  33. package/esnext/umd/vis-util.min.js +3 -3
  34. package/esnext/umd/vis-util.min.js.map +1 -1
  35. package/package.json +211 -79
  36. package/peer/esm/vis-util.js +8547 -6113
  37. package/peer/esm/vis-util.js.map +1 -1
  38. package/peer/esm/vis-util.min.js +4 -4
  39. package/peer/esm/vis-util.min.js.map +1 -1
  40. package/peer/esm/vis-util.min.mjs +34 -0
  41. package/peer/esm/vis-util.min.mjs.map +1 -0
  42. package/peer/esm/vis-util.mjs +13823 -0
  43. package/peer/esm/vis-util.mjs.map +1 -0
  44. package/peer/umd/vis-util.cjs +13890 -0
  45. package/peer/umd/vis-util.cjs.map +1 -0
  46. package/peer/umd/vis-util.js +8547 -6113
  47. package/peer/umd/vis-util.js.map +1 -1
  48. package/peer/umd/vis-util.min.cjs +34 -0
  49. package/peer/umd/vis-util.min.cjs.map +1 -0
  50. package/peer/umd/vis-util.min.js +4 -4
  51. package/peer/umd/vis-util.min.js.map +1 -1
  52. package/standalone/esm/vis-util.js +8547 -6113
  53. package/standalone/esm/vis-util.js.map +1 -1
  54. package/standalone/esm/vis-util.min.js +4 -4
  55. package/standalone/esm/vis-util.min.js.map +1 -1
  56. package/standalone/esm/vis-util.min.mjs +34 -0
  57. package/standalone/esm/vis-util.min.mjs.map +1 -0
  58. package/standalone/esm/vis-util.mjs +13823 -0
  59. package/standalone/esm/vis-util.mjs.map +1 -0
  60. package/standalone/umd/vis-util.cjs +13890 -0
  61. package/standalone/umd/vis-util.cjs.map +1 -0
  62. package/standalone/umd/vis-util.js +8547 -6113
  63. package/standalone/umd/vis-util.js.map +1 -1
  64. package/standalone/umd/vis-util.min.cjs +34 -0
  65. package/standalone/umd/vis-util.min.cjs.map +1 -0
  66. package/standalone/umd/vis-util.min.js +4 -4
  67. 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.1
8
+ * @date 2026-08-03T17:52:53.613Z
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).toReversed())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{}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{}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{}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\";\n\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).toReversed()) {\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 {\n HSVToRGB,\n RGBToHSV,\n hexToRGB,\n isString,\n isValidHex,\n isValidRGB,\n isValidRGBA,\n} from \"../util.ts\";\nimport { Hammer } from \"./hammer.js\";\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 {\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 {\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\";\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 {\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 // oxlint-disable-next-line guard-for-in -- Options use prototype inheritance to override defaults, parent options, etc.\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","toReversed","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","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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"}