camunda-bpmn-js 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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"
72471
- },
72472
- ".cm-selectionLayer": {
72473
- zIndex: -1,
72474
- contain: "size style"
72534
+ padding: "0 2px 0 6px"
72475
72535
  },
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();
@@ -86939,7 +87197,7 @@
86939
87197
  label,
86940
87198
  onChange,
86941
87199
  options = [],
86942
- value,
87200
+ value = '',
86943
87201
  disabled,
86944
87202
  onFocus,
86945
87203
  onBlur
@@ -87984,28 +88242,41 @@
87984
88242
 
87985
88243
  // api /////////////////////////
87986
88244
 
88245
+ /**
88246
+ * Extractors add ProcessVariables to the `options.processVariables` parameter.
88247
+ * @callback extractor
88248
+ * @param {Object} options
88249
+ * @param {Array<ModdleElement>} options.elements
88250
+ * @param {ModdleElement} options.containerElement
88251
+ * @param {Array<ProcessVariable>} options.processVariables
88252
+ */
88253
+
87987
88254
  /**
87988
88255
  * Retrieves all process variables for a given container element.
87989
88256
  * @param {ModdleElement} containerElement
88257
+ * @param {Array<extractor>} [additionalExtractors]
87990
88258
  *
87991
- * @returns {Array<ProcessVariable>}
88259
+ * @returns {Promise<Array<ProcessVariable>>}
87992
88260
  */
