camunda-bpmn-js 1.0.0 → 1.1.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.
@@ -28375,11 +28375,11 @@
28375
28375
 
28376
28376
  var n$3,l$3,u$3,t$5,o$5,f$3={},e$5=[],c$3=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function s$3(n,l){for(var u in l)n[u]=l[u];return n}function a$4(n){var l=n.parentNode;l&&l.removeChild(n);}function h$3(l,u,i){var t,o,r,f={};for(r in u)"key"==r?t=u[r]:"ref"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n$3.call(arguments,2):i),"function"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return v$3(l,f,t,o,null)}function v$3(n,i,t,o,r){var f={type:n,props:i,key:t,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==r?++u$3:r};return null==r&&null!=l$3.vnode&&l$3.vnode(f),f}function p$4(n){return n.children}function d$3(n,l){this.props=n,this.context=l;}function _$3(n,l){if(null==l)return n.__?_$3(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return "function"==typeof n.type?_$3(n):null}function k$4(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return k$4(n)}}function b$3(n){(!n.__d&&(n.__d=!0)&&t$5.push(n)&&!g$4.__r++||o$5!==l$3.debounceRendering)&&((o$5=l$3.debounceRendering)||setTimeout)(g$4);}function g$4(){for(var n;g$4.__r=t$5.length;)n=t$5.sort(function(n,l){return n.__v.__b-l.__v.__b}),t$5=[],n.some(function(n){var l,u,i,t,o,r;n.__d&&(o=(t=(l=n).__v).__e,(r=l.__P)&&(u=[],(i=s$3({},t)).__v=t.__v+1,j$4(r,t,i,l.__n,void 0!==r.ownerSVGElement,null!=t.__h?[o]:null,u,null==o?_$3(t):o,t.__h),z$3(u,t),t.__e!=o&&k$4(t)));});}function w$4(n,l,u,i,t,o,r,c,s,a){var h,y,d,k,b,g,w,x=i&&i.__k||e$5,C=x.length;for(u.__k=[],h=0;h<l.length;h++)if(null!=(k=u.__k[h]=null==(k=l[h])||"boolean"==typeof k?null:"string"==typeof k||"number"==typeof k||"bigint"==typeof k?v$3(null,k,null,null,k):Array.isArray(k)?v$3(p$4,{children:k},null,null,null):k.__b>0?v$3(k.type,k.props,k.key,k.ref?k.ref:null,k.__v):k)){if(k.__=u,k.__b=u.__b+1,null===(d=x[h])||d&&k.key==d.key&&k.type===d.type)x[h]=void 0;else for(y=0;y<C;y++){if((d=x[y])&&k.key==d.key&&k.type===d.type){x[y]=void 0;break}d=null;}j$4(n,k,d=d||f$3,t,o,r,c,s,a),b=k.__e,(y=k.ref)&&d.ref!=y&&(w||(w=[]),d.ref&&w.push(d.ref,null,k),w.push(y,k.__c||b,k)),null!=b?(null==g&&(g=b),"function"==typeof k.type&&k.__k===d.__k?k.__d=s=m$4(k,s,n):s=A$3(n,k,d,x,b,s),"function"==typeof u.type&&(u.__d=s)):s&&d.__e==s&&s.parentNode!=n&&(s=_$3(d));}for(u.__e=g,h=C;h--;)null!=x[h]&&N$2(x[h],x[h]);if(w)for(h=0;h<w.length;h++)M$2(w[h],w[++h],w[++h]);}function m$4(n,l,u){for(var i,t=n.__k,o=0;t&&o<t.length;o++)(i=t[o])&&(i.__=n,l="function"==typeof i.type?m$4(i,l,u):A$3(u,i,i,t,i.__e,l));return l}function A$3(n,l,u,i,t,o){var r,f,e;if(void 0!==l.__d)r=l.__d,l.__d=void 0;else if(null==u||t!=o||null==t.parentNode)n:if(null==o||o.parentNode!==n)n.appendChild(t),r=null;else {for(f=o,e=0;(f=f.nextSibling)&&e<i.length;e+=1)if(f==t)break n;n.insertBefore(t,o),r=o;}return void 0!==r?r:t.nextSibling}function C$3(n,l,u,i,t){var o;for(o in u)"children"===o||"key"===o||o in l||H$2(n,o,null,u[o],i);for(o in l)t&&"function"!=typeof l[o]||"children"===o||"key"===o||"value"===o||"checked"===o||u[o]===l[o]||H$2(n,o,l[o],u[o],i);}function $$2(n,l,u){"-"===l[0]?n.setProperty(l,u):n[l]=null==u?"":"number"!=typeof u||c$3.test(l)?u:u+"px";}function H$2(n,l,u,i,t){var o;n:if("style"===l)if("string"==typeof u)n.style.cssText=u;else {if("string"==typeof i&&(n.style.cssText=i=""),i)for(l in i)u&&l in u||$$2(n.style,l,"");if(u)for(l in u)i&&u[l]===i[l]||$$2(n.style,l,u[l]);}else if("o"===l[0]&&"n"===l[1])o=l!==(l=l.replace(/Capture$/,"")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?i||n.addEventListener(l,o?T$4:I$2,o):n.removeEventListener(l,o?T$4:I$2,o);else if("dangerouslySetInnerHTML"!==l){if(t)l=l.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("href"!==l&&"list"!==l&&"form"!==l&&"tabIndex"!==l&&"download"!==l&&l in n)try{n[l]=null==u?"":u;break n}catch(n){}"function"==typeof u||(null==u||!1===u&&-1==l.indexOf("-")?n.removeAttribute(l):n.setAttribute(l,u));}}function I$2(n){this.l[n.type+!1](l$3.event?l$3.event(n):n);}function T$4(n){this.l[n.type+!0](l$3.event?l$3.event(n):n);}function j$4(n,u,i,t,o,r,f,e,c){var a,h,v,y,_,k,b,g,m,x,A,C,$,H,I,T=u.type;if(void 0!==u.constructor)return null;null!=i.__h&&(c=i.__h,e=u.__e=i.__e,u.__h=null,r=[e]),(a=l$3.__b)&&a(u);try{n:if("function"==typeof T){if(g=u.props,m=(a=T.contextType)&&t[a.__c],x=a?m?m.props.value:a.__:t,i.__c?b=(h=u.__c=i.__c).__=h.__E:("prototype"in T&&T.prototype.render?u.__c=h=new T(g,x):(u.__c=h=new d$3(g,x),h.constructor=T,h.render=O$2),m&&m.sub(h),h.props=g,h.state||(h.state={}),h.context=x,h.__n=t,v=h.__d=!0,h.__h=[],h._sb=[]),null==h.__s&&(h.__s=h.state),null!=T.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=s$3({},h.__s)),s$3(h.__s,T.getDerivedStateFromProps(g,h.__s))),y=h.props,_=h.state,v)null==T.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else {if(null==T.getDerivedStateFromProps&&g!==y&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(g,x),!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(g,h.__s,x)||u.__v===i.__v){for(h.props=g,h.state=h.__s,u.__v!==i.__v&&(h.__d=!1),h.__v=u,u.__e=i.__e,u.__k=i.__k,u.__k.forEach(function(n){n&&(n.__=u);}),A=0;A<h._sb.length;A++)h.__h.push(h._sb[A]);h._sb=[],h.__h.length&&f.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(g,h.__s,x),null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(y,_,k);});}if(h.context=x,h.props=g,h.__v=u,h.__P=n,C=l$3.__r,$=0,"prototype"in T&&T.prototype.render){for(h.state=h.__s,h.__d=!1,C&&C(u),a=h.render(h.props,h.state,h.context),H=0;H<h._sb.length;H++)h.__h.push(h._sb[H]);h._sb=[];}else do{h.__d=!1,C&&C(u),a=h.render(h.props,h.state,h.context),h.state=h.__s;}while(h.__d&&++$<25);h.state=h.__s,null!=h.getChildContext&&(t=s$3(s$3({},t),h.getChildContext())),v||null==h.getSnapshotBeforeUpdate||(k=h.getSnapshotBeforeUpdate(y,_)),I=null!=a&&a.type===p$4&&null==a.key?a.props.children:a,w$4(n,Array.isArray(I)?I:[I],u,i,t,o,r,f,e,c),h.base=u.__e,u.__h=null,h.__h.length&&f.push(h),b&&(h.__E=h.__=null),h.__e=!1;}else null==r&&u.__v===i.__v?(u.__k=i.__k,u.__e=i.__e):u.__e=L$2(i.__e,u,i,t,o,r,f,c);(a=l$3.diffed)&&a(u);}catch(n){u.__v=null,(c||null!=r)&&(u.__e=e,u.__h=!!c,r[r.indexOf(e)]=null),l$3.__e(n,u,i);}}function z$3(n,u){l$3.__c&&l$3.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u);});}catch(n){l$3.__e(n,u.__v);}});}function L$2(l,u,i,t,o,r,e,c){var s,h,v,y=i.props,p=u.props,d=u.type,k=0;if("svg"===d&&(o=!0),null!=r)for(;k<r.length;k++)if((s=r[k])&&"setAttribute"in s==!!d&&(d?s.localName===d:3===s.nodeType)){l=s,r[k]=null;break}if(null==l){if(null===d)return document.createTextNode(p);l=o?document.createElementNS("http://www.w3.org/2000/svg",d):document.createElement(d,p.is&&p),r=null,c=!1;}if(null===d)y===p||c&&l.data===p||(l.data=p);else {if(r=r&&n$3.call(l.childNodes),h=(y=i.props||f$3).dangerouslySetInnerHTML,v=p.dangerouslySetInnerHTML,!c){if(null!=r)for(y={},k=0;k<l.attributes.length;k++)y[l.attributes[k].name]=l.attributes[k].value;(v||h)&&(v&&(h&&v.__html==h.__html||v.__html===l.innerHTML)||(l.innerHTML=v&&v.__html||""));}if(C$3(l,p,y,o,c),v)u.__k=[];else if(k=u.props.children,w$4(l,Array.isArray(k)?k:[k],u,i,t,o&&"foreignObject"!==d,r,e,r?r[0]:i.__k&&_$3(i,0),c),null!=r)for(k=r.length;k--;)null!=r[k]&&a$4(r[k]);c||("value"in p&&void 0!==(k=p.value)&&(k!==l.value||"progress"===d&&!k||"option"===d&&k!==y.value)&&H$2(l,"value",k,y.value,!1),"checked"in p&&void 0!==(k=p.checked)&&k!==l.checked&&H$2(l,"checked",k,y.checked,!1));}return l}function M$2(n,u,i){try{"function"==typeof n?n(u):n.current=u;}catch(n){l$3.__e(n,i);}}function N$2(n,u,i){var t,o;if(l$3.unmount&&l$3.unmount(n),(t=n.ref)&&(t.current&&t.current!==n.__e||M$2(t,null,u)),null!=(t=n.__c)){if(t.componentWillUnmount)try{t.componentWillUnmount();}catch(n){l$3.__e(n,u);}t.base=t.__P=null,n.__c=void 0;}if(t=n.__k)for(o=0;o<t.length;o++)t[o]&&N$2(t[o],u,i||"function"!=typeof n.type);i||null==n.__e||a$4(n.__e),n.__=n.__e=n.__d=void 0;}function O$2(n,l,u){return this.constructor(n,u)}function P$2(u,i,t){var o,r,e;l$3.__&&l$3.__(u,i),r=(o="function"==typeof t)?null:t&&t.__k||i.__k,e=[],j$4(i,u=(!o&&t||i).__k=h$3(p$4,null,[u]),r||f$3,f$3,void 0!==i.ownerSVGElement,!o&&t?[t]:r?null:i.firstChild?n$3.call(i.childNodes):null,e,!o&&t?t:r?r.__e:i.firstChild,o),z$3(e,u);}n$3=e$5.slice,l$3={__e:function(n,l,u,i){for(var t,o,r;l=l.__;)if((t=l.__c)&&!t.__)try{if((o=t.constructor)&&null!=o.getDerivedStateFromError&&(t.setState(o.getDerivedStateFromError(n)),r=t.__d),null!=t.componentDidCatch&&(t.componentDidCatch(n,i||{}),r=t.__d),r)return t.__E=t}catch(l){n=l;}throw n}},u$3=0,d$3.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=s$3({},this.state),"function"==typeof n&&(n=n(s$3({},u),this.props)),n&&s$3(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),b$3(this));},d$3.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),b$3(this));},d$3.prototype.render=p$4,t$5=[],g$4.__r=0;
28377
28377
 
