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
+ import t from"component-emitter";import e from"@egjs/hammerjs";const i=Symbol("DELETE");function o(t,...e){return n({},t,...e)}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],o=t[1];if(e instanceof Date&&o instanceof Date)return e.setTime(o.getTime()),e;for(const t of Reflect.ownKeys(o))Object.prototype.propertyIsEnumerable.call(o,t)&&(o[t]===i?delete e[t]:null===e[t]||null===o[t]||"object"!=typeof e[t]||"object"!=typeof o[t]||Array.isArray(e[t])||Array.isArray(o[t])?e[t]=s(o[t]):e[t]=r(e[t],o[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]===i?delete t[e]:"object"==typeof t[e]&&null!==t[e]&&a(t[e])}function l(...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()])}const c="undefined"!=typeof window?window.Hammer||e:function(){return function(){const t=()=>{};return{on:t,off:t,destroy:t,emit:t,get:()=>({set:t})}}()};function h(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=c(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()}}t(h.prototype),h.current=null,h.prototype.destroy=function(){this.deactivate();for(const t of this._cleanupQueue.splice(0).toReversed())t()},h.prototype.activate=function(){h.current&&h.current.deactivate(),h.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)},h.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")},h.prototype._onTapOverlay=function(t){this.activate(),t.srcEvent.stopPropagation()};const d=/^\/?Date\((-?\d+)/i,u=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,p=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,f=/^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,g=/^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 m(t){return t instanceof Number||"number"==typeof t}function v(t){if(t)for(;!0===t.hasChildNodes();){const e=t.firstChild;e&&(v(e),t.removeChild(e))}}function b(t){return t instanceof String||"string"==typeof t}function y(t){return"object"==typeof t&&null!==t}function k(t){if(t instanceof Date)return!0;if(b(t)){if(d.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1}function C(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]}function F(t,e,i=!1){for(const o in t)if(void 0!==e[o])if(null===e[o]||"object"!=typeof e[o])C(t,e,o,i);else{const n=t[o],r=e[o];y(n)&&y(r)&&F(n,r,i)}}const _=Object.assign;function w(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}function E(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?x(e[r],i[r],!1,o):C(e,i,r,o);else{if(Array.isArray(i[r]))throw new TypeError("Arrays are not supported by deepExtend");C(e,i,r,o)}}return e}function D(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?x(e[n],i[n]):C(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 C(e,i,n,o);return e}function x(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]=x({},e[n],i):"object"==typeof t[n]&&null!==t[n]&&Object.getPrototypeOf(t[n])===Object.prototype?x(t[n],e[n],i):C(t,e,n,o):Array.isArray(e[n])?t[n]=e[n].slice():C(t,e,n,o));return t}function O(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}function P(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}function B(t,e){return[...t,e]}function A(t){return t.slice()}function j(t){return t.getBoundingClientRect().left}function R(t){return t.getBoundingClientRect().right}function N(t){return t.getBoundingClientRect().top}function S(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(" ")}function T(t,e){let i=t.className.split(" ");const o=e.split(" ");i=i.filter(function(t){return!o.includes(t)}),t.className=i.join(" ")}function M(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)}const I=Object.values;function L(t,e,i){return t[e]!==i&&(t[e]=i,!0)}function H(t){let e=!1;return()=>{e||(e=!0,requestAnimationFrame(()=>{e=!1,t()}))}}function Q(t){t||(t=window.event),t&&(t.preventDefault?t.preventDefault():t.returnValue=!1)}function q(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}function W(t,e){let i=t;for(;i;){if(i===e)return!0;if(!i.parentNode)return!1;i=i.parentNode}return!1}const z={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()),b(t)?t:m(t)?t+"px":e||null),asElement:(t,e)=>("function"==typeof t&&(t=t()),t||e||null)};function $(t){let e;switch(t.length){case 3:case 4:return e=p.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=u.exec(t),e?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}:null;default:return null}}function V(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=$(t);return null==i?t:"rgba("+i.r+","+i.g+","+i.b+","+e+")"}}function U(t,e,i){return"#"+((1<<24)+(t<<16)+(e<<8)+i).toString(16).slice(1)}function J(t,e){if(b(t)){let e=t;if(ot(e)){const t=e.substr(4).substr(0,e.length-5).split(",").map(function(t){return parseInt(t)});e=U(t[0],t[1],t[2])}if(!0===it(e)){const t=et(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=tt(o.h,o.s,o.v),r=tt(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:b(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:b(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:b(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:b(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||void 0,background:t.hover&&t.hover.background||void 0}}}function K(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 G(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 X(t,e){const i=G(e);for(const[e,o]of Object.entries(i))t.style.setProperty(e,o)}function Y(t,e){const i=G(e);for(const e of Object.keys(i))t.style.removeProperty(e)}function Z(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 tt(t,e,i){const o=Z(t,e,i);return U(o.r,o.g,o.b)}function et(t){const e=$(t);if(!e)throw new TypeError(`'${t}' is not a valid color.`);return K(e.r,e.g,e.b)}function it(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function ot(t){return f.test(t)}function nt(t){return g.test(t)}function rt(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]]=st(e[t[o]]));return i}return null}function st(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]=st(t[i]));return e}function at(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}function lt(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}function ct(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}function ht(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}const dt={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};function ut(){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}function pt(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}const ft={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 gt=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 ft[t]}setColor(t,e=!0){if("none"===t)return;let i;const o=this._isColorString(t);if(void 0!==o&&(t=o),!0===b(t)){if(!0===ot(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===nt(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===it(t)){const 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=K(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=K(this.color.r,this.color.g,this.color.b);e.v=t/100;const i=Z(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}_updatePicker(t=this.color){const e=K(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 c(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=Z(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=K(this.color.r,this.color.g,this.color.b);f.h=u,f.s=p;const g=Z(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 mt(...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(mt(...t.slice(1))),e}}let vt,bt=!1;const yt="background: #FFeeee; color: #dd0000";const kt=h,Ct=gt,Ft=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 gt(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(mt("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=B(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=B(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(mt("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}},_t=c,wt=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)}},Et=yt,Dt=class t{static validate(e,i,o){bt=!1,vt=i;let n=i;return void 0!==o&&(n=i[o]),t.parse(e,n,[]),bt}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),yt)},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]+'". '),bt=!0):"object"===l&&"__any__"!==n&&(s=B(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]+'"'),bt=!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,vt,[],!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,yt),bt=!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],B(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=A(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]}};export{kt as Activator,l as Alea,Ct as ColorPicker,Ft as Configurator,i as DELETE,tt as HSVToHex,Z as HSVToRGB,_t as Hammer,wt as Popup,K as RGBToHSV,U as RGBToHex,Et as VALIDATOR_PRINT_STYLE,Dt as Validator,S as addClassName,X as addCssText,ct as binarySearchCustom,ht as binarySearchValue,st as bridgeObject,B as copyAndExtendArray,A as copyArray,x as deepExtend,n as deepObjectAssign,dt as easingFunctions,O as equalArray,_ as extend,F as fillIfDefined,M as forEach,j as getAbsoluteLeft,R as getAbsoluteRight,N as getAbsoluteTop,ut as getScrollBarWidth,q as getTarget,P as getType,W as hasParent,et as hexToHSV,$ as hexToRGB,at as insertSort,k as isDate,m as isNumber,y as isObject,b as isString,it as isValidHex,ot as isValidRGB,nt as isValidRGBA,lt as mergeOptions,z as option,V as overrideOpacity,J as parseColor,Q as preventDefault,o as pureDeepObjectAssign,v as recursiveDOMDelete,T as removeClassName,Y as removeCssText,rt as selectiveBridgeObject,E as selectiveDeepExtend,w as selectiveExtend,D as selectiveNotDeepExtend,H as throttle,I as toArray,pt as topMost,L as updateProperty};
27
+ //# sourceMappingURL=vis-util.min.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vis-util.min.mjs","sources":["../../../../src/deep-object-assign.ts","../../../../src/random/alea.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"],"sourcesContent":[null,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"],"names":["DELETE","Symbol","pureDeepObjectAssign","base","updates","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","Alea","seed","s0","s1","s2","mash","n","data","string","toString","i","charCodeAt","h","Mash","mashSeed","c","random","t","uint32","fract53","algorithm","version","AleaImplementation","now","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","recursiveDOMDelete","DOMobject","hasChildNodes","child","firstChild","isString","String","isObject","isDate","exec","isNaN","parse","copyOrDelete","allowDeletion","doDeletion","undefined","fillIfDefined","aProp","bProp","extend","assign","selectiveExtend","props","others","Error","other","p","hasOwnProperty","selectiveDeepExtend","TypeError","constructor","deepExtend","selectiveNotDeepExtend","propsToExclude","includes","protoExtend","getPrototypeOf","equalArray","len","getType","object","type","Boolean","copyAndExtendArray","arr","newValue","copyArray","getAbsoluteLeft","elem","getBoundingClientRect","left","getAbsoluteRight","right","getAbsoluteTop","top","addClassName","classNames","classes","className","split","newClasses","concat","filter","join","removeClassName","oldClasses","toArray","updateProperty","throttle","fn","scheduled","requestAnimationFrame","preventDefault","returnValue","getTarget","srcElement","Element","nodeType","hasParent","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","hexToRGB","hex","result","r","parseInt","g","overrideOpacity","color","opacity","rgb","substr","indexOf","replace","RGBToHex","red","green","blue","parseColor","inputColor","defaultColor","colorStr","isValidRGB","isValidHex","hsv","hexToHSV","lighterColorHSV","s","v","Math","min","darkerColorHSV","darkerColorHex","HSVToHex","lighterColorHex","background","border","highlight","hover","RGBToHSV","minRGB","maxRGB","max","splitCSSText","cssText","tmpEllement","styles","getPropertyValue","addCssText","cssStyle","entries","setProperty","removeCssText","removeProperty","HSVToRGB","floor","f","q","test","isValidRGBA","rgba","selectiveBridgeObject","fields","referenceObject","objectTo","create","bridgeObject","insertSort","compare","k","j","mergeOptions","mergeTarget","options","globalOptions","isPresent","obj","srcOption","globalOption","x","isEmpty","globalEnabled","enabled","src","dst","doMerge","binarySearchCustom","orderedItems","comparator","field","field2","iteration","low","high","middle","item","searchResult","binarySearchValue","sidePreference","prevValue","nextValue","easingFunctions","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","getScrollBarWidth","inner","width","height","outer","position","visibility","overflow","w1","offsetWidth","w2","clientWidth","topMost","pile","accessors","candidate","member","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","pixelRatio","generated","centerCoordinates","y","hueCircle","initialColor","previousColor","applied","updateCallback","closeCallback","_create","insertTo","frame","_bindHammer","_setSize","setUpdateCallback","setCloseCallback","_isColorString","setColor","setInitial","htmlColor","rgbaArray","rgbObj","alpha","JSON","stringify","_setColor","show","_generateHueCircle","_hide","storePrevious","setTimeout","_save","_apply","_updatePicker","_loadLast","alert","angleConvert","PI","radius","sin","cos","colorPickerSelector","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","colorPickerDiv","noCanvas","fontWeight","padding","innerText","opacityDiv","brightnessDiv","arrowDiv","me","onchange","oninput","brightnessLabel","opacityLabel","cancelButton","onclick","applyButton","saveButton","loadButton","drag","pinch","enable","isFirst","_moveSelector","hue","sat","hfac","sfac","fillRect","strokeStyle","stroke","getImageData","rect","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","initialized","popupCounter","defaultOptions","showButton","moduleOptions","domElements","popupDiv","popupLimit","popupHistory","colorPicker","wrapper","setOptions","_removePopup","_clean","setModuleOptions","counter","_handleObject","_makeItem","_makeHeader","_makeButton","_push","_showPopupIfNeeded","_getValue","path","name","div","_makeLabel","objectLabel","_makeDropdown","select","selectedValue","selected","_update","label","_makeRange","step","range","popupString","popupValue","factor","ceil","input","itemIndex","_setupPopup","generateButton","_printOptions","onmouseover","onmouseout","optionsContainer","index","id","html","clearTimeout","hideTimeout","deleteTimeout","_makeCheckbox","checkbox","checked","_makeTextInput","_makeColorField","_showColorPicker","colorString","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","hide","VALIDATOR_PRINT_STYLE_JS","Validator","validate","referenceOptions","subObject","usedOptions","check","__any__","getSuggestion","referenceOption","is_object","refOptionObj","__type__","checkFields","log","message","printLocation","optionType","refOptionType","print","_isAMomentObject","localSearch","findInOptions","globalSearch","msg","indexMatch","distance","closestMatch","recursive","closestMatchPath","lowerCaseOption","toLowerCase","op","levenshteinDistance","prefix","str","matrix","charAt"],"mappings":"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"}