87993
- function getProcessVariables$1(containerElement) {
88261
+ function getProcessVariables$1(containerElement, additionalExtractors = []) {
87994
88262
  var processVariables = [];
87995
88263
 
87996
88264
  // (1) extract all flow elements inside the container
87997
88265
  var elements = selfAndAllFlowElements$1([ containerElement ], false);
87998
88266
 
88267
+ const allPromises = [];
88268
+
87999
88269
  // (2) extract all variables from the extractors
88000
- minDash$1.forEach(extractors$1, function(extractor) {
88001
- extractor({
88270
+ minDash$1.forEach([ ...extractors$1, ...additionalExtractors ], function(extractor) {
88271
+ allPromises.push(extractor({
88002
88272
  elements: elements,
88003
88273
  containerElement: containerElement,
88004
88274
  processVariables: processVariables
88005
- });
88275
+ }));
88006
88276
  });
88007
88277
 
88008
- return processVariables;
88278
+ return Promise.all(allPromises)
88279
+ .then(() => processVariables);
88009
88280
  }
88010
88281
 
88011
88282
  /**
@@ -88017,12 +88288,13 @@
88017
88288
  *
88018
88289
  * @param {string} scope
88019
88290
  * @param {ModdleElement} rootElement element from where to extract all variables
88291
+ * @param {Array<extractor>} [additionalExtractors]
88020
88292
  *
88021
- * @returns {Array<ProcessVariable>}
88293
+ * @returns {Promise<Array<ProcessVariable>>}
88022
88294
  */
88023
- function getVariablesForScope$1(scope, rootElement) {
88295
+ async function getVariablesForScope$1(scope, rootElement, additionalExtractors = []) {
88024
88296
 
88025
- var allVariables = getProcessVariables$1(rootElement);
88297
+ var allVariables = await getProcessVariables$1(rootElement, additionalExtractors);
88026
88298
 
88027
88299
  var scopeElement = getElement$1(scope, rootElement);
88028
88300
 
@@ -88044,8 +88316,8 @@
88044
88316
  }
88045
88317
 
88046
88318
 
88047
- function getVariablesForElement(element) {
88048
- return getVariablesForScope$1(getScope$2(element), getRootElement$2(element));
88319
+ function getVariablesForElement(element, additionalExtractors = []) {
88320
+ return getVariablesForScope$1(getScope$2(element), getRootElement$2(element), additionalExtractors);
88049
88321
  }
88050
88322
 
88051
88323
  function getScope$2(element) {
@@ -88750,30 +89022,46 @@
88750
89022
  * @property {ModdleElement} scope
88751
89023
  */
88752
89024
 
89025
+
89026
+ /**
89027
+ * Extractors add ProcessVariables to the `options.processVariables` parameter.
89028
+ * @callback extractor
89029
+ * @param {Object} options
89030
+ * @param {Array<ModdleElement>} options.elements
89031
+ * @param {ModdleElement} options.containerElement
89032
+ * @param {Array<ProcessVariable>} options.processVariables
89033
+ */
89034
+
88753
89035
  // api /////////////////////////
88754
89036
 
88755
89037
  /**
88756
89038
  * Retrieves all process variables for a given container element.
88757
89039
  * @param {ModdleElement} containerElement
89040
+ * @param {Array<extractor>} additionalExtractors
88758
89041
  *
88759
- * @returns {Array<ProcessVariable>}
89042
+ * @returns {Promise<Array<ProcessVariable>>}
88760
89043
  */
88761
- function getProcessVariables(containerElement) {
89044
+ function getProcessVariables(containerElement, additionalExtractors = []) {
89045
+ const allPromises = [];
89046
+
88762
89047
  var processVariables = [];
88763
89048
 
88764
89049
  // (1) extract all flow elements inside the container
88765
89050
  var elements = selfAndAllFlowElements([ containerElement ], false);
88766
89051
 
88767
89052
  // (2) extract all variables from the extractors
88768
- minDash.forEach(extractors, function(extractor) {
88769
- extractor({
88770
- elements: elements,
88771
- containerElement: containerElement,
88772
- processVariables: processVariables
88773
- });
89053
+ minDash.forEach([ ...extractors, ...additionalExtractors ], function(extractor) {
89054
+ allPromises.push(
89055
+ extractor({
89056
+ elements: elements,
89057
+ containerElement: containerElement,
89058
+ processVariables: processVariables
89059
+ })
89060
+ );
88774
89061
  });
88775
89062
 
88776
- return processVariables;
89063
+ return Promise.all(allPromises)
89064
+ .then(() => processVariables);
88777
89065
  }
88778
89066
 
88779
89067
  /**
@@ -88785,12 +89073,13 @@
88785
89073
  *
88786
89074
  * @param {string} scope
88787
89075
  * @param {ModdleElement} rootElement element from where to extract all variables
89076
+ * @param {Array<extractor>} additionalExtractors
88788
89077
  *
88789
- * @returns {Array<ProcessVariable>}
89078
+ * @returns {Promise<Array<ProcessVariable>>}
88790
89079
  */
88791
- function getVariablesForScope(scope, rootElement) {
89080
+ async function getVariablesForScope(scope, rootElement, additionalExtractors = []) {
88792
89081
 
88793
- var allVariables = getProcessVariables(rootElement);
89082
+ var allVariables = await getProcessVariables(rootElement, additionalExtractors);
88794
89083
 
88795
89084
  var scopeElement = getElement(scope, rootElement);
88796
89085
 
@@ -91801,7 +92090,7 @@
91801
92090
  /**
91802
92091
  * @returns {Array<Entry>} entries
91803
92092
  */
91804
- function ErrorProps$1(props) {
92093
+ function ErrorProps$2(props) {
91805
92094
  const {
91806
92095
  element
91807
92096
  } = props;
@@ -91821,7 +92110,7 @@
91821
92110
  isEdited: isEdited$1
91822
92111
  }, {
91823
92112
  id: 'errorCode',
91824
- component: ErrorCode$1,
92113
+ component: ErrorCode$2,
91825
92114
  isEdited: isEdited$1
91826
92115
  }];
91827
92116
  }
@@ -91937,7 +92226,7 @@
91937
92226
  debounce
91938
92227
  });
91939
92228
  }
91940
- function ErrorCode$1(props) {
92229
+ function ErrorCode$2(props) {
91941
92230
  const {
91942
92231
  element
91943
92232
  } = props;
@@ -93411,7 +93700,7 @@
93411
93700
  id: 'error',
93412
93701
  label: translate('Error'),
93413
93702
  component: Group,
93414
- entries: [...ErrorProps$1({
93703
+ entries: [...ErrorProps$2({
93415
93704
  element
93416
93705
  })]
93417
93706
  };
@@ -93590,8 +93879,8 @@
93590
93879
  const [variables, setVariables] = l$1([]);
93591
93880
  const eventBus = useService('eventBus');
93592
93881
  y(() => {
93593
- const callback = () => {
93594
- const variables = getVariablesForElement_1(bo);
93882
+ const callback = async () => {
93883
+ const variables = await getVariablesForElement_1(bo);
93595
93884
  setVariables(variables.map(variable => {
93596
93885
  return {
93597
93886
  name: variable.name,
@@ -93876,8 +94165,8 @@
93876
94165
  }
93877
94166
 
93878
94167
  const DMN_IMPLEMENTATION_OPTION = 'dmn',
93879
- JOB_WORKER_IMPLEMENTATION_OPTION = 'jobWorker',
93880
- DEFAULT_IMPLEMENTATION_OPTION = '';
94168
+ JOB_WORKER_IMPLEMENTATION_OPTION$1 = 'jobWorker',
94169
+ DEFAULT_IMPLEMENTATION_OPTION$1 = '';
93881
94170
  function BusinessRuleImplementationProps(props) {
93882
94171
  const {
93883
94172
  element
@@ -93903,10 +94192,10 @@
93903
94192
  if (getCalledDecision$1(element)) {
93904
94193
  return DMN_IMPLEMENTATION_OPTION;
93905
94194
  }
93906
- if (getTaskDefinition$2(element)) {
93907
- return JOB_WORKER_IMPLEMENTATION_OPTION;
94195
+ if (getTaskDefinition$3(element)) {
94196
+ return JOB_WORKER_IMPLEMENTATION_OPTION$1;
93908
94197
  }
93909
- return DEFAULT_IMPLEMENTATION_OPTION;
94198
+ return DEFAULT_IMPLEMENTATION_OPTION$1;
93910
94199
  };
93911
94200
 
93912
94201
  /**
@@ -93919,26 +94208,26 @@
93919
94208
  if (value === DMN_IMPLEMENTATION_OPTION) {
93920
94209
  extensionElement = getCalledDecision$1(element);
93921
94210
  extensionElementType = 'zeebe:CalledDecision';
93922
- } else if (value === JOB_WORKER_IMPLEMENTATION_OPTION) {
93923
- extensionElement = getTaskDefinition$2(element);
94211
+ } else if (value === JOB_WORKER_IMPLEMENTATION_OPTION$1) {
94212
+ extensionElement = getTaskDefinition$3(element);
93924
94213
  extensionElementType = 'zeebe:TaskDefinition';
93925
94214
  } else {
93926
- resetElement(element, commandStack);
94215
+ resetElement$1(element, commandStack);
93927
94216
  }
93928
94217
  if (!extensionElement && extensionElementType) {
93929
94218
  extensionElement = createElement$1(extensionElementType, {}, null, bpmnFactory);
93930
- updateExtensionElements(element, extensionElement, bpmnFactory, commandStack);
94219
+ updateExtensionElements$1(element, extensionElement, bpmnFactory, commandStack);
93931
94220
  }
93932
94221
  };
93933
94222
  const getOptions = () => {
93934
94223
  const options = [{
93935
- value: DEFAULT_IMPLEMENTATION_OPTION,
94224
+ value: DEFAULT_IMPLEMENTATION_OPTION$1,
93936
94225
  label: translate('<none>')
93937
94226
  }, {
93938
94227
  value: DMN_IMPLEMENTATION_OPTION,
93939
94228
  label: translate('DMN decision')
93940
94229
  }, {
93941
- value: JOB_WORKER_IMPLEMENTATION_OPTION,
94230
+ value: JOB_WORKER_IMPLEMENTATION_OPTION$1,
93942
94231
  label: translate('Job worker')
93943
94232
  }];
93944
94233
  return options;
@@ -93955,7 +94244,7 @@
93955
94244
 
93956
94245
  // helper ///////////////////////
93957
94246
 
93958
- function getTaskDefinition$2(element) {
94247
+ function getTaskDefinition$3(element) {
93959
94248
  const businessObject = getBusinessObject$1(element);
93960
94249
  return getExtensionElementsList$1(businessObject, 'zeebe:TaskDefinition')[0];
93961
94250
  }
@@ -93964,11 +94253,11 @@
93964
94253
  return getExtensionElementsList$1(businessObject, 'zeebe:CalledDecision')[0];
93965
94254
  }
93966
94255
  function isBusinessRuleImplementationEdited(element) {
93967
- return getTaskDefinition$2(element);
94256
+ return getTaskDefinition$3(element);
93968
94257
  }
93969
- function resetElement(element, commandStack) {
94258
+ function resetElement$1(element, commandStack) {
93970
94259
  const businessObject = getBusinessObject$1(element);
93971
- const taskDefintion = getTaskDefinition$2(element);
94260
+ const taskDefintion = getTaskDefinition$3(element);
93972
94261
  const calledDecision = getCalledDecision$1(element);
93973
94262
  if (taskDefintion) {
93974
94263
  removeExtensionElements$1(element, businessObject, taskDefintion, commandStack);
@@ -93977,7 +94266,7 @@
93977
94266
  removeExtensionElements$1(element, businessObject, calledDecision, commandStack);
93978
94267
  }
93979
94268
  }
93980
- function updateExtensionElements(element, extensionElementToAdd, bpmnFactory, commandStack) {
94269
+ function updateExtensionElements$1(element, extensionElementToAdd, bpmnFactory, commandStack) {
93981
94270
  const businessObject = getBusinessObject$1(element);
93982
94271
  const commands = [];
93983
94272
  let extensionElements = businessObject.get('extensionElements');
@@ -94005,7 +94294,7 @@
94005
94294
  if (is$5(extensionElementToAdd, 'zeebe:TaskDefinition')) {
94006
94295
  extensionElementValues = without(extensionElements.get('values'), getCalledDecision$1(element));
94007
94296
  } else if (is$5(extensionElementToAdd, 'zeebe:CalledDecision')) {
94008
- extensionElementValues = without(extensionElements.get('values'), getTaskDefinition$2(element));
94297
+ extensionElementValues = without(extensionElements.get('values'), getTaskDefinition$3(element));
94009
94298
  }
94010
94299
 
94011
94300
  // (3) add extension element to list
@@ -94035,7 +94324,7 @@
94035
94324
  isEdited: isEdited$6
94036
94325
  }, {
94037
94326
  id: 'resultVariable',
94038
- component: ResultVariable$3,
94327
+ component: ResultVariable$4,
94039
94328
  isEdited: isEdited$1
94040
94329
  }];
94041
94330
  }
@@ -94114,7 +94403,7 @@
94114
94403
  debounce
94115
94404
  });
94116
94405
  }
94117
- function ResultVariable$3(props) {
94406
+ function ResultVariable$4(props) {
94118
94407
  const {
94119
94408
  element,
94120
94409
  id
@@ -94294,6 +94583,52 @@
94294
94583
  }
94295
94584
  }
94296
94585
 
94586
+ function ErrorProps$1(props) {
94587
+ const {
94588
+ element
94589
+ } = props;
94590
+ const error = getError(element);
94591
+ const entries = [];
94592
+ if (error) {
94593
+ entries.push({
94594
+ id: 'errorCode',
94595
+ component: ErrorCode$1,
94596
+ isEdited: isEdited$6
94597
+ });
94598
+ }
94599
+ return entries;
94600
+ }
94601
+ function ErrorCode$1(props) {
94602
+ const {
94603
+ element
94604
+ } = props;
94605
+ const commandStack = useService('commandStack');
94606
+ const translate = useService('translate');
94607
+ const debounce = useService('debounceInput');
94608
+ const error = getError(element);
94609
+ const getValue = () => {
94610
+ return error.get('errorCode');
94611
+ };
94612
+ const setValue = value => {
94613
+ return commandStack.execute('element.updateModdleProperties', {
94614
+ element,
94615
+ moddleElement: error,
94616
+ properties: {
94617
+ errorCode: value
94618
+ }
94619
+ });
94620
+ };
94621
+ return FeelEntryWithContext({
94622
+ element,
94623
+ id: 'errorCode',
94624
+ label: translate('Code'),
94625
+ feel: 'optional',
94626
+ getValue,
94627
+ setValue,
94628
+ debounce
94629
+ });
94630
+ }
94631
+
94297
94632
  function FormProps$1(props) {
94298
94633
  const {
94299
94634
  element,
@@ -94710,9 +95045,9 @@
94710
95045
  return !!getMessageEventDefinition(element);
94711
95046
  }
94712
95047
 
94713
- // A BusinessRuleTask is per default not a ServiceTask, only if it has a TaskDefinition
95048
+ // BusinessRuleTask and ScriptTask are ServiceTasks only if they have a TaskDefinition
94714
95049
  // (ie. if the implementation is set to ==JobWorker)
94715
- if (is$5(element, 'bpmn:BusinessRuleTask') && !getTaskDefinition$1(element)) {
95050
+ if (isAny(element, ['bpmn:BusinessRuleTask', 'bpmn:ScriptTask']) && !getTaskDefinition$2(element)) {
94716
95051
  return false;
94717
95052
  }
94718
95053
  return true;
@@ -94726,7 +95061,7 @@
94726
95061
 
94727
95062
  // helper ////////////////
94728
95063
 
94729
- function getTaskDefinition$1(element) {
95064
+ function getTaskDefinition$2(element) {
94730
95065
  const businessObject = getBusinessObject$1(element);
94731
95066
  return getExtensionElementsList$1(businessObject, 'zeebe:TaskDefinition')[0];
94732
95067
  }
@@ -95029,7 +95364,7 @@
95029
95364
  return getParameters$1.apply(this, [element, 'outputParameters']);
95030
95365
  }
95031
95366
  function areInputParametersSupported$1(element) {
95032
- return isAny(element, ['bpmn:UserTask', 'bpmn:SubProcess', 'bpmn:CallActivity', 'bpmn:BusinessRuleTask']) || isZeebeServiceTask(element);
95367
+ return isAny(element, ['bpmn:UserTask', 'bpmn:SubProcess', 'bpmn:CallActivity', 'bpmn:BusinessRuleTask', 'bpmn:ScriptTask']) || isZeebeServiceTask(element);
95033
95368
  }
95034
95369
  function areOutputParametersSupported$1(element) {
95035
95370
  return isAny(element, ['zeebe:ZeebeServiceTask', 'bpmn:UserTask', 'bpmn:SubProcess', 'bpmn:ReceiveTask', 'bpmn:CallActivity', 'bpmn:Event', 'bpmn:BusinessRuleTask']);
@@ -95072,7 +95407,8 @@
95072
95407
  element,
95073
95408
  bpmnFactory,
95074
95409
  commandStack
95075
- })
95410
+ }),
95411
+ shouldSort: false
95076
95412
  };
95077
95413
  }
95078
95414
  function removeFactory$b({
@@ -95753,7 +96089,8 @@
95753
96089
  element,
95754
96090
  bpmnFactory,
95755
96091
  commandStack
95756
- })
96092
+ }),
96093
+ shouldSort: false
95757
96094
  };
95758
96095
  }
95759
96096
  function removeFactory$a({
@@ -95868,6 +96205,335 @@
95868
96205
  };
95869
96206
  }
95870
96207
 
96208
+ const SCRIPT_IMPLEMENTATION_OPTION = 'script',
96209
+ JOB_WORKER_IMPLEMENTATION_OPTION = 'jobWorker',
96210
+ DEFAULT_IMPLEMENTATION_OPTION = '';
96211
+ function ScriptImplementationProps(props) {
96212
+ const {
96213
+ element
96214
+ } = props;
96215
+ if (!is$5(element, 'bpmn:ScriptTask')) {
96216
+ return [];
96217
+ }
96218
+ return [{
96219
+ id: 'scriptImplementation',
96220
+ component: ScriptImplementation,
96221
+ isEdited: () => isScriptImplementationEdited(element)
96222
+ }];
96223
+ }
96224
+ function ScriptImplementation(props) {
96225
+ const {
96226
+ element,
96227
+ id
96228
+ } = props;
96229
+ const commandStack = useService('commandStack');
96230
+ const bpmnFactory = useService('bpmnFactory');
96231
+ const translate = useService('translate');
96232
+ const getValue = () => {
96233
+ if (getScript$1(element)) {
96234
+ return SCRIPT_IMPLEMENTATION_OPTION;
96235
+ }
96236
+ if (getTaskDefinition$1(element)) {
96237
+ return JOB_WORKER_IMPLEMENTATION_OPTION;
96238
+ }
96239
+ return DEFAULT_IMPLEMENTATION_OPTION;
96240
+ };
96241
+
96242
+ /**
96243
+ * Set value by either creating a zeebe:script or a zeebe:taskDefintion
96244
+ * extension element. Note that they must not exist both at the same time, however
96245
+ * this will be ensured by a bpmn-js behavior (and not by the propPanel).
96246
+ */
96247
+ const setValue = value => {
96248
+ let extensionElement, extensionElementType;
96249
+ if (value === SCRIPT_IMPLEMENTATION_OPTION) {
96250
+ extensionElement = getScript$1(element);
96251
+ extensionElementType = 'zeebe:Script';
96252
+ } else if (value === JOB_WORKER_IMPLEMENTATION_OPTION) {
96253
+ extensionElement = getTaskDefinition$1(element);
96254
+ extensionElementType = 'zeebe:TaskDefinition';
96255
+ } else {
96256
+ resetElement(element, commandStack);
96257
+ }
96258
+ if (!extensionElement && extensionElementType) {
96259
+ extensionElement = createElement$1(extensionElementType, {}, null, bpmnFactory);
96260
+ updateExtensionElements(element, extensionElement, bpmnFactory, commandStack);
96261
+ }
96262
+ };
96263
+ const getOptions = () => {
96264
+ const options = [{
96265
+ value: DEFAULT_IMPLEMENTATION_OPTION,
96266
+ label: translate('<none>')
96267
+ }, {
96268
+ value: SCRIPT_IMPLEMENTATION_OPTION,
96269
+ label: translate('FEEL expression')
96270
+ }, {
96271
+ value: JOB_WORKER_IMPLEMENTATION_OPTION,
96272
+ label: translate('Job worker')
96273
+ }];
96274
+ return options;
96275
+ };
96276
+ return SelectEntry({
96277
+ element,
96278
+ id,
96279
+ label: translate('Implementation'),
96280
+ getValue,
96281
+ setValue,
96282
+ getOptions
96283
+ });
96284
+ }
96285
+
96286
+ // helper ///////////////////////
96287
+
96288
+ function getTaskDefinition$1(element) {
96289
+ const businessObject = getBusinessObject$1(element);
96290
+ return getExtensionElementsList$1(businessObject, 'zeebe:TaskDefinition')[0];
96291
+ }
96292
+ function getScript$1(element) {
96293
+ const businessObject = getBusinessObject$1(element);
96294
+ return getExtensionElementsList$1(businessObject, 'zeebe:Script')[0];
96295
+ }
96296
+ function getTaskHeaders$2(element) {
96297
+ const businessObject = getBusinessObject$1(element);
96298
+ return getExtensionElementsList$1(businessObject, 'zeebe:TaskHeaders');
96299
+ }
96300
+ function isScriptImplementationEdited(element) {
96301
+ return getTaskDefinition$1(element) || getScript$1(element);
96302
+ }
96303
+ function resetElement(element, commandStack) {
96304
+ const businessObject = getBusinessObject$1(element);
96305
+ const taskDefinition = getTaskDefinition$1(element);
96306
+ const taskHeaders = getTaskHeaders$2(element);
96307
+ const script = getScript$1(element);
96308
+ if (taskDefinition) {
96309
+ const removed = [taskDefinition, taskHeaders].filter(Boolean);
96310
+ removeExtensionElements$1(element, businessObject, removed, commandStack);
96311
+ return;
96312
+ }
96313
+ if (script) {
96314
+ removeExtensionElements$1(element, businessObject, script, commandStack);
96315
+ }
96316
+ }
96317
+ function updateExtensionElements(element, extensionElementToAdd, bpmnFactory, commandStack) {
96318
+ const businessObject = getBusinessObject$1(element);
96319
+ const commands = [];
96320
+ let extensionElements = businessObject.get('extensionElements');
96321
+ let extensionElementValues;
96322
+
96323
+ // (1) create bpmn:ExtensionElements if it doesn't exist
96324
+ if (!extensionElements) {
96325
+ extensionElements = createElement$1('bpmn:ExtensionElements', {
96326
+ values: []
96327
+ }, businessObject, bpmnFactory);
96328
+ commands.push({
96329
+ cmd: 'element.updateModdleProperties',
96330
+ context: {
96331
+ element,
96332
+ moddleElement: businessObject,
96333
+ properties: {
96334
+ extensionElements
96335
+ }
96336
+ }
96337
+ });
96338
+ }
96339
+ extensionElementToAdd.$parent = extensionElements;
96340
+
96341
+ // (2) remove old exension element from extensionElements
96342
+ if (is$5(extensionElementToAdd, 'zeebe:TaskDefinition')) {
96343
+ extensionElementValues = without(extensionElements.get('values'), getScript$1(element));
96344
+ } else if (is$5(extensionElementToAdd, 'zeebe:Script')) {
96345
+ const matcher = extension => isAny(extension, ['zeebe:TaskDefinition', 'zeebe:TaskHeaders']);
96346
+ extensionElementValues = without(extensionElements.get('values'), matcher);
96347
+ }
96348
+
96349
+ // (3) add extension element to list
96350
+ commands.push({
96351
+ cmd: 'element.updateModdleProperties',
96352
+ context: {
96353
+ element,
96354
+ moddleElement: extensionElements,
96355
+ properties: {
96356
+ values: [...extensionElementValues, extensionElementToAdd]
96357
+ }
96358
+ }
96359
+ });
96360
+ commandStack.execute('properties-panel.multi-command-executor', commands);
96361
+ }
96362
+
96363
+ function ScriptProps$1(props) {
96364
+ const {
96365
+ element
96366
+ } = props;
96367
+ if (!is$5(element, 'bpmn:ScriptTask') || !getScript(element)) {
96368
+ return [];
96369
+ }
96370
+ return [{
96371
+ id: 'scriptExpression',
96372
+ component: Expression$3,
96373
+ isEdited: isEdited$6
96374
+ }, {
96375
+ id: 'resultVariable',
96376
+ component: ResultVariable$3,
96377
+ isEdited: isEdited$1
96378
+ }];
96379
+ }
96380
+ function Expression$3(props) {
96381
+ const {
96382
+ element,
96383
+ id
96384
+ } = props;
96385
+ const commandStack = useService('commandStack');
96386
+ const bpmnFactory = useService('bpmnFactory');
96387
+ const translate = useService('translate');
96388
+ const debounce = useService('debounceInput');
96389
+ const getValue = () => {
96390
+ return (getScript(element) || {}).get('expression');
96391
+ };
96392
+ const setValue = value => {
96393
+ const commands = [];
96394
+ const businessObject = getBusinessObject$1(element);
96395
+ let extensionElements = businessObject.get('extensionElements');
96396
+
96397
+ // (1) ensure extension elements
96398
+ if (!extensionElements) {
96399
+ extensionElements = createElement$1('bpmn:ExtensionElements', {
96400
+ values: []
96401
+ }, businessObject, bpmnFactory);
96402
+ commands.push({
96403
+ cmd: 'element.updateModdleProperties',
96404
+ context: {
96405
+ element,
96406
+ moddleElement: businessObject,
96407
+ properties: {
96408
+ extensionElements
96409
+ }
96410
+ }
96411
+ });
96412
+ }
96413
+
96414
+ // (2) ensure script
96415
+ let script = getScript(element);
96416
+ if (!script) {
96417
+ script = createElement$1('zeebe:Script', {}, extensionElements, bpmnFactory);
96418
+ commands.push({
96419
+ cmd: 'element.updateModdleProperties',
96420
+ context: {
96421
+ element,
96422
+ moddleElement: extensionElements,
96423
+ properties: {
96424
+ values: [...extensionElements.get('values'), script]
96425
+ }
96426
+ }
96427
+ });
96428
+ }
96429
+
96430
+ // (3) update script.expression
96431
+ commands.push({
96432
+ cmd: 'element.updateModdleProperties',
96433
+ context: {
96434
+ element,
96435
+ moddleElement: script,
96436
+ properties: {
96437
+ expression: value
96438
+ }
96439
+ }
96440
+ });
96441
+
96442
+ // (4) commit all updates
96443
+ commandStack.execute('properties-panel.multi-command-executor', commands);
96444
+ };
96445
+ return FeelEntryWithContext({
96446
+ element,
96447
+ id,
96448
+ label: translate('FEEL expression'),
96449
+ feel: 'required',
96450
+ getValue,
96451
+ setValue,
96452
+ debounce
96453
+ });
96454
+ }
96455
+ function ResultVariable$3(props) {
96456
+ const {
96457
+ element,
96458
+ id
96459
+ } = props;
96460
+ const commandStack = useService('commandStack');
96461
+ const bpmnFactory = useService('bpmnFactory');
96462
+ const translate = useService('translate');
96463
+ const debounce = useService('debounceInput');
96464
+ const getValue = () => {
96465
+ return (getScript(element) || {}).resultVariable;
96466
+ };
96467
+ const setValue = value => {
96468
+ const commands = [];
96469
+ const businessObject = getBusinessObject$1(element);
96470
+ let extensionElements = businessObject.get('extensionElements');
96471
+
96472
+ // (1) ensure extension elements
96473
+ if (!extensionElements) {
96474
+ extensionElements = createElement$1('bpmn:ExtensionElements', {
96475
+ values: []
96476
+ }, businessObject, bpmnFactory);
96477
+ commands.push({
96478
+ cmd: 'element.updateModdleProperties',
96479
+ context: {
96480
+ element,
96481
+ moddleElement: businessObject,
96482
+ properties: {
96483
+ extensionElements
96484
+ }
96485
+ }
96486
+ });
96487
+ }
96488
+
96489
+ // (2) ensure script
96490
+ let script = getScript(element);
96491
+ if (!script) {
96492
+ script = createElement$1('zeebe:Script', {}, extensionElements, bpmnFactory);
96493
+ commands.push({
96494
+ cmd: 'element.updateModdleProperties',
96495
+ context: {
96496
+ element,
96497
+ moddleElement: extensionElements,
96498
+ properties: {
96499
+ values: [...extensionElements.get('values'), script]
96500
+ }
96501
+ }
96502
+ });
96503
+ }
96504
+
96505
+ // (3) update script.resultVariable
96506
+ commands.push({
96507
+ cmd: 'element.updateModdleProperties',
96508
+ context: {
96509
+ element,
96510
+ moddleElement: script,
96511
+ properties: {
96512
+ resultVariable: value
96513
+ }
96514
+ }
96515
+ });
96516
+
96517
+ // (4) commit all updates
96518
+ commandStack.execute('properties-panel.multi-command-executor', commands);
96519
+ };
96520
+ return TextfieldEntry({
96521
+ element,
96522
+ id,
96523
+ label: translate('Result variable'),
96524
+ getValue,
96525
+ setValue,
96526
+ debounce
96527
+ });
96528
+ }
96529
+
96530
+ // helper ///////////////////////
96531
+
96532
+ function getScript(element) {
96533
+ const businessObject = getBusinessObject$1(element);
96534
+ return getExtensionElementsList$1(businessObject, 'zeebe:Script')[0];
96535
+ }
96536
+
95871
96537
  function TargetProps(props) {
95872
96538
  const {
95873
96539
  element
@@ -95984,7 +96650,7 @@
95984
96650
  const translate = useService('translate');
95985
96651
  const debounce = useService('debounceInput');
95986
96652
  const getValue = () => {
95987
- return (getTaskDefinition$3(element) || {}).type;
96653
+ return (getTaskDefinition$4(element) || {}).type;
95988
96654
  };
95989
96655
  const setValue = value => {
95990
96656
  const commands = [];
@@ -96009,7 +96675,7 @@
96009
96675
  }
96010
96676
 
96011
96677
  // (2) ensure task definition
96012
- let taskDefinition = getTaskDefinition$3(element);
96678
+ let taskDefinition = getTaskDefinition$4(element);
96013
96679
  if (!taskDefinition) {
96014
96680
  taskDefinition = createElement$1('zeebe:TaskDefinition', {}, extensionElements, bpmnFactory);
96015
96681
  commands.push({
@@ -96059,7 +96725,7 @@
96059
96725
  const translate = useService('translate');
96060
96726
  const debounce = useService('debounceInput');
96061
96727
  const getValue = () => {
96062
- return (getTaskDefinition$3(element) || {}).retries;
96728
+ return (getTaskDefinition$4(element) || {}).retries;
96063
96729
  };
96064
96730
  const setValue = value => {
96065
96731
  let commands = [];
@@ -96084,7 +96750,7 @@
96084
96750
  }
96085
96751
 
96086
96752
  // (2) ensure task definition
96087
- let taskDefinition = getTaskDefinition$3(element);
96753
+ let taskDefinition = getTaskDefinition$4(element);
96088
96754
  if (!taskDefinition) {
96089
96755
  taskDefinition = createElement$1('zeebe:TaskDefinition', {}, extensionElements, bpmnFactory);
96090
96756
  commands.push({
@@ -96125,7 +96791,7 @@
96125
96791
 
96126
96792
  // helper ///////////////////////
96127
96793
 
96128
- function getTaskDefinition$3(element) {
96794
+ function getTaskDefinition$4(element) {
96129
96795
  const businessObject = getBusinessObject$1(element);
96130
96796
  return getExtensionElementsList$1(businessObject, 'zeebe:TaskDefinition')[0];
96131
96797
  }
@@ -96720,7 +97386,7 @@
96720
97386
  }
96721
97387
 
96722
97388
  const LOW_PRIORITY$1 = 500;
96723
- const ZEEBE_GROUPS = [BusinessRuleImplementationGroup, CalledDecisionGroup, TaskDefinitionGroup, AssignmentDefinitionGroup, FormGroup$1, ConditionGroup$1, TargetGroup, InputGroup$1, OutputPropagationGroup, OutputGroup$1, HeaderGroup, ExtensionPropertiesGroup$1];
97389
+ const ZEEBE_GROUPS = [BusinessRuleImplementationGroup, CalledDecisionGroup, ScriptImplementationGroup, ScriptGroup$1, TaskDefinitionGroup, AssignmentDefinitionGroup, FormGroup$1, ConditionGroup$1, TargetGroup, InputGroup$1, OutputPropagationGroup, OutputGroup$1, HeaderGroup, ExtensionPropertiesGroup$1];
96724
97390
  class ZeebePropertiesProvider$1 {
96725
97391
  constructor(propertiesPanel, injector) {
96726
97392
  propertiesPanel.registerProvider(LOW_PRIORITY$1, this);
@@ -96732,6 +97398,7 @@
96732
97398
  groups = groups.concat(this._getGroups(element));
96733
97399
 
96734
97400
  // (2) update existing groups with zeebe specific properties
97401
+ updateErrorGroup$1(groups, element);
96735
97402
  updateMessageGroup(groups, element);
96736
97403
  updateTimerGroup$1(groups, element, this._injector);
96737
97404
  updateMultiInstanceGroup$1(groups, element);
@@ -96758,6 +97425,17 @@
96758
97425
  };
96759
97426
  return group.entries.length ? group : null;
96760
97427
  }
97428
+ function ScriptGroup$1(element) {
97429
+ const group = {
97430
+ id: 'script',
97431
+ label: 'Script',
97432
+ entries: [...ScriptProps$1({
97433
+ element
97434
+ })],
97435
+ component: Group
97436
+ };
97437
+ return group.entries.length ? group : null;
97438
+ }
96761
97439
  function TaskDefinitionGroup(element) {
96762
97440
  const group = {
96763
97441
  id: 'taskDefinition',
@@ -96861,6 +97539,17 @@
96861
97539
  };
96862
97540
  return group.entries.length ? group : null;
96863
97541
  }
97542
+ function ScriptImplementationGroup(element) {
97543
+ const group = {
97544
+ id: 'scriptImplementation',
97545
+ label: 'Implementation',
97546
+ entries: [...ScriptImplementationProps({
97547
+ element
97548
+ })],
97549
+ component: Group
97550
+ };
97551
+ return group.entries.length ? group : null;
97552
+ }
96864
97553
  function AssignmentDefinitionGroup(element) {
96865
97554
  const group = {
96866
97555
  id: 'assignmentDefinition',
@@ -96888,6 +97577,15 @@
96888
97577
  }
96889
97578
  return null;
96890
97579
  }
97580
+ function updateErrorGroup$1(groups, element) {
97581
+ const errorGroup = findGroup$1(groups, 'error');
97582
+ if (!errorGroup) {
97583
+ return;
97584
+ }
97585
+ errorGroup.entries = overrideGenericEntries(errorGroup.entries, ErrorProps$1({
97586
+ element
97587
+ }));
97588
+ }
96891
97589
  function updateMessageGroup(groups, element) {
96892
97590
  const messageGroup = findGroup$1(groups, 'message');
96893
97591
  if (!messageGroup) {
@@ -97812,7 +98510,7 @@
97812
98510
  // different conditions but same bindings
97813
98511
  return oldProperties.filter(property => !findPropertyWithBinding(newTemplate, property));
97814
98512
  }
97815
- function normalizeReplacer(key, value) {
98513
+ function normalizeReplacer$1(key, value) {
97816
98514
  if (isObject(value)) {
97817
98515
  const keys = Object.keys(value).sort();
97818
98516
  return keys.reduce((obj, key) => {
@@ -97823,7 +98521,7 @@
97823
98521
  return value;
97824
98522
  }
97825
98523
  function equals(a, b) {
97826
- return JSON.stringify(a, normalizeReplacer) === JSON.stringify(b, normalizeReplacer);
98524
+ return JSON.stringify(a, normalizeReplacer$1) === JSON.stringify(b, normalizeReplacer$1);
97827
98525
  }
97828
98526
 
97829
98527
  /**
@@ -99302,11 +100000,15 @@
99302
100000
  // only keep value if old value is a valid option
99303
100001
  return newProperty.choices && newProperty.choices.some(choice => choice.value === currentValue);
99304
100002
  }
100003
+
100004
+ // keep existing old property if
100005
+ // user changed it from the original
99305
100006
  if (oldProperty) {
99306
100007
  return propertyChanged$1(element, oldProperty);
99307
- } else {
99308
- return !!getPropertyValue(element, newProperty);
99309
100008
  }
100009
+
100010
+ // keep existing property value
100011
+ return !!getPropertyValue(element, newProperty);
99310
100012
  }
99311
100013
 
99312
100014
  /**
@@ -100741,14 +101443,172 @@
100741
101443
  return groups;
100742
101444
  }
100743
101445
 
101446
+ /**
101447
+ * Restores the original order of the template properties
101448
+ * on the moddle element.
101449
+ */
101450
+ class UpdateTemplatePropertiesOrder extends CommandInterceptor {
101451
+ constructor(eventBus, elementTemplates, commandStack, bpmnFactory) {
101452
+ super(eventBus);
101453
+ this._eventBus = eventBus;
101454
+ this._elementTemplates = elementTemplates;
101455
+ this._commandStack = commandStack;
101456
+ this._bpmnFactory = bpmnFactory;
101457
+ this.postExecute(['element.updateProperties', 'element.updateModdleProperties'], this._updatePropertiesOrder, true, this);
101458
+ }
101459
+ _updatePropertiesOrder(context) {
101460
+ const {
101461
+ element
101462
+ } = context;
101463
+ const template = this._elementTemplates.get(element);
101464
+ const businessObject = element.businessObject;
101465
+ const commands = [];
101466
+ if (!template) {
101467
+ return;
101468
+ }
101469
+ const templateProperties = template.properties;
101470
+
101471
+ // zeebe:Property
101472
+ const zeebeProperties = findExtension$1(businessObject, 'zeebe:Properties');
101473
+ if (zeebeProperties) {
101474
+ this._updateZeebePropertiesOrder(zeebeProperties, templateProperties, commands, context);
101475
+ }
101476
+
101477
+ // zeebe:IoMapping
101478
+ const ioMapping = findExtension$1(businessObject, 'zeebe:IoMapping');
101479
+ if (ioMapping) {
101480
+ // zeebe:Input
101481
+ this._updateInputOrder(ioMapping, templateProperties, commands, context);
101482
+
101483
+ // zeebe:Output
101484
+ this._updateOutputOrder(ioMapping, templateProperties, commands, context);
101485
+ }
101486
+
101487
+ // zeebe:TaskHeaders
101488
+ const taskHeaders = findExtension$1(businessObject, 'zeebe:TaskHeaders');
101489
+ if (taskHeaders) {
101490
+ this._updateTaskHeadersOrder(taskHeaders, templateProperties, commands, context);
101491
+ }
101492
+ if (commands.length) {
101493
+ const commandsToExecute = commands.filter(command => command !== null);
101494
+ commandsToExecute.length && this._commandStack.execute('properties-panel.multi-command-executor', commandsToExecute);
101495
+ return;
101496
+ }
101497
+ }
101498
+ _updateZeebePropertiesOrder(zeebeProperties, templateProperties, commands, context) {
101499
+ const findIndex = (properties, propertyToFind) => properties.findIndex(prop => prop.binding.type == 'zeebe:property' && prop.binding.name === propertyToFind.get('name'));
101500
+ const properties = zeebeProperties.get('properties');
101501
+ if (properties.length < 1) return;
101502
+ let newPropertiesOrder = [...properties];
101503
+ sortProperties(newPropertiesOrder, findIndex, templateProperties);
101504
+ if (!arrayEquals(newPropertiesOrder, properties)) {
101505
+ commands.push({
101506
+ cmd: 'element.updateModdleProperties',
101507
+ context: {
101508
+ ...context,
101509
+ moddleElement: zeebeProperties,
101510
+ properties: {
101511
+ properties: newPropertiesOrder
101512
+ }
101513
+ }
101514
+ });
101515
+ }
101516
+ }
101517
+ _updateInputOrder(ioMapping, templateProperties, commands, context) {
101518
+ const findIndex = (properties, propertyToFind) => properties.findIndex(prop => prop.binding.type == 'zeebe:input' && prop.binding.name === propertyToFind.get('target'));
101519
+ const inputParameters = ioMapping.get('inputParameters');
101520
+ if (inputParameters.length < 1) return;
101521
+ let newInputOrder = [...inputParameters];
101522
+ sortProperties(newInputOrder, findIndex, templateProperties);
101523
+ if (!arrayEquals(newInputOrder, inputParameters)) {
101524
+ commands.push({
101525
+ cmd: 'element.updateModdleProperties',
101526
+ context: {
101527
+ ...context,
101528
+ moddleElement: ioMapping,
101529
+ properties: {
101530
+ inputParameters: newInputOrder
101531
+ }
101532
+ }
101533
+ });
101534
+ }
101535
+ }
101536
+ _updateOutputOrder(ioMapping, templateProperties, commands, context) {
101537
+ const findIndex = (properties, propertyToFind) => properties.findIndex(prop => prop.binding.type == 'zeebe:output' && prop.binding.source === propertyToFind.get('source'));
101538
+ const outputParameters = ioMapping.get('outputParameters');
101539
+ if (outputParameters.length < 1) return;
101540
+ let newOutputOrder = [...outputParameters];
101541
+ sortProperties(newOutputOrder, findIndex, templateProperties);
101542
+ if (!arrayEquals(newOutputOrder, outputParameters)) {
101543
+ commands.push({
101544
+ cmd: 'element.updateModdleProperties',
101545
+ context: {
101546
+ ...context,
101547
+ moddleElement: ioMapping,
101548
+ properties: {
101549
+ outputParameters: newOutputOrder
101550
+ }
101551
+ }
101552
+ });
101553
+ }
101554
+ }
101555
+ _updateTaskHeadersOrder(taskHeaders, templateProperties, commands, context) {
101556
+ const findIndex = (properties, propertyToFind) => properties.findIndex(prop => prop.binding.type == 'zeebe:taskHeader' && prop.binding.key === propertyToFind.get('key'));
101557
+ const headers = taskHeaders.get('zeebe:values');
101558
+ if (headers.length < 1) return;
101559
+ let newHeadersOrder = [...headers];
101560
+ sortProperties(newHeadersOrder, findIndex, templateProperties);
101561
+ if (!arrayEquals(newHeadersOrder, headers)) {
101562
+ commands.push({
101563
+ cmd: 'element.updateModdleProperties',
101564
+ context: {
101565
+ ...context,
101566
+ moddleElement: taskHeaders,
101567
+ properties: {
101568
+ values: newHeadersOrder
101569
+ }
101570
+ }
101571
+ });
101572
+ }
101573
+ }
101574
+ }
101575
+ UpdateTemplatePropertiesOrder.$inject = ['eventBus', 'elementTemplates', 'commandStack', 'bpmnFactory'];
101576
+
101577
+ // helpers
101578
+
101579
+ function normalizeReplacer(key, value) {
101580
+ if (isObject(value)) {
101581
+ const keys = Object.keys(value).sort();
101582
+ return keys.reduce((obj, key) => {
101583
+ obj[key] = value[key];
101584
+ return obj;
101585
+ }, {});
101586
+ }
101587
+ return value;
101588
+ }
101589
+ function objectEquals(a, b) {
101590
+ return JSON.stringify(a, normalizeReplacer) === JSON.stringify(b, normalizeReplacer);
101591
+ }
101592
+ function arrayEquals(a, b) {
101593
+ return a.every((element, idx) => objectEquals(element, b[idx]));
101594
+ }
101595
+ function sortProperties(array, findIndex, templateProperties) {
101596
+ return array.sort((a, b) => {
101597
+ const aIndex = findIndex(templateProperties, a);
101598
+ const bIndex = findIndex(templateProperties, b);
101599
+ return aIndex - bIndex;
101600
+ });
101601
+ }
101602
+
100744
101603
  var index$1 = {
100745
101604
  __depends__: [commandsModule$1, templateElementFactoryModule, translateModule, zeebePropertiesProviderModule],
100746
- __init__: ['elementTemplatesLoader', 'replaceBehavior', 'elementTemplatesPropertiesProvider', 'elementTemplatesConditionChecker'],
101605
+ __init__: ['elementTemplatesLoader', 'replaceBehavior', 'elementTemplatesPropertiesProvider', 'elementTemplatesConditionChecker', 'updateTemplatePropertiesOrder'],
100747
101606
  elementTemplates: ['type', ElementTemplates],
100748
101607
  elementTemplatesLoader: ['type', ElementTemplatesLoader],
100749
101608
  replaceBehavior: ['type', ReplaceBehavior$1],
100750
101609
  elementTemplatesPropertiesProvider: ['type', ElementTemplatesPropertiesProvider$1],
100751
- elementTemplatesConditionChecker: ['type', ElementTemplatesConditionChecker]
101610
+ elementTemplatesConditionChecker: ['type', ElementTemplatesConditionChecker],
101611
+ updateTemplatePropertiesOrder: ['type', UpdateTemplatePropertiesOrder]
100752
101612
  };
100753
101613
 
100754
101614
  /**