28378
- var t$4,r$3,u$2,i$4,o$4=0,f$2=[],c$2=[],e$4=l$3.__b,a$3=l$3.__r,v$2=l$3.diffed,l$2=l$3.__c,m$3=l$3.unmount;function d$2(t,u){l$3.__h&&l$3.__h(r$3,t,o$4||u),o$4=0;var i=r$3.__H||(r$3.__H={__:[],__h:[]});return t>=i.__.length&&i.__.push({__V:c$2}),i.__[t]}function p$3(n){return o$4=1,y$2(B$1,n)}function y$2(n,u,i){var o=d$2(t$4++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):B$1(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}));}],o.__c=r$3,!r$3.u)){r$3.u=!0;var f=r$3.shouldComponentUpdate;r$3.shouldComponentUpdate=function(n,t,r){if(!o.__c.__H)return !0;var u=o.__c.__H.__.filter(function(n){return n.__c});if(u.every(function(n){return !n.__N}))return !f||f.call(this,n,t,r);var i=!1;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0);}}),!(!i&&o.__c.props===n)&&(!f||f.call(this,n,t,r))};}return o.__N||o.__}function h$2(u,i){var o=d$2(t$4++,3);!l$3.__s&&z$2(o.__H,i)&&(o.__=u,o.i=i,r$3.__H.__h.push(o));}function s$2(u,i){var o=d$2(t$4++,4);!l$3.__s&&z$2(o.__H,i)&&(o.__=u,o.i=i,r$3.__h.push(o));}function _$2(n){return o$4=5,F$2(function(){return {current:n}},[])}function F$2(n,r){var u=d$2(t$4++,7);return z$2(u.__H,r)?(u.__V=n(),u.i=r,u.__h=n,u.__V):u.__}function T$3(n,t){return o$4=8,F$2(function(){return n},t)}function b$2(){for(var t;t=f$2.shift();)if(t.__P&&t.__H)try{t.__H.__h.forEach(k$3),t.__H.__h.forEach(w$3),t.__H.__h=[];}catch(r){t.__H.__h=[],l$3.__e(r,t.__v);}}l$3.__b=function(n){r$3=null,e$4&&e$4(n);},l$3.__r=function(n){a$3&&a$3(n),t$4=0;var i=(r$3=n.__c).__H;i&&(u$2===r$3?(i.__h=[],r$3.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.__V=c$2,n.__N=n.i=void 0;})):(i.__h.forEach(k$3),i.__h.forEach(w$3),i.__h=[])),u$2=r$3;},l$3.diffed=function(t){v$2&&v$2(t);var o=t.__c;o&&o.__H&&(o.__H.__h.length&&(1!==f$2.push(o)&&i$4===l$3.requestAnimationFrame||((i$4=l$3.requestAnimationFrame)||j$3)(b$2)),o.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==c$2&&(n.__=n.__V),n.i=void 0,n.__V=c$2;})),u$2=r$3=null;},l$3.__c=function(t,r){r.some(function(t){try{t.__h.forEach(k$3),t.__h=t.__h.filter(function(n){return !n.__||w$3(n)});}catch(u){r.some(function(n){n.__h&&(n.__h=[]);}),r=[],l$3.__e(u,t.__v);}}),l$2&&l$2(t,r);},l$3.unmount=function(t){m$3&&m$3(t);var r,u=t.__c;u&&u.__H&&(u.__H.__.forEach(function(n){try{k$3(n);}catch(n){r=n;}}),u.__H=void 0,r&&l$3.__e(r,u.__v));};var g$3="function"==typeof requestAnimationFrame;function j$3(n){var t,r=function(){clearTimeout(u),g$3&&cancelAnimationFrame(t),setTimeout(n);},u=setTimeout(r,100);g$3&&(t=requestAnimationFrame(r));}function k$3(n){var t=r$3,u=n.__c;"function"==typeof u&&(n.__c=void 0,u()),r$3=t;}function w$3(n){var t=r$3;n.__c=n.__(),r$3=t;}function z$2(n,t){return !n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function B$1(n,t){return "function"==typeof t?t(n):t}
28378
+ var n$2=function(t,s,r,e){var u;s[0]=0;for(var h=1;h<s.length;h++){var p=s[h++],a=s[h]?(s[0]|=p?1:2,r[s[h++]]):s[++h];3===p?e[0]=a:4===p?e[1]=Object.assign(e[1]||{},a):5===p?(e[1]=e[1]||{})[s[++h]]=a:6===p?e[1][s[++h]]+=a+"":p?(u=t.apply(a,n$2(t,a,r,["",null])),e.push(u),a[0]?s[0]|=2:(s[h-2]=0,s[h]=u)):e.push(a);}return e},t$4=new Map;function e$4(s){var r=t$4.get(this);return r||(r=new Map,t$4.set(this,r)),(r=n$2(this,r.get(s)||(r.set(s,r=function(n){for(var t,s,r=1,e="",u="",h=[0],p=function(n){1===r&&(n||(e=e.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?h.push(0,n,e):3===r&&(n||e)?(h.push(3,n,e),r=2):2===r&&"..."===e&&n?h.push(4,n,0):2===r&&e&&!n?h.push(5,0,!0,e):r>=5&&((e||!n&&5===r)&&(h.push(r,0,e,s),r=6),n&&(h.push(r,n,0,s),r=6)),e="";},a=0;a<n.length;a++){a&&(1===r&&p(),p(a));for(var l=0;l<n[a].length;l++)t=n[a][l],1===r?"<"===t?(p(),h=[h],r=3):e+=t:4===r?"--"===e&&">"===t?(r=1,e=""):e=t+e[0]:u?t===u?u="":e+=t:'"'===t||"'"===t?u=t:">"===t?(p(),r=1):r&&("="===t?(r=5,s=e,e=""):"/"===t&&(r<5||">"===n[a][l+1])?(p(),3===r&&(h=h[0]),r=h,(h=h[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(p(),r=2):e+=t),3===r&&"!--"===e&&(r=4,h=h[0]);}return p(),h}(s)),r),arguments,[])).length>1?r:r[0]}
28379
28379
 
28380
- var n$2=function(t,s,r,e){var u;s[0]=0;for(var h=1;h<s.length;h++){var p=s[h++],a=s[h]?(s[0]|=p?1:2,r[s[h++]]):s[++h];3===p?e[0]=a:4===p?e[1]=Object.assign(e[1]||{},a):5===p?(e[1]=e[1]||{})[s[++h]]=a:6===p?e[1][s[++h]]+=a+"":p?(u=t.apply(a,n$2(t,a,r,["",null])),e.push(u),a[0]?s[0]|=2:(s[h-2]=0,s[h]=u)):e.push(a);}return e},t$3=new Map;function e$3(s){var r=t$3.get(this);return r||(r=new Map,t$3.set(this,r)),(r=n$2(this,r.get(s)||(r.set(s,r=function(n){for(var t,s,r=1,e="",u="",h=[0],p=function(n){1===r&&(n||(e=e.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?h.push(0,n,e):3===r&&(n||e)?(h.push(3,n,e),r=2):2===r&&"..."===e&&n?h.push(4,n,0):2===r&&e&&!n?h.push(5,0,!0,e):r>=5&&((e||!n&&5===r)&&(h.push(r,0,e,s),r=6),n&&(h.push(r,n,0,s),r=6)),e="";},a=0;a<n.length;a++){a&&(1===r&&p(),p(a));for(var l=0;l<n[a].length;l++)t=n[a][l],1===r?"<"===t?(p(),h=[h],r=3):e+=t:4===r?"--"===e&&">"===t?(r=1,e=""):e=t+e[0]:u?t===u?u="":e+=t:'"'===t||"'"===t?u=t:">"===t?(p(),r=1):r&&("="===t?(r=5,s=e,e=""):"/"===t&&(r<5||">"===n[a][l+1])?(p(),3===r&&(h=h[0]),r=h,(h=h[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(p(),r=2):e+=t),3===r&&"!--"===e&&(r=4,h=h[0]);}return p(),h}(s)),r),arguments,[])).length>1?r:r[0]}
28380
+ var m$3=e$4.bind(h$3);
28381
28381
 
28382
- var m$2=e$3.bind(h$3);
28382
+ var t$3,r$3,u$2,i$4,o$4=0,f$2=[],c$2=[],e$3=l$3.__b,a$3=l$3.__r,v$2=l$3.diffed,l$2=l$3.__c,m$2=l$3.unmount;function d$2(t,u){l$3.__h&&l$3.__h(r$3,t,o$4||u),o$4=0;var i=r$3.__H||(r$3.__H={__:[],__h:[]});return t>=i.__.length&&i.__.push({__V:c$2}),i.__[t]}function p$3(n){return o$4=1,y$2(B$1,n)}function y$2(n,u,i){var o=d$2(t$3++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):B$1(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}));}],o.__c=r$3,!r$3.u)){r$3.u=!0;var f=r$3.shouldComponentUpdate;r$3.shouldComponentUpdate=function(n,t,r){if(!o.__c.__H)return !0;var u=o.__c.__H.__.filter(function(n){return n.__c});if(u.every(function(n){return !n.__N}))return !f||f.call(this,n,t,r);var i=!1;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0);}}),!(!i&&o.__c.props===n)&&(!f||f.call(this,n,t,r))};}return o.__N||o.__}function h$2(u,i){var o=d$2(t$3++,3);!l$3.__s&&z$2(o.__H,i)&&(o.__=u,o.i=i,r$3.__H.__h.push(o));}function s$2(u,i){var o=d$2(t$3++,4);!l$3.__s&&z$2(o.__H,i)&&(o.__=u,o.i=i,r$3.__h.push(o));}function _$2(n){return o$4=5,F$2(function(){return {current:n}},[])}function F$2(n,r){var u=d$2(t$3++,7);return z$2(u.__H,r)?(u.__V=n(),u.i=r,u.__h=n,u.__V):u.__}function T$3(n,t){return o$4=8,F$2(function(){return n},t)}function b$2(){for(var t;t=f$2.shift();)if(t.__P&&t.__H)try{t.__H.__h.forEach(k$3),t.__H.__h.forEach(w$3),t.__H.__h=[];}catch(r){t.__H.__h=[],l$3.__e(r,t.__v);}}l$3.__b=function(n){r$3=null,e$3&&e$3(n);},l$3.__r=function(n){a$3&&a$3(n),t$3=0;var i=(r$3=n.__c).__H;i&&(u$2===r$3?(i.__h=[],r$3.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.__V=c$2,n.__N=n.i=void 0;})):(i.__h.forEach(k$3),i.__h.forEach(w$3),i.__h=[])),u$2=r$3;},l$3.diffed=function(t){v$2&&v$2(t);var o=t.__c;o&&o.__H&&(o.__H.__h.length&&(1!==f$2.push(o)&&i$4===l$3.requestAnimationFrame||((i$4=l$3.requestAnimationFrame)||j$3)(b$2)),o.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==c$2&&(n.__=n.__V),n.i=void 0,n.__V=c$2;})),u$2=r$3=null;},l$3.__c=function(t,r){r.some(function(t){try{t.__h.forEach(k$3),t.__h=t.__h.filter(function(n){return !n.__||w$3(n)});}catch(u){r.some(function(n){n.__h&&(n.__h=[]);}),r=[],l$3.__e(u,t.__v);}}),l$2&&l$2(t,r);},l$3.unmount=function(t){m$2&&m$2(t);var r,u=t.__c;u&&u.__H&&(u.__H.__.forEach(function(n){try{k$3(n);}catch(n){r=n;}}),u.__H=void 0,r&&l$3.__e(r,u.__v));};var g$3="function"==typeof requestAnimationFrame;function j$3(n){var t,r=function(){clearTimeout(u),g$3&&cancelAnimationFrame(t),setTimeout(n);},u=setTimeout(r,100);g$3&&(t=requestAnimationFrame(r));}function k$3(n){var t=r$3,u=n.__c;"function"==typeof u&&(n.__c=void 0,u()),r$3=t;}function w$3(n){var t=r$3;n.__c=n.__(),r$3=t;}function z$2(n,t){return !n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function B$1(n,t){return "function"==typeof t?t(n):t}
28383
28383
 
28384
28384
  function r$2(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r$2(e[t]))&&(n&&(n+=" "),n+=f);else for(t in e)e[t]&&(n&&(n+=" "),n+=t);return n}function clsx(){for(var e,t,f=0,n="";f<arguments.length;)(e=arguments[f++])&&(t=r$2(e))&&(n&&(n+=" "),n+=t);return n}
28385
28385
 
@@ -28402,7 +28402,7 @@
28402
28402
  onClick
28403
28403
  } = props;
28404
28404
 
28405
- return m$2`
28405
+ return m$3`
28406
28406
  <li
28407
28407
  class=${ clsx('entry', { selected }) }
28408
28408
  data-id=${ entry.id }
@@ -28415,17 +28415,17 @@
28415
28415
  <span
28416
28416
  class=${ clsx('djs-popup-entry-name', entry.className) }
28417
28417
  >
