@pacem/pacem-charts 1.0.0-babbage → 1.0.0-bernoulli
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.
- package/dist/browser/pacem-charts.js +1 -1
- package/dist/browser/pacem-charts.min.js +2 -2
- package/dist/browser/pacem-charts.min.js.map +1 -1
- package/dist/bundle/pacem-charts.min.mjs +1 -1
- package/dist/bundle/pacem-charts.mjs +1 -1
- package/dist/esm/column.js +1 -1
- package/dist/esm/generic.js +1 -1
- package/dist/esm/index-components-charts.js +1 -1
- package/dist/esm/index-components.js +1 -1
- package/dist/esm/index-iife.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/pie.js +1 -1
- package/dist/esm/types.js +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @pacem/pacem-charts v1.0.0-
|
|
2
|
+
* @pacem/pacem-charts v1.0.0-bernoulli (https://js.pacem.it)
|
|
3
3
|
* Pacem (https://pacem.it)
|
|
4
4
|
* Licensed under Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
!function(t,e){"use strict";var i=function(t,e,i,r){var s,n=arguments.length,a=n<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,i):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,i,r);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(a=(n<3?s(a):n>3?s(e,i,a):s(e,i))||a);return n>3&&a&&Object.defineProperty(e,i,a),a};const r=["keydown","keyup","click","dblclick","mouseover","mouseout","mouseenter","mouseleave","mousedown","mouseup","mousemove","contextmenu"],s=864e5,n="pacem:chart-series:dataitem",a="pacem:chart-series:series";function o(t,e,i){i??=Math.min(l(t,e),10);const r=(e-t)/i,s=Math.pow(10,Math.floor(Math.log10(r))),n=[1,2,5,10].map(t=>t*s).filter(t=>t>=r).reduce((t,e)=>Math.min(t,e),Number.POSITIVE_INFINITY);return{min:Math.floor(t/n)*n,max:Math.ceil(e/n)*n,round:n}}function l(t,e){const i=e-t;if(!(i>0))return 2;const r=Math.floor(Math.log10(i)),s=Math.pow(10,-r);if(0!=r)return l(t*s,e*s);const n=t=>{const e=Math.floor(10*Math.abs(t));return(e+10-e%10).roundoff()},a=n(i);let o=10;0!==t&&(o=n(Math.abs(e)));const c=h(o,a);return 1===c?a:Math.max(c,10-c)}function h(t,e){return t<=0?e:h(e%t,t)}class c extends e.CustomUIEvent{constructor(t,e,i){super(t,e,i)}}let d=class extends e.Components.PacemItemElement{get values(){return this.datasource}};i([e.Watch({emit:!0,converter:e.PropertyConverters.Json})],d.prototype,"datasource",void 0),i([e.Watch({emit:!0,converter:e.PropertyConverters.String})],d.prototype,"label",void 0),i([e.Watch({emit:!0,converter:e.PropertyConverters.String})],d.prototype,"color",void 0),i([e.Watch({emit:!0,converter:e.PropertyConverters.Boolean})],d.prototype,"datapoints",void 0),i([e.Watch()],d.prototype,"_uiElements",void 0),d=i([e.CustomElement({tagName:e.P+"-chart-series"})],d);const u="http://www.w3.org/2000/svg";class m extends e.Components.PacemItemsContainerElement{constructor(){super(),this._itemPropertyChangedCallback=t=>{const e=t.detail.propertyName;"datasource"!==e&&"label"!==e&&"datapoints"!==e&&"cssClass"!==e&&"color"!==e||this.draw()},this._series=[],this._resizeHandler=t=>{this._size=t.detail,this.draw()},this._broadcastHandler=t=>{const i=t.currentTarget,r=e.CustomElementUtils.getAttachedPropertyValue(i,n);if(e.Utils.isNull(r))return;const s=this.getAnchorPoint(i),o=new c("item"+t.type,{detail:{dataItem:r,anchorPoint:s}},t),l=e.CustomElementUtils.getAttachedPropertyValue(i,a);l instanceof d&&l.dispatchEvent(o),this.dispatchEvent(o)},this._key=e.Utils.uniqueCode()}validate(t){return t instanceof d}register(t){return!!super.register(t)&&(t.addEventListener(e.PropertyChangeEventName,this._itemPropertyChangedCallback,!1),!0)}unregister(t){return!!super.unregister(t)&&(t.removeEventListener(e.PropertyChangeEventName,this._itemPropertyChangedCallback,!1),!0)}propertyChangedCallback(t,i,r,s){if(super.propertyChangedCallback(t,i,r,s),"target"===t){this._div!=i&&this._div&&this._div.remove(),this._div=null,this._body=null;const t=i;t&&(t.classList.remove(e.PCSS+"-chart-area"),t.innerHTML=""),this._ensureResizer(),this.draw()}else if(!s)switch(t){case"items":this._databindAndDrawDebounced();break;case"datasource":this._databind();case"yAxisDensity":case"xAxisDensity":case"xAxisType":case"yAxisMax":case"xAxisPosition":case"yAxisFormat":this.draw()}}_databindAndDrawDebounced(){cancelAnimationFrame(this._handle),this._handle=requestAnimationFrame(()=>{this._databind(),this.draw()})}_databind(){this._datasource=e.Utils.isNullOrEmpty(this.datasource)?this.items:this.datasource}disconnectedCallback(){this._div&&this._div.remove();const t=this._resizer;e.Utils.isNull(t)||(t.removeEventListener(e.Components.ResizeEventName,this._resizeHandler,!1),t.remove(),this._resizer=null),super.disconnectedCallback()}viewActivatedCallback(){super.viewActivatedCallback(),this._ensureResizer(),this._databind(),this.draw()}_ensureResizer(t=this.target||this._div){if(e.Utils.isNull(this._resizer)){const t=e.CustomElementUtils.findAncestorShell(this);(this._resizer=t.appendChild(new e.Components.PacemResizeElement)).addEventListener(e.Components.ResizeEventName,this._resizeHandler,!1)}this._resizer.target=t}get chartSize(){return this._size}get chartSeries(){return this._series}get chartBody(){return this._body}get chartGrid(){return this._grid}get chartMask(){return this._mask}get chartKey(){return this._key}get chartContainer(){return this._div}assignUiBehaviors(t,i,s,o){const l=!e.Utils.isNull(e.CustomElementUtils.getAttachedPropertyValue(t,n)),h=e.Utils.extend({series:i.label,color:o||i.color},s);e.CustomElementUtils.setAttachedPropertyValue(t,n,h),e.CustomElementUtils.setAttachedPropertyValue(t,a,i),l||r.forEach(e=>{t.addEventListener(e,this._broadcastHandler)})}disposeUiBehaviors(t){e.CustomElementUtils.deleteAttachedPropertyValue(t,n),e.CustomElementUtils.deleteAttachedPropertyValue(t,a),r.forEach(e=>{t.removeEventListener(e,this._broadcastHandler)})}ensureChartContainer(){if(e.Utils.isNull(this._div)){let t=this._div=this.target||document.createElement("div");t.classList.add(e.PCSS+"-chart-area"),t!=this.target&&this.parentElement.insertBefore(t,this)}return this._div}ensureChartBody(t,i,r){if(e.Utils.isNull(this._body)){let i=this._body=document.createElementNS(u,"svg");i.setAttribute("pacem",""),i.setAttribute("class",e.PCSS+"-"+t+"-chart"),i.setAttribute("preserveAspectRatio","xMinYMax slice");const r=this._grid=document.createElementNS(u,"svg");r.setAttribute("pacem",""),r.setAttribute("class","chart-grid");let s=document.createElementNS(u,"defs"),n=this._mask=document.createElementNS(u,"mask"),a=document.createElementNS(u,"rect");a.setAttribute("x","0"),a.setAttribute("y","0"),a.setAttribute("width","100%"),a.setAttribute("height","100%");let o=document.createElementNS(u,"rect");o.setAttribute("y","0"),o.setAttribute("width","100%"),o.setAttribute("fill","#fff"),n.id="gnrc_mask_"+this._key,n.appendChild(a),n.appendChild(o),s.appendChild(n),i.appendChild(s),i.appendChild(r),this._div.appendChild(i)}return this._body}chartDataItemToPoint(t,i){switch(this.xAxisType||"string"){case"number":return{x:parseFloat(t.label),y:t.value};case"date":return{x:e.Utils.parseDate(t.label).valueOf(),y:t.value};case"string":return{x:i.findIndex(e=>e.label==t.label),y:t.value};default:throw"Not supported."}}getVirtualGrid(t,i,r,n,a,l=this.xAxisType,h,c){const d=o(n,a,h),u=d.round;var m=[];for(let t=d.min;t<=d.max;t+=u)m.push(t.roundoff());let p=e.Utils.lang(this),v=null;const g=this.xAxisFormat;if(!e.Utils.isNullOrEmpty(g))switch(l){case"number":v=t=>Intl.NumberFormat(p,g).format(t);break;case"date":v=t=>Intl.DateTimeFormat(p,g).format(e.Utils.parseDate(t))}const y=function(t,i,r,n,a,o=10){const l="number"===i||"date"===i?n-r:Math.max(1,t.length-1);for(var h=[],c=1,d=o-1;d>1;d--)if(l%d===0){c=l/d;break}1===c&&l>o&&(c=l);const u="function"==typeof a?a:c>=s?t=>t.toLocaleDateString(a):t=>t.toLocaleTimeString(a),m="function"==typeof a?a:c<s?t=>t.toLocaleString(a):u,p="function"==typeof a?a:t=>t.toLocaleString(a);for(var v=0;v<=l;v+=c){let s;switch(i){case"string":if(v>=t.length)continue;s=t[v].label;break;case"number":s=p(r+v);break;case"date":s=(0==v?m:u)(e.Utils.parseDate(r+v));break;default:throw"Not supported."}h.push(s)}return h}(t,l,i,r,v??p,c);return{x:y,y:m}}wipeOut(t=this._series,e=0){for(var i=t.length-1;i>=e;i--)t[i].remove();t.splice(e)}buildLinearGradient(t,i=!1){const r=document.createElementNS(u,"linearGradient");r.id=this.chartKey+"_grad"+t+(i?"_inverted":""),i&&e.Utils.addClass(r,"bottom-up"),r.setAttribute("x1","0%"),r.setAttribute("x2","0%"),r.setAttribute("y1","0%"),r.setAttribute("y2","100%"),r.setAttribute("spreadMethod","pad");const s=document.createElementNS(u,"stop");s.setAttribute("offset","0%");const n=document.createElementNS(u,"stop");return n.setAttribute("offset","100%"),r.appendChild(s),r.appendChild(n),r}setGradientColor(t,e){for(let i=0;i<t.children.length;i++){const r=t.children.item(i);r instanceof SVGStopElement&&(r.style.stopColor=e)}}estimateYAxisLabelWidth(t){const e=this.formatYAxisLabel(t);return this.estimateLabelWidth(e)}estimateLabelWidth(t){const i=this._grid;if(e.Utils.isNull(i))throw new Error("Unable to estimate label without an underlying grid available.");const r=document.createElementNS(u,"text");r.textContent=t,i.appendChild(r);const s=e.Utils.offset(r);return r.remove(),s.width}formatYAxisLabel(t){const i=this.yAxisFormat;return e.Utils.isNullOrEmpty(i)?t.toString():Intl.NumberFormat(e.Utils.lang(this),i).format(t)}estimateXAxisLabelWidth(t){const e=this.formatXAxisLabel(t);return this.estimateLabelWidth(e)}formatXAxisLabel(t){const i=this.xAxisFormat,r=e.Utils.lang(this);switch(this.xAxisType){case"date":const s=e.Utils.Dates.parse(t);return e.Utils.isNullOrEmpty(i)?s.toLocaleString(r):Intl.DateTimeFormat(r,i).format(s);case"number":const n=t;return e.Utils.isNullOrEmpty(i)?n.toLocaleString(r):Intl.NumberFormat(r,i).format(n);default:return t}}draw(){this.drawSeries(this._datasource)}getAnchorPoint(t){const i=e.Utils.offset(t);return{x:i.left+.5*i.width,y:i.top+.5*i.height}}}i([e.Watch({converter:e.PropertyConverters.Element})],m.prototype,"target",void 0),i([e.Watch({emit:!1,converter:e.PropertyConverters.String})],m.prototype,"xAxisType",void 0),i([e.Watch({emit:!1,converter:e.PropertyConverters.String})],m.prototype,"xAxisPosition",void 0),i([e.Watch({emit:!1,converter:e.PropertyConverters.Json})],m.prototype,"datasource",void 0),i([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],m.prototype,"yAxisDensity",void 0),i([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],m.prototype,"xAxisDensity",void 0),i([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],m.prototype,"yAxisMin",void 0),i([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],m.prototype,"yAxisMax",void 0),i([e.Watch({emit:!1,converter:e.PropertyConverters.Json})],m.prototype,"yAxisFormat",void 0),i([e.Watch({emit:!1,converter:e.PropertyConverters.Json})],m.prototype,"xAxisFormat",void 0),i([e.Throttle(!0)],m.prototype,"draw",null);var p=function(t,e,i,r){var s,n=arguments.length,a=n<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,i):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,i,r);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(a=(n<3?s(a):n>3?s(e,i,a):s(e,i))||a);return n>3&&a&&Object.defineProperty(e,i,a),a};function v(t,i,r){let s=t,n=t;const a=e.Utils.isNull(i),o=e.Utils.isNull(r);if(!a||!o){const e=3;let l,h;a||(l=(t.y-i.y)/(t.x-i.x)),o||(h=(r.y-t.y)/(r.x-t.x));const c=((h||l||0)+(l||h||0))/2,d=a?0:(t.x-i.x)/e,u=o?0:(r.x-t.x)/e;s={x:t.x-d,y:t.y-d*c},n={x:t.x+u,y:t.y+u*c}}return{c0:s,c1:n}}const g=e.CustomElementUtils.getAttachedPropertyValue,y=e.CustomElementUtils.setAttachedPropertyValue;e.CustomElementUtils.deleteAttachedPropertyValue;const f="pacem:chart-series:area",b="http://www.w3.org/2000/svg";let x=class extends m{constructor(){super(...arguments),this.#t=!1,this._enterHandler=t=>{this.#t=!0},this._leaveHandler=t=>{this.#t=!1},this._moveHandler=t=>{this.#t},this._chartFillSeries=[]}_getVirtualGrid(t,e,i,r,s,n=this.xAxisType,a,o){return super.getVirtualGrid(t,e,i,r,s,n,a,o)}_wipe(t=this.chartSeries,e=0){super.wipeOut(t,e)}viewActivatedCallback(){super.viewActivatedCallback(),this._setupBehavior()}disconnectedCallback(){this._dismantleBehavior(),super.disconnectedCallback()}propertyChangedCallback(t,e,i,r){switch(super.propertyChangedCallback(t,e,i,r),t){case"type":case"aspectRatio":this.draw()}}_setupBehavior(){this.addEventListener("mouseenter",this._enterHandler,!1),this.addEventListener("mouseleave",this._enterHandler,!1),this.addEventListener("mousemove",this._moveHandler,!1)}_dismantleBehavior(){this.removeEventListener("mouseenter",this._enterHandler,!1),this.removeEventListener("mouseleave",this._leaveHandler,!1),this.removeEventListener("mousemove",this._moveHandler,!1)}#t;_buildLinearGradient(t){return super.buildLinearGradient(t)}_setGradientColor(t,e){super.setGradientColor(t,e)}drawSeries(t){if(!this.isReady||e.Utils.isNull(this.chartSize))return;this.ensureChartContainer();const i=this.type||"line",r=24;var s=this.chartSize;if(s.height<=r||s.width<=r)return;if(e.Utils.isNullOrEmpty(t)||t.every(t=>e.Utils.isNullOrEmpty(t.values)))return void this._wipe();const n=this.ensureChartBody("line",s.width,s.height);this.log(e.Logging.LogLevel.Debug,`Drawing ${i} chart.`);const a=this.xAxisType||"string";let o=this.yAxisMin??Number.NaN,l=this.yAxisMax??Number.NaN,h=Number.NaN,c=Number.NaN,d=1;for(let i of t){let t=i.values;if(t&&t.length){let i=0;for(let r of t){let s=this.chartDataItemToPoint(r,t);e.Utils.isNull(this.yAxisMin)&&(o=isNaN(o)?s.y:Math.min(o,s.y)),e.Utils.isNull(this.yAxisMax)&&(l=isNaN(l)?s.y:Math.max(l,s.y)),0===i?h=isNaN(h)?s.x:Math.min(h,s.x):i===t.length-1&&(c=isNaN(c)?s.x:Math.max(c,s.x)),i++}}}const u=t.find(t=>!e.Utils.isNullOrEmpty(t.values)),m=this._getVirtualGrid(u.values,h,c,o,l,a,this.yAxisDensity,this.xAxisDensity),p=m.y[m.y.length-1],x=m.y[0];if(p===x)return;const C=m.y.reduce((t,e)=>Math.max(t,this.estimateYAxisLabelWidth(e)+12),r),A=.5*m.x.reduce((t,e)=>Math.max(t,this.estimateXAxisLabelWidth(e)),r),_=Math.max(A,C),w=A,E=s.width-_-w,N=s.height-48,S=N*(1-(p-x-(l-o))/(p-x)),P=N*(p-l)/(p-x);("number"!==a||"monometric"!==this.aspectRatio&&"logaritmic"!==this.aspectRatio)&&(d=E/S,n.setAttribute("height",s.height.toString()),n.setAttribute("width",s.width.toString())),n.setAttribute("viewBox",`0 0 ${s.width} ${s.height}`);let M=0;const U=100*d/(c-h),k=100/(l-o),$=2400/S,L=(t,e)=>{let i=this.chartDataItemToPoint(t,e);return i.y*=k,i.x=(i.x-h)*U,i},O=this.chartSeries,W=this._chartFillSeries,D=this.chartGrid,B="spline"===i||"splinearea"===i;for(let r of t){let t,s,a;if(O.length>M)t=O[M],s=W[M],a=s.firstElementChild.firstElementChild;else{t=document.createElementNS(b,"svg"),t.setAttribute("pacem",""),n.appendChild(t),s=document.createElementNS(b,"svg"),s.setAttribute("pacem",""),n.insertBefore(s,n.children.item(M+2));const e=document.createElementNS(b,"defs");e.appendChild(a=this._buildLinearGradient(M)),s.appendChild(e),s.appendChild(document.createElementNS(b,"path")),W.push(s),t.appendChild(document.createElementNS(b,"path")),O.push(t)}let l="chart-series";const h="area"===i||"splinearea"===i;e.Utils.isNullOrEmpty(r.className)||(l+=" "+r.className),[t,s].forEach(t=>{t.setAttribute("class",l),t.setAttribute("x",_.toString()),t.setAttribute("y",P.toString()),t.setAttribute("width",E.toString()),t.setAttribute("height",(S+48).toString())}),e.Utils.addClass(s,e.PCSS+"-inert");let c=s.children.item(1),d=t.firstElementChild;d.style.stroke=r.color,c.style.stroke=d.style.fill="none",this._setGradientColor(a,r.color),c.style.fill=`url(#${a.id})`,c.style.display=h?"":"none";let u="",m=r.values;if(m&&m.length){const i=(e,i,r,s,n)=>{const a=i+1;let o;t.children.length>a?o=t.children.item(a):(o=document.createElementNS(b,"line"),o.setAttribute("class","circle"),t.appendChild(o));const l=e.x.toString(),h=(-e.y).toString();o.setAttribute("x1",l),o.setAttribute("y1",h),o.setAttribute("x2",l),o.setAttribute("y2",h),o.style.stroke=n,this.assignUiBehaviors(o,r,s,n)},s=()=>{const e=r.datapoints?m.length+1:1;for(let r=t.children.length-1;r>=e;r--){var i=t.children.item(r);this.disposeUiBehaviors(i),i.remove()}};if(B){let t,s,n;for(let a=0;a<m.length;a++){const o=m[a];if(isNaN(o.value))continue;let l;s||(s=L(o,m)),B&&a<m.length-1&&(l=L(m[a+1],m));let h=g(r,f,0);h+=o.value,y(r,f,h);var H=v(s,t,l);u+=e.Utils.isNullOrEmpty(u)?`M${s.x},${-s.y} `:`C${n.x},${-n.y} ${H.c0.x},${-H.c0.y} ${s.x},${-s.y} `,r.datapoints&&i(s,a,r,o,r.color),t=s,s=l,n=H.c1}}else{let t=0;for(let s of m){if(isNaN(s.value))continue;const n=L(s,m);let a=g(r,f,0);a+=s.value,y(r,f,a),u+=e.Utils.isNullOrEmpty(u)?`M${n.x},${-n.y} `:`L${n.x},${-n.y} `,r.datapoints&&i(n,t,r,s,r.color),t++}}s()}d.setAttribute("d",u),c.setAttribute("d",u+`V${-o*k} H0 Z`),M++}this._wipe(W,M),this._wipe(O,M);const R=`0 ${-(l*k+$)} ${100*d} ${100+2*$}`;for(var T of O.concat(W))T.setAttribute("viewBox",R);let z,I=this.chartMask.children.item(1);if(I.setAttribute("x",(0).toString()),I.setAttribute("height",(s.height-r).toString()),D.setAttribute("viewBox",`0 0 ${s.width} ${s.height}`),m.x.length<=1||m.y.length<=1){for(let t=D.children.length-1;t>=0;t--)D.children.item(t).remove();return}D.children.length>0?z=D.children.item(0):(z=document.createElementNS(b,"path"),D.appendChild(z));let F=0,V=(t,e,i,r)=>{const s=t+1;let n;return D.children.length<=s?(n=document.createElementNS(b,"text"),D.appendChild(n)):n=D.children.item(s),n.textContent=r,n.setAttribute("x",e.toString()),n.setAttribute("y",i.toString()),n},G=`M${_},24 v${N}`,j=0;const Y=E/(m.x.length-1),q=N/(m.y.length-1);if("none"!==this.xAxisPosition)for(var J of m.x){const t=_+j*Y;if("top"===this.xAxisPosition){G+=` M${t},24 v-6`;let e=V(F++,t,0,J);e.setAttribute("text-anchor","middle"),e.setAttribute("alignment-baseline","hanging")}else{let e=N+r;G+=` M${t},${e} v6`,V(F++,t,e+r,J).setAttribute("text-anchor","middle")}j++}for(var X of(j=0,m.y)){const t=N+r-j*q,e=_-6;G+=` M${e},${t} H${E+_}`,V(F++,e-6,t,this.formatYAxisLabel(X)).setAttribute("text-anchor","end"),j++}z.setAttribute("d",G);for(let t=D.children.length-1;t>F;t--)D.children.item(t).remove()}};p([e.Watch({emit:!1,converter:e.PropertyConverters.String})],x.prototype,"type",void 0),p([e.Watch({converter:e.PropertyConverters.String})],x.prototype,"aspectRatio",void 0),x=p([e.CustomElement({tagName:e.P+"-chart"})],x);var C=function(t,e,i,r){var s,n=arguments.length,a=n<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,i):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,i,r);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(a=(n<3?s(a):n>3?s(e,i,a):s(e,i))||a);return n>3&&a&&Object.defineProperty(e,i,a),a};const A="http://www.w3.org/2000/svg";let _=class extends m{constructor(){super(...arguments),this.groupWidth=0}propertyChangedCallback(t,e,i,r){super.propertyChangedCallback(t,e,i,r),"type"!==t&&"groupWidth"!==t||this.draw()}_safen(t=this.groupWidth){return Math.min(1,Math.max(t||.75,0))}drawSeries(t){if(!this.isReady||e.Utils.isNull(this.chartSize))return;this.ensureChartContainer();const i=this.type||"cluster",r=24;var s=this.chartSize;if(s.height<=r||s.width<=r)return;if(e.Utils.isNullOrEmpty(t)||t.every(t=>e.Utils.isNullOrEmpty(t.values)))return void this.wipeOut();const n=this.ensureChartBody("column",s.width,s.height);this.log(e.Logging.LogLevel.Debug,`Drawing ${i} chart.`);const a=this.xAxisType||"string";let o=this.yAxisMin??0,l=this.yAxisMax??0,h=0,c=0,d=0,u=1;const m={negative:[],positive:[]};for(let i of t){let t=i.values;if(!e.Utils.isNullOrEmpty(t)){let i=0;for(let r of t){m.positive[i]=m.positive[i]||0,m.negative[i]=m.negative[i]||0;let s=this.chartDataItemToPoint(r,t);e.Utils.isNull(this.yAxisMin)&&(o=Math.min(o,s.y)),e.Utils.isNull(this.yAxisMax)&&(l=Math.max(l,s.y)),h=Math.min(h,s.x),c=Math.max(c,s.x),s.y>0?m.positive[i]+=s.y:s.y<0&&(m.negative[i]+=s.y),i++}d=Math.max(d,t.length)}}const p="stack"===i;p&&(e.Utils.isNull(this.yAxisMin)&&(o=Math.min.apply(null,m.negative)),e.Utils.isNull(this.yAxisMax)&&(l=Math.max.apply(null,m.positive))),0===c&&c===h&&(c=1);const v=(c-h)/d,g=.5*v,y=v*this._safen(this.groupWidth),f=.5*y,b=t.find(t=>!e.Utils.isNullOrEmpty(t.values)),x=this.getVirtualGrid(b.values,h-g,c+g,o,l,a,this.yAxisDensity,this.xAxisDensity),C=x.y[x.y.length-1],_=x.y[0];if(C===_)return;const w=x.y.reduce((t,e)=>Math.max(t,this.estimateYAxisLabelWidth(e)+12),r),E=s.width-w-r,N=s.height-48,S=N*(1-(C-_-(l-o))/(C-_)),P=N*(C-l)/(C-_);u=E/S,n.setAttribute("height",s.height.toString()),n.setAttribute("width",s.width.toString()),n.setAttribute("viewBox",`0 0 ${s.width} ${s.height}`);let M=0;const U=100*u/(c-h),k=100/(l-o),$=2400/S,L=this.chartSeries,O=this.chartGrid,W=(g-h)*U,D=(t,e)=>{const i=this.chartDataItemToPoint(t,e);return{x:W+2*i.x*W,y:i.y*k}};var B=new Array(d);for(let i of t){let r,s,n,a;if(L.length>M)r=L[M],s=r.firstElementChild.firstElementChild,n=r.firstElementChild.lastElementChild,a=r.lastElementChild;else{r=document.createElementNS(A,"svg"),r.setAttribute("pacem",""),O.insertAdjacentElement("afterend",r);const t=document.createElementNS(A,"defs");t.appendChild(s=this.buildLinearGradient(M)),t.appendChild(n=this.buildLinearGradient(M,!0)),r.appendChild(t),r.appendChild(a=document.createElementNS(A,"g")),L.push(r)}var H="chart-series series-fill";e.Utils.isNullOrEmpty(i.className)||(H+=" "+i.className),r.setAttribute("class",H),r.setAttribute("x",w.toString()),r.setAttribute("y",P.toString()),r.setAttribute("width",E.toString()),r.setAttribute("height",(S+48).toString());const o=i.values,l=t=>{for(;t>=a.children.length;)a.appendChild(document.createElementNS(A,"rect"));const e=a.children.item(t);e.style.stroke=i.color;const r=o[t].value<0?n:s;return this.setGradientColor(r,i.color),e.style.fill=`url(#${r.id})`,e},h=10,c=(t,e,i,r=e)=>{const s=-Math.max(e.y,i.y),n=Math.abs(i.y-e.y),a=()=>{t.setAttribute("y",s.toFixed(h)),t.setAttribute("height",n.toFixed(h))};t.hasAttribute("y")?a():(t.setAttribute("y","-"+r.y.toFixed(h)),t.setAttribute("height","0"),requestAnimationFrame(a))};if(!e.Utils.isNullOrEmpty(o)){const r=D({value:0,label:o[0].label},o);if(p){const t=f*U,s=(y*U).toFixed(h);for(let n=0;n<o.length;n++){const a=o[n];e.Utils.isNullOrEmpty(B[n])&&(B[n]={positive:0,negative:0});const d=B[n];let u=d.positive,m=d.negative;const p=a.value<0,v=p?m:u+a.value,g=p?m+a.value:u,y=D({label:a.label,value:v},o),f=D({label:a.label,value:g},o),b=y.x-t,x=l(n);this.assignUiBehaviors(x,i,a),x.setAttribute("x",b.toFixed(h)),x.setAttribute("width",s),c(x,f,y,r),p?d.negative=g:d.positive=v}}else{const e=f*U,s=2*e/t.length,n=s.toFixed(h);for(let t=0;t<o.length;t++){const a=o[t],d=D(a,o),u=d.x-e+s*M,m=l(t);this.assignUiBehaviors(m,i,a),m.setAttribute("x",u.toFixed(h)),m.setAttribute("width",n),c(m,r,d)}}}for(let t=a.children.length-1;t>=o?.length;t--){const e=a.children.item(t);this.disposeUiBehaviors(e),e.remove()}M++}this.wipeOut(L,M);const R=`0 ${-(l*k+$)} ${100*u} ${100+2*$}`;for(var T of L)T.setAttribute("viewBox",R);let z,I=this.chartMask.children.item(1);if(I.setAttribute("x",(0).toString()),I.setAttribute("height",(s.height-r).toString()),O.setAttribute("viewBox",`0 0 ${s.width} ${s.height}`),x.x.length<1||x.y.length<=1){for(let t=O.children.length-1;t>=0;t--)O.children.item(t).remove();return}O.children.length>0?z=O.children.item(0):(z=document.createElementNS(A,"path"),O.appendChild(z));let F=0,V=(t,e,i,r)=>{const s=t+1;let n;return O.children.length<=s?(n=document.createElementNS(A,"text"),O.appendChild(n)):n=O.children.item(s),n.textContent=r,n.setAttribute("x",e.toString()),n.setAttribute("y",i.toString()),n},G=`M${w},24 v${N}`,j=0;const Y=E/x.x.length,q=N/(x.y.length-1);if("none"!==this.xAxisPosition){const t=.5*Y+w;for(var J of x.x){let e=t+j*Y;if("top"===this.xAxisPosition){G+=` M${e},24 v-6`;let t=V(F++,e,0,J);t.setAttribute("text-anchor","middle"),t.setAttribute("alignment-baseline","hanging")}else{let t=N+r;G+=` M${e},${t} v6`,V(F++,e,t+r,J).setAttribute("text-anchor","middle")}j++}}for(var X of(j=0,x.y)){const t=N+r-j*q,e=w-6;G+=` M${e},${t} H${E+w}`,V(F++,e-6,t,this.formatYAxisLabel(X)).setAttribute("text-anchor","end"),j++}z.setAttribute("d",G);for(let t=O.children.length-1;t>F;t--)O.children.item(t).remove()}};C([e.Watch({converter:e.PropertyConverters.String})],_.prototype,"type",void 0),C([e.Watch({converter:e.PropertyConverters.Number})],_.prototype,"groupWidth",void 0),_=C([e.CustomElement({tagName:e.P+"-column-chart"})],_);var w=function(t,e,i,r){var s,n=arguments.length,a=n<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,i):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,i,r);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(a=(n<3?s(a):n>3?s(e,i,a):s(e,i))||a);return n>3&&a&&Object.defineProperty(e,i,a),a};let E=class extends e.Components.PacemItemElement{constructor(){super(...arguments),this._broadcastHandler=t=>{this.emit(t)}}findContainer(){return e.CustomElementUtils.findAncestorOfType(this,P)}get chart(){return this.container}getCenterOfMass(){const t=this.chart&&this.chart.area;if(e.Utils.isNull(t))return null;const i=e.Utils.offset(t),r=i.width/2+i.left,s=i.top+i.height/2,n=.5*Math.min(i.width,i.height),a=this.normalizedPolarCoords,o=S-a.angle;return{y:s-n*a.radius*Math.sin(o),x:r+n*a.radius*Math.cos(o)}}propertyChangedCallback(t,e,i,r){super.propertyChangedCallback(t,e,i,r),!r&&this.chart&&"normalizedPolarCoords"!=t&&this.chart.draw()}_assignUi(t){const e=this._ui=t;r.forEach(t=>{e.addEventListener(t,this._broadcastHandler)})}_disposeUi(){e.Utils.isNull(this._ui)||r.forEach(t=>{this._ui.removeEventListener(t,this._broadcastHandler)})}};w([e.Watch({converter:e.PropertyConverters.Number})],E.prototype,"value",void 0),w([e.Watch({converter:e.PropertyConverters.String})],E.prototype,"label",void 0),w([e.Watch({converter:e.PropertyConverters.String})],E.prototype,"color",void 0),w([e.Watch({converter:e.PropertyConverters.Json})],E.prototype,"normalizedPolarCoords",void 0),E=w([e.CustomElement({tagName:e.P+"-pie-slice"})],E);const N=2*Math.PI,S=.5*Math.PI;let P=class extends e.Components.PacemItemsContainerElement{constructor(){super(),this.cutout=0,this.slicePadding=0,this._slices=new WeakMap,this._key=e.Utils.uniqueCode()}validate(t){return t instanceof E}viewActivatedCallback(){super.viewActivatedCallback(),this.draw()}propertyChangedCallback(t,i,r,s){if(super.propertyChangedCallback(t,i,r,s),"target"===t){this._g=null,this._div&&this._div.remove();const t=i;t&&(t.classList.remove(e.PCSS+"-chart-area"),t.innerHTML=""),this.draw()}else s||"cutout"!==t&&"items"!==t&&"slicePadding"!==t||this.draw()}get area(){return this._svg}disconnectedCallback(){this._div&&this._div.remove(),super.disconnectedCallback()}_ensureArea(){if(e.Utils.isNull(this._g)){let t=this.target||(this._div=document.createElement("div"));t.classList.add(e.PCSS+"-chart-area");let i=this._svg=document.createElementNS("http://www.w3.org/2000/svg","svg");i.setAttribute("pacem",""),i.setAttribute("preserveAspectRatio","xMidYMid meet"),i.setAttribute("viewBox","0 0 100 100"),i.classList.add(e.PCSS+"-pie-chart");let r=document.createElementNS("http://www.w3.org/2000/svg","defs"),s=this._g=document.createElementNS("http://www.w3.org/2000/svg","g");i.appendChild(r),i.appendChild(s),t.appendChild(i),this._div&&this.parentElement.insertBefore(t,this)}if(this.maskBasedRendering){if(e.Utils.isNull(this._mask)){let t=document.createElementNS("http://www.w3.org/2000/svg","mask");t.id="pie_mask_"+this._key;let e=document.createElementNS("http://www.w3.org/2000/svg","rect");e.setAttribute("x","0"),e.setAttribute("y","0"),e.setAttribute("width","100"),e.setAttribute("height","100"),e.setAttribute("fill","#fff");let i=this._mask=document.createElementNS("http://www.w3.org/2000/svg","circle");i.setAttribute("cx","50"),i.setAttribute("cy","50");const r=this._svg.firstElementChild;t.appendChild(e),t.appendChild(i),r.appendChild(t),this._g.setAttribute("mask",`url(#${t.id})`)}const t=50*this._safeCutout;this._mask.setAttribute("r",`${t}`)}else e.Utils.isNull(this._mask)||(this._svg.firstElementChild.innerHTML="",this._mask=null,this._g.removeAttribute("mask"));const t=this._safeSlicePaddingPixels;if(t>0){const i=(t/this._svg.getCTM().a).roundoff(),r=this._sliceMaskId,s=this._svg.firstElementChild;let n=s.querySelector(`#${r}`);e.Utils.isNull(n)?(n=document.createElementNS("http://www.w3.org/2000/svg","mask"),n.id=r,s.appendChild(n)):n.innerHTML="";const a=document.createElementNS("http://www.w3.org/2000/svg","path"),o=`M${50+i},0 H100 V100 H0 V0 H50 V50 h${i} Z`;a.setAttribute("d",o),a.setAttribute("fill","#fff"),n.appendChild(a)}return this._g}get _sliceMaskId(){return"pieslice_mask_"+this._key}get _safeCutout(){return Math.min(1,Math.max(0,this.cutout))||0}get _safeSlicePaddingPixels(){return Math.max(0,this.slicePadding??0)}_drawSlice(t,e,i,r){const s=e.value>.5*i?1:0,n=N*e.value/i,a=360*r/i,o=e.value>=i?49.9:50*(1+Math.sin(n)),l=50*(1-Math.cos(n)),h=this._safeCutout,c=50*h;t.style.fill=e.color,t.style.transform=`rotate(${a}deg)`,t.style.transformOrigin="50% 50%";const d=this.maskBasedRendering?`M50,50 V0 A50,50 0 ${s} 1 ${o} ${l} L50,50 Z`:`M50,0 A50,50 0 ${s} 1 ${o} ${l} l${(50-o)*(1-h)},${(50-l)*(1-h)} A${c},${c} 0 ${s} 0 50,${50-c} Z`;t.setAttribute("d",d),e.normalizedPolarCoords={radius:h+Math.SQRT1_2*(1-h),angle:Math.PI*a/180+n/2}}_isSliceOk(t){return!t.disabled}_padSlice(t){this._safeSlicePaddingPixels>0?t.setAttribute("mask",`url(#${this._sliceMaskId})`):t.removeAttribute("mask")}draw(){const t=this._ensureArea(),i=t.children.length,r=this._svg.parentElement;let s=0,n=0,a=0;if(e.Utils.isNullOrEmpty(this.items))t.innerHTML="",e.Utils.removeClass(r,"chart-has-data");else{e.Utils.addClass(r,"chart-has-data");for(let t of this.items)this._isSliceOk(t)&&(n+=t.value);if(n<=0)t.innerHTML="",e.Utils.removeClass(r,"chart-has-data");else for(let r of this.items){if(!this._isSliceOk(r))continue;let o;if(s>=i){const i=document.createElementNS("http://www.w3.org/2000/svg","g");i.setAttribute("class","chart-series "+e.PCSS+"-pie-slice"+(e.Utils.isNullOrEmpty(r.className)?"":" "+r.className)),o=document.createElementNS("http://www.w3.org/2000/svg","path"),i.appendChild(o),t.appendChild(i),r._assignUi(i),this._slices.set(i,r)}else o=t.children.item(s).firstElementChild;r.value>0?(this._drawSlice(o,r,n,a),this._padSlice(o),a+=r.value,o.removeAttribute("display")):o.setAttribute("display","none"),s++}}for(;s<t.children.length;){const e=this._slices,i=t.children.item(s);e.has(i)&&(e.get(i)._disposeUi(),e.delete(i)),t.removeChild(i)}}};w([e.Watch({converter:e.PropertyConverters.Number})],P.prototype,"cutout",void 0),w([e.Watch({converter:e.PropertyConverters.Element})],P.prototype,"target",void 0),w([e.Watch({converter:e.PropertyConverters.Boolean})],P.prototype,"maskBasedRendering",void 0),w([e.Watch({converter:e.PropertyConverters.Number})],P.prototype,"slicePadding",void 0),w([e.Debounce(!0)],P.prototype,"draw",null),P=w([e.CustomElement({tagName:e.P+"-pie-chart"})],P);var M=Object.freeze({__proto__:null,ChartEvent:c,MANAGED_EVENTS:r,get PacemChartElement(){return x},get PacemChartSeriesElement(){return d},get PacemColumnChartElement(){return _},get PacemPieChartElement(){return P},get PacemPieSliceElement(){return E},PacemSeriesChartElement:m}),U=Object.freeze({__proto__:null,Charts:M}),k=Object.freeze({__proto__:null,Components:U});t.DeepMerger.merge(k)}(Pacem,Pacem);
|
|
6
|
+
!function(t,e){"use strict";var i=function(t,e,i,r){var s,a=arguments.length,n=a<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,i):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(t,e,i,r);else for(var l=t.length-1;l>=0;l--)(s=t[l])&&(n=(a<3?s(n):a>3?s(e,i,n):s(e,i))||n);return a>3&&n&&Object.defineProperty(e,i,n),n};const r=["keydown","keyup","click","dblclick","mouseover","mouseout","mouseenter","mouseleave","mousedown","mouseup","mousemove","contextmenu"],s=864e5,a="pacem:chart-series:dataitem",n="pacem:chart-series:series";function l(t,e,i){i??=Math.min(o(t,e),10);const r=(e-t)/i,s=Math.pow(10,Math.floor(Math.log10(r))),a=[1,2,5,10].map(t=>t*s).filter(t=>t>=r).reduce((t,e)=>Math.min(t,e),Number.POSITIVE_INFINITY);return{min:Math.floor(t/a)*a,max:Math.ceil(e/a)*a,round:a}}function o(t,e){const i=e-t;if(!(i>0))return 2;const r=Math.floor(Math.log10(i)),s=Math.pow(10,-r);if(0!=r)return o(t*s,e*s);const a=t=>{const e=Math.floor(10*Math.abs(t));return(e+10-e%10).roundoff()},n=a(i);let l=10;0!==t&&(l=a(Math.abs(e)));const c=h(l,n);return 1===c?n:Math.max(c,10-c)}function h(t,e){return t<=0?e:h(e%t,t)}class ChartEvent extends e.CustomUIEvent{constructor(t,e,i){super(t,e,i)}}let c=class PacemChartSeriesElement extends e.Components.PacemItemElement{get values(){return this.datasource}};i([e.Watch({emit:!0,converter:e.PropertyConverters.Json})],c.prototype,"datasource",void 0),i([e.Watch({emit:!0,converter:e.PropertyConverters.String})],c.prototype,"label",void 0),i([e.Watch({emit:!0,converter:e.PropertyConverters.String})],c.prototype,"color",void 0),i([e.Watch({emit:!0,converter:e.PropertyConverters.Boolean})],c.prototype,"datapoints",void 0),i([e.Watch()],c.prototype,"_uiElements",void 0),c=i([e.CustomElement({tagName:e.P+"-chart-series"})],c);const d="http://www.w3.org/2000/svg";class PacemSeriesChartElement extends e.Components.PacemItemsContainerElement{constructor(){super(),this._itemPropertyChangedCallback=t=>{const e=t.detail.propertyName;"datasource"!==e&&"label"!==e&&"datapoints"!==e&&"cssClass"!==e&&"color"!==e||this.draw()},this._series=[],this._resizeHandler=t=>{this._size=t.detail,this.draw()},this._broadcastHandler=t=>{const i=t.currentTarget,r=e.CustomElementUtils.getAttachedPropertyValue(i,a);if(e.Utils.isNull(r))return;const s=this.getAnchorPoint(i),l=new ChartEvent("item"+t.type,{detail:{dataItem:r,anchorPoint:s}},t),o=e.CustomElementUtils.getAttachedPropertyValue(i,n);o instanceof c&&o.dispatchEvent(l),this.dispatchEvent(l)},this._key=e.Utils.uniqueCode()}validate(t){return t instanceof c}register(t){return!!super.register(t)&&(t.addEventListener(e.PropertyChangeEventName,this._itemPropertyChangedCallback,!1),!0)}unregister(t){return!!super.unregister(t)&&(t.removeEventListener(e.PropertyChangeEventName,this._itemPropertyChangedCallback,!1),!0)}propertyChangedCallback(t,i,r,s){if(super.propertyChangedCallback(t,i,r,s),"target"===t){this._div!=i&&this._div&&this._div.remove(),this._div=null,this._body=null;const t=i;t&&(t.classList.remove(e.PCSS+"-chart-area"),t.innerHTML=""),this._ensureResizer(),this.draw()}else if(!s)switch(t){case"items":this._databindAndDrawDebounced();break;case"datasource":this._databind();case"yAxisDensity":case"xAxisDensity":case"xAxisType":case"yAxisMax":case"xAxisPosition":case"yAxisFormat":this.draw()}}_databindAndDrawDebounced(){cancelAnimationFrame(this._handle),this._handle=requestAnimationFrame(()=>{this._databind(),this.draw()})}_databind(){this._datasource=e.Utils.isNullOrEmpty(this.datasource)?this.items:this.datasource}disconnectedCallback(){this._div&&this._div.remove();const t=this._resizer;e.Utils.isNull(t)||(t.removeEventListener(e.Components.ResizeEventName,this._resizeHandler,!1),t.remove(),this._resizer=null),super.disconnectedCallback()}viewActivatedCallback(){super.viewActivatedCallback(),this._ensureResizer(),this._databind(),this.draw()}_ensureResizer(t=this.target||this._div){if(e.Utils.isNull(this._resizer)){const t=e.CustomElementUtils.findAncestorShell(this);(this._resizer=t.appendChild(new e.Components.PacemResizeElement)).addEventListener(e.Components.ResizeEventName,this._resizeHandler,!1)}this._resizer.target=t}get chartSize(){return this._size}get chartSeries(){return this._series}get chartBody(){return this._body}get chartGrid(){return this._grid}get chartMask(){return this._mask}get chartKey(){return this._key}get chartContainer(){return this._div}assignUiBehaviors(t,i,s,l){const o=!e.Utils.isNull(e.CustomElementUtils.getAttachedPropertyValue(t,a)),h=e.Utils.extend({series:i.label,color:l||i.color},s);e.CustomElementUtils.setAttachedPropertyValue(t,a,h),e.CustomElementUtils.setAttachedPropertyValue(t,n,i),o||r.forEach(e=>{t.addEventListener(e,this._broadcastHandler)})}disposeUiBehaviors(t){e.CustomElementUtils.deleteAttachedPropertyValue(t,a),e.CustomElementUtils.deleteAttachedPropertyValue(t,n),r.forEach(e=>{t.removeEventListener(e,this._broadcastHandler)})}ensureChartContainer(){if(e.Utils.isNull(this._div)){let t=this._div=this.target||document.createElement("div");t.classList.add(e.PCSS+"-chart-area"),t!=this.target&&this.parentElement.insertBefore(t,this)}return this._div}ensureChartBody(t,i,r){if(e.Utils.isNull(this._body)){let i=this._body=document.createElementNS(d,"svg");i.setAttribute("pacem",""),i.setAttribute("class",e.PCSS+"-"+t+"-chart"),i.setAttribute("preserveAspectRatio","xMinYMax slice");const r=this._grid=document.createElementNS(d,"svg");r.setAttribute("pacem",""),r.setAttribute("class","chart-grid");let s=document.createElementNS(d,"defs"),a=this._mask=document.createElementNS(d,"mask"),n=document.createElementNS(d,"rect");n.setAttribute("x","0"),n.setAttribute("y","0"),n.setAttribute("width","100%"),n.setAttribute("height","100%");let l=document.createElementNS(d,"rect");l.setAttribute("y","0"),l.setAttribute("width","100%"),l.setAttribute("fill","#fff"),a.id="gnrc_mask_"+this._key,a.appendChild(n),a.appendChild(l),s.appendChild(a),i.appendChild(s),i.appendChild(r),this._div.appendChild(i)}return this._body}chartDataItemToPoint(t,i){switch(this.xAxisType||"string"){case"number":return{x:parseFloat(t.label),y:t.value};case"date":return{x:e.Utils.parseDate(t.label).valueOf(),y:t.value};case"string":return{x:i.findIndex(e=>e.label==t.label),y:t.value};default:throw"Not supported."}}getVirtualGrid(t,i,r,a,n,o=this.xAxisType,h,c){const d=l(a,n,h),u=d.round;var m=[];for(let t=d.min;t<=d.max;t+=u)m.push(t.roundoff());let p=e.Utils.lang(this),v=null;const g=this.xAxisFormat;if(!e.Utils.isNullOrEmpty(g))switch(o){case"number":v=t=>Intl.NumberFormat(p,g).format(t);break;case"date":v=t=>Intl.DateTimeFormat(p,g).format(e.Utils.parseDate(t))}const y=function(t,i,r,a,n,l=10){const o="number"===i||"date"===i?a-r:Math.max(1,t.length-1);for(var h=[],c=1,d=l-1;d>1;d--)if(o%d===0){c=o/d;break}1===c&&o>l&&(c=o);const u="function"==typeof n?n:c>=s?t=>t.toLocaleDateString(n):t=>t.toLocaleTimeString(n),m="function"==typeof n?n:c<s?t=>t.toLocaleString(n):u,p="function"==typeof n?n:t=>t.toLocaleString(n);for(var v=0;v<=o;v+=c){let s;switch(i){case"string":if(v>=t.length)continue;s=t[v].label;break;case"number":s=p(r+v);break;case"date":s=(0==v?m:u)(e.Utils.parseDate(r+v));break;default:throw"Not supported."}h.push(s)}return h}(t,o,i,r,v??p,c);return{x:y,y:m}}wipeOut(t=this._series,e=0){for(var i=t.length-1;i>=e;i--)t[i].remove();t.splice(e)}buildLinearGradient(t,i=!1){const r=document.createElementNS(d,"linearGradient");r.id=this.chartKey+"_grad"+t+(i?"_inverted":""),i&&e.Utils.addClass(r,"bottom-up"),r.setAttribute("x1","0%"),r.setAttribute("x2","0%"),r.setAttribute("y1","0%"),r.setAttribute("y2","100%"),r.setAttribute("spreadMethod","pad");const s=document.createElementNS(d,"stop");s.setAttribute("offset","0%");const a=document.createElementNS(d,"stop");return a.setAttribute("offset","100%"),r.appendChild(s),r.appendChild(a),r}setGradientColor(t,e){for(let i=0;i<t.children.length;i++){const r=t.children.item(i);r instanceof SVGStopElement&&(r.style.stopColor=e)}}estimateYAxisLabelWidth(t){const e=this.formatYAxisLabel(t);return this.estimateLabelWidth(e)}estimateLabelWidth(t){const i=this._grid;if(e.Utils.isNull(i))throw new Error("Unable to estimate label without an underlying grid available.");const r=document.createElementNS(d,"text");r.textContent=t,i.appendChild(r);const s=e.Utils.offset(r);return r.remove(),s.width}formatYAxisLabel(t){const i=this.yAxisFormat;return e.Utils.isNullOrEmpty(i)?t.toString():Intl.NumberFormat(e.Utils.lang(this),i).format(t)}estimateXAxisLabelWidth(t){const e=this.formatXAxisLabel(t);return this.estimateLabelWidth(e)}formatXAxisLabel(t){const i=this.xAxisFormat,r=e.Utils.lang(this);switch(this.xAxisType){case"date":const s=e.Utils.Dates.parse(t);return e.Utils.isNullOrEmpty(i)?s.toLocaleString(r):Intl.DateTimeFormat(r,i).format(s);case"number":const a=t;return e.Utils.isNullOrEmpty(i)?a.toLocaleString(r):Intl.NumberFormat(r,i).format(a);default:return t}}draw(){this.drawSeries(this._datasource)}getAnchorPoint(t){const i=e.Utils.offset(t);return{x:i.left+.5*i.width,y:i.top+.5*i.height}}}i([e.Watch({converter:e.PropertyConverters.Element})],PacemSeriesChartElement.prototype,"target",void 0),i([e.Watch({emit:!1,converter:e.PropertyConverters.String})],PacemSeriesChartElement.prototype,"xAxisType",void 0),i([e.Watch({emit:!1,converter:e.PropertyConverters.String})],PacemSeriesChartElement.prototype,"xAxisPosition",void 0),i([e.Watch({emit:!1,converter:e.PropertyConverters.Json})],PacemSeriesChartElement.prototype,"datasource",void 0),i([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],PacemSeriesChartElement.prototype,"yAxisDensity",void 0),i([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],PacemSeriesChartElement.prototype,"xAxisDensity",void 0),i([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],PacemSeriesChartElement.prototype,"yAxisMin",void 0),i([e.Watch({emit:!1,converter:e.PropertyConverters.Number})],PacemSeriesChartElement.prototype,"yAxisMax",void 0),i([e.Watch({emit:!1,converter:e.PropertyConverters.Json})],PacemSeriesChartElement.prototype,"yAxisFormat",void 0),i([e.Watch({emit:!1,converter:e.PropertyConverters.Json})],PacemSeriesChartElement.prototype,"xAxisFormat",void 0),i([e.Throttle(!0)],PacemSeriesChartElement.prototype,"draw",null);var u=function(t,e,i,r){var s,a=arguments.length,n=a<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,i):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(t,e,i,r);else for(var l=t.length-1;l>=0;l--)(s=t[l])&&(n=(a<3?s(n):a>3?s(e,i,n):s(e,i))||n);return a>3&&n&&Object.defineProperty(e,i,n),n};function m(t,i,r){let s=t,a=t;const n=e.Utils.isNull(i),l=e.Utils.isNull(r);if(!n||!l){const e=3;let o,h;n||(o=(t.y-i.y)/(t.x-i.x)),l||(h=(r.y-t.y)/(r.x-t.x));const c=((h||o||0)+(o||h||0))/2,d=n?0:(t.x-i.x)/e,u=l?0:(r.x-t.x)/e;s={x:t.x-d,y:t.y-d*c},a={x:t.x+u,y:t.y+u*c}}return{c0:s,c1:a}}const p=e.CustomElementUtils.getAttachedPropertyValue,v=e.CustomElementUtils.setAttachedPropertyValue;e.CustomElementUtils.deleteAttachedPropertyValue;const g="pacem:chart-series:area",y="http://www.w3.org/2000/svg";let f=class PacemChartElement extends PacemSeriesChartElement{constructor(){super(...arguments),this.#t=!1,this._enterHandler=t=>{this.#t=!0},this._leaveHandler=t=>{this.#t=!1},this._moveHandler=t=>{this.#t},this._chartFillSeries=[]}_getVirtualGrid(t,e,i,r,s,a=this.xAxisType,n,l){return super.getVirtualGrid(t,e,i,r,s,a,n,l)}_wipe(t=this.chartSeries,e=0){super.wipeOut(t,e)}viewActivatedCallback(){super.viewActivatedCallback(),this._setupBehavior()}disconnectedCallback(){this._dismantleBehavior(),super.disconnectedCallback()}propertyChangedCallback(t,e,i,r){switch(super.propertyChangedCallback(t,e,i,r),t){case"type":case"aspectRatio":this.draw()}}_setupBehavior(){this.addEventListener("mouseenter",this._enterHandler,!1),this.addEventListener("mouseleave",this._enterHandler,!1),this.addEventListener("mousemove",this._moveHandler,!1)}_dismantleBehavior(){this.removeEventListener("mouseenter",this._enterHandler,!1),this.removeEventListener("mouseleave",this._leaveHandler,!1),this.removeEventListener("mousemove",this._moveHandler,!1)}#t;_buildLinearGradient(t){return super.buildLinearGradient(t)}_setGradientColor(t,e){super.setGradientColor(t,e)}drawSeries(t){if(!this.isReady||e.Utils.isNull(this.chartSize))return;this.ensureChartContainer();const i=this.type||"line",r=24;var s=this.chartSize;if(s.height<=r||s.width<=r)return;if(e.Utils.isNullOrEmpty(t)||t.every(t=>e.Utils.isNullOrEmpty(t.values)))return void this._wipe();const a=this.ensureChartBody("line",s.width,s.height);this.log(e.Logging.LogLevel.Debug,`Drawing ${i} chart.`);const n=this.xAxisType||"string";let l=this.yAxisMin??Number.NaN,o=this.yAxisMax??Number.NaN,h=Number.NaN,c=Number.NaN,d=1;for(let i of t){let t=i.values;if(t&&t.length){let i=0;for(let r of t){let s=this.chartDataItemToPoint(r,t);e.Utils.isNull(this.yAxisMin)&&(l=isNaN(l)?s.y:Math.min(l,s.y)),e.Utils.isNull(this.yAxisMax)&&(o=isNaN(o)?s.y:Math.max(o,s.y)),0===i?h=isNaN(h)?s.x:Math.min(h,s.x):i===t.length-1&&(c=isNaN(c)?s.x:Math.max(c,s.x)),i++}}}const u=t.find(t=>!e.Utils.isNullOrEmpty(t.values)),f=this._getVirtualGrid(u.values,h,c,l,o,n,this.yAxisDensity,this.xAxisDensity),b=f.y[f.y.length-1],C=f.y[0];if(b===C)return;const x=f.y.reduce((t,e)=>Math.max(t,this.estimateYAxisLabelWidth(e)+12),r),A=.5*f.x.reduce((t,e)=>Math.max(t,this.estimateXAxisLabelWidth(e)),r),_=Math.max(A,x),E=A,w=s.width-_-E,S=s.height-48,N=S*(1-(b-C-(o-l))/(b-C)),P=S*(b-o)/(b-C);("number"!==n||"monometric"!==this.aspectRatio&&"logaritmic"!==this.aspectRatio)&&(d=w/N,a.setAttribute("height",s.height.toString()),a.setAttribute("width",s.width.toString())),a.setAttribute("viewBox",`0 0 ${s.width} ${s.height}`);let M=0;const U=100*d/(c-h),k=100/(o-l),$=2400/N,L=(t,e)=>{let i=this.chartDataItemToPoint(t,e);return i.y*=k,i.x=(i.x-h)*U,i},O=this.chartSeries,W=this._chartFillSeries,D=this.chartGrid,B="spline"===i||"splinearea"===i;for(let r of t){let t,s,n;if(O.length>M)t=O[M],s=W[M],n=s.firstElementChild.firstElementChild;else{t=document.createElementNS(y,"svg"),t.setAttribute("pacem",""),a.appendChild(t),s=document.createElementNS(y,"svg"),s.setAttribute("pacem",""),a.insertBefore(s,a.children.item(M+2));const e=document.createElementNS(y,"defs");e.appendChild(n=this._buildLinearGradient(M)),s.appendChild(e),s.appendChild(document.createElementNS(y,"path")),W.push(s),t.appendChild(document.createElementNS(y,"path")),O.push(t)}let o="chart-series";const h="area"===i||"splinearea"===i;e.Utils.isNullOrEmpty(r.className)||(o+=" "+r.className),[t,s].forEach(t=>{t.setAttribute("class",o),t.setAttribute("x",_.toString()),t.setAttribute("y",P.toString()),t.setAttribute("width",w.toString()),t.setAttribute("height",(N+48).toString())}),e.Utils.addClass(s,e.PCSS+"-inert");let c=s.children.item(1),d=t.firstElementChild;d.style.stroke=r.color,c.style.stroke=d.style.fill="none",this._setGradientColor(n,r.color),c.style.fill=`url(#${n.id})`,c.style.display=h?"":"none";let u="",f=r.values;if(f&&f.length){const i=(e,i,r,s,a)=>{const n=i+1;let l;t.children.length>n?l=t.children.item(n):(l=document.createElementNS(y,"line"),l.setAttribute("class","circle"),t.appendChild(l));const o=e.x.toString(),h=(-e.y).toString();l.setAttribute("x1",o),l.setAttribute("y1",h),l.setAttribute("x2",o),l.setAttribute("y2",h),l.style.stroke=a,this.assignUiBehaviors(l,r,s,a)},s=()=>{const e=r.datapoints?f.length+1:1;for(let r=t.children.length-1;r>=e;r--){var i=t.children.item(r);this.disposeUiBehaviors(i),i.remove()}};if(B){let t,s,a;for(let n=0;n<f.length;n++){const l=f[n];if(isNaN(l.value))continue;let o;s||(s=L(l,f)),B&&n<f.length-1&&(o=L(f[n+1],f));let h=p(r,g,0);h+=l.value,v(r,g,h);var H=m(s,t,o);u+=e.Utils.isNullOrEmpty(u)?`M${s.x},${-s.y} `:`C${a.x},${-a.y} ${H.c0.x},${-H.c0.y} ${s.x},${-s.y} `,r.datapoints&&i(s,n,r,l,r.color),t=s,s=o,a=H.c1}}else{let t=0;for(let s of f){if(isNaN(s.value))continue;const a=L(s,f);let n=p(r,g,0);n+=s.value,v(r,g,n),u+=e.Utils.isNullOrEmpty(u)?`M${a.x},${-a.y} `:`L${a.x},${-a.y} `,r.datapoints&&i(a,t,r,s,r.color),t++}}s()}d.setAttribute("d",u),c.setAttribute("d",u+`V${-l*k} H0 Z`),M++}this._wipe(W,M),this._wipe(O,M);const R=`0 ${-(o*k+$)} ${100*d} ${100+2*$}`;for(var T of O.concat(W))T.setAttribute("viewBox",R);let z,I=this.chartMask.children.item(1);if(I.setAttribute("x",(0).toString()),I.setAttribute("height",(s.height-r).toString()),D.setAttribute("viewBox",`0 0 ${s.width} ${s.height}`),f.x.length<=1||f.y.length<=1){for(let t=D.children.length-1;t>=0;t--)D.children.item(t).remove();return}D.children.length>0?z=D.children.item(0):(z=document.createElementNS(y,"path"),D.appendChild(z));let F=0,V=(t,e,i,r)=>{const s=t+1;let a;return D.children.length<=s?(a=document.createElementNS(y,"text"),D.appendChild(a)):a=D.children.item(s),a.textContent=r,a.setAttribute("x",e.toString()),a.setAttribute("y",i.toString()),a},G=`M${_},24 v${S}`,j=0;const Y=w/(f.x.length-1),q=S/(f.y.length-1);if("none"!==this.xAxisPosition)for(var J of f.x){const t=_+j*Y;if("top"===this.xAxisPosition){G+=` M${t},24 v-6`;let e=V(F++,t,0,J);e.setAttribute("text-anchor","middle"),e.setAttribute("alignment-baseline","hanging")}else{let e=S+r;G+=` M${t},${e} v6`,V(F++,t,e+r,J).setAttribute("text-anchor","middle")}j++}for(var X of(j=0,f.y)){const t=S+r-j*q,e=_-6;G+=` M${e},${t} H${w+_}`,V(F++,e-6,t,this.formatYAxisLabel(X)).setAttribute("text-anchor","end"),j++}z.setAttribute("d",G);for(let t=D.children.length-1;t>F;t--)D.children.item(t).remove()}};u([e.Watch({emit:!1,converter:e.PropertyConverters.String})],f.prototype,"type",void 0),u([e.Watch({converter:e.PropertyConverters.String})],f.prototype,"aspectRatio",void 0),f=u([e.CustomElement({tagName:e.P+"-chart"})],f);var b=function(t,e,i,r){var s,a=arguments.length,n=a<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,i):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(t,e,i,r);else for(var l=t.length-1;l>=0;l--)(s=t[l])&&(n=(a<3?s(n):a>3?s(e,i,n):s(e,i))||n);return a>3&&n&&Object.defineProperty(e,i,n),n};const C="http://www.w3.org/2000/svg";let x=class PacemColumnChartElement extends PacemSeriesChartElement{constructor(){super(...arguments),this.groupWidth=0}propertyChangedCallback(t,e,i,r){super.propertyChangedCallback(t,e,i,r),"type"!==t&&"groupWidth"!==t||this.draw()}_safen(t=this.groupWidth){return Math.min(1,Math.max(t||.75,0))}drawSeries(t){if(!this.isReady||e.Utils.isNull(this.chartSize))return;this.ensureChartContainer();const i=this.type||"cluster",r=24;var s=this.chartSize;if(s.height<=r||s.width<=r)return;if(e.Utils.isNullOrEmpty(t)||t.every(t=>e.Utils.isNullOrEmpty(t.values)))return void this.wipeOut();const a=this.ensureChartBody("column",s.width,s.height);this.log(e.Logging.LogLevel.Debug,`Drawing ${i} chart.`);const n=this.xAxisType||"string";let l=this.yAxisMin??0,o=this.yAxisMax??0,h=0,c=0,d=0,u=1;const m={negative:[],positive:[]};for(let i of t){let t=i.values;if(!e.Utils.isNullOrEmpty(t)){let i=0;for(let r of t){m.positive[i]=m.positive[i]||0,m.negative[i]=m.negative[i]||0;let s=this.chartDataItemToPoint(r,t);e.Utils.isNull(this.yAxisMin)&&(l=Math.min(l,s.y)),e.Utils.isNull(this.yAxisMax)&&(o=Math.max(o,s.y)),h=Math.min(h,s.x),c=Math.max(c,s.x),s.y>0?m.positive[i]+=s.y:s.y<0&&(m.negative[i]+=s.y),i++}d=Math.max(d,t.length)}}const p="stack"===i;p&&(e.Utils.isNull(this.yAxisMin)&&(l=Math.min.apply(null,m.negative)),e.Utils.isNull(this.yAxisMax)&&(o=Math.max.apply(null,m.positive))),0===c&&c===h&&(c=1);const v=(c-h)/d,g=.5*v,y=v*this._safen(this.groupWidth),f=.5*y,b=t.find(t=>!e.Utils.isNullOrEmpty(t.values)),x=this.getVirtualGrid(b.values,h-g,c+g,l,o,n,this.yAxisDensity,this.xAxisDensity),A=x.y[x.y.length-1],_=x.y[0];if(A===_)return;const E=x.y.reduce((t,e)=>Math.max(t,this.estimateYAxisLabelWidth(e)+12),r),w=s.width-E-r,S=s.height-48,N=S*(1-(A-_-(o-l))/(A-_)),P=S*(A-o)/(A-_);u=w/N,a.setAttribute("height",s.height.toString()),a.setAttribute("width",s.width.toString()),a.setAttribute("viewBox",`0 0 ${s.width} ${s.height}`);let M=0;const U=100*u/(c-h),k=100/(o-l),$=2400/N,L=this.chartSeries,O=this.chartGrid,W=(g-h)*U,D=(t,e)=>{const i=this.chartDataItemToPoint(t,e);return{x:W+2*i.x*W,y:i.y*k}};var B=new Array(d);for(let i of t){let r,s,a,n;if(L.length>M)r=L[M],s=r.firstElementChild.firstElementChild,a=r.firstElementChild.lastElementChild,n=r.lastElementChild;else{r=document.createElementNS(C,"svg"),r.setAttribute("pacem",""),O.insertAdjacentElement("afterend",r);const t=document.createElementNS(C,"defs");t.appendChild(s=this.buildLinearGradient(M)),t.appendChild(a=this.buildLinearGradient(M,!0)),r.appendChild(t),r.appendChild(n=document.createElementNS(C,"g")),L.push(r)}var H="chart-series series-fill";e.Utils.isNullOrEmpty(i.className)||(H+=" "+i.className),r.setAttribute("class",H),r.setAttribute("x",E.toString()),r.setAttribute("y",P.toString()),r.setAttribute("width",w.toString()),r.setAttribute("height",(N+48).toString());const l=i.values,o=t=>{for(;t>=n.children.length;)n.appendChild(document.createElementNS(C,"rect"));const e=n.children.item(t);e.style.stroke=i.color;const r=l[t].value<0?a:s;return this.setGradientColor(r,i.color),e.style.fill=`url(#${r.id})`,e},h=10,c=(t,e,i,r=e)=>{const s=-Math.max(e.y,i.y),a=Math.abs(i.y-e.y),n=()=>{t.setAttribute("y",s.toFixed(h)),t.setAttribute("height",a.toFixed(h))};t.hasAttribute("y")?n():(t.setAttribute("y","-"+r.y.toFixed(h)),t.setAttribute("height","0"),requestAnimationFrame(n))};if(!e.Utils.isNullOrEmpty(l)){const r=D({value:0,label:l[0].label},l);if(p){const t=f*U,s=(y*U).toFixed(h);for(let a=0;a<l.length;a++){const n=l[a];e.Utils.isNullOrEmpty(B[a])&&(B[a]={positive:0,negative:0});const d=B[a];let u=d.positive,m=d.negative;const p=n.value<0,v=p?m:u+n.value,g=p?m+n.value:u,y=D({label:n.label,value:v},l),f=D({label:n.label,value:g},l),b=y.x-t,C=o(a);this.assignUiBehaviors(C,i,n),C.setAttribute("x",b.toFixed(h)),C.setAttribute("width",s),c(C,f,y,r),p?d.negative=g:d.positive=v}}else{const e=f*U,s=2*e/t.length,a=s.toFixed(h);for(let t=0;t<l.length;t++){const n=l[t],d=D(n,l),u=d.x-e+s*M,m=o(t);this.assignUiBehaviors(m,i,n),m.setAttribute("x",u.toFixed(h)),m.setAttribute("width",a),c(m,r,d)}}}for(let t=n.children.length-1;t>=l?.length;t--){const e=n.children.item(t);this.disposeUiBehaviors(e),e.remove()}M++}this.wipeOut(L,M);const R=`0 ${-(o*k+$)} ${100*u} ${100+2*$}`;for(var T of L)T.setAttribute("viewBox",R);let z,I=this.chartMask.children.item(1);if(I.setAttribute("x",(0).toString()),I.setAttribute("height",(s.height-r).toString()),O.setAttribute("viewBox",`0 0 ${s.width} ${s.height}`),x.x.length<1||x.y.length<=1){for(let t=O.children.length-1;t>=0;t--)O.children.item(t).remove();return}O.children.length>0?z=O.children.item(0):(z=document.createElementNS(C,"path"),O.appendChild(z));let F=0,V=(t,e,i,r)=>{const s=t+1;let a;return O.children.length<=s?(a=document.createElementNS(C,"text"),O.appendChild(a)):a=O.children.item(s),a.textContent=r,a.setAttribute("x",e.toString()),a.setAttribute("y",i.toString()),a},G=`M${E},24 v${S}`,j=0;const Y=w/x.x.length,q=S/(x.y.length-1);if("none"!==this.xAxisPosition){const t=.5*Y+E;for(var J of x.x){let e=t+j*Y;if("top"===this.xAxisPosition){G+=` M${e},24 v-6`;let t=V(F++,e,0,J);t.setAttribute("text-anchor","middle"),t.setAttribute("alignment-baseline","hanging")}else{let t=S+r;G+=` M${e},${t} v6`,V(F++,e,t+r,J).setAttribute("text-anchor","middle")}j++}}for(var X of(j=0,x.y)){const t=S+r-j*q,e=E-6;G+=` M${e},${t} H${w+E}`,V(F++,e-6,t,this.formatYAxisLabel(X)).setAttribute("text-anchor","end"),j++}z.setAttribute("d",G);for(let t=O.children.length-1;t>F;t--)O.children.item(t).remove()}};b([e.Watch({converter:e.PropertyConverters.String})],x.prototype,"type",void 0),b([e.Watch({converter:e.PropertyConverters.Number})],x.prototype,"groupWidth",void 0),x=b([e.CustomElement({tagName:e.P+"-column-chart"})],x);var A=function(t,e,i,r){var s,a=arguments.length,n=a<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,i):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(t,e,i,r);else for(var l=t.length-1;l>=0;l--)(s=t[l])&&(n=(a<3?s(n):a>3?s(e,i,n):s(e,i))||n);return a>3&&n&&Object.defineProperty(e,i,n),n};let _=class PacemPieSliceElement extends e.Components.PacemItemElement{constructor(){super(...arguments),this._broadcastHandler=t=>{this.emit(t)}}findContainer(){return e.CustomElementUtils.findAncestorOfType(this,S)}get chart(){return this.container}getCenterOfMass(){const t=this.chart&&this.chart.area;if(e.Utils.isNull(t))return null;const i=e.Utils.offset(t),r=i.width/2+i.left,s=i.top+i.height/2,a=.5*Math.min(i.width,i.height),n=this.normalizedPolarCoords,l=w-n.angle;return{y:s-a*n.radius*Math.sin(l),x:r+a*n.radius*Math.cos(l)}}propertyChangedCallback(t,e,i,r){super.propertyChangedCallback(t,e,i,r),!r&&this.chart&&"normalizedPolarCoords"!=t&&this.chart.draw()}_assignUi(t){const e=this._ui=t;r.forEach(t=>{e.addEventListener(t,this._broadcastHandler)})}_disposeUi(){e.Utils.isNull(this._ui)||r.forEach(t=>{this._ui.removeEventListener(t,this._broadcastHandler)})}};A([e.Watch({converter:e.PropertyConverters.Number})],_.prototype,"value",void 0),A([e.Watch({converter:e.PropertyConverters.String})],_.prototype,"label",void 0),A([e.Watch({converter:e.PropertyConverters.String})],_.prototype,"color",void 0),A([e.Watch({converter:e.PropertyConverters.Json})],_.prototype,"normalizedPolarCoords",void 0),_=A([e.CustomElement({tagName:e.P+"-pie-slice"})],_);const E=2*Math.PI,w=.5*Math.PI;let S=class PacemPieChartElement extends e.Components.PacemItemsContainerElement{constructor(){super(),this.cutout=0,this.slicePadding=0,this._slices=new WeakMap,this._key=e.Utils.uniqueCode()}validate(t){return t instanceof _}viewActivatedCallback(){super.viewActivatedCallback(),this.draw()}propertyChangedCallback(t,i,r,s){if(super.propertyChangedCallback(t,i,r,s),"target"===t){this._g=null,this._div&&this._div.remove();const t=i;t&&(t.classList.remove(e.PCSS+"-chart-area"),t.innerHTML=""),this.draw()}else s||"cutout"!==t&&"items"!==t&&"slicePadding"!==t||this.draw()}get area(){return this._svg}disconnectedCallback(){this._div&&this._div.remove(),super.disconnectedCallback()}_ensureArea(){if(e.Utils.isNull(this._g)){let t=this.target||(this._div=document.createElement("div"));t.classList.add(e.PCSS+"-chart-area");let i=this._svg=document.createElementNS("http://www.w3.org/2000/svg","svg");i.setAttribute("pacem",""),i.setAttribute("preserveAspectRatio","xMidYMid meet"),i.setAttribute("viewBox","0 0 100 100"),i.classList.add(e.PCSS+"-pie-chart");let r=document.createElementNS("http://www.w3.org/2000/svg","defs"),s=this._g=document.createElementNS("http://www.w3.org/2000/svg","g");i.appendChild(r),i.appendChild(s),t.appendChild(i),this._div&&this.parentElement.insertBefore(t,this)}if(this.maskBasedRendering){if(e.Utils.isNull(this._mask)){let t=document.createElementNS("http://www.w3.org/2000/svg","mask");t.id="pie_mask_"+this._key;let e=document.createElementNS("http://www.w3.org/2000/svg","rect");e.setAttribute("x","0"),e.setAttribute("y","0"),e.setAttribute("width","100"),e.setAttribute("height","100"),e.setAttribute("fill","#fff");let i=this._mask=document.createElementNS("http://www.w3.org/2000/svg","circle");i.setAttribute("cx","50"),i.setAttribute("cy","50");const r=this._svg.firstElementChild;t.appendChild(e),t.appendChild(i),r.appendChild(t),this._g.setAttribute("mask",`url(#${t.id})`)}const t=50*this._safeCutout;this._mask.setAttribute("r",`${t}`)}else e.Utils.isNull(this._mask)||(this._svg.firstElementChild.innerHTML="",this._mask=null,this._g.removeAttribute("mask"));const t=this._safeSlicePaddingPixels;if(t>0){const i=(t/this._svg.getCTM().a).roundoff(),r=this._sliceMaskId,s=this._svg.firstElementChild;let a=s.querySelector(`#${r}`);e.Utils.isNull(a)?(a=document.createElementNS("http://www.w3.org/2000/svg","mask"),a.id=r,s.appendChild(a)):a.innerHTML="";const n=document.createElementNS("http://www.w3.org/2000/svg","path"),l=`M${50+i},0 H100 V100 H0 V0 H50 V50 h${i} Z`;n.setAttribute("d",l),n.setAttribute("fill","#fff"),a.appendChild(n)}return this._g}get _sliceMaskId(){return"pieslice_mask_"+this._key}get _safeCutout(){return Math.min(1,Math.max(0,this.cutout))||0}get _safeSlicePaddingPixels(){return Math.max(0,this.slicePadding??0)}_drawSlice(t,e,i,r){const s=e.value>.5*i?1:0,a=E*e.value/i,n=360*r/i,l=e.value>=i?49.9:50*(1+Math.sin(a)),o=50*(1-Math.cos(a)),h=this._safeCutout,c=50*h;t.style.fill=e.color,t.style.transform=`rotate(${n}deg)`,t.style.transformOrigin="50% 50%";const d=this.maskBasedRendering?`M50,50 V0 A50,50 0 ${s} 1 ${l} ${o} L50,50 Z`:`M50,0 A50,50 0 ${s} 1 ${l} ${o} l${(50-l)*(1-h)},${(50-o)*(1-h)} A${c},${c} 0 ${s} 0 50,${50-c} Z`;t.setAttribute("d",d),e.normalizedPolarCoords={radius:h+Math.SQRT1_2*(1-h),angle:Math.PI*n/180+a/2}}_isSliceOk(t){return!t.disabled}_padSlice(t){this._safeSlicePaddingPixels>0?t.setAttribute("mask",`url(#${this._sliceMaskId})`):t.removeAttribute("mask")}draw(){const t=this._ensureArea(),i=t.children.length,r=this._svg.parentElement;let s=0,a=0,n=0;if(e.Utils.isNullOrEmpty(this.items))t.innerHTML="",e.Utils.removeClass(r,"chart-has-data");else{e.Utils.addClass(r,"chart-has-data");for(let t of this.items)this._isSliceOk(t)&&(a+=t.value);if(a<=0)t.innerHTML="",e.Utils.removeClass(r,"chart-has-data");else for(let r of this.items){if(!this._isSliceOk(r))continue;let l;if(s>=i){const i=document.createElementNS("http://www.w3.org/2000/svg","g");i.setAttribute("class","chart-series "+e.PCSS+"-pie-slice"+(e.Utils.isNullOrEmpty(r.className)?"":" "+r.className)),l=document.createElementNS("http://www.w3.org/2000/svg","path"),i.appendChild(l),t.appendChild(i),r._assignUi(i),this._slices.set(i,r)}else l=t.children.item(s).firstElementChild;r.value>0?(this._drawSlice(l,r,a,n),this._padSlice(l),n+=r.value,l.removeAttribute("display")):l.setAttribute("display","none"),s++}}for(;s<t.children.length;){const e=this._slices,i=t.children.item(s);e.has(i)&&(e.get(i)._disposeUi(),e.delete(i)),t.removeChild(i)}}};A([e.Watch({converter:e.PropertyConverters.Number})],S.prototype,"cutout",void 0),A([e.Watch({converter:e.PropertyConverters.Element})],S.prototype,"target",void 0),A([e.Watch({converter:e.PropertyConverters.Boolean})],S.prototype,"maskBasedRendering",void 0),A([e.Watch({converter:e.PropertyConverters.Number})],S.prototype,"slicePadding",void 0),A([e.Debounce(!0)],S.prototype,"draw",null),S=A([e.CustomElement({tagName:e.P+"-pie-chart"})],S);var N=Object.freeze({__proto__:null,ChartEvent:ChartEvent,MANAGED_EVENTS:r,get PacemChartElement(){return f},get PacemChartSeriesElement(){return c},get PacemColumnChartElement(){return x},get PacemPieChartElement(){return S},get PacemPieSliceElement(){return _},PacemSeriesChartElement:PacemSeriesChartElement}),P=Object.freeze({__proto__:null,Charts:N}),M=Object.freeze({__proto__:null,Components:P});t.DeepMerger.merge(M)}(Pacem,Pacem);
|
|
7
7
|
//# sourceMappingURL=pacem-charts.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pacem-charts.min.js","sources":["../esm/types.js","../esm/generic.js","../esm/column.js","../esm/pie.js","../esm/index-iife.js"],"sourcesContent":["var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P, PCSS, Components, CustomUIEvent, CustomElementUtils, Utils, Throttle, PropertyChangeEventName } from '@pacem/pacem-core';\n//namespace Pacem.Components.Charts {\nexport const MANAGED_EVENTS = ['keydown', 'keyup', 'click', 'dblclick', 'mouseover', 'mouseout', 'mouseenter', 'mouseleave', 'mousedown', 'mouseup', 'mousemove', 'contextmenu'];\n;\n//function logN(N, x) {\n// return Math.log10(x) / Math.log10(N);\n//}\nconst MSECS_PER_DAY = 1000 * 60 * 60 * 24;\nconst MAX_X_LABELS = 10;\nconst MAX_Y_LABELS = 10;\nconst SERIES_DATAITEM = 'pacem:chart-series:dataitem';\nconst SERIES_SERIES = 'pacem:chart-series:series';\nfunction getEvenlySpaced(items, type, min, max, formatOrLang, labels = MAX_X_LABELS) {\n const length = (type === 'number' || type === 'date') ? (max - min) : Math.max(1, items.length - 1);\n const gaps = labels - 1;\n var retval = [];\n var step = 1;\n for (var l = gaps; l > 1; l--) {\n if ((length % l) === 0) {\n step = length / l;\n break;\n }\n }\n if (step === 1 /* coprime number? */ && length > labels) {\n step = length;\n }\n const fnDate = typeof formatOrLang === 'function' ? formatOrLang : (step >= MSECS_PER_DAY ? ((d) => d.toLocaleDateString(formatOrLang)) : ((d) => d.toLocaleTimeString(formatOrLang)));\n const fnDateFirst = typeof formatOrLang === 'function' ? formatOrLang : (step < MSECS_PER_DAY ? ((d) => d.toLocaleString(formatOrLang)) : fnDate);\n const fnNum = typeof formatOrLang === 'function' ? formatOrLang : (n) => n.toLocaleString(formatOrLang);\n for (var j = 0; j <= length; j += step) {\n let label;\n switch (type) {\n case 'string':\n if (j >= items.length) {\n continue;\n }\n label = items[j].label;\n break;\n case 'number':\n label = fnNum(min + j);\n break;\n case 'date':\n let date = Utils.parseDate(min + j);\n let fn = (j == 0) ? fnDateFirst : fnDate;\n label = fn(date);\n break;\n default:\n throw 'Not supported.';\n }\n retval.push(label);\n }\n return retval;\n}\nfunction getRoundedBoundaries(min, max, desiredSteps) {\n desiredSteps ??= Math.min(bestGuessedDensity(min, max), MAX_Y_LABELS);\n const roughStep = (max - min) / desiredSteps;\n const magnitude = Math.pow(10, Math.floor(Math.log10(roughStep)));\n const step = [1, 2, 5, 10].map(n => n * magnitude).filter(s => s >= roughStep).reduce((min, s) => Math.min(min, s), Number.POSITIVE_INFINITY);\n return {\n min: Math.floor(min / step) * step,\n max: Math.ceil(max / step) * step,\n round: step\n };\n}\n// Deprecated\n//function getRoundedBoundariesOld(a0: number, a1: number, steps?: number) {\n// if (!(steps > 0)) {\n// steps = bestGuessedDensity(a0, a1);\n// }\n// const magn = logN(steps, a1 - a0),\n// exp = magn % 1 == 0 ? magn - 1 : magn,\n// rounder = Math.pow(steps, Math.floor(exp));\n// return {\n// min: Math.floor(a0 / rounder) * rounder,\n// max: Math.ceil(a1 / rounder) * rounder,\n// round: rounder\n// };\n//}\nfunction bestGuessedDensity(min, max) {\n const delta = max - min;\n if (!(delta > 0)) {\n return 2;\n }\n const oom = Math.floor(Math.log10(delta));\n const exp = Math.pow(10, -oom);\n // bring everything to a single digit format\n if (oom != 0) {\n return bestGuessedDensity(min * exp, max * exp);\n }\n const capFn = (n) => {\n const norm = Math.floor(Math.abs(n) * 10), limit = norm + 10 - (norm % 10);\n return limit.roundoff();\n };\n const b = capFn(delta);\n let a = 10;\n if (min !== 0) {\n a = capFn(Math.abs(max));\n }\n const ret = gcd(a, b);\n return ret === 1 ? b : Math.max(ret, 10 - ret);\n}\nfunction gcd(a, b) {\n if (a <= 0) {\n return b;\n }\n return gcd(b % a, a);\n}\nexport class ChartEvent extends CustomUIEvent {\n constructor(type, eventInit, originalEvent) {\n super(type, eventInit, originalEvent);\n }\n}\nlet PacemChartSeriesElement = class PacemChartSeriesElement extends Components.PacemItemElement {\n get values() {\n return this.datasource;\n }\n};\n__decorate([\n Watch({ emit: true, converter: PropertyConverters.Json })\n], PacemChartSeriesElement.prototype, \"datasource\", void 0);\n__decorate([\n Watch({ emit: true, converter: PropertyConverters.String })\n], PacemChartSeriesElement.prototype, \"label\", void 0);\n__decorate([\n Watch({ emit: true, converter: PropertyConverters.String })\n], PacemChartSeriesElement.prototype, \"color\", void 0);\n__decorate([\n Watch({ emit: true, converter: PropertyConverters.Boolean })\n], PacemChartSeriesElement.prototype, \"datapoints\", void 0);\n__decorate([\n Watch( /* to be set programmatically (internally) */)\n], PacemChartSeriesElement.prototype, \"_uiElements\", void 0);\nPacemChartSeriesElement = __decorate([\n CustomElement({ tagName: P + '-chart-series' })\n], PacemChartSeriesElement);\nexport { PacemChartSeriesElement };\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\nexport class PacemSeriesChartElement extends Components.PacemItemsContainerElement {\n constructor() {\n super();\n this._itemPropertyChangedCallback = (evt) => {\n const propName = evt.detail.propertyName;\n if (propName === 'datasource'\n || propName === 'label'\n || propName === 'datapoints'\n || propName === 'cssClass'\n || propName === 'color') {\n this.draw();\n }\n };\n this._series = [];\n this._resizeHandler = (evt) => {\n this._size = evt.detail;\n this.draw();\n };\n // #endregion\n this._broadcastHandler = (e) => {\n /* Don't mess with the events:\n * keep the original (trusted) events with their well-known names\n * and provide a method to retrieve the 'ChartDataItem' based on the the eventTarget. */\n const element = e.currentTarget;\n const dataItem = CustomElementUtils.getAttachedPropertyValue(element, SERIES_DATAITEM);\n if (Utils.isNull(dataItem)) {\n return;\n }\n const chart = this, anchorPoint = chart.getAnchorPoint(element);\n const evt = new ChartEvent('item' + e.type, { detail: { dataItem, anchorPoint } }, e);\n const series = CustomElementUtils.getAttachedPropertyValue(element, SERIES_SERIES);\n if (series instanceof PacemChartSeriesElement) {\n series.dispatchEvent(evt);\n }\n chart.dispatchEvent(evt);\n };\n this._key = Utils.uniqueCode();\n }\n validate(item) {\n return item instanceof PacemChartSeriesElement;\n }\n register(item) {\n if (super.register(item)) {\n item.addEventListener(PropertyChangeEventName, this._itemPropertyChangedCallback, false);\n return true;\n }\n return false;\n }\n unregister(item) {\n if (super.unregister(item)) {\n item.removeEventListener(PropertyChangeEventName, this._itemPropertyChangedCallback, false);\n return true;\n }\n return false;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'target') {\n if (this._div != old) {\n this._div && this._div.remove();\n }\n // reset\n this._div = null;\n this._body = null; // <- get checked on next draw\n const eold = old;\n if (eold) {\n eold.classList.remove(PCSS + '-chart-area');\n eold.innerHTML = '';\n }\n this._ensureResizer();\n this.draw();\n }\n else if (!first) {\n switch (name) {\n case 'items':\n this._databindAndDrawDebounced();\n break;\n case 'datasource':\n this._databind();\n // fall down to draw() call.\n case 'yAxisDensity':\n case 'xAxisDensity':\n case 'xAxisType':\n case 'yAxisMax':\n case 'xAxisPosition':\n case 'yAxisFormat':\n this.draw();\n break;\n }\n }\n }\n _databindAndDrawDebounced() {\n cancelAnimationFrame(this._handle);\n this._handle = requestAnimationFrame(() => {\n this._databind();\n this.draw();\n });\n }\n _databind() {\n this._datasource = Utils.isNullOrEmpty(this.datasource) ? this.items : this.datasource;\n }\n disconnectedCallback() {\n this._div && this._div.remove();\n const resizer = this._resizer;\n if (!Utils.isNull(resizer)) {\n resizer.removeEventListener(Components.ResizeEventName, this._resizeHandler, false);\n resizer.remove();\n this._resizer = null;\n }\n super.disconnectedCallback();\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this._ensureResizer();\n this._databind();\n this.draw();\n }\n _ensureResizer(target = this.target || this._div) {\n if (Utils.isNull(this._resizer)) {\n const shell = CustomElementUtils.findAncestorShell(this);\n const resizer = this._resizer = shell.appendChild(new Components.PacemResizeElement());\n resizer.addEventListener(Components.ResizeEventName, this._resizeHandler, false);\n }\n this._resizer.target = target;\n }\n // #region OO-scoped props\n get chartSize() {\n return this._size;\n }\n get chartSeries() {\n return this._series;\n }\n get chartBody() {\n return this._body;\n }\n get chartGrid() {\n return this._grid;\n }\n get chartMask() {\n return this._mask;\n }\n get chartKey() {\n return this._key;\n }\n get chartContainer() {\n return this._div;\n }\n assignUiBehaviors(ui, series, data, color) {\n const alreadyRegistered = !Utils.isNull(CustomElementUtils.getAttachedPropertyValue(ui, SERIES_DATAITEM));\n const item = Utils.extend({ series: series.label, color: color || series.color }, data);\n CustomElementUtils.setAttachedPropertyValue(ui, SERIES_DATAITEM, item);\n CustomElementUtils.setAttachedPropertyValue(ui, SERIES_SERIES, series);\n if (!alreadyRegistered) {\n MANAGED_EVENTS.forEach(type => {\n ui.addEventListener(type, this._broadcastHandler);\n });\n }\n }\n disposeUiBehaviors(ui) {\n CustomElementUtils.deleteAttachedPropertyValue(ui, SERIES_DATAITEM);\n CustomElementUtils.deleteAttachedPropertyValue(ui, SERIES_SERIES);\n MANAGED_EVENTS.forEach(type => {\n ui.removeEventListener(type, this._broadcastHandler);\n });\n }\n ensureChartContainer() {\n if (Utils.isNull(this._div)) {\n let div = this._div = this.target || document.createElement('div');\n div.classList.add(PCSS + '-chart-area');\n if (div != this.target) {\n this.parentElement.insertBefore(div, this);\n }\n }\n return this._div;\n }\n ensureChartBody(type, w, h) {\n if (Utils.isNull(this._body)) {\n let svg = this._body = document.createElementNS(SVG_NS, 'svg');\n svg.setAttribute('pacem', '');\n svg.setAttribute('class', PCSS + '-' + type + '-chart');\n svg.setAttribute('preserveAspectRatio', 'xMinYMax slice');\n const g = this._grid = document.createElementNS(SVG_NS, 'svg');\n g.setAttribute('pacem', '');\n g.setAttribute('class', 'chart-grid');\n // put mask on series\n let defs = document.createElementNS(SVG_NS, 'defs');\n let mask = this._mask = document.createElementNS(SVG_NS, 'mask');\n // black (hides)\n let rect = document.createElementNS(SVG_NS, 'rect');\n rect.setAttribute('x', '0');\n rect.setAttribute('y', '0');\n rect.setAttribute('width', '100%');\n rect.setAttribute('height', '100%');\n // white (shows)\n let rect0 = document.createElementNS(SVG_NS, 'rect');\n rect0.setAttribute('y', '0');\n rect0.setAttribute('width', '100%');\n rect0.setAttribute('fill', '#fff');\n mask.id = 'gnrc_mask_' + this._key;\n mask.appendChild(rect);\n mask.appendChild(rect0);\n // place mask on series so that lines won't be rendered outside the grid borders\n //g2.setAttribute('mask', 'url(#' + mask.id + ')');\n defs.appendChild(mask);\n svg.appendChild(defs);\n svg.appendChild(g);\n this._div.appendChild(svg);\n }\n return this._body;\n }\n chartDataItemToPoint(input, source) {\n switch (this.xAxisType || 'string') {\n case 'number':\n return { x: parseFloat(input.label), y: input.value };\n case 'date':\n return { x: Utils.parseDate(input.label).valueOf(), y: input.value };\n case 'string':\n return { x: source.findIndex(e => e.label == input.label), y: input.value };\n default:\n throw 'Not supported.';\n }\n }\n getVirtualGrid(items, minX, maxX, minY, maxY, xAxisType = this.xAxisType, steps, labels) {\n const rangeY = getRoundedBoundaries(minY, maxY, steps), stepY = rangeY.round;\n // fill y-axis array\n var y = [];\n for (let j = rangeY.min; j <= rangeY.max; j += stepY) {\n y.push(j.roundoff());\n }\n // fill x-axis array;\n let lang = Utils.lang(this);\n let format = null;\n const intl = this.xAxisFormat;\n if (!Utils.isNullOrEmpty(intl)) {\n switch (xAxisType) {\n case 'number':\n format = (n) => Intl.NumberFormat(lang, intl).format(n);\n break;\n case 'date':\n format = (n) => Intl.DateTimeFormat(lang, intl).format(Utils.parseDate(n));\n break;\n }\n }\n const x = getEvenlySpaced(items, xAxisType, minX, maxX, format ?? lang, labels);\n return { x, y };\n }\n wipeOut(series = this._series, startIndex = 0) {\n for (var j = series.length - 1; j >= startIndex; j--) {\n series[j].remove();\n }\n series.splice(startIndex);\n }\n buildLinearGradient(seriesIndex, invert = false) {\n const grad = document.createElementNS(SVG_NS, 'linearGradient');\n grad.id = this.chartKey + '_grad' + seriesIndex + (invert ? '_inverted' : '');\n if (invert) {\n Utils.addClass(grad, 'bottom-up');\n }\n grad.setAttribute('x1', '0%');\n grad.setAttribute('x2', '0%');\n grad.setAttribute('y1', '0%');\n grad.setAttribute('y2', '100%');\n grad.setAttribute('spreadMethod', 'pad');\n const stop1 = document.createElementNS(SVG_NS, 'stop');\n stop1.setAttribute('offset', '0%');\n const stop2 = document.createElementNS(SVG_NS, 'stop');\n stop2.setAttribute('offset', '100%');\n grad.appendChild(stop1);\n grad.appendChild(stop2);\n return grad;\n }\n setGradientColor(grad, color) {\n for (let j = 0; j < grad.children.length; j++) {\n const stop = grad.children.item(j);\n if (stop instanceof SVGStopElement) {\n stop.style.stopColor = color;\n }\n }\n }\n estimateYAxisLabelWidth(max) {\n const txt = this.formatYAxisLabel(max);\n return this.estimateLabelWidth(txt);\n }\n estimateLabelWidth(txt) {\n const grid = this._grid;\n if (Utils.isNull(grid)) {\n throw new Error('Unable to estimate label without an underlying grid available.');\n }\n const lbl = document.createElementNS(SVG_NS, 'text');\n lbl.textContent = txt;\n grid.appendChild(lbl);\n const size = Utils.offset(lbl);\n lbl.remove();\n return size.width;\n }\n formatYAxisLabel(y) {\n const intl = this.yAxisFormat;\n return Utils.isNullOrEmpty(intl) ? y.toString() : Intl.NumberFormat(Utils.lang(this), intl).format(y);\n }\n estimateXAxisLabelWidth(max) {\n const txt = this.formatXAxisLabel(max);\n return this.estimateLabelWidth(txt);\n }\n formatXAxisLabel(x) {\n const intl = this.xAxisFormat, lang = Utils.lang(this);\n switch (this.xAxisType) {\n case 'date':\n const date = Utils.Dates.parse(x);\n return Utils.isNullOrEmpty(intl) ? date.toLocaleString(lang) : Intl.DateTimeFormat(lang, intl).format(date);\n case 'number':\n const num = x;\n return Utils.isNullOrEmpty(intl) ? num.toLocaleString(lang) : Intl.NumberFormat(lang, intl).format(num);\n default:\n return x;\n }\n }\n draw() {\n this.drawSeries(this._datasource);\n }\n /**\n * Default implementation.\n * @param element\n */\n getAnchorPoint(element) {\n const rect = Utils.offset(element);\n return { x: rect.left + rect.width * .5, y: rect.top + rect.height * .5 };\n }\n}\n__decorate([\n Watch({ converter: PropertyConverters.Element })\n], PacemSeriesChartElement.prototype, \"target\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemSeriesChartElement.prototype, \"xAxisType\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemSeriesChartElement.prototype, \"xAxisPosition\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], PacemSeriesChartElement.prototype, \"datasource\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemSeriesChartElement.prototype, \"yAxisDensity\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemSeriesChartElement.prototype, \"xAxisDensity\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemSeriesChartElement.prototype, \"yAxisMin\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemSeriesChartElement.prototype, \"yAxisMax\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], PacemSeriesChartElement.prototype, \"yAxisFormat\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], PacemSeriesChartElement.prototype, \"xAxisFormat\", void 0);\n__decorate([\n Throttle(true)\n], PacemSeriesChartElement.prototype, \"draw\", null);\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P, PCSS, Utils, CustomElementUtils, Logging } from '@pacem/pacem-core';\nimport { PacemSeriesChartElement } from './types';\n//namespace Pacem.Components.Charts {\n/**\n * Returns the anchor points for a Bézier curve.\n * @param p The actual point.\n * @param p0 The previous point, if any.\n * @param p1 The next point, if any.\n */\nfunction getSplineCtrlPoints(p, p0, p1) {\n let c0 = p, c1 = p;\n const p0Null = Utils.isNull(p0), p1Null = Utils.isNull(p1);\n if (!(p0Null && p1Null)) {\n const portion = 3;\n let m0, m1;\n if (!p0Null) {\n m0 = (p.y - p0.y) / (p.x - p0.x);\n }\n if (!p1Null) {\n m1 = (p1.y - p.y) / (p1.x - p.x);\n }\n // average slope\n const m = ((m1 || (m0 || 0)) + (m0 || (m1 || 0))) / 2;\n const dx0 = p0Null ? 0 : (p.x - p0.x) / portion;\n const dx1 = p1Null ? 0 : (p1.x - p.x) / portion;\n c0 = { x: p.x - dx0, y: p.y - dx0 * m };\n c1 = { x: p.x + dx1, y: p.y + dx1 * m };\n }\n return { c0: c0, c1: c1 };\n}\nconst GET_VAL = CustomElementUtils.getAttachedPropertyValue;\nconst SET_VAL = CustomElementUtils.setAttachedPropertyValue;\nconst DEL_VAL = CustomElementUtils.deleteAttachedPropertyValue;\nconst PADDING_PIXELS = 24;\nconst SERIES_MAGNITUDE = 'pacem:chart-series:area';\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\nlet PacemChartElement = class PacemChartElement extends PacemSeriesChartElement {\n constructor() {\n super(...arguments);\n this.#hover = false;\n this._enterHandler = (evt) => {\n this.#hover = true;\n };\n this._leaveHandler = (evt) => {\n this.#hover = false;\n };\n this._moveHandler = (evt) => {\n if (!this.#hover) {\n return;\n }\n };\n this._chartFillSeries = [];\n }\n // TODO: implement\n // @Watch({ converter: PropertyConverters.String }) hoverMode: 'abscissa' | 'point'; // 'point' assumed as default\n _getVirtualGrid(items, minX, maxX, minY, maxY, xAxisType = this.xAxisType, steps, labels) {\n return super.getVirtualGrid(items, minX, maxX, minY, maxY, xAxisType, steps, labels);\n }\n _wipe(series = this.chartSeries, startIndex = 0) {\n super.wipeOut(series, startIndex);\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this._setupBehavior();\n }\n disconnectedCallback() {\n this._dismantleBehavior();\n super.disconnectedCallback();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'type':\n case 'aspectRatio':\n this.draw();\n break;\n }\n }\n _setupBehavior() {\n this.addEventListener('mouseenter', this._enterHandler, false);\n this.addEventListener('mouseleave', this._enterHandler, false);\n this.addEventListener('mousemove', this._moveHandler, false);\n }\n _dismantleBehavior() {\n this.removeEventListener('mouseenter', this._enterHandler, false);\n this.removeEventListener('mouseleave', this._leaveHandler, false);\n this.removeEventListener('mousemove', this._moveHandler, false);\n }\n #hover;\n _buildLinearGradient(seriesIndex) {\n return super.buildLinearGradient(seriesIndex);\n }\n _setGradientColor(grad, color) {\n super.setGradientColor(grad, color);\n }\n drawSeries(datasource) {\n if (!this.isReady || Utils.isNull(this.chartSize)) {\n return;\n }\n this.ensureChartContainer();\n const type = this.type || 'line';\n const padding = PADDING_PIXELS;\n // resize all\n var size = this.chartSize;\n if (size.height <= padding || size.width <= padding) {\n return;\n }\n // items && labels?\n if (Utils.isNullOrEmpty(datasource) || datasource.every(i => Utils.isNullOrEmpty(i.values))) {\n this._wipe();\n return;\n }\n const body = this.ensureChartBody('line', size.width, size.height);\n // from now on, drawing...\n this.log(Logging.LogLevel.Debug, `Drawing ${type} chart.`);\n // #region computations\n const xAxisType = this.xAxisType || 'string';\n let minY = this.yAxisMin ?? Number.NaN, maxY = this.yAxisMax ?? Number.NaN, minX = Number.NaN, maxX = Number.NaN;\n let stretch = 1;\n // individuate the min/max x & y in order correctly apply aspect ratio...\n for (let series of datasource) {\n let data = series.values;\n if (data && data.length) {\n let j = 0;\n for (let item of data) {\n let pt = this.chartDataItemToPoint(item, data);\n if (Utils.isNull(this.yAxisMin)) {\n minY = isNaN(minY) ? pt.y : Math.min(minY, pt.y);\n }\n if (Utils.isNull(this.yAxisMax)) {\n maxY = isNaN(maxY) ? pt.y : Math.max(maxY, pt.y);\n }\n if (j === 0)\n minX = isNaN(minX) ? pt.x : Math.min(minX, pt.x);\n else if (j === data.length - 1)\n maxX = isNaN(maxX) ? pt.x : Math.max(maxX, pt.x);\n j++;\n }\n }\n }\n /** virtual grid made of x- and y-axis labels */\n const withValues = datasource.find(i => !Utils.isNullOrEmpty(i.values));\n const grid = this._getVirtualGrid(withValues.values, minX, maxX, minY, maxY, xAxisType, this.yAxisDensity, this.xAxisDensity);\n const topGrid = grid.y[grid.y.length - 1], bottomGrid = grid.y[0];\n if (topGrid === bottomGrid)\n return;\n // estimate y-axis max width\n const halfPad = padding * .5;\n const maxYLabelLength = grid.y.reduce((max, i) => Math.max(max, this.estimateYAxisLabelWidth(i) + halfPad), padding);\n const maxXLabelHalfLength = grid.x.reduce((max, i) => Math.max(max, this.estimateXAxisLabelWidth(i)), padding) * .5;\n const paddingYAxis = Math.max(maxXLabelHalfLength, maxYLabelLength), paddingYAxisEnd = maxXLabelHalfLength; // Math.max(padding, this.estimateXAxisLabelWidth(minX) * .5 + PADDING_PIXELS);\n /** width of the WHOLE series dedicated area */\n const seriesWidth = size.width - paddingYAxis - paddingYAxisEnd;\n /** height of the WHOLE series dedicated area */\n const gridHeight = (size.height - 2 * padding);\n const seriesHeight = gridHeight * (1 - (topGrid - bottomGrid - (maxY - minY)) / (topGrid - bottomGrid));\n const seriesY = gridHeight * (topGrid - maxY) / (topGrid - bottomGrid);\n // const seriesY2 = gridHeight * (minY - bottomGrid) / (topGrid - bottomGrid);\n // if not a `graph`\n if (xAxisType !== 'number' || (this.aspectRatio !== 'monometric' && this.aspectRatio !== 'logaritmic')) {\n // consider padding\n stretch = seriesWidth / seriesHeight;\n body.setAttribute('height', size.height.toString());\n body.setAttribute('width', size.width.toString());\n }\n body.setAttribute('viewBox', `0 0 ${size.width} ${size.height}`);\n // #endregion\n // #region render series\n let iter = 0;\n // normalize\n const spanX = maxX - minX, spanY = maxY - minY;\n const normX = 100 * stretch / spanX, normY = 100 / spanY;\n const normPadding = 100 * padding / seriesHeight;\n const buildPoint = (it, series) => {\n let p = this.chartDataItemToPoint(it, series);\n //pt.x *= normX;\n p.y *= normY;\n // Limit as much as possible the magnitude of a number inclued in the svg.\n // Big numbers \"overflow the renderer\".\n p.x = (p.x - minX) * normX;\n //pt.y = (pt.y - minY) * normY;\n return p;\n };\n const chartSeries = this.chartSeries;\n const chartFillSeries = this._chartFillSeries;\n const chartGrid = this.chartGrid;\n const splineHere = type === 'spline' || type === 'splinearea';\n for (let series of datasource) {\n // does the series svg exist?\n let svg, svgFill;\n let grad;\n if (chartSeries.length > iter) {\n svg = chartSeries[iter];\n svgFill = chartFillSeries[iter];\n grad = svgFill.firstElementChild.firstElementChild;\n }\n else {\n svg = document.createElementNS(SVG_NS, 'svg');\n svg.setAttribute('pacem', '');\n body.appendChild(svg);\n svgFill = document.createElementNS(SVG_NS, 'svg');\n svgFill.setAttribute('pacem', '');\n body.insertBefore(svgFill, body.children.item(iter + /* <defs> should remain the very first child and 'grid' the very second */ 2));\n // 1st child - defs (gradient)\n const defs = document.createElementNS(SVG_NS, 'defs');\n defs.appendChild(grad = this._buildLinearGradient(iter));\n svgFill.appendChild(defs);\n // 2nd child - fill path\n svgFill.appendChild(document.createElementNS(SVG_NS, 'path'));\n chartFillSeries.push(svgFill);\n // 1st child stroke path\n svg.appendChild(document.createElementNS(SVG_NS, 'path'));\n // 2nd + nth+1 child will be point circles\n chartSeries.push(svg);\n }\n // series positioning:\n /*\n --------------------------------------\n | |--------------------------------|\n |pad| series here |\n | |--------------------------------|\n --------------------------------------\n | | pad |\n --------------------------------------\n */\n let className = 'chart-series';\n const fill = type === 'area' || type === 'splinearea';\n if (!Utils.isNullOrEmpty(series.className)) {\n className += ' ' + series.className;\n }\n [svg, svgFill].forEach(s => {\n s.setAttribute('class', className);\n s.setAttribute('x', paddingYAxis.toString());\n s.setAttribute('y', seriesY.toString());\n s.setAttribute('width', seriesWidth.toString());\n s.setAttribute('height', (seriesHeight + 2 * padding).toString());\n });\n Utils.addClass(svgFill, PCSS + '-inert');\n // pick path as single child element for the series.\n let pathFill = svgFill.children.item(1);\n let path = svg.firstElementChild;\n path.style.stroke = series.color;\n pathFill.style.stroke =\n path.style.fill = 'none';\n this._setGradientColor(grad, series.color);\n pathFill.style.fill = `url(#${grad.id})`;\n pathFill.style.display = fill ? '' : 'none';\n let d = '';\n let data = series.values;\n if (data && data.length) {\n const addInteractivePoint = (center, j, series, dataItem, color) => {\n const ndx = j + /* count the <path> child */ 1;\n let circle;\n if (svg.children.length > ndx) {\n circle = svg.children.item(ndx);\n }\n else {\n circle = document.createElementNS(SVG_NS, 'line');\n circle.setAttribute('class', 'circle');\n svg.appendChild(circle);\n }\n const x1 = center.x.toString(), y1 = (-center.y).toString();\n circle.setAttribute('x1', x1);\n circle.setAttribute('y1', y1);\n circle.setAttribute('x2', x1);\n circle.setAttribute('y2', y1);\n circle.style.stroke = color;\n this.assignUiBehaviors(circle, series, dataItem, color);\n };\n const wipeExceedingPoints = () => {\n const remaining = series.datapoints ? (data.length + 1) : 1;\n for (let k = svg.children.length - 1; k >= remaining; k--) {\n var circle = svg.children.item(k);\n this.disposeUiBehaviors(circle);\n circle.remove();\n }\n };\n if (splineHere) {\n // #region SPLINE\n let pt0, pt, c0;\n for (let j = 0; j < data.length; j++) {\n const item = data[j];\n if (isNaN(item.value)) {\n continue;\n }\n if (!pt) {\n pt = buildPoint(item, data);\n }\n let pt1;\n if (splineHere && j < (data.length - 1)) {\n pt1 = buildPoint(data[j + 1], data);\n }\n // accumulate `area` for sorting\n let areaSoFar = GET_VAL(series, SERIES_MAGNITUDE, 0);\n areaSoFar += item.value;\n SET_VAL(series, SERIES_MAGNITUDE, areaSoFar);\n var c = getSplineCtrlPoints(pt, pt0, pt1);\n d += Utils.isNullOrEmpty(d) ? `M${pt.x},${-pt.y} ` : `C${c0.x},${-c0.y} ${c.c0.x},${-c.c0.y} ${pt.x},${-pt.y} `;\n if (series.datapoints) {\n addInteractivePoint(pt, j, series, item, series.color);\n }\n // step next\n pt0 = pt;\n pt = pt1, c0 = c.c1;\n }\n // #endregion\n }\n else {\n // #region LINE\n let j = 0;\n for (let item of data) {\n if (isNaN(item.value)) {\n continue;\n }\n const pt = buildPoint(item, data);\n // accumulate `area` for sorting\n let areaSoFar = GET_VAL(series, SERIES_MAGNITUDE, 0);\n areaSoFar += item.value;\n SET_VAL(series, SERIES_MAGNITUDE, areaSoFar);\n d += Utils.isNullOrEmpty(d) ? `M${pt.x},${-pt.y} ` : `L${pt.x},${-pt.y} `;\n if (series.datapoints) {\n addInteractivePoint(pt, j, series, item, series.color);\n }\n j++;\n }\n // #endregion\n }\n wipeExceedingPoints();\n }\n path.setAttribute('d', d);\n pathFill.setAttribute('d', d + `V${(-minY * normY)} H0 Z`);\n // tick\n iter++;\n }\n // remove exceeding series\n this._wipe(chartFillSeries, iter);\n this._wipe(chartSeries, iter);\n const w0 = 100 * stretch, h0 = 100 + 2 * normPadding, x0 = 0, //minX * normX,\n y0 = maxY * normY + normPadding;\n const svbox = `${x0} ${-y0} ${w0} ${h0}`;\n for (var svg of chartSeries.concat(chartFillSeries)) {\n svg.setAttribute('viewBox', svbox);\n }\n const chartMask = this.chartMask;\n let mask = chartMask.children.item(1);\n mask.setAttribute('x', x0.toString());\n mask.setAttribute('height', (size.height - padding).toString());\n // #endregion\n // #region grid\n chartGrid.setAttribute('viewBox', `0 0 ${size.width} ${size.height}`);\n if (grid.x.length <= 1 || grid.y.length <= 1) {\n for (let j = chartGrid.children.length - 1; j >= 0; j--) {\n chartGrid.children.item(j).remove();\n }\n return;\n }\n let pgrid;\n if (chartGrid.children.length > 0) {\n pgrid = chartGrid.children.item(0);\n }\n else {\n pgrid = document.createElementNS(SVG_NS, 'path');\n chartGrid.appendChild(pgrid);\n }\n const tick = padding * .25;\n let lblCounter = 0;\n let ensureLabel = (index, x, y, txt) => {\n const ndx = index + /* <path> is the first child element */ 1;\n let lbl;\n if (chartGrid.children.length <= ndx) {\n lbl = document.createElementNS(SVG_NS, 'text');\n chartGrid.appendChild(lbl);\n }\n else {\n lbl = chartGrid.children.item(ndx);\n }\n lbl.textContent = txt;\n lbl.setAttribute('x', x.toString());\n lbl.setAttribute('y', y.toString());\n return lbl;\n };\n let dgrid = `M${paddingYAxis},${padding} v${gridHeight}`; //H${w}\n // x\n let j = 0;\n const xincr = seriesWidth / (grid.x.length - 1), yincr = gridHeight / (grid.y.length - 1);\n if (this.xAxisPosition !== 'none') {\n for (var x of grid.x) {\n const xcoord = paddingYAxis + j * xincr;\n if (this.xAxisPosition === 'top') {\n dgrid += ` M${xcoord},${padding} v${-tick}`;\n let lbl = ensureLabel(lblCounter++, xcoord, 0, x);\n lbl.setAttribute('text-anchor', 'middle');\n lbl.setAttribute('alignment-baseline', 'hanging');\n }\n else {\n let ycoord = gridHeight + padding;\n dgrid += ` M${xcoord},${ycoord} v${tick}`;\n ensureLabel(lblCounter++, xcoord, ycoord + padding, x).setAttribute('text-anchor', 'middle');\n }\n j++;\n }\n }\n // y\n j = 0;\n for (var y of grid.y) {\n const ycoord = gridHeight + padding - j * yincr, xcoord = paddingYAxis - tick;\n dgrid += ` M${xcoord},${ycoord} H${(seriesWidth + paddingYAxis)}`;\n let txt = this.formatYAxisLabel(y);\n ensureLabel(lblCounter++, xcoord - tick, ycoord, txt).setAttribute('text-anchor', 'end');\n j++;\n }\n pgrid.setAttribute('d', dgrid);\n // exceeding labels?\n for (let j = chartGrid.children.length - 1; j > lblCounter; j--) {\n chartGrid.children.item(j).remove();\n }\n // #endregion\n // #region abscissa cursor\n // #endregion\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemChartElement.prototype, \"type\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemChartElement.prototype, \"aspectRatio\", void 0);\nPacemChartElement = __decorate([\n CustomElement({ tagName: P + '-chart' })\n], PacemChartElement);\nexport { PacemChartElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P, Utils, Logging } from '@pacem/pacem-core';\nimport { PacemSeriesChartElement } from './types';\n//namespace Pacem.Components.Charts {\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\nconst PADDING_PIXELS = 24;\nlet PacemColumnChartElement = class PacemColumnChartElement extends PacemSeriesChartElement {\n constructor() {\n super(...arguments);\n /** Set a value between 0 and 1, for the columns' stack/cluster horizontal size (percentage of the available space). */\n this.groupWidth = .0;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'type' || name === 'groupWidth') {\n this.draw();\n }\n }\n _safen(w = this.groupWidth) {\n return Math.min(1, Math.max(w || .75, 0));\n }\n drawSeries(datasource) {\n if (!this.isReady || Utils.isNull(this.chartSize)) {\n return;\n }\n const div = this.ensureChartContainer();\n const type = this.type || 'cluster';\n const padding = PADDING_PIXELS;\n // resize all\n var size = this.chartSize;\n if (size.height <= padding || size.width <= padding) {\n return;\n }\n // items && labels?\n if (Utils.isNullOrEmpty(datasource) || datasource.every(i => Utils.isNullOrEmpty(i.values))) {\n this.wipeOut();\n return;\n }\n const body = this.ensureChartBody('column', size.width, size.height);\n // from now on, drawing...\n this.log(Logging.LogLevel.Debug, `Drawing ${type} chart.`);\n // #region computations\n const xAxisType = this.xAxisType || 'string';\n let minY = this.yAxisMin ?? 0, maxY = this.yAxisMax ?? 0, minX = 0, maxX = 0, maxCount = 0;\n let stretch = 1;\n const accumulator = { negative: [], positive: [] };\n // individuate the min/max x & y in order correctly apply aspect ratio...\n for (let series of datasource) {\n let data = series.values;\n if (!Utils.isNullOrEmpty(data)) {\n let j = 0;\n for (let item of data) {\n accumulator.positive[j] = accumulator.positive[j] || 0;\n accumulator.negative[j] = accumulator.negative[j] || 0;\n let pt = this.chartDataItemToPoint(item, data);\n if (Utils.isNull(this.yAxisMin)) {\n minY = Math.min(minY, pt.y);\n }\n if (Utils.isNull(this.yAxisMax)) {\n maxY = Math.max(maxY, pt.y);\n }\n minX = Math.min(minX, pt.x);\n maxX = Math.max(maxX, pt.x);\n if (pt.y > 0) {\n accumulator.positive[j] += pt.y;\n }\n else if (pt.y < 0) {\n accumulator.negative[j] += pt.y;\n }\n j++;\n }\n maxCount = Math.max(maxCount, data.length);\n }\n }\n const stacked = type === 'stack';\n if (stacked) {\n if (Utils.isNull(this.yAxisMin))\n minY = Math.min.apply(null, accumulator.negative);\n if (Utils.isNull(this.yAxisMax))\n maxY = Math.max.apply(null, accumulator.positive);\n }\n if (maxX === 0 && maxX === minX) {\n maxX = 1;\n }\n // add \"1 slot\" (half at the beginning and half after the end)\n const slot = (maxX - minX) / maxCount, halfSlot = slot * .5, \n // the following are usefule during the very rendering\n availSlot = slot * this._safen(this.groupWidth), halfAvailSlot = availSlot * .5;\n /** virtual grid made of x- and y-axis labels */\n const withValues = datasource.find(i => !Utils.isNullOrEmpty(i.values));\n const grid = this.getVirtualGrid(withValues.values, minX - halfSlot, maxX + halfSlot, minY, maxY, xAxisType, this.yAxisDensity, this.xAxisDensity);\n const topGrid = grid.y[grid.y.length - 1], bottomGrid = grid.y[0];\n if (topGrid === bottomGrid) {\n return;\n }\n // estimate y-axis max width\n const halfPad = PADDING_PIXELS * .5;\n const paddingYAxis = grid.y.reduce((max, i) => Math.max(max, this.estimateYAxisLabelWidth(i) + halfPad), padding);\n /** width of the WHOLE series dedicated area */\n const seriesWidth = size.width - paddingYAxis - padding;\n /** height of the WHOLE series dedicated area */\n const gridHeight = (size.height - 2 * padding);\n const seriesHeight = gridHeight * (1 - (topGrid - bottomGrid - (maxY - minY)) / (topGrid - bottomGrid));\n const seriesY = gridHeight * (topGrid - maxY) / (topGrid - bottomGrid);\n // consider padding\n stretch = seriesWidth / seriesHeight;\n body.setAttribute('height', size.height.toString());\n body.setAttribute('width', size.width.toString());\n body.setAttribute('viewBox', `0 0 ${size.width} ${size.height}`);\n // #endregion\n // #region render series\n let iter = 0;\n // normalize\n const spanX = maxX - minX, spanY = maxY - minY;\n const normX = 100 * stretch / spanX, normY = 100 / spanY;\n const normPadding = 100 * padding / seriesHeight;\n const chartSeries = this.chartSeries;\n const chartGrid = this.chartGrid;\n const xPad = (halfSlot - minX) * normX;\n const buildPoint = (it, series) => {\n const p = this.chartDataItemToPoint(it, series);\n return {\n x: xPad + p.x * 2 * xPad,\n y: p.y * normY\n };\n };\n var accumulators = new Array(maxCount);\n for (let series of datasource) {\n // does the series svg exist?\n let svg;\n let grad;\n let gradInv;\n let g;\n if (chartSeries.length > iter) {\n svg = chartSeries[iter];\n grad = svg.firstElementChild.firstElementChild;\n gradInv = svg.firstElementChild.lastElementChild;\n g = svg.lastElementChild;\n }\n else {\n svg = document.createElementNS(SVG_NS, 'svg');\n svg.setAttribute('pacem', '');\n chartGrid.insertAdjacentElement('afterend', svg);\n const defs = document.createElementNS(SVG_NS, 'defs');\n defs.appendChild(grad = this.buildLinearGradient(iter));\n defs.appendChild(gradInv = this.buildLinearGradient(iter, true));\n svg.appendChild(defs);\n svg.appendChild(g = document.createElementNS(SVG_NS, 'g'));\n chartSeries.push(svg);\n }\n // series positioning:\n /*\n --------------------------------------\n | |--------------------------------|\n |pad| series here |\n | |--------------------------------|\n --------------------------------------\n | | pad |\n --------------------------------------\n */\n var className = 'chart-series series-fill';\n if (!Utils.isNullOrEmpty(series.className)) {\n className += ' ' + series.className;\n }\n svg.setAttribute('class', className);\n svg.setAttribute('x', paddingYAxis.toString());\n svg.setAttribute('y', seriesY.toString());\n svg.setAttribute('width', seriesWidth.toString());\n svg.setAttribute('height', (seriesHeight + 2 * padding).toString());\n const data = series.values;\n const spinRect = (index) => {\n while (index >= g.children.length) {\n g.appendChild(document.createElementNS(SVG_NS, 'rect'));\n }\n const rect = g.children.item(index);\n rect.style.stroke = series.color;\n const gradient = data[index].value < 0 ? gradInv : grad;\n this.setGradientColor(gradient, series.color);\n rect.style.fill = `url(#${gradient.id})`;\n return rect;\n };\n // fix 0 y\n const precision = 10;\n const assignVerticalCoordsCoords = (rect, pt0, pt, pt0Start = pt0) => {\n const y = -Math.max(pt0.y, pt.y), h = Math.abs(pt.y - pt0.y);\n const fnAssign = () => {\n rect.setAttribute('y', y.toFixed(precision));\n rect.setAttribute('height', h.toFixed(precision));\n };\n if (!rect.hasAttribute('y')) {\n // boostrap easing animated transition\n rect.setAttribute('y', '-' + pt0Start.y.toFixed(precision));\n rect.setAttribute('height', '0');\n requestAnimationFrame(fnAssign);\n }\n else {\n fnAssign();\n }\n };\n if (!Utils.isNullOrEmpty(data)) {\n ;\n const pt00 = buildPoint({ value: 0, label: data[0].label }, data);\n if (stacked) {\n // #region STACK\n const iHalfAvailSlot = halfAvailSlot * normX, iAvailSlotAttr = (availSlot * normX).toFixed(precision);\n for (let j = 0; j < data.length; j++) {\n const item = data[j];\n if (Utils.isNullOrEmpty(accumulators[j])) {\n accumulators[j] = { positive: 0, negative: 0 };\n }\n const accumulator = accumulators[j];\n let posCursor = accumulator.positive, negCursor = accumulator.negative;\n const neg = item.value < 0, y = neg ? negCursor : (posCursor + item.value), y0 = neg ? (negCursor + item.value) : posCursor;\n const pt = buildPoint({ label: item.label, value: y }, data);\n const pt0 = buildPoint({ label: item.label, value: y0 }, data);\n const x = pt.x - iHalfAvailSlot;\n const rect = spinRect(j);\n this.assignUiBehaviors(rect, series, item);\n rect.setAttribute('x', x.toFixed(precision));\n rect.setAttribute('width', iAvailSlotAttr);\n assignVerticalCoordsCoords(rect, pt0, pt, pt00);\n if (neg) {\n accumulator.negative = y0;\n }\n else {\n accumulator.positive = y;\n }\n }\n // #endregion\n }\n else {\n // #region CLUSTER\n const iHalfAvailSlot = halfAvailSlot * normX, iSlot = (iHalfAvailSlot * 2) / datasource.length, //,\n iSlotAttr = iSlot.toFixed(precision);\n for (let j = 0; j < data.length; j++) {\n // looping through the series-data\n const item = data[j];\n const pt = buildPoint(item, data);\n const x = pt.x - iHalfAvailSlot + iSlot * iter;\n const rect = spinRect(j);\n this.assignUiBehaviors(rect, series, item);\n rect.setAttribute('x', x.toFixed(precision));\n rect.setAttribute('width', iSlotAttr);\n assignVerticalCoordsCoords(rect, pt00, pt);\n }\n // #endregion\n }\n }\n // cleanup exceeding rects\n for (let j = g.children.length - 1; j >= data?.length || 0; j--) {\n const rect = g.children.item(j);\n this.disposeUiBehaviors(rect);\n rect.remove();\n }\n // tick\n iter++;\n }\n // remove exceeding series\n this.wipeOut(chartSeries, iter);\n const w0 = 100 * stretch, h0 = 100 + 2 * normPadding, x0 = 0, //minX * normX,\n y0 = maxY * normY + normPadding;\n const svbox = `${x0} ${-y0} ${w0} ${h0}`;\n for (var svg of chartSeries) {\n svg.setAttribute('viewBox', svbox);\n }\n const chartMask = this.chartMask;\n let mask = chartMask.children.item(1);\n mask.setAttribute('x', x0.toString());\n mask.setAttribute('height', (size.height - padding).toString());\n // #endregion\n // #region grid\n chartGrid.setAttribute('viewBox', `0 0 ${size.width} ${size.height}`);\n if (grid.x.length < 1 || grid.y.length <= 1) {\n for (let j = chartGrid.children.length - 1; j >= 0; j--) {\n chartGrid.children.item(j).remove();\n }\n return;\n }\n let pgrid;\n if (chartGrid.children.length > 0) {\n pgrid = chartGrid.children.item(0);\n }\n else {\n pgrid = document.createElementNS(SVG_NS, 'path');\n chartGrid.appendChild(pgrid);\n }\n const tick = PADDING_PIXELS * .25;\n let lblCounter = 0;\n let ensureLabel = (index, x, y, txt) => {\n const ndx = index + /* <path> is the first child element */ 1;\n let lbl;\n if (chartGrid.children.length <= ndx) {\n lbl = document.createElementNS(SVG_NS, 'text');\n chartGrid.appendChild(lbl);\n }\n else {\n lbl = chartGrid.children.item(ndx);\n }\n lbl.textContent = txt;\n lbl.setAttribute('x', x.toString());\n lbl.setAttribute('y', y.toString());\n return lbl;\n };\n let dgrid = `M${paddingYAxis},${padding} v${gridHeight}`; //H${w}\n // x\n let j = 0;\n const xincr = seriesWidth / (grid.x.length /*- 1 consider the extra slot */), yincr = gridHeight / (grid.y.length - 1);\n if (this.xAxisPosition !== 'none') {\n const paddingX = xincr * .5 + paddingYAxis;\n for (var x of grid.x) {\n let xcoord = paddingX + j * xincr;\n if (this.xAxisPosition === 'top') {\n dgrid += ` M${xcoord},${padding} v${-tick}`;\n let lbl = ensureLabel(lblCounter++, xcoord, 0, x);\n lbl.setAttribute('text-anchor', 'middle');\n lbl.setAttribute('alignment-baseline', 'hanging');\n }\n else {\n let ycoord = gridHeight + padding;\n dgrid += ` M${xcoord},${ycoord} v${tick}`;\n ensureLabel(lblCounter++, xcoord, ycoord + padding, x).setAttribute('text-anchor', 'middle');\n }\n j++;\n }\n }\n // y\n j = 0;\n for (var y of grid.y) {\n const ycoord = gridHeight + padding - j * yincr, xcoord = paddingYAxis - tick;\n dgrid += ` M${xcoord},${ycoord} H${(seriesWidth + paddingYAxis)}`;\n let txt = this.formatYAxisLabel(y);\n ensureLabel(lblCounter++, xcoord - tick, ycoord, txt).setAttribute('text-anchor', 'end');\n j++;\n }\n pgrid.setAttribute('d', dgrid);\n // exceeding labels?\n for (let j = chartGrid.children.length - 1; j > lblCounter; j--) {\n chartGrid.children.item(j).remove();\n }\n // #endregion\n }\n};\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemColumnChartElement.prototype, \"type\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Number })\n], PacemColumnChartElement.prototype, \"groupWidth\", void 0);\nPacemColumnChartElement = __decorate([\n CustomElement({ tagName: P + '-column-chart' })\n], PacemColumnChartElement);\nexport { PacemColumnChartElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P, PCSS, Components, Utils, CustomElementUtils, Debounce } from '@pacem/pacem-core';\nimport { MANAGED_EVENTS } from './types';\n//namespace Pacem.Components.Charts {\nlet PacemPieSliceElement = class PacemPieSliceElement extends Components.PacemItemElement {\n constructor() {\n super(...arguments);\n this._broadcastHandler = (e) => {\n this.emit(e);\n };\n }\n findContainer() {\n return CustomElementUtils.findAncestorOfType(this, PacemPieChartElement);\n }\n get chart() {\n return this.container;\n }\n /** Returns the center of mass (point) of this pie/doughnut slice, in absolute coords (pixels). */\n getCenterOfMass() {\n const area = this.chart && this.chart.area;\n if (Utils.isNull(area)) {\n return null;\n }\n const rect = Utils.offset(area), center = { x: rect.width / 2 + rect.left, y: rect.top + rect.height / 2 }, r = Math.min(rect.width, rect.height) * .5;\n const pos = this.normalizedPolarCoords, angle = PI1_2 - pos.angle;\n return {\n y: center.y - r * pos.radius * Math.sin(angle),\n x: center.x + r * pos.radius * Math.cos(angle)\n };\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first && this.chart && name != 'normalizedPolarCoords')\n this.chart.draw();\n }\n /** @internal */\n _assignUi(el) {\n const ui = this._ui = el;\n MANAGED_EVENTS.forEach(type => {\n ui.addEventListener(type, this._broadcastHandler);\n });\n }\n /** @internal */\n _disposeUi() {\n if (!Utils.isNull(this._ui)) {\n MANAGED_EVENTS.forEach(type => {\n this._ui.removeEventListener(type, this._broadcastHandler);\n });\n }\n }\n};\n__decorate([\n Watch({ converter: PropertyConverters.Number })\n], PacemPieSliceElement.prototype, \"value\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemPieSliceElement.prototype, \"label\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemPieSliceElement.prototype, \"color\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Json })\n], PacemPieSliceElement.prototype, \"normalizedPolarCoords\", void 0);\nPacemPieSliceElement = __decorate([\n CustomElement({ tagName: P + '-pie-slice' })\n], PacemPieSliceElement);\nexport { PacemPieSliceElement };\nconst TWO_PI = Math.PI * 2;\nconst PI1_2 = Math.PI * .5;\nlet PacemPieChartElement = class PacemPieChartElement extends Components.PacemItemsContainerElement {\n constructor() {\n super();\n /** Set a value between 0 and 1, for doughnut appearance. */\n this.cutout = .0;\n /** Distance between two consecutive slices, in pixels. */\n this.slicePadding = .0;\n this._slices = new WeakMap();\n this._key = Utils.uniqueCode();\n }\n validate(item) {\n return item instanceof PacemPieSliceElement;\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this.draw();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'target') {\n this._g = null;\n this._div && this._div.remove();\n const eold = old;\n if (eold) {\n eold.classList.remove(PCSS + '-chart-area');\n eold.innerHTML = '';\n }\n this.draw();\n }\n else if (!first && (name === 'cutout' || name === 'items' || name === 'slicePadding'))\n this.draw();\n }\n get area() {\n return this._svg;\n }\n disconnectedCallback() {\n this._div && this._div.remove();\n super.disconnectedCallback();\n }\n _ensureArea() {\n if (Utils.isNull(this._g)) {\n let div = this.target || (this._div = document.createElement('div'));\n div.classList.add(PCSS + '-chart-area');\n let svg = this._svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('pacem', '');\n svg.setAttribute('preserveAspectRatio', 'xMidYMid meet');\n svg.setAttribute('viewBox', '0 0 100 100');\n //svg.style.height =\n // svg.style.width = '100%';\n svg.classList.add(PCSS + '-pie-chart');\n let defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs');\n let g = this._g = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n svg.appendChild(defs);\n svg.appendChild(g);\n div.appendChild(svg);\n this._div &&\n this.parentElement.insertBefore(div, this);\n }\n if (this.maskBasedRendering) {\n if (Utils.isNull(this._mask)) {\n let mask = document.createElementNS('http://www.w3.org/2000/svg', 'mask');\n mask.id = 'pie_mask_' + this._key;\n let rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n rect.setAttribute('x', '0');\n rect.setAttribute('y', '0');\n rect.setAttribute('width', '100');\n rect.setAttribute('height', '100');\n rect.setAttribute('fill', '#fff');\n let circle = this._mask = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n circle.setAttribute('cx', '50');\n circle.setAttribute('cy', '50');\n const defs = this._svg.firstElementChild;\n mask.appendChild(rect);\n mask.appendChild(circle);\n defs.appendChild(mask);\n this._g.setAttribute('mask', `url(#${mask.id})`);\n }\n const cutout = 50.0 * this._safeCutout;\n this._mask.setAttribute('r', `${cutout}`);\n }\n else {\n if (!Utils.isNull(this._mask)) {\n this._svg.firstElementChild.innerHTML = '';\n this._mask = null;\n this._g.removeAttribute('mask');\n }\n }\n // has padded slices?\n const paddingPixels = this._safeSlicePaddingPixels;\n if (paddingPixels > 0) {\n const matrix = this._svg.getCTM();\n const paddingUnits = (paddingPixels / matrix.a).roundoff();\n const maskId = this._sliceMaskId;\n const defs = this._svg.firstElementChild;\n let mask = defs.querySelector(`#${maskId}`);\n if (Utils.isNull(mask)) {\n mask = document.createElementNS('http://www.w3.org/2000/svg', 'mask');\n mask.id = maskId;\n defs.appendChild(mask);\n }\n else {\n mask.innerHTML = '';\n }\n const maskPath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n const d = `M${(50 + paddingUnits)},0 H100 V100 H0 V0 H50 V50 h${paddingUnits} Z`;\n maskPath.setAttribute('d', d);\n maskPath.setAttribute('fill', '#fff');\n mask.appendChild(maskPath);\n }\n return this._g;\n }\n get _sliceMaskId() {\n return 'pieslice_mask_' + this._key;\n }\n get _safeCutout() {\n return Math.min(1, Math.max(0, this.cutout)) || .0;\n }\n get _safeSlicePaddingPixels() {\n return Math.max(0, this.slicePadding ?? 0);\n }\n _drawSlice(path, slice, whole, partial) {\n const largeFlag = slice.value > .5 * whole ? 1 : 0;\n const angle = TWO_PI * slice.value / whole;\n const rot = 360.0 * partial / whole;\n const x = (slice.value >= whole) ? /* handling single slice */ 49.9 : 50 * (1 + Math.sin(angle));\n const y = 50 * (1 - Math.cos(angle));\n // set geometry data\n const c = this._safeCutout, r = c * 50.0;\n path.style.fill = slice.color; //.setAttribute('fill', slice.color || (path.getAttribute('fill') || '#000'));\n //path.setAttribute('transform', `rotate(${rot} 50 50)`);\n path.style.transform = `rotate(${rot}deg)`;\n path.style.transformOrigin = '50% 50%';\n const d = this.maskBasedRendering ?\n `M50,50 V0 A50,50 0 ${largeFlag} 1 ${x} ${y} L50,50 Z` :\n `M50,0 A50,50 0 ${largeFlag} 1 ${x} ${y} l${(50 - x) * (1.0 - c)},${(50 - y) * (1.0 - c)} A${r},${r} 0 ${largeFlag} 0 50,${(50 - r)} Z`;\n path.setAttribute('d', d);\n slice.normalizedPolarCoords = { radius: c + Math.SQRT1_2 * (1.0 - c), angle: /* deg to rad */ Math.PI * rot / 180.0 + angle / 2 };\n }\n _isSliceOk(slice) {\n return !slice.disabled //&& slice.value > 0\n ;\n }\n _padSlice(path) {\n const paddingPixels = this._safeSlicePaddingPixels;\n if (paddingPixels > 0) {\n path.setAttribute('mask', `url(#${this._sliceMaskId})`);\n }\n else {\n path.removeAttribute('mask');\n }\n }\n draw() {\n const g = this._ensureArea(), pCount = g.children.length, chartArea = this._svg.parentElement;\n let ndx = 0, sum = .0, progress = .0;\n if (Utils.isNullOrEmpty(this.items)) {\n g.innerHTML = '';\n Utils.removeClass(chartArea, 'chart-has-data');\n }\n else {\n Utils.addClass(chartArea, 'chart-has-data');\n for (let slice of this.items) {\n if (!this._isSliceOk(slice)) {\n continue;\n }\n sum += slice.value;\n }\n if (sum <= 0) {\n g.innerHTML = '';\n Utils.removeClass(chartArea, 'chart-has-data');\n }\n else {\n for (let slice of this.items) {\n if (!this._isSliceOk(slice)) {\n continue;\n }\n let p;\n if (ndx >= pCount) {\n const g_n = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n g_n.setAttribute('class', 'chart-series ' + PCSS + '-pie-slice' + (Utils.isNullOrEmpty(slice.className) ? '' : (' ' + slice.className)));\n p = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n g_n.appendChild(p);\n g.appendChild(g_n);\n // add listeners (click, mouse-..., touch-...)\n slice._assignUi(g_n);\n this._slices.set(g_n, slice);\n }\n else {\n p = g.children.item(ndx).firstElementChild;\n }\n if (slice.value > 0) {\n this._drawSlice(p, slice, sum, progress);\n this._padSlice(p);\n progress += slice.value;\n p.removeAttribute('display');\n }\n else {\n p.setAttribute('display', 'none');\n }\n ndx++;\n }\n }\n }\n while (ndx < g.children.length) {\n const slices = this._slices, g_n = g.children.item(ndx);\n // remove listeners\n if (slices.has(g_n)) {\n slices.get(g_n)._disposeUi();\n slices.delete(g_n);\n }\n g.removeChild(g_n);\n }\n }\n};\n__decorate([\n Watch({ converter: PropertyConverters.Number })\n], PacemPieChartElement.prototype, \"cutout\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Element })\n], PacemPieChartElement.prototype, \"target\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Boolean })\n], PacemPieChartElement.prototype, \"maskBasedRendering\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Number })\n], PacemPieChartElement.prototype, \"slicePadding\", void 0);\n__decorate([\n Debounce(true)\n], PacemPieChartElement.prototype, \"draw\", null);\nPacemPieChartElement = __decorate([\n CustomElement({ tagName: P + '-pie-chart' })\n], PacemPieChartElement);\nexport { PacemPieChartElement };\n","import { DeepMerger } from '@pacem/pacem-foundation';\nimport * as Output from './index';\nDeepMerger.merge(Output);\n"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","MANAGED_EVENTS","MSECS_PER_DAY","SERIES_DATAITEM","SERIES_SERIES","getRoundedBoundaries","min","max","desiredSteps","Math","bestGuessedDensity","roughStep","magnitude","pow","floor","log10","step","map","n","filter","s","reduce","Number","POSITIVE_INFINITY","ceil","round","delta","oom","exp","capFn","norm","abs","roundoff","b","a","ret","gcd","ChartEvent","CustomUIEvent","constructor","type","eventInit","originalEvent","super","PacemChartSeriesElement","Components","PacemItemElement","values","this","datasource","Watch","emit","converter","PropertyConverters","Json","prototype","String","Boolean","CustomElement","tagName","P","SVG_NS","PacemSeriesChartElement","PacemItemsContainerElement","_itemPropertyChangedCallback","evt","propName","detail","propertyName","draw","_series","_resizeHandler","_size","_broadcastHandler","e","element","currentTarget","dataItem","CustomElementUtils","getAttachedPropertyValue","Utils","isNull","anchorPoint","getAnchorPoint","series","dispatchEvent","_key","uniqueCode","validate","item","register","addEventListener","PropertyChangeEventName","unregister","removeEventListener","propertyChangedCallback","name","old","val","first","_div","remove","_body","eold","classList","PCSS","innerHTML","_ensureResizer","_databindAndDrawDebounced","_databind","cancelAnimationFrame","_handle","requestAnimationFrame","_datasource","isNullOrEmpty","items","disconnectedCallback","resizer","_resizer","ResizeEventName","viewActivatedCallback","shell","findAncestorShell","appendChild","PacemResizeElement","chartSize","chartSeries","chartBody","chartGrid","_grid","chartMask","_mask","chartKey","chartContainer","assignUiBehaviors","ui","data","color","alreadyRegistered","extend","label","setAttachedPropertyValue","forEach","disposeUiBehaviors","deleteAttachedPropertyValue","ensureChartContainer","div","document","createElement","add","parentElement","insertBefore","ensureChartBody","w","h","svg","createElementNS","setAttribute","g","defs","mask","rect","rect0","id","chartDataItemToPoint","input","source","xAxisType","x","parseFloat","y","value","parseDate","valueOf","findIndex","getVirtualGrid","minX","maxX","minY","maxY","steps","labels","rangeY","stepY","j","push","lang","format","intl","xAxisFormat","Intl","NumberFormat","DateTimeFormat","formatOrLang","retval","l","fnDate","toLocaleDateString","toLocaleTimeString","fnDateFirst","toLocaleString","fnNum","getEvenlySpaced","wipeOut","startIndex","splice","buildLinearGradient","seriesIndex","invert","grad","addClass","stop1","stop2","setGradientColor","children","stop","SVGStopElement","style","stopColor","estimateYAxisLabelWidth","txt","formatYAxisLabel","estimateLabelWidth","grid","Error","lbl","textContent","size","offset","width","yAxisFormat","toString","estimateXAxisLabelWidth","formatXAxisLabel","date","Dates","parse","num","drawSeries","left","top","height","Element","Throttle","getSplineCtrlPoints","p","p0","p1","c0","c1","p0Null","p1Null","portion","m0","m1","m","dx0","dx1","GET_VAL","SET_VAL","SERIES_MAGNITUDE","PacemChartElement","hover","_enterHandler","_leaveHandler","_moveHandler","_chartFillSeries","_getVirtualGrid","_wipe","_setupBehavior","_dismantleBehavior","_buildLinearGradient","_setGradientColor","isReady","padding","every","body","log","Logging","LogLevel","Debug","yAxisMin","NaN","yAxisMax","stretch","pt","isNaN","withValues","find","yAxisDensity","xAxisDensity","topGrid","bottomGrid","maxYLabelLength","maxXLabelHalfLength","paddingYAxis","paddingYAxisEnd","seriesWidth","gridHeight","seriesHeight","seriesY","aspectRatio","iter","normX","normY","normPadding","buildPoint","it","chartFillSeries","splineHere","svgFill","firstElementChild","className","fill","pathFill","path","stroke","display","addInteractivePoint","center","ndx","circle","x1","y1","wipeExceedingPoints","remaining","datapoints","k","pt0","pt1","areaSoFar","svbox","concat","pgrid","lblCounter","ensureLabel","index","dgrid","xincr","yincr","xAxisPosition","xcoord","ycoord","PacemColumnChartElement","groupWidth","_safen","maxCount","accumulator","negative","positive","stacked","apply","slot","halfSlot","availSlot","halfAvailSlot","PADDING_PIXELS","xPad","accumulators","Array","gradInv","lastElementChild","insertAdjacentElement","spinRect","gradient","precision","assignVerticalCoordsCoords","pt0Start","fnAssign","toFixed","hasAttribute","pt00","iHalfAvailSlot","iAvailSlotAttr","posCursor","negCursor","neg","y0","iSlot","iSlotAttr","paddingX","PacemPieSliceElement","findContainer","findAncestorOfType","PacemPieChartElement","chart","container","getCenterOfMass","area","pos","normalizedPolarCoords","angle","PI1_2","radius","sin","cos","_assignUi","el","_ui","_disposeUi","TWO_PI","PI","cutout","slicePadding","_slices","WeakMap","_g","_svg","_ensureArea","maskBasedRendering","_safeCutout","removeAttribute","paddingPixels","_safeSlicePaddingPixels","paddingUnits","getCTM","maskId","_sliceMaskId","querySelector","maskPath","_drawSlice","slice","whole","partial","largeFlag","rot","transform","transformOrigin","SQRT1_2","_isSliceOk","disabled","_padSlice","pCount","chartArea","sum","progress","removeClass","g_n","set","slices","has","get","delete","removeChild","Debounce","DeepMerger","merge","Output"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pacem-charts.min.js","sources":["../esm/types.js","../esm/generic.js","../esm/column.js","../esm/pie.js","../esm/index-iife.js"],"sourcesContent":["var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P, PCSS, Components, CustomUIEvent, CustomElementUtils, Utils, Throttle, PropertyChangeEventName } from '@pacem/pacem-core';\n//namespace Pacem.Components.Charts {\nexport const MANAGED_EVENTS = ['keydown', 'keyup', 'click', 'dblclick', 'mouseover', 'mouseout', 'mouseenter', 'mouseleave', 'mousedown', 'mouseup', 'mousemove', 'contextmenu'];\n;\n//function logN(N, x) {\n// return Math.log10(x) / Math.log10(N);\n//}\nconst MSECS_PER_DAY = 1000 * 60 * 60 * 24;\nconst MAX_X_LABELS = 10;\nconst MAX_Y_LABELS = 10;\nconst SERIES_DATAITEM = 'pacem:chart-series:dataitem';\nconst SERIES_SERIES = 'pacem:chart-series:series';\nfunction getEvenlySpaced(items, type, min, max, formatOrLang, labels = MAX_X_LABELS) {\n const length = (type === 'number' || type === 'date') ? (max - min) : Math.max(1, items.length - 1);\n const gaps = labels - 1;\n var retval = [];\n var step = 1;\n for (var l = gaps; l > 1; l--) {\n if ((length % l) === 0) {\n step = length / l;\n break;\n }\n }\n if (step === 1 /* coprime number? */ && length > labels) {\n step = length;\n }\n const fnDate = typeof formatOrLang === 'function' ? formatOrLang : (step >= MSECS_PER_DAY ? ((d) => d.toLocaleDateString(formatOrLang)) : ((d) => d.toLocaleTimeString(formatOrLang)));\n const fnDateFirst = typeof formatOrLang === 'function' ? formatOrLang : (step < MSECS_PER_DAY ? ((d) => d.toLocaleString(formatOrLang)) : fnDate);\n const fnNum = typeof formatOrLang === 'function' ? formatOrLang : (n) => n.toLocaleString(formatOrLang);\n for (var j = 0; j <= length; j += step) {\n let label;\n switch (type) {\n case 'string':\n if (j >= items.length) {\n continue;\n }\n label = items[j].label;\n break;\n case 'number':\n label = fnNum(min + j);\n break;\n case 'date':\n let date = Utils.parseDate(min + j);\n let fn = (j == 0) ? fnDateFirst : fnDate;\n label = fn(date);\n break;\n default:\n throw 'Not supported.';\n }\n retval.push(label);\n }\n return retval;\n}\nfunction getRoundedBoundaries(min, max, desiredSteps) {\n desiredSteps ??= Math.min(bestGuessedDensity(min, max), MAX_Y_LABELS);\n const roughStep = (max - min) / desiredSteps;\n const magnitude = Math.pow(10, Math.floor(Math.log10(roughStep)));\n const step = [1, 2, 5, 10].map(n => n * magnitude).filter(s => s >= roughStep).reduce((min, s) => Math.min(min, s), Number.POSITIVE_INFINITY);\n return {\n min: Math.floor(min / step) * step,\n max: Math.ceil(max / step) * step,\n round: step\n };\n}\n// Deprecated\n//function getRoundedBoundariesOld(a0: number, a1: number, steps?: number) {\n// if (!(steps > 0)) {\n// steps = bestGuessedDensity(a0, a1);\n// }\n// const magn = logN(steps, a1 - a0),\n// exp = magn % 1 == 0 ? magn - 1 : magn,\n// rounder = Math.pow(steps, Math.floor(exp));\n// return {\n// min: Math.floor(a0 / rounder) * rounder,\n// max: Math.ceil(a1 / rounder) * rounder,\n// round: rounder\n// };\n//}\nfunction bestGuessedDensity(min, max) {\n const delta = max - min;\n if (!(delta > 0)) {\n return 2;\n }\n const oom = Math.floor(Math.log10(delta));\n const exp = Math.pow(10, -oom);\n // bring everything to a single digit format\n if (oom != 0) {\n return bestGuessedDensity(min * exp, max * exp);\n }\n const capFn = (n) => {\n const norm = Math.floor(Math.abs(n) * 10), limit = norm + 10 - (norm % 10);\n return limit.roundoff();\n };\n const b = capFn(delta);\n let a = 10;\n if (min !== 0) {\n a = capFn(Math.abs(max));\n }\n const ret = gcd(a, b);\n return ret === 1 ? b : Math.max(ret, 10 - ret);\n}\nfunction gcd(a, b) {\n if (a <= 0) {\n return b;\n }\n return gcd(b % a, a);\n}\nexport class ChartEvent extends CustomUIEvent {\n constructor(type, eventInit, originalEvent) {\n super(type, eventInit, originalEvent);\n }\n}\nlet PacemChartSeriesElement = class PacemChartSeriesElement extends Components.PacemItemElement {\n get values() {\n return this.datasource;\n }\n};\n__decorate([\n Watch({ emit: true, converter: PropertyConverters.Json })\n], PacemChartSeriesElement.prototype, \"datasource\", void 0);\n__decorate([\n Watch({ emit: true, converter: PropertyConverters.String })\n], PacemChartSeriesElement.prototype, \"label\", void 0);\n__decorate([\n Watch({ emit: true, converter: PropertyConverters.String })\n], PacemChartSeriesElement.prototype, \"color\", void 0);\n__decorate([\n Watch({ emit: true, converter: PropertyConverters.Boolean })\n], PacemChartSeriesElement.prototype, \"datapoints\", void 0);\n__decorate([\n Watch( /* to be set programmatically (internally) */)\n], PacemChartSeriesElement.prototype, \"_uiElements\", void 0);\nPacemChartSeriesElement = __decorate([\n CustomElement({ tagName: P + '-chart-series' })\n], PacemChartSeriesElement);\nexport { PacemChartSeriesElement };\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\nexport class PacemSeriesChartElement extends Components.PacemItemsContainerElement {\n constructor() {\n super();\n this._itemPropertyChangedCallback = (evt) => {\n const propName = evt.detail.propertyName;\n if (propName === 'datasource'\n || propName === 'label'\n || propName === 'datapoints'\n || propName === 'cssClass'\n || propName === 'color') {\n this.draw();\n }\n };\n this._series = [];\n this._resizeHandler = (evt) => {\n this._size = evt.detail;\n this.draw();\n };\n // #endregion\n this._broadcastHandler = (e) => {\n /* Don't mess with the events:\n * keep the original (trusted) events with their well-known names\n * and provide a method to retrieve the 'ChartDataItem' based on the the eventTarget. */\n const element = e.currentTarget;\n const dataItem = CustomElementUtils.getAttachedPropertyValue(element, SERIES_DATAITEM);\n if (Utils.isNull(dataItem)) {\n return;\n }\n const chart = this, anchorPoint = chart.getAnchorPoint(element);\n const evt = new ChartEvent('item' + e.type, { detail: { dataItem, anchorPoint } }, e);\n const series = CustomElementUtils.getAttachedPropertyValue(element, SERIES_SERIES);\n if (series instanceof PacemChartSeriesElement) {\n series.dispatchEvent(evt);\n }\n chart.dispatchEvent(evt);\n };\n this._key = Utils.uniqueCode();\n }\n validate(item) {\n return item instanceof PacemChartSeriesElement;\n }\n register(item) {\n if (super.register(item)) {\n item.addEventListener(PropertyChangeEventName, this._itemPropertyChangedCallback, false);\n return true;\n }\n return false;\n }\n unregister(item) {\n if (super.unregister(item)) {\n item.removeEventListener(PropertyChangeEventName, this._itemPropertyChangedCallback, false);\n return true;\n }\n return false;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'target') {\n if (this._div != old) {\n this._div && this._div.remove();\n }\n // reset\n this._div = null;\n this._body = null; // <- get checked on next draw\n const eold = old;\n if (eold) {\n eold.classList.remove(PCSS + '-chart-area');\n eold.innerHTML = '';\n }\n this._ensureResizer();\n this.draw();\n }\n else if (!first) {\n switch (name) {\n case 'items':\n this._databindAndDrawDebounced();\n break;\n case 'datasource':\n this._databind();\n // fall down to draw() call.\n case 'yAxisDensity':\n case 'xAxisDensity':\n case 'xAxisType':\n case 'yAxisMax':\n case 'xAxisPosition':\n case 'yAxisFormat':\n this.draw();\n break;\n }\n }\n }\n _databindAndDrawDebounced() {\n cancelAnimationFrame(this._handle);\n this._handle = requestAnimationFrame(() => {\n this._databind();\n this.draw();\n });\n }\n _databind() {\n this._datasource = Utils.isNullOrEmpty(this.datasource) ? this.items : this.datasource;\n }\n disconnectedCallback() {\n this._div && this._div.remove();\n const resizer = this._resizer;\n if (!Utils.isNull(resizer)) {\n resizer.removeEventListener(Components.ResizeEventName, this._resizeHandler, false);\n resizer.remove();\n this._resizer = null;\n }\n super.disconnectedCallback();\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this._ensureResizer();\n this._databind();\n this.draw();\n }\n _ensureResizer(target = this.target || this._div) {\n if (Utils.isNull(this._resizer)) {\n const shell = CustomElementUtils.findAncestorShell(this);\n const resizer = this._resizer = shell.appendChild(new Components.PacemResizeElement());\n resizer.addEventListener(Components.ResizeEventName, this._resizeHandler, false);\n }\n this._resizer.target = target;\n }\n // #region OO-scoped props\n get chartSize() {\n return this._size;\n }\n get chartSeries() {\n return this._series;\n }\n get chartBody() {\n return this._body;\n }\n get chartGrid() {\n return this._grid;\n }\n get chartMask() {\n return this._mask;\n }\n get chartKey() {\n return this._key;\n }\n get chartContainer() {\n return this._div;\n }\n assignUiBehaviors(ui, series, data, color) {\n const alreadyRegistered = !Utils.isNull(CustomElementUtils.getAttachedPropertyValue(ui, SERIES_DATAITEM));\n const item = Utils.extend({ series: series.label, color: color || series.color }, data);\n CustomElementUtils.setAttachedPropertyValue(ui, SERIES_DATAITEM, item);\n CustomElementUtils.setAttachedPropertyValue(ui, SERIES_SERIES, series);\n if (!alreadyRegistered) {\n MANAGED_EVENTS.forEach(type => {\n ui.addEventListener(type, this._broadcastHandler);\n });\n }\n }\n disposeUiBehaviors(ui) {\n CustomElementUtils.deleteAttachedPropertyValue(ui, SERIES_DATAITEM);\n CustomElementUtils.deleteAttachedPropertyValue(ui, SERIES_SERIES);\n MANAGED_EVENTS.forEach(type => {\n ui.removeEventListener(type, this._broadcastHandler);\n });\n }\n ensureChartContainer() {\n if (Utils.isNull(this._div)) {\n let div = this._div = this.target || document.createElement('div');\n div.classList.add(PCSS + '-chart-area');\n if (div != this.target) {\n this.parentElement.insertBefore(div, this);\n }\n }\n return this._div;\n }\n ensureChartBody(type, w, h) {\n if (Utils.isNull(this._body)) {\n let svg = this._body = document.createElementNS(SVG_NS, 'svg');\n svg.setAttribute('pacem', '');\n svg.setAttribute('class', PCSS + '-' + type + '-chart');\n svg.setAttribute('preserveAspectRatio', 'xMinYMax slice');\n const g = this._grid = document.createElementNS(SVG_NS, 'svg');\n g.setAttribute('pacem', '');\n g.setAttribute('class', 'chart-grid');\n // put mask on series\n let defs = document.createElementNS(SVG_NS, 'defs');\n let mask = this._mask = document.createElementNS(SVG_NS, 'mask');\n // black (hides)\n let rect = document.createElementNS(SVG_NS, 'rect');\n rect.setAttribute('x', '0');\n rect.setAttribute('y', '0');\n rect.setAttribute('width', '100%');\n rect.setAttribute('height', '100%');\n // white (shows)\n let rect0 = document.createElementNS(SVG_NS, 'rect');\n rect0.setAttribute('y', '0');\n rect0.setAttribute('width', '100%');\n rect0.setAttribute('fill', '#fff');\n mask.id = 'gnrc_mask_' + this._key;\n mask.appendChild(rect);\n mask.appendChild(rect0);\n // place mask on series so that lines won't be rendered outside the grid borders\n //g2.setAttribute('mask', 'url(#' + mask.id + ')');\n defs.appendChild(mask);\n svg.appendChild(defs);\n svg.appendChild(g);\n this._div.appendChild(svg);\n }\n return this._body;\n }\n chartDataItemToPoint(input, source) {\n switch (this.xAxisType || 'string') {\n case 'number':\n return { x: parseFloat(input.label), y: input.value };\n case 'date':\n return { x: Utils.parseDate(input.label).valueOf(), y: input.value };\n case 'string':\n return { x: source.findIndex(e => e.label == input.label), y: input.value };\n default:\n throw 'Not supported.';\n }\n }\n getVirtualGrid(items, minX, maxX, minY, maxY, xAxisType = this.xAxisType, steps, labels) {\n const rangeY = getRoundedBoundaries(minY, maxY, steps), stepY = rangeY.round;\n // fill y-axis array\n var y = [];\n for (let j = rangeY.min; j <= rangeY.max; j += stepY) {\n y.push(j.roundoff());\n }\n // fill x-axis array;\n let lang = Utils.lang(this);\n let format = null;\n const intl = this.xAxisFormat;\n if (!Utils.isNullOrEmpty(intl)) {\n switch (xAxisType) {\n case 'number':\n format = (n) => Intl.NumberFormat(lang, intl).format(n);\n break;\n case 'date':\n format = (n) => Intl.DateTimeFormat(lang, intl).format(Utils.parseDate(n));\n break;\n }\n }\n const x = getEvenlySpaced(items, xAxisType, minX, maxX, format ?? lang, labels);\n return { x, y };\n }\n wipeOut(series = this._series, startIndex = 0) {\n for (var j = series.length - 1; j >= startIndex; j--) {\n series[j].remove();\n }\n series.splice(startIndex);\n }\n buildLinearGradient(seriesIndex, invert = false) {\n const grad = document.createElementNS(SVG_NS, 'linearGradient');\n grad.id = this.chartKey + '_grad' + seriesIndex + (invert ? '_inverted' : '');\n if (invert) {\n Utils.addClass(grad, 'bottom-up');\n }\n grad.setAttribute('x1', '0%');\n grad.setAttribute('x2', '0%');\n grad.setAttribute('y1', '0%');\n grad.setAttribute('y2', '100%');\n grad.setAttribute('spreadMethod', 'pad');\n const stop1 = document.createElementNS(SVG_NS, 'stop');\n stop1.setAttribute('offset', '0%');\n const stop2 = document.createElementNS(SVG_NS, 'stop');\n stop2.setAttribute('offset', '100%');\n grad.appendChild(stop1);\n grad.appendChild(stop2);\n return grad;\n }\n setGradientColor(grad, color) {\n for (let j = 0; j < grad.children.length; j++) {\n const stop = grad.children.item(j);\n if (stop instanceof SVGStopElement) {\n stop.style.stopColor = color;\n }\n }\n }\n estimateYAxisLabelWidth(max) {\n const txt = this.formatYAxisLabel(max);\n return this.estimateLabelWidth(txt);\n }\n estimateLabelWidth(txt) {\n const grid = this._grid;\n if (Utils.isNull(grid)) {\n throw new Error('Unable to estimate label without an underlying grid available.');\n }\n const lbl = document.createElementNS(SVG_NS, 'text');\n lbl.textContent = txt;\n grid.appendChild(lbl);\n const size = Utils.offset(lbl);\n lbl.remove();\n return size.width;\n }\n formatYAxisLabel(y) {\n const intl = this.yAxisFormat;\n return Utils.isNullOrEmpty(intl) ? y.toString() : Intl.NumberFormat(Utils.lang(this), intl).format(y);\n }\n estimateXAxisLabelWidth(max) {\n const txt = this.formatXAxisLabel(max);\n return this.estimateLabelWidth(txt);\n }\n formatXAxisLabel(x) {\n const intl = this.xAxisFormat, lang = Utils.lang(this);\n switch (this.xAxisType) {\n case 'date':\n const date = Utils.Dates.parse(x);\n return Utils.isNullOrEmpty(intl) ? date.toLocaleString(lang) : Intl.DateTimeFormat(lang, intl).format(date);\n case 'number':\n const num = x;\n return Utils.isNullOrEmpty(intl) ? num.toLocaleString(lang) : Intl.NumberFormat(lang, intl).format(num);\n default:\n return x;\n }\n }\n draw() {\n this.drawSeries(this._datasource);\n }\n /**\n * Default implementation.\n * @param element\n */\n getAnchorPoint(element) {\n const rect = Utils.offset(element);\n return { x: rect.left + rect.width * .5, y: rect.top + rect.height * .5 };\n }\n}\n__decorate([\n Watch({ converter: PropertyConverters.Element })\n], PacemSeriesChartElement.prototype, \"target\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemSeriesChartElement.prototype, \"xAxisType\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemSeriesChartElement.prototype, \"xAxisPosition\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], PacemSeriesChartElement.prototype, \"datasource\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemSeriesChartElement.prototype, \"yAxisDensity\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemSeriesChartElement.prototype, \"xAxisDensity\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemSeriesChartElement.prototype, \"yAxisMin\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemSeriesChartElement.prototype, \"yAxisMax\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], PacemSeriesChartElement.prototype, \"yAxisFormat\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], PacemSeriesChartElement.prototype, \"xAxisFormat\", void 0);\n__decorate([\n Throttle(true)\n], PacemSeriesChartElement.prototype, \"draw\", null);\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P, PCSS, Utils, CustomElementUtils, Logging } from '@pacem/pacem-core';\nimport { PacemSeriesChartElement } from './types';\n//namespace Pacem.Components.Charts {\n/**\n * Returns the anchor points for a Bézier curve.\n * @param p The actual point.\n * @param p0 The previous point, if any.\n * @param p1 The next point, if any.\n */\nfunction getSplineCtrlPoints(p, p0, p1) {\n let c0 = p, c1 = p;\n const p0Null = Utils.isNull(p0), p1Null = Utils.isNull(p1);\n if (!(p0Null && p1Null)) {\n const portion = 3;\n let m0, m1;\n if (!p0Null) {\n m0 = (p.y - p0.y) / (p.x - p0.x);\n }\n if (!p1Null) {\n m1 = (p1.y - p.y) / (p1.x - p.x);\n }\n // average slope\n const m = ((m1 || (m0 || 0)) + (m0 || (m1 || 0))) / 2;\n const dx0 = p0Null ? 0 : (p.x - p0.x) / portion;\n const dx1 = p1Null ? 0 : (p1.x - p.x) / portion;\n c0 = { x: p.x - dx0, y: p.y - dx0 * m };\n c1 = { x: p.x + dx1, y: p.y + dx1 * m };\n }\n return { c0: c0, c1: c1 };\n}\nconst GET_VAL = CustomElementUtils.getAttachedPropertyValue;\nconst SET_VAL = CustomElementUtils.setAttachedPropertyValue;\nconst DEL_VAL = CustomElementUtils.deleteAttachedPropertyValue;\nconst PADDING_PIXELS = 24;\nconst SERIES_MAGNITUDE = 'pacem:chart-series:area';\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\nlet PacemChartElement = class PacemChartElement extends PacemSeriesChartElement {\n constructor() {\n super(...arguments);\n this.#hover = false;\n this._enterHandler = (evt) => {\n this.#hover = true;\n };\n this._leaveHandler = (evt) => {\n this.#hover = false;\n };\n this._moveHandler = (evt) => {\n if (!this.#hover) {\n return;\n }\n };\n this._chartFillSeries = [];\n }\n // TODO: implement\n // @Watch({ converter: PropertyConverters.String }) hoverMode: 'abscissa' | 'point'; // 'point' assumed as default\n _getVirtualGrid(items, minX, maxX, minY, maxY, xAxisType = this.xAxisType, steps, labels) {\n return super.getVirtualGrid(items, minX, maxX, minY, maxY, xAxisType, steps, labels);\n }\n _wipe(series = this.chartSeries, startIndex = 0) {\n super.wipeOut(series, startIndex);\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this._setupBehavior();\n }\n disconnectedCallback() {\n this._dismantleBehavior();\n super.disconnectedCallback();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'type':\n case 'aspectRatio':\n this.draw();\n break;\n }\n }\n _setupBehavior() {\n this.addEventListener('mouseenter', this._enterHandler, false);\n this.addEventListener('mouseleave', this._enterHandler, false);\n this.addEventListener('mousemove', this._moveHandler, false);\n }\n _dismantleBehavior() {\n this.removeEventListener('mouseenter', this._enterHandler, false);\n this.removeEventListener('mouseleave', this._leaveHandler, false);\n this.removeEventListener('mousemove', this._moveHandler, false);\n }\n #hover;\n _buildLinearGradient(seriesIndex) {\n return super.buildLinearGradient(seriesIndex);\n }\n _setGradientColor(grad, color) {\n super.setGradientColor(grad, color);\n }\n drawSeries(datasource) {\n if (!this.isReady || Utils.isNull(this.chartSize)) {\n return;\n }\n this.ensureChartContainer();\n const type = this.type || 'line';\n const padding = PADDING_PIXELS;\n // resize all\n var size = this.chartSize;\n if (size.height <= padding || size.width <= padding) {\n return;\n }\n // items && labels?\n if (Utils.isNullOrEmpty(datasource) || datasource.every(i => Utils.isNullOrEmpty(i.values))) {\n this._wipe();\n return;\n }\n const body = this.ensureChartBody('line', size.width, size.height);\n // from now on, drawing...\n this.log(Logging.LogLevel.Debug, `Drawing ${type} chart.`);\n // #region computations\n const xAxisType = this.xAxisType || 'string';\n let minY = this.yAxisMin ?? Number.NaN, maxY = this.yAxisMax ?? Number.NaN, minX = Number.NaN, maxX = Number.NaN;\n let stretch = 1;\n // individuate the min/max x & y in order correctly apply aspect ratio...\n for (let series of datasource) {\n let data = series.values;\n if (data && data.length) {\n let j = 0;\n for (let item of data) {\n let pt = this.chartDataItemToPoint(item, data);\n if (Utils.isNull(this.yAxisMin)) {\n minY = isNaN(minY) ? pt.y : Math.min(minY, pt.y);\n }\n if (Utils.isNull(this.yAxisMax)) {\n maxY = isNaN(maxY) ? pt.y : Math.max(maxY, pt.y);\n }\n if (j === 0)\n minX = isNaN(minX) ? pt.x : Math.min(minX, pt.x);\n else if (j === data.length - 1)\n maxX = isNaN(maxX) ? pt.x : Math.max(maxX, pt.x);\n j++;\n }\n }\n }\n /** virtual grid made of x- and y-axis labels */\n const withValues = datasource.find(i => !Utils.isNullOrEmpty(i.values));\n const grid = this._getVirtualGrid(withValues.values, minX, maxX, minY, maxY, xAxisType, this.yAxisDensity, this.xAxisDensity);\n const topGrid = grid.y[grid.y.length - 1], bottomGrid = grid.y[0];\n if (topGrid === bottomGrid)\n return;\n // estimate y-axis max width\n const halfPad = padding * .5;\n const maxYLabelLength = grid.y.reduce((max, i) => Math.max(max, this.estimateYAxisLabelWidth(i) + halfPad), padding);\n const maxXLabelHalfLength = grid.x.reduce((max, i) => Math.max(max, this.estimateXAxisLabelWidth(i)), padding) * .5;\n const paddingYAxis = Math.max(maxXLabelHalfLength, maxYLabelLength), paddingYAxisEnd = maxXLabelHalfLength; // Math.max(padding, this.estimateXAxisLabelWidth(minX) * .5 + PADDING_PIXELS);\n /** width of the WHOLE series dedicated area */\n const seriesWidth = size.width - paddingYAxis - paddingYAxisEnd;\n /** height of the WHOLE series dedicated area */\n const gridHeight = (size.height - 2 * padding);\n const seriesHeight = gridHeight * (1 - (topGrid - bottomGrid - (maxY - minY)) / (topGrid - bottomGrid));\n const seriesY = gridHeight * (topGrid - maxY) / (topGrid - bottomGrid);\n // const seriesY2 = gridHeight * (minY - bottomGrid) / (topGrid - bottomGrid);\n // if not a `graph`\n if (xAxisType !== 'number' || (this.aspectRatio !== 'monometric' && this.aspectRatio !== 'logaritmic')) {\n // consider padding\n stretch = seriesWidth / seriesHeight;\n body.setAttribute('height', size.height.toString());\n body.setAttribute('width', size.width.toString());\n }\n body.setAttribute('viewBox', `0 0 ${size.width} ${size.height}`);\n // #endregion\n // #region render series\n let iter = 0;\n // normalize\n const spanX = maxX - minX, spanY = maxY - minY;\n const normX = 100 * stretch / spanX, normY = 100 / spanY;\n const normPadding = 100 * padding / seriesHeight;\n const buildPoint = (it, series) => {\n let p = this.chartDataItemToPoint(it, series);\n //pt.x *= normX;\n p.y *= normY;\n // Limit as much as possible the magnitude of a number inclued in the svg.\n // Big numbers \"overflow the renderer\".\n p.x = (p.x - minX) * normX;\n //pt.y = (pt.y - minY) * normY;\n return p;\n };\n const chartSeries = this.chartSeries;\n const chartFillSeries = this._chartFillSeries;\n const chartGrid = this.chartGrid;\n const splineHere = type === 'spline' || type === 'splinearea';\n for (let series of datasource) {\n // does the series svg exist?\n let svg, svgFill;\n let grad;\n if (chartSeries.length > iter) {\n svg = chartSeries[iter];\n svgFill = chartFillSeries[iter];\n grad = svgFill.firstElementChild.firstElementChild;\n }\n else {\n svg = document.createElementNS(SVG_NS, 'svg');\n svg.setAttribute('pacem', '');\n body.appendChild(svg);\n svgFill = document.createElementNS(SVG_NS, 'svg');\n svgFill.setAttribute('pacem', '');\n body.insertBefore(svgFill, body.children.item(iter + /* <defs> should remain the very first child and 'grid' the very second */ 2));\n // 1st child - defs (gradient)\n const defs = document.createElementNS(SVG_NS, 'defs');\n defs.appendChild(grad = this._buildLinearGradient(iter));\n svgFill.appendChild(defs);\n // 2nd child - fill path\n svgFill.appendChild(document.createElementNS(SVG_NS, 'path'));\n chartFillSeries.push(svgFill);\n // 1st child stroke path\n svg.appendChild(document.createElementNS(SVG_NS, 'path'));\n // 2nd + nth+1 child will be point circles\n chartSeries.push(svg);\n }\n // series positioning:\n /*\n --------------------------------------\n | |--------------------------------|\n |pad| series here |\n | |--------------------------------|\n --------------------------------------\n | | pad |\n --------------------------------------\n */\n let className = 'chart-series';\n const fill = type === 'area' || type === 'splinearea';\n if (!Utils.isNullOrEmpty(series.className)) {\n className += ' ' + series.className;\n }\n [svg, svgFill].forEach(s => {\n s.setAttribute('class', className);\n s.setAttribute('x', paddingYAxis.toString());\n s.setAttribute('y', seriesY.toString());\n s.setAttribute('width', seriesWidth.toString());\n s.setAttribute('height', (seriesHeight + 2 * padding).toString());\n });\n Utils.addClass(svgFill, PCSS + '-inert');\n // pick path as single child element for the series.\n let pathFill = svgFill.children.item(1);\n let path = svg.firstElementChild;\n path.style.stroke = series.color;\n pathFill.style.stroke =\n path.style.fill = 'none';\n this._setGradientColor(grad, series.color);\n pathFill.style.fill = `url(#${grad.id})`;\n pathFill.style.display = fill ? '' : 'none';\n let d = '';\n let data = series.values;\n if (data && data.length) {\n const addInteractivePoint = (center, j, series, dataItem, color) => {\n const ndx = j + /* count the <path> child */ 1;\n let circle;\n if (svg.children.length > ndx) {\n circle = svg.children.item(ndx);\n }\n else {\n circle = document.createElementNS(SVG_NS, 'line');\n circle.setAttribute('class', 'circle');\n svg.appendChild(circle);\n }\n const x1 = center.x.toString(), y1 = (-center.y).toString();\n circle.setAttribute('x1', x1);\n circle.setAttribute('y1', y1);\n circle.setAttribute('x2', x1);\n circle.setAttribute('y2', y1);\n circle.style.stroke = color;\n this.assignUiBehaviors(circle, series, dataItem, color);\n };\n const wipeExceedingPoints = () => {\n const remaining = series.datapoints ? (data.length + 1) : 1;\n for (let k = svg.children.length - 1; k >= remaining; k--) {\n var circle = svg.children.item(k);\n this.disposeUiBehaviors(circle);\n circle.remove();\n }\n };\n if (splineHere) {\n // #region SPLINE\n let pt0, pt, c0;\n for (let j = 0; j < data.length; j++) {\n const item = data[j];\n if (isNaN(item.value)) {\n continue;\n }\n if (!pt) {\n pt = buildPoint(item, data);\n }\n let pt1;\n if (splineHere && j < (data.length - 1)) {\n pt1 = buildPoint(data[j + 1], data);\n }\n // accumulate `area` for sorting\n let areaSoFar = GET_VAL(series, SERIES_MAGNITUDE, 0);\n areaSoFar += item.value;\n SET_VAL(series, SERIES_MAGNITUDE, areaSoFar);\n var c = getSplineCtrlPoints(pt, pt0, pt1);\n d += Utils.isNullOrEmpty(d) ? `M${pt.x},${-pt.y} ` : `C${c0.x},${-c0.y} ${c.c0.x},${-c.c0.y} ${pt.x},${-pt.y} `;\n if (series.datapoints) {\n addInteractivePoint(pt, j, series, item, series.color);\n }\n // step next\n pt0 = pt;\n pt = pt1, c0 = c.c1;\n }\n // #endregion\n }\n else {\n // #region LINE\n let j = 0;\n for (let item of data) {\n if (isNaN(item.value)) {\n continue;\n }\n const pt = buildPoint(item, data);\n // accumulate `area` for sorting\n let areaSoFar = GET_VAL(series, SERIES_MAGNITUDE, 0);\n areaSoFar += item.value;\n SET_VAL(series, SERIES_MAGNITUDE, areaSoFar);\n d += Utils.isNullOrEmpty(d) ? `M${pt.x},${-pt.y} ` : `L${pt.x},${-pt.y} `;\n if (series.datapoints) {\n addInteractivePoint(pt, j, series, item, series.color);\n }\n j++;\n }\n // #endregion\n }\n wipeExceedingPoints();\n }\n path.setAttribute('d', d);\n pathFill.setAttribute('d', d + `V${(-minY * normY)} H0 Z`);\n // tick\n iter++;\n }\n // remove exceeding series\n this._wipe(chartFillSeries, iter);\n this._wipe(chartSeries, iter);\n const w0 = 100 * stretch, h0 = 100 + 2 * normPadding, x0 = 0, //minX * normX,\n y0 = maxY * normY + normPadding;\n const svbox = `${x0} ${-y0} ${w0} ${h0}`;\n for (var svg of chartSeries.concat(chartFillSeries)) {\n svg.setAttribute('viewBox', svbox);\n }\n const chartMask = this.chartMask;\n let mask = chartMask.children.item(1);\n mask.setAttribute('x', x0.toString());\n mask.setAttribute('height', (size.height - padding).toString());\n // #endregion\n // #region grid\n chartGrid.setAttribute('viewBox', `0 0 ${size.width} ${size.height}`);\n if (grid.x.length <= 1 || grid.y.length <= 1) {\n for (let j = chartGrid.children.length - 1; j >= 0; j--) {\n chartGrid.children.item(j).remove();\n }\n return;\n }\n let pgrid;\n if (chartGrid.children.length > 0) {\n pgrid = chartGrid.children.item(0);\n }\n else {\n pgrid = document.createElementNS(SVG_NS, 'path');\n chartGrid.appendChild(pgrid);\n }\n const tick = padding * .25;\n let lblCounter = 0;\n let ensureLabel = (index, x, y, txt) => {\n const ndx = index + /* <path> is the first child element */ 1;\n let lbl;\n if (chartGrid.children.length <= ndx) {\n lbl = document.createElementNS(SVG_NS, 'text');\n chartGrid.appendChild(lbl);\n }\n else {\n lbl = chartGrid.children.item(ndx);\n }\n lbl.textContent = txt;\n lbl.setAttribute('x', x.toString());\n lbl.setAttribute('y', y.toString());\n return lbl;\n };\n let dgrid = `M${paddingYAxis},${padding} v${gridHeight}`; //H${w}\n // x\n let j = 0;\n const xincr = seriesWidth / (grid.x.length - 1), yincr = gridHeight / (grid.y.length - 1);\n if (this.xAxisPosition !== 'none') {\n for (var x of grid.x) {\n const xcoord = paddingYAxis + j * xincr;\n if (this.xAxisPosition === 'top') {\n dgrid += ` M${xcoord},${padding} v${-tick}`;\n let lbl = ensureLabel(lblCounter++, xcoord, 0, x);\n lbl.setAttribute('text-anchor', 'middle');\n lbl.setAttribute('alignment-baseline', 'hanging');\n }\n else {\n let ycoord = gridHeight + padding;\n dgrid += ` M${xcoord},${ycoord} v${tick}`;\n ensureLabel(lblCounter++, xcoord, ycoord + padding, x).setAttribute('text-anchor', 'middle');\n }\n j++;\n }\n }\n // y\n j = 0;\n for (var y of grid.y) {\n const ycoord = gridHeight + padding - j * yincr, xcoord = paddingYAxis - tick;\n dgrid += ` M${xcoord},${ycoord} H${(seriesWidth + paddingYAxis)}`;\n let txt = this.formatYAxisLabel(y);\n ensureLabel(lblCounter++, xcoord - tick, ycoord, txt).setAttribute('text-anchor', 'end');\n j++;\n }\n pgrid.setAttribute('d', dgrid);\n // exceeding labels?\n for (let j = chartGrid.children.length - 1; j > lblCounter; j--) {\n chartGrid.children.item(j).remove();\n }\n // #endregion\n // #region abscissa cursor\n // #endregion\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemChartElement.prototype, \"type\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemChartElement.prototype, \"aspectRatio\", void 0);\nPacemChartElement = __decorate([\n CustomElement({ tagName: P + '-chart' })\n], PacemChartElement);\nexport { PacemChartElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P, Utils, Logging } from '@pacem/pacem-core';\nimport { PacemSeriesChartElement } from './types';\n//namespace Pacem.Components.Charts {\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\nconst PADDING_PIXELS = 24;\nlet PacemColumnChartElement = class PacemColumnChartElement extends PacemSeriesChartElement {\n constructor() {\n super(...arguments);\n /** Set a value between 0 and 1, for the columns' stack/cluster horizontal size (percentage of the available space). */\n this.groupWidth = .0;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'type' || name === 'groupWidth') {\n this.draw();\n }\n }\n _safen(w = this.groupWidth) {\n return Math.min(1, Math.max(w || .75, 0));\n }\n drawSeries(datasource) {\n if (!this.isReady || Utils.isNull(this.chartSize)) {\n return;\n }\n const div = this.ensureChartContainer();\n const type = this.type || 'cluster';\n const padding = PADDING_PIXELS;\n // resize all\n var size = this.chartSize;\n if (size.height <= padding || size.width <= padding) {\n return;\n }\n // items && labels?\n if (Utils.isNullOrEmpty(datasource) || datasource.every(i => Utils.isNullOrEmpty(i.values))) {\n this.wipeOut();\n return;\n }\n const body = this.ensureChartBody('column', size.width, size.height);\n // from now on, drawing...\n this.log(Logging.LogLevel.Debug, `Drawing ${type} chart.`);\n // #region computations\n const xAxisType = this.xAxisType || 'string';\n let minY = this.yAxisMin ?? 0, maxY = this.yAxisMax ?? 0, minX = 0, maxX = 0, maxCount = 0;\n let stretch = 1;\n const accumulator = { negative: [], positive: [] };\n // individuate the min/max x & y in order correctly apply aspect ratio...\n for (let series of datasource) {\n let data = series.values;\n if (!Utils.isNullOrEmpty(data)) {\n let j = 0;\n for (let item of data) {\n accumulator.positive[j] = accumulator.positive[j] || 0;\n accumulator.negative[j] = accumulator.negative[j] || 0;\n let pt = this.chartDataItemToPoint(item, data);\n if (Utils.isNull(this.yAxisMin)) {\n minY = Math.min(minY, pt.y);\n }\n if (Utils.isNull(this.yAxisMax)) {\n maxY = Math.max(maxY, pt.y);\n }\n minX = Math.min(minX, pt.x);\n maxX = Math.max(maxX, pt.x);\n if (pt.y > 0) {\n accumulator.positive[j] += pt.y;\n }\n else if (pt.y < 0) {\n accumulator.negative[j] += pt.y;\n }\n j++;\n }\n maxCount = Math.max(maxCount, data.length);\n }\n }\n const stacked = type === 'stack';\n if (stacked) {\n if (Utils.isNull(this.yAxisMin))\n minY = Math.min.apply(null, accumulator.negative);\n if (Utils.isNull(this.yAxisMax))\n maxY = Math.max.apply(null, accumulator.positive);\n }\n if (maxX === 0 && maxX === minX) {\n maxX = 1;\n }\n // add \"1 slot\" (half at the beginning and half after the end)\n const slot = (maxX - minX) / maxCount, halfSlot = slot * .5, \n // the following are usefule during the very rendering\n availSlot = slot * this._safen(this.groupWidth), halfAvailSlot = availSlot * .5;\n /** virtual grid made of x- and y-axis labels */\n const withValues = datasource.find(i => !Utils.isNullOrEmpty(i.values));\n const grid = this.getVirtualGrid(withValues.values, minX - halfSlot, maxX + halfSlot, minY, maxY, xAxisType, this.yAxisDensity, this.xAxisDensity);\n const topGrid = grid.y[grid.y.length - 1], bottomGrid = grid.y[0];\n if (topGrid === bottomGrid) {\n return;\n }\n // estimate y-axis max width\n const halfPad = PADDING_PIXELS * .5;\n const paddingYAxis = grid.y.reduce((max, i) => Math.max(max, this.estimateYAxisLabelWidth(i) + halfPad), padding);\n /** width of the WHOLE series dedicated area */\n const seriesWidth = size.width - paddingYAxis - padding;\n /** height of the WHOLE series dedicated area */\n const gridHeight = (size.height - 2 * padding);\n const seriesHeight = gridHeight * (1 - (topGrid - bottomGrid - (maxY - minY)) / (topGrid - bottomGrid));\n const seriesY = gridHeight * (topGrid - maxY) / (topGrid - bottomGrid);\n // consider padding\n stretch = seriesWidth / seriesHeight;\n body.setAttribute('height', size.height.toString());\n body.setAttribute('width', size.width.toString());\n body.setAttribute('viewBox', `0 0 ${size.width} ${size.height}`);\n // #endregion\n // #region render series\n let iter = 0;\n // normalize\n const spanX = maxX - minX, spanY = maxY - minY;\n const normX = 100 * stretch / spanX, normY = 100 / spanY;\n const normPadding = 100 * padding / seriesHeight;\n const chartSeries = this.chartSeries;\n const chartGrid = this.chartGrid;\n const xPad = (halfSlot - minX) * normX;\n const buildPoint = (it, series) => {\n const p = this.chartDataItemToPoint(it, series);\n return {\n x: xPad + p.x * 2 * xPad,\n y: p.y * normY\n };\n };\n var accumulators = new Array(maxCount);\n for (let series of datasource) {\n // does the series svg exist?\n let svg;\n let grad;\n let gradInv;\n let g;\n if (chartSeries.length > iter) {\n svg = chartSeries[iter];\n grad = svg.firstElementChild.firstElementChild;\n gradInv = svg.firstElementChild.lastElementChild;\n g = svg.lastElementChild;\n }\n else {\n svg = document.createElementNS(SVG_NS, 'svg');\n svg.setAttribute('pacem', '');\n chartGrid.insertAdjacentElement('afterend', svg);\n const defs = document.createElementNS(SVG_NS, 'defs');\n defs.appendChild(grad = this.buildLinearGradient(iter));\n defs.appendChild(gradInv = this.buildLinearGradient(iter, true));\n svg.appendChild(defs);\n svg.appendChild(g = document.createElementNS(SVG_NS, 'g'));\n chartSeries.push(svg);\n }\n // series positioning:\n /*\n --------------------------------------\n | |--------------------------------|\n |pad| series here |\n | |--------------------------------|\n --------------------------------------\n | | pad |\n --------------------------------------\n */\n var className = 'chart-series series-fill';\n if (!Utils.isNullOrEmpty(series.className)) {\n className += ' ' + series.className;\n }\n svg.setAttribute('class', className);\n svg.setAttribute('x', paddingYAxis.toString());\n svg.setAttribute('y', seriesY.toString());\n svg.setAttribute('width', seriesWidth.toString());\n svg.setAttribute('height', (seriesHeight + 2 * padding).toString());\n const data = series.values;\n const spinRect = (index) => {\n while (index >= g.children.length) {\n g.appendChild(document.createElementNS(SVG_NS, 'rect'));\n }\n const rect = g.children.item(index);\n rect.style.stroke = series.color;\n const gradient = data[index].value < 0 ? gradInv : grad;\n this.setGradientColor(gradient, series.color);\n rect.style.fill = `url(#${gradient.id})`;\n return rect;\n };\n // fix 0 y\n const precision = 10;\n const assignVerticalCoordsCoords = (rect, pt0, pt, pt0Start = pt0) => {\n const y = -Math.max(pt0.y, pt.y), h = Math.abs(pt.y - pt0.y);\n const fnAssign = () => {\n rect.setAttribute('y', y.toFixed(precision));\n rect.setAttribute('height', h.toFixed(precision));\n };\n if (!rect.hasAttribute('y')) {\n // boostrap easing animated transition\n rect.setAttribute('y', '-' + pt0Start.y.toFixed(precision));\n rect.setAttribute('height', '0');\n requestAnimationFrame(fnAssign);\n }\n else {\n fnAssign();\n }\n };\n if (!Utils.isNullOrEmpty(data)) {\n ;\n const pt00 = buildPoint({ value: 0, label: data[0].label }, data);\n if (stacked) {\n // #region STACK\n const iHalfAvailSlot = halfAvailSlot * normX, iAvailSlotAttr = (availSlot * normX).toFixed(precision);\n for (let j = 0; j < data.length; j++) {\n const item = data[j];\n if (Utils.isNullOrEmpty(accumulators[j])) {\n accumulators[j] = { positive: 0, negative: 0 };\n }\n const accumulator = accumulators[j];\n let posCursor = accumulator.positive, negCursor = accumulator.negative;\n const neg = item.value < 0, y = neg ? negCursor : (posCursor + item.value), y0 = neg ? (negCursor + item.value) : posCursor;\n const pt = buildPoint({ label: item.label, value: y }, data);\n const pt0 = buildPoint({ label: item.label, value: y0 }, data);\n const x = pt.x - iHalfAvailSlot;\n const rect = spinRect(j);\n this.assignUiBehaviors(rect, series, item);\n rect.setAttribute('x', x.toFixed(precision));\n rect.setAttribute('width', iAvailSlotAttr);\n assignVerticalCoordsCoords(rect, pt0, pt, pt00);\n if (neg) {\n accumulator.negative = y0;\n }\n else {\n accumulator.positive = y;\n }\n }\n // #endregion\n }\n else {\n // #region CLUSTER\n const iHalfAvailSlot = halfAvailSlot * normX, iSlot = (iHalfAvailSlot * 2) / datasource.length, //,\n iSlotAttr = iSlot.toFixed(precision);\n for (let j = 0; j < data.length; j++) {\n // looping through the series-data\n const item = data[j];\n const pt = buildPoint(item, data);\n const x = pt.x - iHalfAvailSlot + iSlot * iter;\n const rect = spinRect(j);\n this.assignUiBehaviors(rect, series, item);\n rect.setAttribute('x', x.toFixed(precision));\n rect.setAttribute('width', iSlotAttr);\n assignVerticalCoordsCoords(rect, pt00, pt);\n }\n // #endregion\n }\n }\n // cleanup exceeding rects\n for (let j = g.children.length - 1; j >= data?.length || 0; j--) {\n const rect = g.children.item(j);\n this.disposeUiBehaviors(rect);\n rect.remove();\n }\n // tick\n iter++;\n }\n // remove exceeding series\n this.wipeOut(chartSeries, iter);\n const w0 = 100 * stretch, h0 = 100 + 2 * normPadding, x0 = 0, //minX * normX,\n y0 = maxY * normY + normPadding;\n const svbox = `${x0} ${-y0} ${w0} ${h0}`;\n for (var svg of chartSeries) {\n svg.setAttribute('viewBox', svbox);\n }\n const chartMask = this.chartMask;\n let mask = chartMask.children.item(1);\n mask.setAttribute('x', x0.toString());\n mask.setAttribute('height', (size.height - padding).toString());\n // #endregion\n // #region grid\n chartGrid.setAttribute('viewBox', `0 0 ${size.width} ${size.height}`);\n if (grid.x.length < 1 || grid.y.length <= 1) {\n for (let j = chartGrid.children.length - 1; j >= 0; j--) {\n chartGrid.children.item(j).remove();\n }\n return;\n }\n let pgrid;\n if (chartGrid.children.length > 0) {\n pgrid = chartGrid.children.item(0);\n }\n else {\n pgrid = document.createElementNS(SVG_NS, 'path');\n chartGrid.appendChild(pgrid);\n }\n const tick = PADDING_PIXELS * .25;\n let lblCounter = 0;\n let ensureLabel = (index, x, y, txt) => {\n const ndx = index + /* <path> is the first child element */ 1;\n let lbl;\n if (chartGrid.children.length <= ndx) {\n lbl = document.createElementNS(SVG_NS, 'text');\n chartGrid.appendChild(lbl);\n }\n else {\n lbl = chartGrid.children.item(ndx);\n }\n lbl.textContent = txt;\n lbl.setAttribute('x', x.toString());\n lbl.setAttribute('y', y.toString());\n return lbl;\n };\n let dgrid = `M${paddingYAxis},${padding} v${gridHeight}`; //H${w}\n // x\n let j = 0;\n const xincr = seriesWidth / (grid.x.length /*- 1 consider the extra slot */), yincr = gridHeight / (grid.y.length - 1);\n if (this.xAxisPosition !== 'none') {\n const paddingX = xincr * .5 + paddingYAxis;\n for (var x of grid.x) {\n let xcoord = paddingX + j * xincr;\n if (this.xAxisPosition === 'top') {\n dgrid += ` M${xcoord},${padding} v${-tick}`;\n let lbl = ensureLabel(lblCounter++, xcoord, 0, x);\n lbl.setAttribute('text-anchor', 'middle');\n lbl.setAttribute('alignment-baseline', 'hanging');\n }\n else {\n let ycoord = gridHeight + padding;\n dgrid += ` M${xcoord},${ycoord} v${tick}`;\n ensureLabel(lblCounter++, xcoord, ycoord + padding, x).setAttribute('text-anchor', 'middle');\n }\n j++;\n }\n }\n // y\n j = 0;\n for (var y of grid.y) {\n const ycoord = gridHeight + padding - j * yincr, xcoord = paddingYAxis - tick;\n dgrid += ` M${xcoord},${ycoord} H${(seriesWidth + paddingYAxis)}`;\n let txt = this.formatYAxisLabel(y);\n ensureLabel(lblCounter++, xcoord - tick, ycoord, txt).setAttribute('text-anchor', 'end');\n j++;\n }\n pgrid.setAttribute('d', dgrid);\n // exceeding labels?\n for (let j = chartGrid.children.length - 1; j > lblCounter; j--) {\n chartGrid.children.item(j).remove();\n }\n // #endregion\n }\n};\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemColumnChartElement.prototype, \"type\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Number })\n], PacemColumnChartElement.prototype, \"groupWidth\", void 0);\nPacemColumnChartElement = __decorate([\n CustomElement({ tagName: P + '-column-chart' })\n], PacemColumnChartElement);\nexport { PacemColumnChartElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P, PCSS, Components, Utils, CustomElementUtils, Debounce } from '@pacem/pacem-core';\nimport { MANAGED_EVENTS } from './types';\n//namespace Pacem.Components.Charts {\nlet PacemPieSliceElement = class PacemPieSliceElement extends Components.PacemItemElement {\n constructor() {\n super(...arguments);\n this._broadcastHandler = (e) => {\n this.emit(e);\n };\n }\n findContainer() {\n return CustomElementUtils.findAncestorOfType(this, PacemPieChartElement);\n }\n get chart() {\n return this.container;\n }\n /** Returns the center of mass (point) of this pie/doughnut slice, in absolute coords (pixels). */\n getCenterOfMass() {\n const area = this.chart && this.chart.area;\n if (Utils.isNull(area)) {\n return null;\n }\n const rect = Utils.offset(area), center = { x: rect.width / 2 + rect.left, y: rect.top + rect.height / 2 }, r = Math.min(rect.width, rect.height) * .5;\n const pos = this.normalizedPolarCoords, angle = PI1_2 - pos.angle;\n return {\n y: center.y - r * pos.radius * Math.sin(angle),\n x: center.x + r * pos.radius * Math.cos(angle)\n };\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first && this.chart && name != 'normalizedPolarCoords')\n this.chart.draw();\n }\n /** @internal */\n _assignUi(el) {\n const ui = this._ui = el;\n MANAGED_EVENTS.forEach(type => {\n ui.addEventListener(type, this._broadcastHandler);\n });\n }\n /** @internal */\n _disposeUi() {\n if (!Utils.isNull(this._ui)) {\n MANAGED_EVENTS.forEach(type => {\n this._ui.removeEventListener(type, this._broadcastHandler);\n });\n }\n }\n};\n__decorate([\n Watch({ converter: PropertyConverters.Number })\n], PacemPieSliceElement.prototype, \"value\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemPieSliceElement.prototype, \"label\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.String })\n], PacemPieSliceElement.prototype, \"color\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Json })\n], PacemPieSliceElement.prototype, \"normalizedPolarCoords\", void 0);\nPacemPieSliceElement = __decorate([\n CustomElement({ tagName: P + '-pie-slice' })\n], PacemPieSliceElement);\nexport { PacemPieSliceElement };\nconst TWO_PI = Math.PI * 2;\nconst PI1_2 = Math.PI * .5;\nlet PacemPieChartElement = class PacemPieChartElement extends Components.PacemItemsContainerElement {\n constructor() {\n super();\n /** Set a value between 0 and 1, for doughnut appearance. */\n this.cutout = .0;\n /** Distance between two consecutive slices, in pixels. */\n this.slicePadding = .0;\n this._slices = new WeakMap();\n this._key = Utils.uniqueCode();\n }\n validate(item) {\n return item instanceof PacemPieSliceElement;\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this.draw();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'target') {\n this._g = null;\n this._div && this._div.remove();\n const eold = old;\n if (eold) {\n eold.classList.remove(PCSS + '-chart-area');\n eold.innerHTML = '';\n }\n this.draw();\n }\n else if (!first && (name === 'cutout' || name === 'items' || name === 'slicePadding'))\n this.draw();\n }\n get area() {\n return this._svg;\n }\n disconnectedCallback() {\n this._div && this._div.remove();\n super.disconnectedCallback();\n }\n _ensureArea() {\n if (Utils.isNull(this._g)) {\n let div = this.target || (this._div = document.createElement('div'));\n div.classList.add(PCSS + '-chart-area');\n let svg = this._svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('pacem', '');\n svg.setAttribute('preserveAspectRatio', 'xMidYMid meet');\n svg.setAttribute('viewBox', '0 0 100 100');\n //svg.style.height =\n // svg.style.width = '100%';\n svg.classList.add(PCSS + '-pie-chart');\n let defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs');\n let g = this._g = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n svg.appendChild(defs);\n svg.appendChild(g);\n div.appendChild(svg);\n this._div &&\n this.parentElement.insertBefore(div, this);\n }\n if (this.maskBasedRendering) {\n if (Utils.isNull(this._mask)) {\n let mask = document.createElementNS('http://www.w3.org/2000/svg', 'mask');\n mask.id = 'pie_mask_' + this._key;\n let rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n rect.setAttribute('x', '0');\n rect.setAttribute('y', '0');\n rect.setAttribute('width', '100');\n rect.setAttribute('height', '100');\n rect.setAttribute('fill', '#fff');\n let circle = this._mask = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n circle.setAttribute('cx', '50');\n circle.setAttribute('cy', '50');\n const defs = this._svg.firstElementChild;\n mask.appendChild(rect);\n mask.appendChild(circle);\n defs.appendChild(mask);\n this._g.setAttribute('mask', `url(#${mask.id})`);\n }\n const cutout = 50.0 * this._safeCutout;\n this._mask.setAttribute('r', `${cutout}`);\n }\n else {\n if (!Utils.isNull(this._mask)) {\n this._svg.firstElementChild.innerHTML = '';\n this._mask = null;\n this._g.removeAttribute('mask');\n }\n }\n // has padded slices?\n const paddingPixels = this._safeSlicePaddingPixels;\n if (paddingPixels > 0) {\n const matrix = this._svg.getCTM();\n const paddingUnits = (paddingPixels / matrix.a).roundoff();\n const maskId = this._sliceMaskId;\n const defs = this._svg.firstElementChild;\n let mask = defs.querySelector(`#${maskId}`);\n if (Utils.isNull(mask)) {\n mask = document.createElementNS('http://www.w3.org/2000/svg', 'mask');\n mask.id = maskId;\n defs.appendChild(mask);\n }\n else {\n mask.innerHTML = '';\n }\n const maskPath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n const d = `M${(50 + paddingUnits)},0 H100 V100 H0 V0 H50 V50 h${paddingUnits} Z`;\n maskPath.setAttribute('d', d);\n maskPath.setAttribute('fill', '#fff');\n mask.appendChild(maskPath);\n }\n return this._g;\n }\n get _sliceMaskId() {\n return 'pieslice_mask_' + this._key;\n }\n get _safeCutout() {\n return Math.min(1, Math.max(0, this.cutout)) || .0;\n }\n get _safeSlicePaddingPixels() {\n return Math.max(0, this.slicePadding ?? 0);\n }\n _drawSlice(path, slice, whole, partial) {\n const largeFlag = slice.value > .5 * whole ? 1 : 0;\n const angle = TWO_PI * slice.value / whole;\n const rot = 360.0 * partial / whole;\n const x = (slice.value >= whole) ? /* handling single slice */ 49.9 : 50 * (1 + Math.sin(angle));\n const y = 50 * (1 - Math.cos(angle));\n // set geometry data\n const c = this._safeCutout, r = c * 50.0;\n path.style.fill = slice.color; //.setAttribute('fill', slice.color || (path.getAttribute('fill') || '#000'));\n //path.setAttribute('transform', `rotate(${rot} 50 50)`);\n path.style.transform = `rotate(${rot}deg)`;\n path.style.transformOrigin = '50% 50%';\n const d = this.maskBasedRendering ?\n `M50,50 V0 A50,50 0 ${largeFlag} 1 ${x} ${y} L50,50 Z` :\n `M50,0 A50,50 0 ${largeFlag} 1 ${x} ${y} l${(50 - x) * (1.0 - c)},${(50 - y) * (1.0 - c)} A${r},${r} 0 ${largeFlag} 0 50,${(50 - r)} Z`;\n path.setAttribute('d', d);\n slice.normalizedPolarCoords = { radius: c + Math.SQRT1_2 * (1.0 - c), angle: /* deg to rad */ Math.PI * rot / 180.0 + angle / 2 };\n }\n _isSliceOk(slice) {\n return !slice.disabled //&& slice.value > 0\n ;\n }\n _padSlice(path) {\n const paddingPixels = this._safeSlicePaddingPixels;\n if (paddingPixels > 0) {\n path.setAttribute('mask', `url(#${this._sliceMaskId})`);\n }\n else {\n path.removeAttribute('mask');\n }\n }\n draw() {\n const g = this._ensureArea(), pCount = g.children.length, chartArea = this._svg.parentElement;\n let ndx = 0, sum = .0, progress = .0;\n if (Utils.isNullOrEmpty(this.items)) {\n g.innerHTML = '';\n Utils.removeClass(chartArea, 'chart-has-data');\n }\n else {\n Utils.addClass(chartArea, 'chart-has-data');\n for (let slice of this.items) {\n if (!this._isSliceOk(slice)) {\n continue;\n }\n sum += slice.value;\n }\n if (sum <= 0) {\n g.innerHTML = '';\n Utils.removeClass(chartArea, 'chart-has-data');\n }\n else {\n for (let slice of this.items) {\n if (!this._isSliceOk(slice)) {\n continue;\n }\n let p;\n if (ndx >= pCount) {\n const g_n = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n g_n.setAttribute('class', 'chart-series ' + PCSS + '-pie-slice' + (Utils.isNullOrEmpty(slice.className) ? '' : (' ' + slice.className)));\n p = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n g_n.appendChild(p);\n g.appendChild(g_n);\n // add listeners (click, mouse-..., touch-...)\n slice._assignUi(g_n);\n this._slices.set(g_n, slice);\n }\n else {\n p = g.children.item(ndx).firstElementChild;\n }\n if (slice.value > 0) {\n this._drawSlice(p, slice, sum, progress);\n this._padSlice(p);\n progress += slice.value;\n p.removeAttribute('display');\n }\n else {\n p.setAttribute('display', 'none');\n }\n ndx++;\n }\n }\n }\n while (ndx < g.children.length) {\n const slices = this._slices, g_n = g.children.item(ndx);\n // remove listeners\n if (slices.has(g_n)) {\n slices.get(g_n)._disposeUi();\n slices.delete(g_n);\n }\n g.removeChild(g_n);\n }\n }\n};\n__decorate([\n Watch({ converter: PropertyConverters.Number })\n], PacemPieChartElement.prototype, \"cutout\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Element })\n], PacemPieChartElement.prototype, \"target\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Boolean })\n], PacemPieChartElement.prototype, \"maskBasedRendering\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Number })\n], PacemPieChartElement.prototype, \"slicePadding\", void 0);\n__decorate([\n Debounce(true)\n], PacemPieChartElement.prototype, \"draw\", null);\nPacemPieChartElement = __decorate([\n CustomElement({ tagName: P + '-pie-chart' })\n], PacemPieChartElement);\nexport { PacemPieChartElement };\n","import { DeepMerger } from '@pacem/pacem-foundation';\nimport * as Output from './index';\nDeepMerger.merge(Output);\n"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","MANAGED_EVENTS","MSECS_PER_DAY","SERIES_DATAITEM","SERIES_SERIES","getRoundedBoundaries","min","max","desiredSteps","Math","bestGuessedDensity","roughStep","magnitude","pow","floor","log10","step","map","n","filter","s","reduce","Number","POSITIVE_INFINITY","ceil","round","delta","oom","exp","capFn","norm","abs","roundoff","b","a","ret","gcd","ChartEvent","CustomUIEvent","constructor","type","eventInit","originalEvent","super","PacemChartSeriesElement","Components","PacemItemElement","values","this","datasource","Watch","emit","converter","PropertyConverters","Json","prototype","String","Boolean","CustomElement","tagName","P","SVG_NS","PacemSeriesChartElement","PacemItemsContainerElement","_itemPropertyChangedCallback","evt","propName","detail","propertyName","draw","_series","_resizeHandler","_size","_broadcastHandler","e","element","currentTarget","dataItem","CustomElementUtils","getAttachedPropertyValue","Utils","isNull","anchorPoint","getAnchorPoint","series","dispatchEvent","_key","uniqueCode","validate","item","register","addEventListener","PropertyChangeEventName","unregister","removeEventListener","propertyChangedCallback","name","old","val","first","_div","remove","_body","eold","classList","PCSS","innerHTML","_ensureResizer","_databindAndDrawDebounced","_databind","cancelAnimationFrame","_handle","requestAnimationFrame","_datasource","isNullOrEmpty","items","disconnectedCallback","resizer","_resizer","ResizeEventName","viewActivatedCallback","shell","findAncestorShell","appendChild","PacemResizeElement","chartSize","chartSeries","chartBody","chartGrid","_grid","chartMask","_mask","chartKey","chartContainer","assignUiBehaviors","ui","data","color","alreadyRegistered","extend","label","setAttachedPropertyValue","forEach","disposeUiBehaviors","deleteAttachedPropertyValue","ensureChartContainer","div","document","createElement","add","parentElement","insertBefore","ensureChartBody","w","h","svg","createElementNS","setAttribute","g","defs","mask","rect","rect0","id","chartDataItemToPoint","input","source","xAxisType","x","parseFloat","y","value","parseDate","valueOf","findIndex","getVirtualGrid","minX","maxX","minY","maxY","steps","labels","rangeY","stepY","j","push","lang","format","intl","xAxisFormat","Intl","NumberFormat","DateTimeFormat","formatOrLang","retval","l","fnDate","toLocaleDateString","toLocaleTimeString","fnDateFirst","toLocaleString","fnNum","getEvenlySpaced","wipeOut","startIndex","splice","buildLinearGradient","seriesIndex","invert","grad","addClass","stop1","stop2","setGradientColor","children","stop","SVGStopElement","style","stopColor","estimateYAxisLabelWidth","txt","formatYAxisLabel","estimateLabelWidth","grid","Error","lbl","textContent","size","offset","width","yAxisFormat","toString","estimateXAxisLabelWidth","formatXAxisLabel","date","Dates","parse","num","drawSeries","left","top","height","Element","Throttle","getSplineCtrlPoints","p","p0","p1","c0","c1","p0Null","p1Null","portion","m0","m1","m","dx0","dx1","GET_VAL","SET_VAL","SERIES_MAGNITUDE","PacemChartElement","hover","_enterHandler","_leaveHandler","_moveHandler","_chartFillSeries","_getVirtualGrid","_wipe","_setupBehavior","_dismantleBehavior","_buildLinearGradient","_setGradientColor","isReady","padding","every","body","log","Logging","LogLevel","Debug","yAxisMin","NaN","yAxisMax","stretch","pt","isNaN","withValues","find","yAxisDensity","xAxisDensity","topGrid","bottomGrid","maxYLabelLength","maxXLabelHalfLength","paddingYAxis","paddingYAxisEnd","seriesWidth","gridHeight","seriesHeight","seriesY","aspectRatio","iter","normX","normY","normPadding","buildPoint","it","chartFillSeries","splineHere","svgFill","firstElementChild","className","fill","pathFill","path","stroke","display","addInteractivePoint","center","ndx","circle","x1","y1","wipeExceedingPoints","remaining","datapoints","k","pt0","pt1","areaSoFar","svbox","concat","pgrid","lblCounter","ensureLabel","index","dgrid","xincr","yincr","xAxisPosition","xcoord","ycoord","PacemColumnChartElement","groupWidth","_safen","maxCount","accumulator","negative","positive","stacked","apply","slot","halfSlot","availSlot","halfAvailSlot","PADDING_PIXELS","xPad","accumulators","Array","gradInv","lastElementChild","insertAdjacentElement","spinRect","gradient","precision","assignVerticalCoordsCoords","pt0Start","fnAssign","toFixed","hasAttribute","pt00","iHalfAvailSlot","iAvailSlotAttr","posCursor","negCursor","neg","y0","iSlot","iSlotAttr","paddingX","PacemPieSliceElement","findContainer","findAncestorOfType","PacemPieChartElement","chart","container","getCenterOfMass","area","pos","normalizedPolarCoords","angle","PI1_2","radius","sin","cos","_assignUi","el","_ui","_disposeUi","TWO_PI","PI","cutout","slicePadding","_slices","WeakMap","_g","_svg","_ensureArea","maskBasedRendering","_safeCutout","removeAttribute","paddingPixels","_safeSlicePaddingPixels","paddingUnits","getCTM","maskId","_sliceMaskId","querySelector","maskPath","_drawSlice","slice","whole","partial","largeFlag","rot","transform","transformOrigin","SQRT1_2","_isSliceOk","disabled","_padSlice","pCount","chartArea","sum","progress","removeClass","g_n","set","slices","has","get","delete","removeChild","Debounce","DeepMerger","merge","Output"],"mappings":"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"}
|
package/dist/esm/column.js
CHANGED
package/dist/esm/generic.js
CHANGED
package/dist/esm/index-iife.js
CHANGED
package/dist/esm/index.js
CHANGED
package/dist/esm/pie.js
CHANGED
package/dist/esm/types.js
CHANGED