28418
- ${ entry.imageUrl ? m$2`
28418
+ ${ entry.imageUrl ? m$3`
28419
28419
  <img class="djs-popup-entry-icon" src=${ entry.imageUrl } />
28420
28420
  ` : null }
28421
28421
 
28422
- ${ entry.label ? m$2`
28422
+ ${ entry.label ? m$3`
28423
28423
  <span class="djs-popup-label">
28424
28424
  ${ entry.label }
28425
28425
  </span>
28426
28426
  ` : null }
28427
28427
  </span>
28428
- ${ entry.description && m$2`
28428
+ ${ entry.description && m$3`
28429
28429
  <span
28430
28430
  class="djs-popup-entry-description"
28431
28431
  title=${ entry.description }
@@ -28434,7 +28434,7 @@
28434
28434
  </span>
28435
28435
  ` }
28436
28436
  </div>
28437
- ${ entry.documentationRef && m$2`
28437
+ ${ entry.documentationRef && m$3`
28438
28438
  <div class="djs-popup-entry-docs">
28439
28439
  <a
28440
28440
  href="${ entry.documentationRef }"
@@ -28489,16 +28489,16 @@
28489
28489
  }
28490
28490
  }, [ selectedEntry ]);
28491
28491
 
28492
- return m$2`
28492
+ return m$3`
28493
28493
  <div class="djs-popup-results" ref=${ resultsRef }>
28494
- ${ groups.map(group => m$2`
28495
- ${ group.name && m$2`
28494
+ ${ groups.map(group => m$3`
28495
+ ${ group.name && m$3`
28496
28496
  <div key=${ group.id } class="entry-header" title=${ group.name }>
28497
28497
  ${ group.name }
28498
28498
  </div>
28499
28499
  ` }
28500
28500
  <ul class="djs-popup-group" data-group=${ group.id }>
28501
- ${ group.entries.map(entry => m$2`
28501
+ ${ group.entries.map(entry => m$3`
28502
28502
  <${PopupMenuItem}
28503
28503
  key=${ entry.id }
28504
28504
  entry=${ entry }
@@ -28717,7 +28717,7 @@
28717
28717
 
28718
28718
  const displayHeader = F$2(() => title || headerEntries.length > 0, [ title, headerEntries ]);
28719
28719
 
28720
- return m$2`
28720
+ return m$3`
28721
28721
  <${PopupMenuWrapper}
28722
28722
  onClose=${ onClose }
28723
28723
  onKeyup=${ handleKey }
@@ -28727,10 +28727,10 @@
28727
28727
  width=${ width }
28728
28728
  scale=${ scale }
28729
28729
  >
28730
- ${ displayHeader && m$2`
28730
+ ${ displayHeader && m$3`
28731
28731
  <div class="djs-popup-header">
28732
28732
  <h3 class="djs-popup-title" title=${ title }>${ title }</h3>
28733
- ${ headerEntries.map(entry => m$2`
28733
+ ${ headerEntries.map(entry => m$3`
28734
28734
  <span
28735
28735
  class=${ getHeaderClasses(entry, entry === selectedEntry) }
28736
28736
  onClick=${ event => onSelect(event, entry) }
@@ -28739,21 +28739,21 @@
28739
28739
  onMouseEnter=${ () => setSelectedEntry(entry) }
28740
28740
  onMouseLeave=${ () => setSelectedEntry(null) }
28741
28741
  >
28742
- ${ entry.imageUrl ? m$2`
28742
+ ${ entry.imageUrl ? m$3`
28743
28743
  <img class="djs-popup-entry-icon" src=${ entry.imageUrl } />
28744
28744
  ` : null }
28745
28745
 
28746
- ${ entry.label ? m$2`
28746
+ ${ entry.label ? m$3`
28747
28747
  <span class="djs-popup-label">${ entry.label }</span>
28748
28748
  ` : null }
28749
28749
  </span>
28750
28750
  `) }
28751
28751
  </div>
28752
28752
  ` }
28753
- ${ originalEntries.length > 0 && m$2`
28753
+ ${ originalEntries.length > 0 && m$3`
28754
28754
  <div class="djs-popup-body">
28755
28755
 
28756
- ${ searchable && m$2`
28756
+ ${ searchable && m$3`
28757
28757
  <div class="djs-popup-search">
28758
28758
  <svg class="djs-popup-search-icon" width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
28759
28759
  <path fill-rule="evenodd" clip-rule="evenodd" d="M9.0325 8.5H9.625L13.3675 12.25L12.25 13.3675L8.5 9.625V9.0325L8.2975 8.8225C7.4425 9.5575 6.3325 10 5.125 10C2.4325 10 0.25 7.8175 0.25 5.125C0.25 2.4325 2.4325 0.25 5.125 0.25C7.8175 0.25 10 2.4325 10 5.125C10 6.3325 9.5575 7.4425 8.8225 8.2975L9.0325 8.5ZM1.75 5.125C1.75 6.9925 3.2575 8.5 5.125 8.5C6.9925 8.5 8.5 6.9925 8.5 5.125C8.5 3.2575 6.9925 1.75 5.125 1.75C3.2575 1.75 1.75 3.2575 1.75 5.125Z" fill="#22242A"/>
@@ -28772,7 +28772,7 @@
28772
28772
  onClick=${ onSelect }
28773
28773
  />
28774
28774
  </div>
28775
- ${ entries.length === 0 && m$2`
28775
+ ${ entries.length === 0 && m$3`
28776
28776
  <div class="djs-popup-no-results">No matching entries found.</div>
28777
28777
  ` }
28778
28778
  ` }
@@ -28825,7 +28825,7 @@
28825
28825
  popupRef.current && popupRef.current.focus();
28826
28826
  }, []);
28827
28827
 
28828
- return m$2`
28828
+ return m$3`
28829
28829
  <div
28830
28830
  class="djs-popup-backdrop"
28831
28831
  onClick=${ checkClose }
@@ -28956,7 +28956,7 @@
28956
28956
  const onSelect = (event, entry) => this.trigger(event, entry);
28957
28957
 
28958
28958
  P$2(
28959
- m$2`
28959
+ m$3`
28960
28960
  <${PopupMenuComponent}
28961
28961
  onClose=${ onClose }
28962
28962
  onSelect=${ onSelect }
@@ -29080,13 +29080,10 @@
29080
29080
 
29081
29081
  PopupMenu.prototype._createContainer = function(config) {
29082
29082
 
29083
- let parent = config && config.parent || 'body';
29084
-
29085
- if (typeof parent === 'string') {
29086
- parent = document.querySelector(parent);
29087
- }
29083
+ var canvas = this._canvas,
29084
+ parent = canvas.getContainer();
29088
29085
 
29089
- const container = domify$1(`<div class="djs-popup-parent djs-parent" data-popup=${config.provider}></div>`);
29086
+ const container = domify$1(`<div class="djs-popup-parent djs-scrollable" data-popup=${config.provider}></div>`);
29090
29087
 
29091
29088
  parent.appendChild(container);
29092
29089
 
@@ -64515,10 +64512,11 @@
64515
64512
  /**
64516
64513
  Create a selection range.
64517
64514
  */
64518
- static range(anchor, head, goalColumn) {
64519
- let goal = (goalColumn !== null && goalColumn !== void 0 ? goalColumn : 33554431 /* RangeFlag.NoGoalColumn */) << 5 /* RangeFlag.GoalColumnOffset */;
64520
- return head < anchor ? SelectionRange.create(head, anchor, 16 /* RangeFlag.Inverted */ | goal | 8 /* RangeFlag.AssocAfter */)
64521
- : SelectionRange.create(anchor, head, goal | (head > anchor ? 4 /* RangeFlag.AssocBefore */ : 0));
64515
+ static range(anchor, head, goalColumn, bidiLevel) {
64516
+ let flags = ((goalColumn !== null && goalColumn !== void 0 ? goalColumn : 33554431 /* RangeFlag.NoGoalColumn */) << 5 /* RangeFlag.GoalColumnOffset */) |
64517
+ (bidiLevel == null ? 3 : Math.min(2, bidiLevel));
64518
+ return head < anchor ? SelectionRange.create(head, anchor, 16 /* RangeFlag.Inverted */ | 8 /* RangeFlag.AssocAfter */ | flags)
64519
+ : SelectionRange.create(anchor, head, (head > anchor ? 4 /* RangeFlag.AssocBefore */ : 0) | flags);
64522
64520
  }
64523
64521
  /**
64524
64522
  @internal
@@ -67348,6 +67346,26 @@
67348
67346
  }
67349
67347
  }
67350
67348
  }
67349
+ function scrollableParent(dom) {
67350
+ let doc = dom.ownerDocument;
67351
+ for (let cur = dom.parentNode; cur;) {
67352
+ if (cur == doc.body) {
67353
+ break;
67354
+ }
67355
+ else if (cur.nodeType == 1) {
67356
+ if (cur.scrollHeight > cur.clientHeight || cur.scrollWidth > cur.clientWidth)
67357
+ return cur;
67358
+ cur = cur.assignedSlot || cur.parentNode;
67359
+ }
67360
+ else if (cur.nodeType == 11) {
67361
+ cur = cur.host;
67362
+ }
67363
+ else {
67364
+ break;
67365
+ }
67366
+ }
67367
+ return null;
67368
+ }
67351
67369
  class DOMSelectionState {
67352
67370
  constructor() {
67353
67371
  this.anchorNode = null;
@@ -68484,7 +68502,9 @@
68484
68502
  super(-200000000 /* Side.Line */, -200000000 /* Side.Line */, null, spec);
68485
68503
  }
68486
68504
  eq(other) {
68487
- return other instanceof LineDecoration && attrsEq(this.spec.attributes, other.spec.attributes);
68505
+ return other instanceof LineDecoration &&
68506
+ this.spec.class == other.spec.class &&
68507
+ attrsEq(this.spec.attributes, other.spec.attributes);
68488
68508
  }
68489
68509
  range(from, to = from) {
68490
68510
  if (to != from)
@@ -68759,6 +68779,7 @@
68759
68779
  this.curLine = null;
68760
68780
  this.breakAtStart = 0;
68761
68781
  this.pendingBuffer = 0 /* Buf.No */;
68782
+ this.bufferMarks = [];
68762
68783
  // Set to false directly after a widget that covers the position after it
68763
68784
  this.atCursorPos = true;
68764
68785
  this.openStart = -1;
@@ -68781,20 +68802,20 @@
68781
68802
  }
68782
68803
  return this.curLine;
68783
68804
  }
68784
- flushBuffer(active) {
68805
+ flushBuffer(active = this.bufferMarks) {
68785
68806
  if (this.pendingBuffer) {
68786
68807
  this.curLine.append(wrapMarks(new WidgetBufferView(-1), active), active.length);
68787
68808
  this.pendingBuffer = 0 /* Buf.No */;
68788
68809
  }
68789
68810
  }
68790
68811
  addBlockWidget(view) {
68791
- this.flushBuffer([]);
68812
+ this.flushBuffer();
68792
68813
  this.curLine = null;
68793
68814
  this.content.push(view);
68794
68815
  }
68795
68816
  finish(openEnd) {
68796
- if (!openEnd)
68797
- this.flushBuffer([]);
68817
+ if (this.pendingBuffer && openEnd <= this.bufferMarks.length)
68818
+ this.flushBuffer();
68798
68819
  else
68799
68820
  this.pendingBuffer = 0 /* Buf.No */;
68800
68821
  if (!this.posCovered())
@@ -68814,8 +68835,9 @@
68814
68835
  this.content[this.content.length - 1].breakAfter = 1;
68815
68836
  else
68816
68837
  this.breakAtStart = 1;
68817
- this.flushBuffer([]);
68838
+ this.flushBuffer();
68818
68839
  this.curLine = null;
68840
+ this.atCursorPos = true;
68819
68841
  length--;
68820
68842
  continue;
68821
68843
  }
@@ -68857,7 +68879,7 @@
68857
68879
  else {
68858
68880
  let view = WidgetView.create(deco.widget || new NullWidget("span"), len, len ? 0 : deco.startSide);
68859
68881
  let cursorBefore = this.atCursorPos && !view.isEditable && openStart <= active.length && (from < to || deco.startSide > 0);
68860
- let cursorAfter = !view.isEditable && (from < to || deco.startSide <= 0);
68882
+ let cursorAfter = !view.isEditable && (from < to || openStart > active.length || deco.startSide <= 0);
68861
68883
  let line = this.getLine();
68862
68884
  if (this.pendingBuffer == 2 /* Buf.IfCursor */ && !cursorBefore)
68863
68885
  this.pendingBuffer = 0 /* Buf.No */;
@@ -68868,7 +68890,9 @@
68868
68890
  }
68869
68891
  line.append(wrapMarks(view, active), openStart);
68870
68892
  this.atCursorPos = cursorAfter;
68871
- this.pendingBuffer = !cursorAfter ? 0 /* Buf.No */ : from < to ? 1 /* Buf.Yes */ : 2 /* Buf.IfCursor */;
68893
+ this.pendingBuffer = !cursorAfter ? 0 /* Buf.No */ : from < to || openStart > active.length ? 1 /* Buf.Yes */ : 2 /* Buf.IfCursor */;
68894
+ if (this.pendingBuffer)
68895
+ this.bufferMarks = active.slice();
68872
68896
  }
68873
68897
  }
68874
68898
  else if (this.doc.lineAt(this.pos).from == this.pos) { // Line decoration
@@ -70542,22 +70566,30 @@
70542
70566
  this.compositionFirstChange = null;
70543
70567
  this.compositionEndedAt = 0;
70544
70568
  this.mouseSelection = null;
70569
+ let handleEvent = (handler, event) => {
70570
+ if (this.ignoreDuringComposition(event))
70571
+ return;
70572
+ if (event.type == "keydown" && this.keydown(view, event))
70573
+ return;
70574
+ if (this.mustFlushObserver(event))
70575
+ view.observer.forceFlush();
70576
+ if (this.runCustomHandlers(event.type, view, event))
70577
+ event.preventDefault();
70578
+ else
70579
+ handler(view, event);
70580
+ };
70545
70581
  for (let type in handlers) {
70546
70582
  let handler = handlers[type];
70547
- view.contentDOM.addEventListener(type, (event) => {
70548
- if (!eventBelongsToEditor(view, event) || this.ignoreDuringComposition(event))
70549
- return;
70550
- if (type == "keydown" && this.keydown(view, event))
70551
- return;
70552
- if (this.mustFlushObserver(event))
70553
- view.observer.forceFlush();
70554
- if (this.runCustomHandlers(type, view, event))
70555
- event.preventDefault();
70556
- else
70557
- handler(view, event);
70583
+ view.contentDOM.addEventListener(type, event => {
70584
+ if (eventBelongsToEditor(view, event))
70585
+ handleEvent(handler, event);
70558
70586
  }, handlerOptions[type]);
70559
70587
  this.registeredEvents.push(type);
70560
70588
  }
70589
+ view.scrollDOM.addEventListener("mousedown", (event) => {
70590
+ if (event.target == view.scrollDOM)
70591
+ handleEvent(handlers.mousedown, event);
70592
+ });
70561
70593
  if (browser.chrome && browser.chrome_version == 102) { // FIXME remove at some point
70562
70594
  // On Chrome 102, viewport updates somehow stop wheel-based
70563
70595
  // scrolling. Turning off pointer events during the scroll seems
@@ -70714,12 +70746,18 @@
70714
70746
  const EmacsyPendingKeys = "dthko";
70715
70747
  // Key codes for modifier keys
70716
70748
  const modifierCodes = [16, 17, 18, 20, 91, 92, 224, 225];
70749
+ function dragScrollSpeed(dist) {
70750
+ return dist * 0.7 + 8;
70751
+ }
70717
70752
  class MouseSelection {
70718
70753
  constructor(view, startEvent, style, mustSelect) {
70719
70754
  this.view = view;
70720
70755
  this.style = style;
70721
70756
  this.mustSelect = mustSelect;
70757
+ this.scrollSpeed = { x: 0, y: 0 };
70758
+ this.scrolling = -1;
70722
70759
  this.lastEvent = startEvent;
70760
+ this.scrollParent = scrollableParent(view.contentDOM);
70723
70761
  let doc = view.contentDOM.ownerDocument;
70724
70762
  doc.addEventListener("mousemove", this.move = this.move.bind(this));
70725
70763
  doc.addEventListener("mouseup", this.up = this.up.bind(this));
@@ -70735,11 +70773,24 @@
70735
70773
  }
70736
70774
  }
70737
70775
  move(event) {
70776
+ var _a;
70738
70777
  if (event.buttons == 0)
70739
70778
  return this.destroy();
70740
70779
  if (this.dragging !== false)
70741
70780
  return;
70742
70781
  this.select(this.lastEvent = event);
70782
+ let sx = 0, sy = 0;
70783
+ let rect = ((_a = this.scrollParent) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect())
70784
+ || { left: 0, top: 0, right: this.view.win.innerWidth, bottom: this.view.win.innerHeight };
70785
+ if (event.clientX <= rect.left)
70786
+ sx = -dragScrollSpeed(rect.left - event.clientX);
70787
+ else if (event.clientX >= rect.right)
70788
+ sx = dragScrollSpeed(event.clientX - rect.right);
70789
+ if (event.clientY <= rect.top)
70790
+ sy = -dragScrollSpeed(rect.top - event.clientY);
70791
+ else if (event.clientY >= rect.bottom)
70792
+ sy = dragScrollSpeed(event.clientY - rect.bottom);
70793
+ this.setScrollSpeed(sx, sy);
70743
70794
  }
70744
70795
  up(event) {
70745
70796
  if (this.dragging == null)
@@ -70749,19 +70800,41 @@
70749
70800
  this.destroy();
70750
70801
  }
70751
70802
  destroy() {
70803
+ this.setScrollSpeed(0, 0);
70752
70804
  let doc = this.view.contentDOM.ownerDocument;
70753
70805
  doc.removeEventListener("mousemove", this.move);
70754
70806
  doc.removeEventListener("mouseup", this.up);
70755
70807
  this.view.inputState.mouseSelection = null;
70756
70808
  }
70809
+ setScrollSpeed(sx, sy) {
70810
+ this.scrollSpeed = { x: sx, y: sy };
70811
+ if (sx || sy) {
70812
+ if (this.scrolling < 0)
70813
+ this.scrolling = setInterval(() => this.scroll(), 50);
70814
+ }
70815
+ else if (this.scrolling > -1) {
70816
+ clearInterval(this.scrolling);
70817
+ this.scrolling = -1;
70818
+ }
70819
+ }
70820
+ scroll() {
70821
+ if (this.scrollParent) {
70822
+ this.scrollParent.scrollLeft += this.scrollSpeed.x;
70823
+ this.scrollParent.scrollTop += this.scrollSpeed.y;
70824
+ }
70825
+ else {
70826
+ this.view.win.scrollBy(this.scrollSpeed.x, this.scrollSpeed.y);
70827
+ }
70828
+ if (this.dragging === false)
70829
+ this.select(this.lastEvent);
70830
+ }
70757
70831
  select(event) {
70758
70832
  let selection = this.style.get(event, this.extend, this.multiple);
70759
70833
  if (this.mustSelect || !selection.eq(this.view.state.selection) ||
70760
70834
  selection.main.assoc != this.view.state.selection.main.assoc)
70761
70835
  this.view.dispatch({
70762
70836
  selection,
70763
- userEvent: "select.pointer",
70764
- scrollIntoView: true
70837
+ userEvent: "select.pointer"
70765
70838
  });
70766
70839
  this.mustSelect = false;
70767
70840
  }
@@ -70952,23 +71025,15 @@
70952
71025
  function basicMouseSelection(view, event) {
70953
71026
  let start = queryPos(view, event), type = getClickType(event);
70954
71027
  let startSel = view.state.selection;
70955
- let last = start, lastEvent = event;
70956
71028
  return {
70957
71029
  update(update) {
70958
71030
  if (update.docChanged) {
70959
71031
  start.pos = update.changes.mapPos(start.pos);
70960
71032
  startSel = startSel.map(update.changes);
70961
- lastEvent = null;
70962
71033
  }
70963
71034
  },
70964
71035
  get(event, extend, multiple) {
70965
- let cur;
70966
- if (lastEvent && event.clientX == lastEvent.clientX && event.clientY == lastEvent.clientY)
70967
- cur = last;
70968
- else {
70969
- cur = last = queryPos(view, event);
70970
- lastEvent = event;
70971
- }
71036
+ let cur = queryPos(view, event);
70972
71037
  let range = rangeForClick(view, cur.pos, cur.bias, type);
70973
71038
  if (start.pos != cur.pos && !extend) {
70974
71039
  let startRange = rangeForClick(view, start.pos, start.bias, type);
@@ -72414,7 +72479,7 @@
72414
72479
  });
72415
72480
  }
72416
72481
  const baseTheme$1$1 = /*@__PURE__*/buildTheme("." + baseThemeID, {
72417
- "&.cm-editor": {
72482
+ "&": {
72418
72483
  position: "relative !important",
72419
72484
  boxSizing: "border-box",
72420
72485
  "&.cm-focused": {
@@ -72445,7 +72510,6 @@
72445
72510
  margin: 0,
72446
72511
  flexGrow: 2,
72447
72512
  flexShrink: 0,
72448
- minHeight: "100%",
72449
72513
  display: "block",
72450
72514
  whiteSpace: "pre",
72451
72515
  wordWrap: "normal",
@@ -72467,14 +72531,13 @@
72467
72531
  "&dark .cm-content": { caretColor: "white" },
72468
72532
  ".cm-line": {
72469
72533
  display: "block",
72470
- padding: "0 2px 0 4px"
72534
+ padding: "0 2px 0 6px"
72471
72535
  },
72472
- ".cm-selectionLayer": {
72473
- zIndex: -1,
72474
- contain: "size style"
72475
- },
72476
- ".cm-selectionBackground": {
72477
- position: "absolute",
72536
+ ".cm-layer": {
72537
+ contain: "size style",
72538
+ "& > *": {
72539
+ position: "absolute"
72540
+ }
72478
72541
  },
72479
72542
  "&light .cm-selectionBackground": {
72480
72543
  background: "#d9d9d9"
@@ -72489,8 +72552,6 @@
72489
72552
  background: "#233"
72490
72553
  },
72491
72554
  ".cm-cursorLayer": {
72492
- zIndex: 100,
72493
- contain: "size style",
72494
72555
  pointerEvents: "none"
72495
72556
  },
72496
72557
  "&.cm-focused .cm-cursorLayer": {
@@ -72502,7 +72563,6 @@
72502
72563
  "@keyframes cm-blink": { "0%": {}, "50%": { opacity: 0 }, "100%": {} },
72503
72564
  "@keyframes cm-blink2": { "0%": {}, "50%": { opacity: 0 }, "100%": {} },
72504
72565
  ".cm-cursor, .cm-dropCursor": {
72505
- position: "absolute",
72506
72566
  borderLeft: "1.2px solid black",
72507
72567
  marginLeft: "-0.6px",
72508
72568
  pointerEvents: "none",
@@ -72596,6 +72656,21 @@
72596
72656
  display: "inline-block",
72597
72657
  verticalAlign: "top",
72598
72658
  },
72659
+ ".cm-highlightSpace:before": {
72660
+ content: "attr(data-display)",
72661
+ position: "absolute",
72662
+ pointerEvents: "none",
72663
+ color: "#888"
72664
+ },
72665
+ ".cm-highlightTab": {
72666
+ backgroundImage: `url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="200" height="20"><path stroke="%23888" stroke-width="1" fill="none" d="M1 10H196L190 5M190 15L196 10M197 4L197 16"/></svg>')`,
72667
+ backgroundSize: "auto 100%",
72668
+ backgroundPosition: "right 90%",
72669
+ backgroundRepeat: "no-repeat"
72670
+ },
72671
+ ".cm-trailingSpace": {
72672
+ backgroundColor: "#ff332255"
72673
+ },
72599
72674
  ".cm-button": {
72600
72675
  verticalAlign: "middle",
72601
72676
  color: "inherit",
@@ -72688,7 +72763,7 @@
72688
72763
  insert: Text.of(domChange.text.slice(diff.from, diff.toB).split(LineBreakPlaceholder)) };
72689
72764
  }
72690
72765
  }
72691
- else if (newSel && (!view.hasFocus || !view.state.facet(editable) || newSel.main.eq(sel))) {
72766
+ else if (newSel && (!view.hasFocus && view.state.facet(editable) || newSel.main.eq(sel))) {
72692
72767
  newSel = null;
72693
72768
  }
72694
72769
  if (!change && !newSel)
@@ -72898,7 +72973,8 @@
72898
72973
  this.lastChange = 0;
72899
72974
  this.scrollTargets = [];
72900
72975
  this.intersection = null;
72901
- this.resize = null;
72976
+ this.resizeScroll = null;
72977
+ this.resizeContent = null;
72902
72978
  this.intersecting = false;
72903
72979
  this.gapIntersection = null;
72904
72980
  this.gaps = [];
@@ -72936,12 +73012,14 @@
72936
73012
  this.onPrint = this.onPrint.bind(this);
72937
73013
  this.onScroll = this.onScroll.bind(this);
72938
73014
  if (typeof ResizeObserver == "function") {
72939
- this.resize = new ResizeObserver(() => {
73015
+ this.resizeScroll = new ResizeObserver(() => {
72940
73016
  var _a;
72941
73017
  if (((_a = this.view.docView) === null || _a === void 0 ? void 0 : _a.lastUpdate) < Date.now() - 75)
72942
73018
  this.onResize();
72943
73019
  });
72944
- this.resize.observe(view.scrollDOM);
73020
+ this.resizeScroll.observe(view.scrollDOM);
73021
+ this.resizeContent = new ResizeObserver(() => this.view.requestMeasure());
73022
+ this.resizeContent.observe(view.contentDOM);
72945
73023
  }
72946
73024
  this.addWindowListeners(this.win = view.win);
72947
73025
  this.start();
@@ -73260,11 +73338,12 @@
73260
73338
  win.document.removeEventListener("selectionchange", this.onSelectionChange);
73261
73339
  }
73262
73340
  destroy() {
73263
- var _a, _b, _c;
73341
+ var _a, _b, _c, _d;
73264
73342
  this.stop();
73265
73343
  (_a = this.intersection) === null || _a === void 0 ? void 0 : _a.disconnect();
73266
73344
  (_b = this.gapIntersection) === null || _b === void 0 ? void 0 : _b.disconnect();
73267
- (_c = this.resize) === null || _c === void 0 ? void 0 : _c.disconnect();
73345
+ (_c = this.resizeScroll) === null || _c === void 0 ? void 0 : _c.disconnect();
73346
+ (_d = this.resizeContent) === null || _d === void 0 ? void 0 : _d.disconnect();
73268
73347
  for (let dom of this.scrollTargets)
73269
73348
  dom.removeEventListener("scroll", this.onScroll);
73270
73349
  this.removeWindowListeners(this.win);
@@ -73363,7 +73442,7 @@
73363
73442
  this.scrollDOM.className = "cm-scroller";
73364
73443
  this.scrollDOM.appendChild(this.contentDOM);
73365
73444
  this.announceDOM = document.createElement("div");
73366
- this.announceDOM.style.cssText = "position: absolute; top: -10000px";
73445
+ this.announceDOM.style.cssText = "position: fixed; top: -10000px";
73367
73446
  this.announceDOM.setAttribute("aria-live", "polite");
73368
73447
  this.dom = document.createElement("div");
73369
73448
  this.dom.appendChild(this.announceDOM);
@@ -73748,6 +73827,8 @@
73748
73827
  if (this.measureScheduled < 0)
73749
73828
  this.measureScheduled = this.win.requestAnimationFrame(() => this.measure());
73750
73829
  if (request) {
73830
+ if (this.measureRequests.indexOf(request) > -1)
73831
+ return;
73751
73832
  if (request.key != null)
73752
73833
  for (let i = 0; i < this.measureRequests.length; i++) {
73753
73834
  if (this.measureRequests[i].key === request.key) {
@@ -74423,6 +74504,8 @@
74423
74504
  if (runFor(scopeObj[prefix + modifiers(name, event, !isChar)]))
74424
74505
  return true;
74425
74506
  if (isChar && (event.altKey || event.metaKey || event.ctrlKey) &&
74507
+ // Ctrl-Alt may be used for AltGr on Windows
74508
+ !(browser.windows && event.ctrlKey && event.altKey) &&
74426
74509
  (baseName = base[event.keyCode]) && baseName != name) {
74427
74510
  if (runFor(scopeObj[prefix + modifiers(baseName, event, true)]))
74428
74511
  return true;
@@ -74660,6 +74743,17 @@
74660
74743
  : pos.bottom + (size.bottom - size.top) + offset.y > space.bottom) &&
74661
74744
  above == (space.bottom - pos.bottom > pos.top - space.top))
74662
74745
  above = !above;
74746
+ let spaceVert = (above ? pos.top - space.top : space.bottom - pos.bottom) - arrowHeight;
74747
+ if (spaceVert < height && tView.resize !== false) {
74748
+ if (spaceVert < this.view.defaultLineHeight) {
74749
+ dom.style.top = Outside;
74750
+ continue;
74751
+ }
74752
+ dom.style.height = (height = spaceVert) + "px";
74753
+ }
74754
+ else if (dom.style.height) {
74755
+ dom.style.height = "";
74756
+ }
74663
74757
  let top = above ? pos.top - height - arrowHeight - offset.y : pos.bottom + arrowHeight + offset.y;
74664
74758
  let right = left + width;
74665
74759
  if (tView.overlap !== true)
@@ -74703,7 +74797,8 @@
74703
74797
  });
74704
74798
  const baseTheme$4 = /*@__PURE__*/EditorView.baseTheme({
74705
74799
  ".cm-tooltip": {
74706
- zIndex: 100
74800
+ zIndex: 100,
74801
+ boxSizing: "border-box"
74707
74802
  },
74708
74803
  "&light .cm-tooltip": {
74709
74804
  border: "1px solid #bbb",
@@ -75268,8 +75363,8 @@
75268
75363
  /// Define a node type.
75269
75364
  static define(spec) {
75270
75365
  let props = spec.props && spec.props.length ? Object.create(null) : noProps;
75271
- let flags = (spec.top ? 1 /* Top */ : 0) | (spec.skipped ? 2 /* Skipped */ : 0) |
75272
- (spec.error ? 4 /* Error */ : 0) | (spec.name == null ? 8 /* Anonymous */ : 0);
75366
+ let flags = (spec.top ? 1 /* NodeFlag.Top */ : 0) | (spec.skipped ? 2 /* NodeFlag.Skipped */ : 0) |
75367
+ (spec.error ? 4 /* NodeFlag.Error */ : 0) | (spec.name == null ? 8 /* NodeFlag.Anonymous */ : 0);
75273
75368
  let type = new NodeType(spec.name || "", props, spec.id, flags);
75274
75369
  if (spec.props)
75275
75370
  for (let src of spec.props) {
@@ -75287,14 +75382,14 @@
75287
75382
  /// the prop isn't present on this node.
75288
75383
  prop(prop) { return this.props[prop.id]; }
75289
75384
  /// True when this is the top node of a grammar.
75290
- get isTop() { return (this.flags & 1 /* Top */) > 0; }
75385
+ get isTop() { return (this.flags & 1 /* NodeFlag.Top */) > 0; }
75291
75386
  /// True when this node is produced by a skip rule.
75292
- get isSkipped() { return (this.flags & 2 /* Skipped */) > 0; }
75387
+ get isSkipped() { return (this.flags & 2 /* NodeFlag.Skipped */) > 0; }
75293
75388
  /// Indicates whether this is an error node.
75294
- get isError() { return (this.flags & 4 /* Error */) > 0; }
75389
+ get isError() { return (this.flags & 4 /* NodeFlag.Error */) > 0; }
75295
75390
  /// When true, this node type doesn't correspond to a user-declared
75296
75391
  /// named node, for example because it is used to cache repetition.
75297
- get isAnonymous() { return (this.flags & 8 /* Anonymous */) > 0; }
75392
+ get isAnonymous() { return (this.flags & 8 /* NodeFlag.Anonymous */) > 0; }
75298
75393
  /// Returns true when this node's name or one of its
75299
75394
  /// [groups](#common.NodeProp^group) matches the given string.
75300
75395
  is(name) {
@@ -75327,7 +75422,7 @@
75327
75422
  }
75328
75423
  }
75329
75424
  /// An empty dummy node type to use when no actual type is available.
75330
- NodeType.none = new NodeType("", Object.create(null), 0, 8 /* Anonymous */);
75425
+ NodeType.none = new NodeType("", Object.create(null), 0, 8 /* NodeFlag.Anonymous */);
75331
75426
  /// A node set holds a collection of node types. It is used to
75332
75427
  /// compactly represent trees by storing their type ids, rather than a
75333
75428
  /// full pointer to the type object, in a numeric array. Each parser
@@ -75536,7 +75631,7 @@
75536
75631
  /// which may have children grouped into subtrees with type
75537
75632
  /// [`NodeType.none`](#common.NodeType^none).
75538
75633
  balance(config = {}) {
75539
- return this.children.length <= 8 /* BranchFactor */ ? this :
75634
+ return this.children.length <= 8 /* Balance.BranchFactor */ ? this :
75540
75635
  balanceRange(NodeType.none, this.children, this.positions, 0, this.children.length, 0, this.length, (children, positions, length) => new Tree(this.type, children, positions, length, this.propValues), config.makeTree || ((children, positions, length) => new Tree(NodeType.none, children, positions, length)));
75541
75636
  }
75542
75637
  /// Build a tree from a postfix-ordered buffer of node information,
@@ -75615,26 +75710,27 @@
75615
75710
  return pick;
75616
75711
  }
75617
75712
  /// @internal
75618
- slice(startI, endI, from, to) {
75713
+ slice(startI, endI, from) {
75619
75714
  let b = this.buffer;
75620
- let copy = new Uint16Array(endI - startI);
75715
+ let copy = new Uint16Array(endI - startI), len = 0;
75621
75716
  for (let i = startI, j = 0; i < endI;) {
75622
75717
  copy[j++] = b[i++];
75623
75718
  copy[j++] = b[i++] - from;
75624
- copy[j++] = b[i++] - from;
75719
+ let to = copy[j++] = b[i++] - from;
75625
75720
  copy[j++] = b[i++] - startI;
75721
+ len = Math.max(len, to);
75626
75722
  }
75627
- return new TreeBuffer(copy, to - from, this.set);
75723
+ return new TreeBuffer(copy, len, this.set);
75628
75724
  }
75629
75725
  }
75630
75726
  function checkSide(side, pos, from, to) {
75631
75727
  switch (side) {
75632
- case -2 /* Before */: return from < pos;
75633
- case -1 /* AtOrBefore */: return to >= pos && from < pos;
75634
- case 0 /* Around */: return from < pos && to > pos;
75635
- case 1 /* AtOrAfter */: return from <= pos && to > pos;
75636
- case 2 /* After */: return to > pos;
75637
- case 4 /* DontCare */: return true;
75728
+ case -2 /* Side.Before */: return from < pos;
75729
+ case -1 /* Side.AtOrBefore */: return to >= pos && from < pos;
75730
+ case 0 /* Side.Around */: return from < pos && to > pos;
75731
+ case 1 /* Side.AtOrAfter */: return from <= pos && to > pos;
75732
+ case 2 /* Side.After */: return to > pos;
75733
+ case 4 /* Side.DontCare */: return true;
75638
75734
  }
75639
75735
  }
75640
75736
  function enterUnfinishedNodesBefore(node, pos) {
@@ -75724,10 +75820,10 @@
75724
75820
  return null;
75725
75821
  }
75726
75822
  }
75727
- get firstChild() { return this.nextChild(0, 1, 0, 4 /* DontCare */); }
75728
- get lastChild() { return this.nextChild(this._tree.children.length - 1, -1, 0, 4 /* DontCare */); }
75729
- childAfter(pos) { return this.nextChild(0, 1, pos, 2 /* After */); }
75730
- childBefore(pos) { return this.nextChild(this._tree.children.length - 1, -1, pos, -2 /* Before */); }
75823
+ get firstChild() { return this.nextChild(0, 1, 0, 4 /* Side.DontCare */); }
75824
+ get lastChild() { return this.nextChild(this._tree.children.length - 1, -1, 0, 4 /* Side.DontCare */); }
75825
+ childAfter(pos) { return this.nextChild(0, 1, pos, 2 /* Side.After */); }
75826
+ childBefore(pos) { return this.nextChild(this._tree.children.length - 1, -1, pos, -2 /* Side.Before */); }
75731
75827
  enter(pos, side, mode = 0) {
75732
75828
  let mounted;
75733
75829
  if (!(mode & IterMode.IgnoreOverlays) && (mounted = this._tree.prop(NodeProp.mounted)) && mounted.overlay) {
@@ -75750,10 +75846,10 @@
75750
75846
  return this._parent ? this._parent.nextSignificantParent() : null;
75751
75847
  }
75752
75848
  get nextSibling() {
75753
- return this._parent && this.index >= 0 ? this._parent.nextChild(this.index + 1, 1, 0, 4 /* DontCare */) : null;
75849
+ return this._parent && this.index >= 0 ? this._parent.nextChild(this.index + 1, 1, 0, 4 /* Side.DontCare */) : null;
75754
75850
  }
75755
75851
  get prevSibling() {
75756
- return this._parent && this.index >= 0 ? this._parent.nextChild(this.index - 1, -1, 0, 4 /* DontCare */) : null;
75852
+ return this._parent && this.index >= 0 ? this._parent.nextChild(this.index - 1, -1, 0, 4 /* Side.DontCare */) : null;
75757
75853
  }
75758
75854
  cursor(mode = 0) { return new TreeCursor(this, mode); }
75759
75855
  get tree() { return this._tree; }
@@ -75815,24 +75911,24 @@
75815
75911
  }
75816
75912
  }
75817
75913
  class BufferNode {
75914
+ get name() { return this.type.name; }
75915
+ get from() { return this.context.start + this.context.buffer.buffer[this.index + 1]; }
75916
+ get to() { return this.context.start + this.context.buffer.buffer[this.index + 2]; }
75818
75917
  constructor(context, _parent, index) {
75819
75918
  this.context = context;
75820
75919
  this._parent = _parent;
75821
75920
  this.index = index;
75822
75921
  this.type = context.buffer.set.types[context.buffer.buffer[index]];
75823
75922
  }
75824
- get name() { return this.type.name; }
75825
- get from() { return this.context.start + this.context.buffer.buffer[this.index + 1]; }
75826
- get to() { return this.context.start + this.context.buffer.buffer[this.index + 2]; }
75827
75923
  child(dir, pos, side) {
75828
75924
  let { buffer } = this.context;
75829
75925
  let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.context.start, side);
75830
75926
  return index < 0 ? null : new BufferNode(this.context, this, index);
75831
75927
  }
75832
- get firstChild() { return this.child(1, 0, 4 /* DontCare */); }
75833
- get lastChild() { return this.child(-1, 0, 4 /* DontCare */); }
75834
- childAfter(pos) { return this.child(1, pos, 2 /* After */); }
75835
- childBefore(pos) { return this.child(-1, pos, -2 /* Before */); }
75928
+ get firstChild() { return this.child(1, 0, 4 /* Side.DontCare */); }
75929
+ get lastChild() { return this.child(-1, 0, 4 /* Side.DontCare */); }
75930
+ childAfter(pos) { return this.child(1, pos, 2 /* Side.After */); }
75931
+ childBefore(pos) { return this.child(-1, pos, -2 /* Side.Before */); }
75836
75932
  enter(pos, side, mode = 0) {
75837
75933
  if (mode & IterMode.ExcludeBuffers)
75838
75934
  return null;
@@ -75844,7 +75940,7 @@
75844
75940
  return this._parent || this.context.parent.nextSignificantParent();
75845
75941
  }
75846
75942
  externalSibling(dir) {
75847
- return this._parent ? null : this.context.parent.nextChild(this.context.index + dir, dir, 0, 4 /* DontCare */);
75943
+ return this._parent ? null : this.context.parent.nextChild(this.context.index + dir, dir, 0, 4 /* Side.DontCare */);
75848
75944
  }
75849
75945
  get nextSibling() {
75850
75946
  let { buffer } = this.context;
@@ -75858,7 +75954,7 @@
75858
75954
  let parentStart = this._parent ? this._parent.index + 4 : 0;
75859
75955
  if (this.index == parentStart)
75860
75956
  return this.externalSibling(-1);
75861
- return new BufferNode(this.context, this._parent, buffer.findChild(parentStart, this.index, -1, 0, 4 /* DontCare */));
75957
+ return new BufferNode(this.context, this._parent, buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));
75862
75958
  }
75863
75959
  cursor(mode = 0) { return new TreeCursor(this, mode); }
75864
75960
  get tree() { return null; }
@@ -75867,8 +75963,8 @@
75867
75963
  let { buffer } = this.context;
75868
75964
  let startI = this.index + 4, endI = buffer.buffer[this.index + 3];
75869
75965
  if (endI > startI) {
75870
- let from = buffer.buffer[this.index + 1], to = buffer.buffer[this.index + 2];
75871
- children.push(buffer.slice(startI, endI, from, to));
75966
+ let from = buffer.buffer[this.index + 1];
75967
+ children.push(buffer.slice(startI, endI, from));
75872
75968
  positions.push(0);
75873
75969
  }
75874
75970
  return new Tree(this.type, children, positions, this.to - this.from);
@@ -75895,6 +75991,8 @@
75895
75991
  /// A tree cursor object focuses on a given node in a syntax tree, and
75896
75992
  /// allows you to move to adjacent nodes.
75897
75993
  class TreeCursor {
75994
+ /// Shorthand for `.type.name`.
75995
+ get name() { return this.type.name; }
75898
75996
  /// @internal
75899
75997
  constructor(node,
75900
75998
  /// @internal
@@ -75918,8 +76016,6 @@
75918
76016
  this.yieldBuf(node.index);
75919
76017
  }
75920
76018
  }
75921
- /// Shorthand for `.type.name`.
75922
- get name() { return this.type.name; }
75923
76019
  yieldNode(node) {
75924
76020
  if (!node)
75925
76021
  return false;
@@ -75964,13 +76060,13 @@
75964
76060
  }
75965
76061
  /// Move the cursor to this node's first child. When this returns
75966
76062
  /// false, the node has no child, and the cursor has not been moved.
75967
- firstChild() { return this.enterChild(1, 0, 4 /* DontCare */); }
76063
+ firstChild() { return this.enterChild(1, 0, 4 /* Side.DontCare */); }
75968
76064
  /// Move the cursor to this node's last child.
75969
- lastChild() { return this.enterChild(-1, 0, 4 /* DontCare */); }
76065
+ lastChild() { return this.enterChild(-1, 0, 4 /* Side.DontCare */); }
75970
76066
  /// Move the cursor to the first child that ends after `pos`.
75971
- childAfter(pos) { return this.enterChild(1, pos, 2 /* After */); }
76067
+ childAfter(pos) { return this.enterChild(1, pos, 2 /* Side.After */); }
75972
76068
  /// Move to the last child that starts before `pos`.
75973
- childBefore(pos) { return this.enterChild(-1, pos, -2 /* Before */); }
76069
+ childBefore(pos) { return this.enterChild(-1, pos, -2 /* Side.Before */); }
75974
76070
  /// Move the cursor to the child around `pos`. If side is -1 the
75975
76071
  /// child may end at that position, when 1 it may start there. This
75976
76072
  /// will also enter [overlaid](#common.MountedTree.overlay)
@@ -75996,19 +76092,19 @@
75996
76092
  if (!this.buffer)
75997
76093
  return !this._tree._parent ? false
75998
76094
  : this.yield(this._tree.index < 0 ? null
75999
- : this._tree._parent.nextChild(this._tree.index + dir, dir, 0, 4 /* DontCare */, this.mode));
76095
+ : this._tree._parent.nextChild(this._tree.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode));
76000
76096
  let { buffer } = this.buffer, d = this.stack.length - 1;
76001
76097
  if (dir < 0) {
76002
76098
  let parentStart = d < 0 ? 0 : this.stack[d] + 4;
76003
76099
  if (this.index != parentStart)
76004
- return this.yieldBuf(buffer.findChild(parentStart, this.index, -1, 0, 4 /* DontCare */));
76100
+ return this.yieldBuf(buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));
76005
76101
  }
76006
76102
  else {
76007
76103
  let after = buffer.buffer[this.index + 3];
76008
76104
  if (after < (d < 0 ? buffer.buffer.length : buffer.buffer[this.stack[d] + 3]))
76009
76105
  return this.yieldBuf(after);
76010
76106
  }
76011
- return d < 0 ? this.yield(this.buffer.parent.nextChild(this.buffer.index + dir, dir, 0, 4 /* DontCare */, this.mode)) : false;
76107
+ return d < 0 ? this.yield(this.buffer.parent.nextChild(this.buffer.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode)) : false;
76012
76108
  }
76013
76109
  /// Move to this node's next sibling, if any.
76014
76110
  nextSibling() { return this.sibling(1); }
@@ -76045,7 +76141,7 @@
76045
76141
  return true;
76046
76142
  }
76047
76143
  move(dir, enter) {
76048
- if (enter && this.enterChild(dir, 0, 4 /* DontCare */))
76144
+ if (enter && this.enterChild(dir, 0, 4 /* Side.DontCare */))
76049
76145
  return true;
76050
76146
  for (;;) {
76051
76147
  if (this.sibling(dir))
@@ -76055,7 +76151,7 @@
76055
76151
  }
76056
76152
  }
76057
76153
  /// Move to the next node in a
76058
- /// [pre-order](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order_(NLR))
76154
+ /// [pre-order](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order,_NLR)
76059
76155
  /// traversal, going from a node to its first child or, if the
76060
76156
  /// current node is empty or `enter` is false, its next sibling or
76061
76157
  /// the next sibling of the first parent node that has one.
@@ -76171,17 +76267,17 @@
76171
76267
  let lookAheadAtStart = lookAhead;
76172
76268
  while (size < 0) {
76173
76269
  cursor.next();
76174
- if (size == -1 /* Reuse */) {
76270
+ if (size == -1 /* SpecialRecord.Reuse */) {
76175
76271
  let node = reused[id];
76176
76272
  children.push(node);
76177
76273
  positions.push(start - parentStart);
76178
76274
  return;
76179
76275
  }
76180
- else if (size == -3 /* ContextChange */) { // Context change
76276
+ else if (size == -3 /* SpecialRecord.ContextChange */) { // Context change
76181
76277
  contextHash = id;
76182
76278
  return;
76183
76279
  }
76184
- else if (size == -4 /* LookAhead */) {
76280
+ else if (size == -4 /* SpecialRecord.LookAhead */) {
76185
76281
  lookAhead = id;
76186
76282
  return;
76187
76283
  }
@@ -76298,7 +76394,7 @@
76298
76394
  fork.next();
76299
76395
  while (fork.pos > startPos) {
76300
76396
  if (fork.size < 0) {
76301
- if (fork.size == -3 /* ContextChange */)
76397
+ if (fork.size == -3 /* SpecialRecord.ContextChange */)
76302
76398
  localSkipped += 4;
76303
76399
  else
76304
76400
  break scan;
@@ -76334,10 +76430,10 @@
76334
76430
  buffer[--index] = start - bufferStart;
76335
76431
  buffer[--index] = id;
76336
76432
  }
76337
- else if (size == -3 /* ContextChange */) {
76433
+ else if (size == -3 /* SpecialRecord.ContextChange */) {
76338
76434
  contextHash = id;
76339
76435
  }
76340
- else if (size == -4 /* LookAhead */) {
76436
+ else if (size == -4 /* SpecialRecord.LookAhead */) {
76341
76437
  lookAhead = id;
76342
76438
  }
76343
76439
  return index;
@@ -76384,7 +76480,7 @@
76384
76480
  let total = 0;
76385
76481
  for (let i = from; i < to; i++)
76386
76482
  total += nodeSize(balanceType, children[i]);
76387
- let maxChild = Math.ceil((total * 1.5) / 8 /* BranchFactor */);
76483
+ let maxChild = Math.ceil((total * 1.5) / 8 /* Balance.BranchFactor */);
76388
76484
  let localChildren = [], localPositions = [];
76389
76485
  function divide(children, positions, from, to, offset) {
76390
76486
  for (let i = from; i < to;) {
@@ -76445,16 +76541,16 @@
76445
76541
  this.to = to;
76446
76542
  this.tree = tree;
76447
76543
  this.offset = offset;
76448
- this.open = (openStart ? 1 /* Start */ : 0) | (openEnd ? 2 /* End */ : 0);
76544
+ this.open = (openStart ? 1 /* Open.Start */ : 0) | (openEnd ? 2 /* Open.End */ : 0);
76449
76545
  }
76450
76546
  /// Whether the start of the fragment represents the start of a
76451
76547
  /// parse, or the end of a change. (In the second case, it may not
76452
76548
  /// be safe to reuse some nodes at the start, depending on the
76453
76549
  /// parsing algorithm.)
76454
- get openStart() { return (this.open & 1 /* Start */) > 0; }
76550
+ get openStart() { return (this.open & 1 /* Open.Start */) > 0; }
76455
76551
  /// Whether the end of the fragment represents the end of a
76456
76552
  /// full-document parse, or the start of a change.
76457
- get openEnd() { return (this.open & 2 /* End */) > 0; }
76553
+ get openEnd() { return (this.open & 2 /* Open.End */) > 0; }
76458
76554
  /// Create a set of fragments from a freshly parsed tree, or update
76459
76555
  /// an existing set of fragments by replacing the ones that overlap
76460
76556
  /// with a tree with content from the new tree. When `partial` is
@@ -76698,10 +76794,10 @@
76698
76794
  tags = [tags];
76699
76795
  for (let part of prop.split(" "))
76700
76796
  if (part) {
76701
- let pieces = [], mode = 2 /* Normal */, rest = part;
76797
+ let pieces = [], mode = 2 /* Mode.Normal */, rest = part;
76702
76798
  for (let pos = 0;;) {
76703
76799
  if (rest == "..." && pos > 0 && pos + 3 == part.length) {
76704
- mode = 1 /* Inherit */;
76800
+ mode = 1 /* Mode.Inherit */;
76705
76801
  break;
76706
76802
  }
76707
76803
  let m = /^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(rest);
@@ -76713,7 +76809,7 @@
76713
76809
  break;
76714
76810
  let next = part[pos++];
76715
76811
  if (pos == part.length && next == "!") {
76716
- mode = 0 /* Opaque */;
76812
+ mode = 0 /* Mode.Opaque */;
76717
76813
  break;
76718
76814
  }
76719
76815
  if (next != "/")
@@ -76737,8 +76833,8 @@
76737
76833
  this.context = context;
76738
76834
  this.next = next;
76739
76835
  }
76740
- get opaque() { return this.mode == 0 /* Opaque */; }
76741
- get inherit() { return this.mode == 1 /* Inherit */; }
76836
+ get opaque() { return this.mode == 0 /* Mode.Opaque */; }
76837
+ get inherit() { return this.mode == 1 /* Mode.Inherit */; }
76742
76838
  sort(other) {
76743
76839
  if (!other || other.depth < this.depth) {
76744
76840
  this.next = other;
@@ -76749,7 +76845,7 @@
76749
76845
  }
76750
76846
  get depth() { return this.context ? this.context.length : 0; }
76751
76847
  }
76752
- Rule.empty = new Rule([], 2 /* Normal */, null);
76848
+ Rule.empty = new Rule([], 2 /* Mode.Normal */, null);
76753
76849
  /// Define a [highlighter](#highlight.Highlighter) from an array of
76754
76850
  /// tag/class pairs. Classes associated with more specific tags will
76755
76851
  /// take precedence.
@@ -76836,7 +76932,7 @@
76836
76932
  if (cls)
76837
76933
  cls += " ";
76838
76934
  cls += tagCls;
76839
- if (rule.mode == 1 /* Inherit */)
76935
+ if (rule.mode == 1 /* Mode.Inherit */)
76840
76936
  inheritedClass += (inheritedClass ? " " : "") + tagCls;
76841
76937
  }
76842
76938
  this.startSpan(cursor.from, cls);
@@ -76854,7 +76950,7 @@
76854
76950
  if (rangeFrom < rangeTo && hasChild) {
76855
76951
  while (cursor.from < rangeTo) {
76856
76952
  this.highlightRange(cursor, rangeFrom, rangeTo, inheritedClass, highlighters);
76857
- this.startSpan(Math.min(to, cursor.to), cls);
76953
+ this.startSpan(Math.min(rangeTo, cursor.to), cls);
76858
76954
  if (cursor.to >= nextPos || !cursor.nextSibling())
76859
76955
  break;
76860
76956
  }
@@ -78795,6 +78891,7 @@
78795
78891
  closeOnBlur: true,
78796
78892
  maxRenderedOptions: 100,
78797
78893
  defaultKeymap: true,
78894
+ tooltipClass: () => "",
78798
78895
  optionClass: () => "",
78799
78896
  aboveCursor: false,
78800
78897
  icons: true,
@@ -78805,6 +78902,7 @@
78805
78902
  defaultKeymap: (a, b) => a && b,
78806
78903
  closeOnBlur: (a, b) => a && b,
78807
78904
  icons: (a, b) => a && b,
78905
+ tooltipClass: (a, b) => c => joinClass(a(c), b(c)),
78808
78906
  optionClass: (a, b) => c => joinClass(a(c), b(c)),
78809
78907
  addToOptions: (a, b) => a.concat(b)
78810
78908
  });
@@ -78883,14 +78981,17 @@
78883
78981
  key: this
78884
78982
  };
78885
78983
  this.space = null;
78984
+ this.currentClass = "";
78886
78985
  let cState = view.state.field(stateField);
78887
78986
  let { options, selected } = cState.open;
78888
78987
  let config = view.state.facet(completionConfig);
78889
78988
  this.optionContent = optionContent(config);
78890
78989
  this.optionClass = config.optionClass;
78990
+ this.tooltipClass = config.tooltipClass;
78891
78991
  this.range = rangeAroundSelected(options.length, selected, config.maxRenderedOptions);
78892
78992
  this.dom = document.createElement("div");
78893
78993
  this.dom.className = "cm-tooltip-autocomplete";
78994
+ this.updateTooltipClass(view.state);
78894
78995
  this.dom.addEventListener("mousedown", (e) => {
78895
78996
  for (let dom = e.target, match; dom && dom != this.dom; dom = dom.parentNode) {
78896
78997
  if (dom.nodeName == "LI" && (match = /-(\d+)$/.exec(dom.id)) && +match[1] < options.length) {
@@ -78911,12 +79012,25 @@
78911
79012
  var _a, _b, _c;
78912
79013
  let cState = update.state.field(this.stateField);
78913
79014
  let prevState = update.startState.field(this.stateField);
79015
+ this.updateTooltipClass(update.state);
78914
79016
  if (cState != prevState) {
78915
79017
  this.updateSel();
78916
79018
  if (((_a = cState.open) === null || _a === void 0 ? void 0 : _a.disabled) != ((_b = prevState.open) === null || _b === void 0 ? void 0 : _b.disabled))
78917
79019
  this.dom.classList.toggle("cm-tooltip-autocomplete-disabled", !!((_c = cState.open) === null || _c === void 0 ? void 0 : _c.disabled));
78918
79020
  }
78919
79021
  }
79022
+ updateTooltipClass(state) {
79023
+ let cls = this.tooltipClass(state);
79024
+ if (cls != this.currentClass) {
79025
+ for (let c of this.currentClass.split(" "))
79026
+ if (c)
79027
+ this.dom.classList.remove(c);
79028
+ for (let c of cls.split(" "))
79029
+ if (c)
79030
+ this.dom.classList.add(c);
79031
+ this.currentClass = cls;
79032
+ }
79033
+ }
78920
79034
  positioned(space) {
78921
79035
  this.space = space;
78922
79036
  if (this.info)
@@ -79177,13 +79291,13 @@
79177
79291
  if (active.length == this.active.length && active.every((a, i) => a == this.active[i]))
79178
79292
  active = this.active;
79179
79293
  let open = this.open;
79294
+ if (open && tr.docChanged)
79295
+ open = open.map(tr.changes);
79180
79296
  if (tr.selection || active.some(a => a.hasResult() && tr.changes.touchesRange(a.from, a.to)) ||
79181
79297
  !sameResults(active, this.active))
79182
- open = CompletionDialog.build(active, state, this.id, this.open, conf);
79298
+ open = CompletionDialog.build(active, state, this.id, open, conf);
79183
79299
  else if (open && open.disabled && !active.some(a => a.state == 1 /* State.Pending */))
79184
79300
  open = null;
79185
- else if (open && tr.docChanged)
79186
- open = open.map(tr.changes);
79187
79301
  if (!open && active.every(a => a.state != 1 /* State.Pending */) && active.some(a => a.hasResult()))
79188
79302
  active = active.map(a => a.hasResult() ? new ActiveSource(a.source, 0 /* State.Inactive */) : a);
79189
79303
  for (let effect of tr.effects)
@@ -79538,6 +79652,7 @@
79538
79652
  maxWidth: "min(700px, 95vw)",
79539
79653
  minWidth: "250px",
79540
79654
  maxHeight: "10em",
79655
+ height: "100%",
79541
79656
  listStyle: "none",
79542
79657
  margin: 0,
79543
79658
  padding: 0,
@@ -80492,7 +80607,7 @@
80492
80607
  function extendSel(view, how) {
80493
80608
  let selection = updateSel(view.state.selection, range => {
80494
80609
  let head = how(range);
80495
- return EditorSelection.range(range.anchor, head.head, head.goalColumn);
80610
+ return EditorSelection.range(range.anchor, head.head, head.goalColumn, head.bidiLevel || undefined);
80496
80611
  });
80497
80612
  if (selection.eq(view.state.selection))
80498
80613
  return false;
@@ -84465,6 +84580,88 @@
84465
84580
  }
84466
84581
  });
84467
84582
 
84583
+ /**
84584
+ * Create an array of syntax errors in the given tree.
84585
+ *
84586
+ * @param {Tree} syntaxTree
84587
+ * @returns {LintMessage[]} array of syntax errors
84588
+ */
84589
+ function lintSyntax(syntaxTree) {
84590
+
84591
+ const lintMessages = [];
84592
+
84593
+ syntaxTree.iterate({
84594
+ enter: node => {
84595
+ if (node.type.isError) {
84596
+
84597
+ const error = node.toString();
84598
+
84599
+ /* The error has the pattern [⚠ || ⚠(NodeType)]. The regex extracts the node type from inside the brackets */
84600
+ const match = /\((.*?)\)/.exec(error);
84601
+ const nodeType = match && match[1];
84602
+
84603
+ let message;
84604
+
84605
+ if (nodeType) {
84606
+ message = 'unexpected ' + nodeType;
84607
+ } else {
84608
+ message = 'expression expected';
84609
+ }
84610
+
84611
+ lintMessages.push(
84612
+ {
84613
+ from: node.from,
84614
+ to: node.to,
84615
+ severity: 'error',
84616
+ message: message,
84617
+ type: 'syntaxError'
84618
+ }
84619
+ );
84620
+ }
84621
+ }
84622
+ });
84623
+
84624
+ return lintMessages;
84625
+ }
84626
+
84627
+ /**
84628
+ * Generates lint messages for the given syntax tree.
84629
+ *
84630
+ * @param {Tree} syntaxTree
84631
+ * @returns {LintMessage[]} array of all lint messages
84632
+ */
84633
+ function lintAll(syntaxTree) {
84634
+
84635
+ const lintMessages = [
84636
+ ... lintSyntax(syntaxTree)
84637
+ ];
84638
+
84639
+ return lintMessages;
84640
+ }
84641
+
84642
+ /**
84643
+ * CodeMirror extension that provides linting for FEEL expressions.
84644
+ *
84645
+ * @param {EditorView} editorView
84646
+ * @returns {Source} CodeMirror linting source
84647
+ */
84648
+ const cmFeelLinter = () => editorView => {
84649
+
84650
+ // don't lint if the Editor is empty
84651
+ if (editorView.state.doc.length === 0) {
84652
+ return [];
84653
+ }
84654
+
84655
+ const tree = syntaxTree(editorView.state);
84656
+
84657
+ const messages = lintAll(tree);
84658
+
84659
+ return messages.map(message => ({
84660
+ ...message,
84661
+ source: 'syntaxError'
84662
+ }));
84663
+ };
84664
+
84468
84665
  // helpers ///////////////////////////////
84469
84666
 
84470
84667
  function isNodeEmpty(node) {
@@ -84828,9 +85025,10 @@
84828
85025
  label: tag.name,
84829
85026
  type: 'function',
84830
85027
  info: () => {
84831
- const html = domify$1(tag.description);
85028
+ const html = domify$1(`<div class="description">${tag.description}<div>`);
84832
85029
  return html;
84833
- }
85030
+ },
85031
+ boost: -1
84834
85032
  }
84835
85033
  ));
84836
85034
 
@@ -84869,6 +85067,109 @@
84869
85067
  */
84870
85068
  const variablesFacet = Facet.define();
84871
85069
 
85070
+ var pathExpression = context => {
85071
+ const variables = context.state.facet(variablesFacet)[0];
85072
+ const nodeBefore = syntaxTree(context.state).resolve(context.pos, -1);
85073
+
85074
+ if (!isPathExpression(nodeBefore)) {
85075
+ return;
85076
+ }
85077
+
85078
+ const expression = findPathExpression(nodeBefore);
85079
+
85080
+ // if the cursor is directly after the `.`, variable starts at the cursor position
85081
+ const from = nodeBefore === expression ? context.pos : nodeBefore.from;
85082
+
85083
+ const path = getPath(expression, context);
85084
+
85085
+ let options = variables;
85086
+ for (var i = 0; i < path.length - 1; i++) {
85087
+ var childVar = options.find(val => val.name === path[i].name);
85088
+
85089
+ if (!childVar) {
85090
+ return null;
85091
+ }
85092
+
85093
+ // only suggest if variable type matches
85094
+ if (
85095
+ childVar.isList !== 'optional' &&
85096
+ !!childVar.isList !== path[i].isList
85097
+ ) {
85098
+ return;
85099
+ }
85100
+
85101
+ options = childVar.entries;
85102
+ }
85103
+
85104
+ if (!options) return;
85105
+
85106
+ options = options.map(v => ({
85107
+ label: v.name,
85108
+ type: 'variable',
85109
+ info: v.info,
85110
+ detail: v.detail
85111
+ }));
85112
+
85113
+ const result = {
85114
+ from: from,
85115
+ options: options
85116
+ };
85117
+
85118
+ return result;
85119
+ };
85120
+
85121
+
85122
+ function findPathExpression(node) {
85123
+ while (node) {
85124
+ if (node.name === 'PathExpression') {
85125
+ return node;
85126
+ }
85127
+ node = node.parent;
85128
+ }
85129
+ }
85130
+
85131
+ // parses the path expression into a list of variable names with type information
85132
+ // e.g. foo[0].bar => [ { name: 'foo', isList: true }, { name: 'bar', isList: false } ]
85133
+ function getPath(node, context) {
85134
+ let path = [];
85135
+
85136
+ for (let child = node.firstChild; child; child = child.nextSibling) {
85137
+ if (child.name === 'PathExpression') {
85138
+ path.push(...getPath(child, context));
85139
+ } else if (child.name === 'FilterExpression') {
85140
+ path.push(...getFilter(child, context));
85141
+ }
85142
+ else {
85143
+ path.push({
85144
+ name: getNodeContent(child, context),
85145
+ isList: false
85146
+ });
85147
+ }
85148
+ }
85149
+ return path;
85150
+ }
85151
+
85152
+ function getFilter(node, context) {
85153
+ const list = node.firstChild;
85154
+
85155
+ if (list.name === 'PathExpression') {
85156
+ const path = getPath(list, context);
85157
+ const last = path[path.length - 1];
85158
+ last.isList = true;
85159
+
85160
+ return path;
85161
+ }
85162
+
85163
+ return [ {
85164
+ name: getNodeContent(list, context),
85165
+ isList: true
85166
+ } ];
85167
+ }
85168
+
85169
+ function getNodeContent(node, context) {
85170
+ return context.state.sliceDoc(node.from, node.to);
85171
+ }
85172
+
84872
85173
  /**
84873
85174
  * @type {import('@codemirror/autocomplete').CompletionSource}
84874
85175
  */
@@ -84920,7 +85221,8 @@
84920
85221
  override: [
84921
85222
  variables,
84922
85223
  builtins,
84923
- completeFromList(snippets)
85224
+ completeFromList(snippets.map(s => ({ ...s, boost: -1 }))),
85225
+ pathExpression
84924
85226
  ]
84925
85227
  })
84926
85228
  ];
@@ -84930,53 +85232,7 @@
84930
85232
  return new LanguageSupport(feelLanguage, [ ]);
84931
85233
  }
84932
85234
 
84933
- const FeelLinter = function(editorView) {
84934
- const messages = [];
84935
-
84936
- // don't lint if the Editor is empty
84937
- if (editorView.state.doc.length === 0) {
84938
- return messages;
84939
- }
84940
-
84941
- const tree = syntaxTree(editorView.state);
84942
-
84943
- tree.iterate({
84944
- enter: node => {
84945
- if (node.type.isError) {
84946
-
84947
- const error = node.toString();
84948
-
84949
- /* The error has the pattern [⚠ || ⚠(NodeType)]. The regex extracts the node type from inside the brackets */
84950
- const match = /\((.*?)\)/.exec(error);
84951
- const nodeType = match && match[1];
84952
-
84953
- let message;
84954
-
84955
- if (nodeType) {
84956
- message = 'unexpected ' + nodeType;
84957
- } else {
84958
- message = 'expression expected';
84959
- }
84960
-
84961
- messages.push(
84962
- {
84963
- from: node.from,
84964
- to: node.to,
84965
- severity: 'error',
84966
- message: message,
84967
- source: 'syntaxError'
84968
- }
84969
- );
84970
- }
84971
- }
84972
- });
84973
-
84974
- return messages;
84975
- };
84976
-
84977
- var syntaxLinter = linter$1(FeelLinter);
84978
-
84979
- var linter = [ syntaxLinter ];
85235
+ var linter = [ linter$1(cmFeelLinter()) ];
84980
85236
 
84981
85237
  const baseTheme = EditorView.theme({
84982
85238
  '& .cm-content': {
@@ -85044,9 +85300,11 @@
85044
85300
 
85045
85301
  /**
85046
85302
  * @typedef {object} Variable
85047
- * @property {string} name
85048
- * @property {string} [info]
85049
- * @property {string} [detail]
85303
+ * @property {string} name name or key of the variable
85304
+ * @property {string} [info] short information about the variable, e.g. type
85305
+ * @property {string} [detail] longer description of the variable content
85306
+ * @property {boolean} [isList] whether the variable is a list
85307
+ * @property {array<Variable>} [schema] array of child variables if the variable is a context or list
85050
85308
  */
85051
85309
 
85052
85310
  const autocompletionConf = new Compartment();
@@ -86784,7 +87042,7 @@
86784
87042
  label,
86785
87043
  onChange,
86786
87044
  options = [],
86787
- value,
87045
+ value = '',
86788
87046
  disabled,
86789
87047
  onFocus,
86790
87048
  onBlur
@@ -87879,28 +88137,41 @@
87879
88137
 
87880
88138
  // api /////////////////////////
87881
88139
 
88140
+ /**
88141
+ * Extractors add ProcessVariables to the `options.processVariables` parameter.
88142
+ * @callback extractor
88143
+ * @param {Object} options
88144
+ * @param {Array<ModdleElement>} options.elements
88145
+ * @param {ModdleElement} options.containerElement
88146
+ * @param {Array<ProcessVariable>} options.processVariables
88147
+ */
88148
+
87882
88149
  /**
87883
88150
  * Retrieves all process variables for a given container element.
87884
88151
  * @param {ModdleElement} containerElement
88152
+ * @param {Array<extractor>} [additionalExtractors]
87885
88153
  *
87886
- * @returns {Array<ProcessVariable>}
88154
+ * @returns {Promise<Array<ProcessVariable>>}
87887
88155
  */
87888
- function getProcessVariables$1(containerElement) {
88156
+ function getProcessVariables$1(containerElement, additionalExtractors = []) {
87889
88157
  var processVariables = [];
87890
88158
 
87891
88159
  // (1) extract all flow elements inside the container
87892
88160
  var elements = selfAndAllFlowElements$1([ containerElement ], false);
87893
88161
 
88162
+ const allPromises = [];
88163
+
87894
88164
  // (2) extract all variables from the extractors
87895
- minDash$1.forEach(extractors$1, function(extractor) {
87896
- extractor({
88165
+ minDash$1.forEach([ ...extractors$1, ...additionalExtractors ], function(extractor) {
88166
+ allPromises.push(extractor({
87897
88167
  elements: elements,
87898
88168
  containerElement: containerElement,
87899
88169
  processVariables: processVariables
87900
- });
88170
+ }));
87901
88171
  });
87902
88172
 
87903
- return processVariables;
88173
+ return Promise.all(allPromises)
88174
+ .then(() => processVariables);
87904
88175
  }
87905
88176
 
87906
88177
  /**
@@ -87912,12 +88183,13 @@
87912
88183
  *
87913
88184
  * @param {string} scope
87914
88185
  * @param {ModdleElement} rootElement element from where to extract all variables
88186
+ * @param {Array<extractor>} [additionalExtractors]
87915
88187
  *
87916
- * @returns {Array<ProcessVariable>}
88188
+ * @returns {Promise<Array<ProcessVariable>>}
87917
88189
  */
87918
- function getVariablesForScope$1(scope, rootElement) {
88190
+ async function getVariablesForScope$1(scope, rootElement, additionalExtractors = []) {
87919
88191
 
87920
- var allVariables = getProcessVariables$1(rootElement);
88192
+ var allVariables = await getProcessVariables$1(rootElement, additionalExtractors);
87921
88193
 
87922
88194
  var scopeElement = getElement$1(scope, rootElement);
87923
88195
 
@@ -87939,8 +88211,8 @@
87939
88211
  }
87940
88212
 
87941
88213
 
87942
- function getVariablesForElement(element) {
87943
- return getVariablesForScope$1(getScope$2(element), getRootElement$1(element));
88214
+ function getVariablesForElement(element, additionalExtractors = []) {
88215
+ return getVariablesForScope$1(getScope$2(element), getRootElement$1(element), additionalExtractors);
87944
88216
  }
87945
88217
 
87946
88218
  function getScope$2(element) {
@@ -88645,30 +88917,46 @@
88645
88917
  * @property {ModdleElement} scope
88646
88918
  */
88647
88919
 
88920
+
88921
+ /**
88922
+ * Extractors add ProcessVariables to the `options.processVariables` parameter.
88923
+ * @callback extractor
88924
+ * @param {Object} options
88925
+ * @param {Array<ModdleElement>} options.elements
88926
+ * @param {ModdleElement} options.containerElement
88927
+ * @param {Array<ProcessVariable>} options.processVariables
88928
+ */
88929
+
88648
88930
  // api /////////////////////////
88649
88931
 
88650
88932
  /**
88651
88933
  * Retrieves all process variables for a given container element.
88652
88934
  * @param {ModdleElement} containerElement
88935
+ * @param {Array<extractor>} additionalExtractors
88653
88936
  *
88654
- * @returns {Array<ProcessVariable>}
88937
+ * @returns {Promise<Array<ProcessVariable>>}
88655
88938
  */
88656
- function getProcessVariables(containerElement) {
88939
+ function getProcessVariables(containerElement, additionalExtractors = []) {
88940
+ const allPromises = [];
88941
+
88657
88942
  var processVariables = [];
88658
88943
 
88659
88944
  // (1) extract all flow elements inside the container
88660
88945
  var elements = selfAndAllFlowElements([ containerElement ], false);
88661
88946
 
88662
88947
  // (2) extract all variables from the extractors
88663
- minDash.forEach(extractors, function(extractor) {
88664
- extractor({
88665
- elements: elements,
88666
- containerElement: containerElement,
88667
- processVariables: processVariables
88668
- });
88948
+ minDash.forEach([ ...extractors, ...additionalExtractors ], function(extractor) {
88949
+ allPromises.push(
88950
+ extractor({
88951
+ elements: elements,
88952
+ containerElement: containerElement,
88953
+ processVariables: processVariables
88954
+ })
88955
+ );
88669
88956
  });
88670
88957
 
88671
- return processVariables;
88958
+ return Promise.all(allPromises)
88959
+ .then(() => processVariables);
88672
88960
  }
88673
88961
 
88674
88962
  /**
@@ -88680,12 +88968,13 @@
88680
88968
  *
88681
88969
  * @param {string} scope
88682
88970
  * @param {ModdleElement} rootElement element from where to extract all variables
88971
+ * @param {Array<extractor>} additionalExtractors
88683
88972
  *
88684
- * @returns {Array<ProcessVariable>}
88973
+ * @returns {Promise<Array<ProcessVariable>>}
88685
88974
  */
88686
- function getVariablesForScope(scope, rootElement) {
88975
+ async function getVariablesForScope(scope, rootElement, additionalExtractors = []) {
88687
88976
 
88688
- var allVariables = getProcessVariables(rootElement);
88977
+ var allVariables = await getProcessVariables(rootElement, additionalExtractors);
88689
88978
 
88690
88979
  var scopeElement = getElement(scope, rootElement);
88691
88980
 
@@ -91699,7 +91988,7 @@
91699
91988
  /**
91700
91989
  * @returns {Array<Entry>} entries
91701
91990
  */
91702
- function ErrorProps$1(props) {
91991
+ function ErrorProps$2(props) {
91703
91992
  const {
91704
91993
  element
91705
91994
  } = props;
@@ -91719,7 +92008,7 @@
91719
92008
  isEdited: isEdited$1
91720
92009
  }, {
91721
92010
  id: 'errorCode',
91722
- component: ErrorCode$1,
92011
+ component: ErrorCode$2,
91723
92012
  isEdited: isEdited$1
91724
92013
  }];
91725
92014
  }
@@ -91835,7 +92124,7 @@
91835
92124
  debounce
91836
92125
  });
91837
92126
  }
91838
- function ErrorCode$1(props) {
92127
+ function ErrorCode$2(props) {
91839
92128
  const {
91840
92129
  element
91841
92130
  } = props;
@@ -93309,7 +93598,7 @@
93309
93598
  id: 'error',
93310
93599
  label: translate('Error'),
93311
93600
  component: Group,
93312
- entries: [...ErrorProps$1({
93601
+ entries: [...ErrorProps$2({
93313
93602
  element
93314
93603
  })]
93315
93604
  };
@@ -99664,7 +99953,8 @@
99664
99953
  }
99665
99954
  return {
99666
99955
  items,
99667
- add
99956
+ add,
99957
+ shouldSort: false
99668
99958
  };
99669
99959
  }
99670
99960
  function removeFactory$2(props) {
@@ -100472,7 +100762,8 @@
100472
100762
  bpmnFactory,
100473
100763
  commandStack,
100474
100764
  element
100475
- })
100765
+ }),
100766
+ shouldSort: false
100476
100767
  };
100477
100768
  }
100478
100769
  function removeFactory({
@@ -101036,24 +101327,23 @@
101036
101327
  return businessObject.get('processRef') || businessObject;
101037
101328
  }
101038
101329
 
101039
- function ProcessVariablesProps(props) {
101330
+ function ProcessVariablesEntry(props) {
101040
101331
  const {
101041
101332
  element
101042
101333
  } = props;
101043
- if (!canHaveProcessVariables(element)) {
101044
- return null;
101045
- }
101046
- const businessObject = getBusinessObject$1(element);
101047
- const rootElement = getRootElement(businessObject);
101048
- const scope = getScope(element);
101049
-
101050
- // (1) fetch available process variables for given scope
101051
- const variables = getVariablesForScope_1(scope, rootElement);
101334
+ const [variables, setVariables] = l$1([]);
101335
+ y(async () => {
101336
+ const businessObject = getBusinessObject$1(element);
101337
+ const rootElement = getRootElement(businessObject);
101338
+ const scope = getScope(element);
101339
+ const rawVariables = await getVariablesForScope_1(scope, rootElement);
101340
+ const withName = populateElementNames(sortByName(rawVariables));
101341
+ setVariables(withName);
101342
+ }, [element]);
101052
101343
  if (!variables.length) {
101053
101344
  return null;
101054
101345
  }
101055
- const withNames = populateElementNames(sortByName(variables));
101056
- const byScope = groupByScope(withNames);
101346
+ const byScope = groupByScope(variables);
101057
101347
  const multiScope = isMultiScope(byScope);
101058
101348
  let variableItems = [];
101059
101349
 
@@ -101065,7 +101355,7 @@
101065
101355
  variableItems = flatten$1(reversed);
101066
101356
  } else {
101067
101357
  // (2b) single scope
101068
- variableItems = withNames;
101358
+ variableItems = variables;
101069
101359
  }
101070
101360
  const items = variableItems.map((variable, index) => {
101071
101361
  const id = element.id + '-variable-' + index;
@@ -101079,8 +101369,21 @@
101079
101369
  })]
101080
101370
  };
101081
101371
  });
101372
+ return o$1(ListGroup, {
101373
+ ...props,
101374
+ items: items,
101375
+ shouldSort: false
101376
+ });
101377
+ }
101378
+ function ProcessVariablesProps(props) {
101379
+ const {
101380
+ element
101381
+ } = props;
101382
+ if (!canHaveProcessVariables(element)) {
101383
+ return null;
101384
+ }
101082
101385
  return {
101083
- items,
101386
+ component: ProcessVariablesEntry,
101084
101387
  shouldSort: false
101085
101388
  };
101086
101389
  }
@@ -102217,19 +102520,19 @@
102217
102520
  }
102218
102521
  function ProcessVariablesGroup(element, injector) {
102219
102522
  const translate = injector.get('translate');
102523
+ const variableProps = ProcessVariablesProps({
102524
+ element,
102525
+ injector
102526
+ });
102527
+ if (!variableProps) {
102528
+ return null;
102529
+ }
102220
102530
  const group = {
102221
102531
  label: translate('Process variables'),
102222
102532
  id: 'CamundaPlatform__ProcessVariables',
102223
- component: ListGroup,
102224
- ...ProcessVariablesProps({
102225
- element,
102226
- injector
102227
- })
102533
+ ...variableProps
102228
102534
  };
102229
- if (group.items) {
102230
- return group;
102231
- }
102232
- return null;
102535
+ return group;
102233
102536
  }
102234
102537
  function FormDataGroup(element, injector) {
102235
102538
  const translate = injector.get('translate');
@@ -103249,7 +103552,7 @@
103249
103552
  // different conditions but same bindings
103250
103553
  return oldProperties.filter(property => !findPropertyWithBinding(newTemplate, property));
103251
103554
  }
103252
- function normalizeReplacer(key, value) {
103555
+ function normalizeReplacer$1(key, value) {
103253
103556
  if (isObject(value)) {
103254
103557
  const keys = Object.keys(value).sort();
103255
103558
  return keys.reduce((obj, key) => {
@@ -103260,7 +103563,7 @@
103260
103563
  return value;
103261
103564
  }
103262
103565
  function equals(a, b) {
103263
- return JSON.stringify(a, normalizeReplacer) === JSON.stringify(b, normalizeReplacer);
103566
+ return JSON.stringify(a, normalizeReplacer$1) === JSON.stringify(b, normalizeReplacer$1);
103264
103567
  }
103265
103568
 
103266
103569
  /**
@@ -104825,6 +105128,163 @@
104825
105128
  });
104826
105129
  }
104827
105130
 
105131
+ /**
105132
+ * Restores the original order of the template properties
105133
+ * on the moddle element.
105134
+ */
105135
+ class UpdateTemplatePropertiesOrder extends CommandInterceptor {
105136
+ constructor(eventBus, elementTemplates, commandStack, bpmnFactory) {
105137
+ super(eventBus);
105138
+ this._eventBus = eventBus;
105139
+ this._elementTemplates = elementTemplates;
105140
+ this._commandStack = commandStack;
105141
+ this._bpmnFactory = bpmnFactory;
105142
+ this.postExecute(['element.updateProperties', 'element.updateModdleProperties'], this._updatePropertiesOrder, true, this);
105143
+ }
105144
+ _updatePropertiesOrder(context) {
105145
+ const {
105146
+ element
105147
+ } = context;
105148
+ const template = this._elementTemplates.get(element);
105149
+ const businessObject = element.businessObject;
105150
+ const commands = [];
105151
+ if (!template) {
105152
+ return;
105153
+ }
105154
+ const templateProperties = template.properties;
105155
+
105156
+ // zeebe:Property
105157
+ const zeebeProperties = findExtension$1(businessObject, 'zeebe:Properties');
105158
+ if (zeebeProperties) {
105159
+ this._updateZeebePropertiesOrder(zeebeProperties, templateProperties, commands, context);
105160
+ }
105161
+
105162
+ // zeebe:IoMapping
105163
+ const ioMapping = findExtension$1(businessObject, 'zeebe:IoMapping');
105164
+ if (ioMapping) {
105165
+ // zeebe:Input
105166
+ this._updateInputOrder(ioMapping, templateProperties, commands, context);
105167
+
105168
+ // zeebe:Output
105169
+ this._updateOutputOrder(ioMapping, templateProperties, commands, context);
105170
+ }
105171
+
105172
+ // zeebe:TaskHeaders
105173
+ const taskHeaders = findExtension$1(businessObject, 'zeebe:TaskHeaders');
105174
+ if (taskHeaders) {
105175
+ this._updateTaskHeadersOrder(taskHeaders, templateProperties, commands, context);
105176
+ }
105177
+ if (commands.length) {
105178
+ const commandsToExecute = commands.filter(command => command !== null);
105179
+ commandsToExecute.length && this._commandStack.execute('properties-panel.multi-command-executor', commandsToExecute);
105180
+ return;
105181
+ }
105182
+ }
105183
+ _updateZeebePropertiesOrder(zeebeProperties, templateProperties, commands, context) {
105184
+ const findIndex = (properties, propertyToFind) => properties.findIndex(prop => prop.binding.type == 'zeebe:property' && prop.binding.name === propertyToFind.get('name'));
105185
+ const properties = zeebeProperties.get('properties');
105186
+ if (properties.length < 1) return;
105187
+ let newPropertiesOrder = [...properties];
105188
+ sortProperties(newPropertiesOrder, findIndex, templateProperties);
105189
+ if (!arrayEquals(newPropertiesOrder, properties)) {
105190
+ commands.push({
105191
+ cmd: 'element.updateModdleProperties',
105192
+ context: {
105193
+ ...context,
105194
+ moddleElement: zeebeProperties,
105195
+ properties: {
105196
+ properties: newPropertiesOrder
105197
+ }
105198
+ }
105199
+ });
105200
+ }
105201
+ }
105202
+ _updateInputOrder(ioMapping, templateProperties, commands, context) {
105203
+ const findIndex = (properties, propertyToFind) => properties.findIndex(prop => prop.binding.type == 'zeebe:input' && prop.binding.name === propertyToFind.get('target'));
105204
+ const inputParameters = ioMapping.get('inputParameters');
105205
+ if (inputParameters.length < 1) return;
105206
+ let newInputOrder = [...inputParameters];
105207
+ sortProperties(newInputOrder, findIndex, templateProperties);
105208
+ if (!arrayEquals(newInputOrder, inputParameters)) {
105209
+ commands.push({
105210
+ cmd: 'element.updateModdleProperties',
105211
+ context: {
105212
+ ...context,
105213
+ moddleElement: ioMapping,
105214
+ properties: {
105215
+ inputParameters: newInputOrder
105216
+ }
105217
+ }
105218
+ });
105219
+ }
105220
+ }
105221
+ _updateOutputOrder(ioMapping, templateProperties, commands, context) {
105222
+ const findIndex = (properties, propertyToFind) => properties.findIndex(prop => prop.binding.type == 'zeebe:output' && prop.binding.source === propertyToFind.get('source'));
105223
+ const outputParameters = ioMapping.get('outputParameters');
105224
+ if (outputParameters.length < 1) return;
105225
+ let newOutputOrder = [...outputParameters];
105226
+ sortProperties(newOutputOrder, findIndex, templateProperties);
105227
+ if (!arrayEquals(newOutputOrder, outputParameters)) {
105228
+ commands.push({
105229
+ cmd: 'element.updateModdleProperties',
105230
+ context: {
105231
+ ...context,
105232
+ moddleElement: ioMapping,
105233
+ properties: {
105234
+ outputParameters: newOutputOrder
105235
+ }
105236
+ }
105237
+ });
105238
+ }
105239
+ }
105240
+ _updateTaskHeadersOrder(taskHeaders, templateProperties, commands, context) {
105241
+ const findIndex = (properties, propertyToFind) => properties.findIndex(prop => prop.binding.type == 'zeebe:taskHeader' && prop.binding.key === propertyToFind.get('key'));
105242
+ const headers = taskHeaders.get('zeebe:values');
105243
+ if (headers.length < 1) return;
105244
+ let newHeadersOrder = [...headers];
105245
+ sortProperties(newHeadersOrder, findIndex, templateProperties);
105246
+ if (!arrayEquals(newHeadersOrder, headers)) {
105247
+ commands.push({
105248
+ cmd: 'element.updateModdleProperties',
105249
+ context: {
105250
+ ...context,
105251
+ moddleElement: taskHeaders,
105252
+ properties: {
105253
+ values: newHeadersOrder
105254
+ }
105255
+ }
105256
+ });
105257
+ }
105258
+ }
105259
+ }
105260
+ UpdateTemplatePropertiesOrder.$inject = ['eventBus', 'elementTemplates', 'commandStack', 'bpmnFactory'];
105261
+
105262
+ // helpers
105263
+
105264
+ function normalizeReplacer(key, value) {
105265
+ if (isObject(value)) {
105266
+ const keys = Object.keys(value).sort();
105267
+ return keys.reduce((obj, key) => {
105268
+ obj[key] = value[key];
105269
+ return obj;
105270
+ }, {});
105271
+ }
105272
+ return value;
105273
+ }
105274
+ function objectEquals(a, b) {
105275
+ return JSON.stringify(a, normalizeReplacer) === JSON.stringify(b, normalizeReplacer);
105276
+ }
105277
+ function arrayEquals(a, b) {
105278
+ return a.every((element, idx) => objectEquals(element, b[idx]));
105279
+ }
105280
+ function sortProperties(array, findIndex, templateProperties) {
105281
+ return array.sort((a, b) => {
105282
+ const aIndex = findIndex(templateProperties, a);
105283
+ const bIndex = findIndex(templateProperties, b);
105284
+ return aIndex - bIndex;
105285
+ });
105286
+ }
105287
+
104828
105288
  /**
104829
105289
  * This Behavior checks if the new element's type is in
104830
105290
  * the list of elements the template applies to and unlinks