@mescius/wijmo.olap 5.20251.41-nightly.d20250903.t180832 → 5.20251.41-nightly.d20250904.t182131

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/es2015-esm.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  *
3
- * Wijmo Library 5.20251.41-nightly.d20250903.t180832
3
+ * Wijmo Library 5.20251.41-nightly.d20250904.t182131
4
4
  * https://developer.mescius.com/wijmo
5
5
  *
6
6
  * Copyright(c) MESCIUS inc. All rights reserved.
@@ -11,4 +11,4 @@
11
11
  *
12
12
  */
13
13
 
14
- import{CollectionView,asType,assert,ObservableArray,asInt,isString,isBoolean,isNumber,Aggregate,httpRequest,isArray,isDate,Globalize,asString,DataType,asFunction,RequestErrorEventArgs,isNullOrWhiteSpace,PropertyChangedEventArgs,asEnum,Control,setText,culture,Key,CancelEventArgs,moveFocus,setAttribute,hasClass,Event,ControlStateClsNames,ControlClsNames,InputFormElementsClsNames,addClass,enable,showPopup,toHeaderCase,hidePopup,isFunction,UtilitesClsNames,EventArgs,NotifyCollectionChangedAction,_addCultureInfo,copy,tryCast,getType,getTypes,isObject,isPrimitive,asCollectionView,asBoolean,asNumber,asArray,hasItems,Binding,changeType,DateTime,GlyphClsNames,createElement,clamp,toggleClass,_startDrag,closest,Rect,setCss,format,isEmpty,closestClass,escapeHtml,isIE,isEdge,Tooltip,removeChild,_registerModule}from"@mescius/wijmo";import{FilterType,Operator,ValueFilter,ConditionFilter,ValueFilterEditor,ConditionFilterEditor}from"@mescius/wijmo.grid.filter";import{ComboBox,DropDownClsNames,Popup,Menu,MultiSelect,ListBoxClsNames}from"@mescius/wijmo.input";import{FlexGrid,FlexGridClsNames,CellType,AllowMerging,MergeManager,CellRange,AllowDragging,HeadersVisibility,Row,Column,CellRangeEventArgs}from"@mescius/wijmo.grid";import{Stacking,FlexChart,FlexPie,Position,Axis,SeriesVisibility,Series,TickMark,ChartType}from"@mescius/wijmo.chart";import*as selfModule from"@mescius/wijmo.olap";export class _TextBuilder{constructor(){this._text=""}get length(){return this._text.length}toString(){return this._text}append(...e){this._text=this._text.concat(...e)}joinToList(e,...t){let i=t.join();this.length>0&&i.length>0?this._text=this._text.concat(e,...t):i.length>0&&(this._text=i)}joinItemToList(e){this.joinToList(",",e)}wrap(e,t){this.length>0&&(this._text=e.concat(this._text,t))}static wrap(e,t,i){return t.length>0?e.concat(t,i):""}}export const DetailDialogClsNames={dialogBody:"wj-dialog-body",dialogFooter:"wj-dialog-footer",dialogHeader:"wj-dialog-header",hostElement:"wj-detaildialog",summary:"wj-summary"};export const PivotChartClsNames={hierarchicalAxesLine:"wj-hierarchicalaxes-line",hostElement:"wj-pivotchart"};export const PivotFieldEditorClsNames={hostElement:"wj-pivotfieldeditor"};export const PivotFilterEditorClsNames={hostElement:"wj-pivotfiltereditor"};export const PivotGridClsNames={colFieldHdr:"wj-col-field-hdr",hostElement:"wj-pivotgrid",pivotCollapse:"wj-pivot-collapse",rowFieldHdr:"wj-row-field-hdr"};export const PivotPanelClsNames={aggregate:"wj-aggregate",header:"wj-header",hostElement:"wj-pivotpanel"};export const SlicerClsNames={header:"wj-header",hostElement:"wj-slicer",noCheck:"wj-nocheck"};export const _GridContextMenuClsNames={hostElement:"wj-olap-context-menu"};export class _Tally{constructor(){this._cntAll=0;this._cnt=0;this._cntn=0;this._sum=0;this._sum2=0;this._min=null;this._max=null;this._first=null;this._last=null}add(e,t){if(e instanceof _Tally){this._sum+=e._sum;this._sum2+=e._sum2;this._max=this._max&&e._max?Math.max(this._max,e._max):this._max||e._max;this._min=this._min&&e._min?Math.min(this._min,e._min):this._min||e._min;this._cnt+=e._cnt;this._cntn+=e._cntn;this._cntAll+=e._cntAll}else{this._cntAll++;if(null!=e){this._cnt++;isBoolean(e)&&(e=e?1:0);(null==this._min||e<this._min)&&(this._min=e);(null==this._max||e>this._max)&&(this._max=e);null==this._first&&(this._first=e);this._last=e;if(isNumber(e)&&!isNaN(e)){isNumber(t)&&(e*=t);this._cntn++;this._sum+=e;this._sum2+=e*e}}}}getAggregate(e){if(0==this._cnt)return null;let t=0==this._cntn?0:this._sum/this._cntn,i=Aggregate;switch(e){case i.None:return null;case i.CntAll:return this._cntAll;case i.Avg:return t;case i.Cnt:return this._cnt;case i.Max:return this._max;case i.Min:return this._min;case i.Rng:return this._max-this._min;case i.Sum:return this._sum;case i.VarPop:return this._cntn<=1?0:this._sum2/this._cntn-t*t;case i.StdPop:return this._cntn<=1?0:Math.sqrt(this._sum2/this._cntn-t*t);case i.Var:return this._cntn<=1?0:(this._sum2/this._cntn-t*t)*this._cntn/(this._cntn-1);case i.Std:return this._cntn<=1?0:Math.sqrt((this._sum2/this._cntn-t*t)*this._cntn/(this._cntn-1));case i.First:return this._first;case i.Last:return this._last}throw"Invalid aggregate type."}}export class _PivotKey{constructor(e,t,i,s,l){this._fields=e;this._fieldCount=t;this._valueFields=i;this._valueFieldIndex=s;this._item=l}get fields(){return this._fields}get valueFields(){return this._valueFields}get valueField(){return this._valueFields[this._valueFieldIndex]}get values(){if(null==this._vals){this._vals=new Array(this._fieldCount);for(let e=0;e<this._fieldCount;e++){let t=this._fields[e];this._vals[e]=t._getValue(this._item,!1)}}return this._vals}get fieldNames(){if(!this._names){this._names=[];for(let e=0;e<this.fields.length;e++){let t=this._fields[e];this._names.push(t._getName())}}return this._names}get aggregate(){let e=this._valueFields,t=this._valueFieldIndex;assert(e&&t>-1&&t<e.length,"aggregate not available for this key");return e[t].aggregate}getValue(e,t){if(0==this.values.length)return culture.olap.PivotEngine.grandTotal;if(e>this.values.length-1)return culture.olap.PivotEngine.subTotal;let i=this.values[e];if(t&&!isString(i)){let t=this.fields[e],s=t?t.format:"";i=Globalize.format(this.values[e],s)}return i}get level(){return this._fieldCount==this._fields.length?-1:this._fieldCount}compareTo(e){let t=0;if(null!=e&&e._fields==this._fields){let i=this.values,s=e.values,l=Math.min(i.length,s.length);for(let n=0;n<l;n++){let l=null!=i[n]?getType(i[n]):null,r=i[n],a=s[n],o=this._fields[n];if(o.sortComparer){t=o.sortComparer(r,a);if(isNumber(t)){if(0!=t)return o.descending?-t:t;continue}}if(l==DataType.Date){let t=o.format;if(t&&"d"!=t&&"D"!=t){let i=o._getValue(this._item,!0),s=o._getValue(e._item,!0),l=Globalize.parseDate(i,t),n=Globalize.parseDate(s,t);if(l&&n){r=l;a=n}else{r=i;a=s}}}if(!(r==a||DateTime.equals(r,a))){if(null==r)return 1;if(null==a)return-1;t=r<a?-1:1;return o.descending?-t:t}}if(i.length==s.length&&0!=(t=this._valueFieldIndex-e._valueFieldIndex))return t;if(0!=(t=s.length-i.length))return t*(this.fields.engine.totalsBeforeData?-1:1)}return 0}matchesItem(e){for(let t=0;t<this._vals.length;t++){if(this.getValue(t,!0)!=this._fields[t]._getValue(e,!0))return!1}return!0}toString(e){if(!this._key||e){let t="";for(let e=0;e<this._fieldCount;e++){let i=this._fields[e];t+=i._getName()+":"+i._getValue(this._item,!0)+";"}if(this._valueFields){t+=this._valueFields[this._valueFieldIndex]._getName()+":0;"}else t+="{total}";if(e)return t+e.toString();this._key=t}return this._key}}_PivotKey._ROW_KEY_NAME="$rowKey";const _NOT_EDITABLE="This collection is not editable.";export class PivotCollectionView extends CollectionView{constructor(e){super();this.canAddNew=this.canRemove=!1;this._ng=asType(e,PivotEngine,!1)}get engine(){return this._ng}implementsInterface(e){return"IEditableCollectionView"!=e&&super.implementsInterface(e)}editItem(e){assert(!1,_NOT_EDITABLE)}addNew(){assert(!1,_NOT_EDITABLE)}_performSort(e){let t=this._ng;if(t.sortableGroups&&t._getShowRowTotals()==ShowTotals.Subtotals){let t=0,i=e.length-1;0==this._getItemLevel(e[t])&&t++;0==this._getItemLevel(e[i])&&i--;this._sortGroups(e,1,t,i)}else this._sortData(e)}_performFilter(e){return this._ng&&0==this._ng.valueFields.length&&0==this._ng.rowFields.length?[]:this.canFilter&&this._filter?e.filter(this._filter,this):e}_getGroupRange(e,t){let i=this._ng,s=e.indexOf(t),l=s,n=this._getItemLevel(e[s]);if(i.totalsBeforeData)for(l=s;l<e.length-1;l++){let t=this._getItemLevel(e[l+1]);if(t>-1&&t<=n)break}else for(s=l;s;s--){let t=this._getItemLevel(e[s-1]);if(t>-1&&t<=n)break}return[s,l]}_sortGroups(e,t,i,s){let l=[];for(let n=i;n<=s;n++)this._getItemLevel(e[n])==t&&l.push(e[n]);if(!l.length){this._sortData(e);return}super._performSort(l);let n=[];for(let s=0;s<l.length;s++){var r=this._getGroupRange(e,l[s]),a=n.length;for(let t=r[0];t<=r[1];t++)n.push(e[t]);const o=n.length-1;if(t<this._ng.rowFields.length-1)this._sortGroups(n,t+1,i+a,o);else{const e=this._ng.totalsBeforeData?1:0;this._sortSegment(n,a+e,o+e)}}for(let t=0;t<n.length;t++)e[i+t]=n[t]}_sortSegment(e,t,i){let s=e.slice(t,i);super._performSort(s);for(let i=0;i<s.length;i++)e[t+i]=s[i]}_sortData(e){for(let t=0;t<e.length;t++){if(this._getItemLevel(e[t])>-1)continue;let i=t;for(;i<e.length-1&&!(this._getItemLevel(e[i+1])>-1);i++);if(i>t){let s=e.slice(t,i+1);super._performSort(s);for(let i=0;i<s.length;i++)e[t+i]=s[i]}t=i}}_getItemLevel(e){return e[_PivotKey._ROW_KEY_NAME].level}}export class PivotField{constructor(e,t,i,s){this._isExplicitAggregate=!1;this.propertyChanged=new Event;this._ng=e;this._binding=new PivotFieldBinding(this,t);this._header=i||toHeaderCase(t);this._showAs=ShowAs.NoCalculation;this._isContentHtml=!1;this._visible=!0;this._format="";this._filter=new PivotFilter(this);copy(this,s);null==this._dataType&&this._updateDataTypeByBinding();this._isExplicitAggregate||this._updateAggregateByDataType()}get binding(){return this._binding?this._binding.path:null}set binding(e){if(e!=this.binding){let t=this.binding,i=asString(e);this._binding=i?new PivotFieldBinding(this,i):null;if(null==this._dataType){this._updateDataTypeByBinding();this._isExplicitAggregate||this._updateAggregateByDataType()}let s=new PropertyChangedEventArgs("binding",t,e);this.onPropertyChanged(s)}}get getValue(){return this._getValueFn}set getValue(e){this._getValueFn=asFunction(e,!0)}get getAggregateValue(){return this._getAggValueFn}set getAggregateValue(e){this._getAggValueFn=asFunction(e,!0)}get header(){return this._header}set header(e){e=asString(e,!1);let t=this._ng.fields.getField(e);!e||t&&t!=this?assert(!1,"field headers must be unique and non-empty."):this._setProp("_header",asString(e))}get filter(){return this._filter}get aggregate(){return this._aggregate}set aggregate(e){this._isExplicitAggregate=!0;this._setProp("_aggregate",asEnum(e,Aggregate))}get showAs(){return this._showAs}set showAs(e){this._setProp("_showAs",asEnum(e,ShowAs))}get weightField(){return this._weightField}set weightField(e){this._setProp("_weightField",asType(e,PivotField,!0))}get dataType(){return this._dataType}set dataType(e){this._setProp("_dataType",asEnum(e,DataType))}get isMeasure(){return this._dataType==DataType.Number}get subFields(){return this._subFields}get format(){return this._format}set format(e){this._setProp("_format",asString(e))}get align(){return this._align}set align(e){this._setProp("_align",asString(e))}get width(){return this._width}set width(e){this._setProp("_width",asNumber(e,!0,!0))}get wordWrap(){return this._wordWrap}set wordWrap(e){this._setProp("_wordWrap",asBoolean(e))}get descending(){return!!this._descending}set descending(e){this._setProp("_descending",asBoolean(e))}get isContentHtml(){return this._isContentHtml}set isContentHtml(e){this._setProp("_isContentHtml",asBoolean(e))}get visible(){return this._visible}set visible(e){this._setProp("_visible",asBoolean(e))}get sortComparer(){return this._srtCmp}set sortComparer(e){e!=this.sortComparer&&(this._srtCmp=asFunction(e))}get engine(){return this._ng}get collectionView(){return this.engine?this.engine.collectionView:null}get isActive(){return this._getIsActive()}set isActive(e){this._setIsActive(e)}get parentField(){return this._parent}get key(){return this.header}onPropertyChanged(e){this.propertyChanged.raise(this,e);this._ng._fieldPropertyChanged(this,e)}_updateDataTypeByBinding(){if(this._ng&&this._binding){const e=this._ng.collectionView,t=e?e.items.length:0;for(let i=0;i<t;i++){const t=e.items[i];if(null!=t){this._dataType=getType(this._binding.getValue(t));break}}}}_updateAggregateByDataType(){this._aggregate=this.dataType==DataType.Number?Aggregate.Sum:Aggregate.Cnt}_copy(e,t){if("subFields"==e){this._subFields?this._subFields.splice(0,this._subFields.length):this._subFields=[];t&&t.length&&t.forEach(e=>{let t=this.engine._createField(e,this._autoGenerated);this._subFields.push(t)});return!0}if("filter"==e){this._setFilterProxy(t);return!0}return!1}_getFilterProxy(){let e=this.filter;if(e.conditionFilter.isActive){let t=e.conditionFilter,i={condition1:{operator:t.condition1.operator,value:t.condition1.value},and:t.and,condition2:{operator:t.condition2.operator,value:t.condition2.value}};t.condition1.isActive||delete i.condition1;t.condition2.isActive||delete i.condition2;return i}if(e.valueFilter.isActive){let t=e.valueFilter;return{filterText:t.filterText,showValues:t.showValues}}assert(!1,"inactive filters shouldn't be persisted.");return null}_setFilterProxy(e){let t=this.filter,i=t.conditionFilter,s=t.valueFilter;t.clear();e.conditionFilter?e=e.conditionFilter:e.valueFilter&&(e=e.valueFilter);if(e.condition1){let t=e.condition1,s=changeType(t.value,this.dataType);i.condition1.value=s||t.value;i.condition1.operator=t.operator;let l=e.condition2;if(l){let e=changeType(l.value,this.dataType);i.condition2.value=e||l.value;i.condition2.operator=l.operator}isBoolean(e.and)&&(i.and=e.and)}if(e.showValues){s.filterText=e.filterText;s.showValues=e.showValues}}_getIsActive(){if(this._ng&&!this._hasSubFields()){let e=this._ng._viewLists;for(let t=0;t<e.length;t++)if(e[t].indexOf(this)>-1)return!0}return!1}_setIsActive(e){if(this._ng&&!this._hasSubFields()){let t=this.isActive;if((e=asBoolean(e))!=t)if(e)this.isMeasure?this._ng.valueFields.push(this):this._ng.rowFields.push(this);else{let e=this._ng._viewLists;for(let t=0;t<e.length;t++){let i=e[t];for(let e=0;e<i.length;e++){let t=i[e];if(t==this||t.parentField==this){i.removeAt(e);e--}}}let t=this._ng.fields;for(let e=t.length-1;e>=0;e--){if(t[e].parentField==this){t.removeAt(e);e--}}}}}_hasSubFields(){return null!=this._subFields&&this._subFields.length>0}_clone(){let e=new PivotField(this._ng,this.binding);this._ng._copyProps(e,this,PivotField._props);e._autoGenerated=!0;e._parent=this;let t=this.header.replace(/\d+$/,"");for(let i=2;;i++){let s=t+i.toString();if(null==this._ng.fields.getField(s)){e._header=s;break}}return e}_setProp(e,t,i){let s=this[e];if(t!=s){this[e]=t;let i=new PropertyChangedEventArgs(e.substr(1),s,t);this.onPropertyChanged(i)}}_getName(){return this.header||this.binding}_getValue(e,t){let i=this._binding,s=null;e&&(s=isFunction(this._getValueFn)?this._getValueFn.call(this,e):this._ng.isServer?e[this.key]:i._key?e[i._key]:i.getValue(e));return t&&"string"!=typeof s?Globalize.format(s,this._format):s}_getWeight(e){let t=this._weightField?this._weightField._getValue(e,!1):null;return isNumber(t)?t:null}}PivotField._props=["dataType","format","width","wordWrap","aggregate","showAs","descending","isContentHtml","visible"];export class CubePivotField extends PivotField{constructor(e,t,i,s){super(e,t,i,s);assert(null!=this.dimensionType,"CubePivotField objects must specify the field's dimensionType")}get header(){return this._header}set header(e){this._setProp("_header",asString(e))}get dimensionType(){return this._dimensionType}set dimensionType(e){this._setProp("_dimensionType",asEnum(e,DimensionType,!1))}get isMeasure(){switch(this._dimensionType){case 1:case 2:case 8:return!0}return!1}get key(){return this.binding}_clone(){throw"CubePivotField objects cannot be cloned"}}export var DimensionType;!function(e){e[e.Dimension=0]="Dimension";e[e.Measure=1]="Measure";e[e.Kpi=2]="Kpi";e[e.NameSet=3]="NameSet";e[e.Attribute=4]="Attribute";e[e.Folder=5]="Folder";e[e.Hierarchy=6]="Hierarchy";e[e.Date=7]="Date";e[e.Currency=8]="Currency"}(DimensionType||(DimensionType={}));export class Slicer extends Control{constructor(e,t){super(e,null,isIE()&&!isEdge());this._hdr=null;this._mSel=!1;this._updatingFilter=!1;this._propChanged=!1;this._fldPropChangeBnd=this._fldPropChange.bind(this);let i=this.getTemplate();this.applyTemplate(`${SlicerClsNames.hostElement} ${SlicerClsNames.noCheck} ${ControlClsNames.hostElement} ${ControlClsNames.content}`,i,{_root:"root",_divHdr:"div-hdr",_divHdrText:"div-hdr-text",_btnMSel:"btn-msel",_btnClear:"btn-clear"});let s=culture.olap.Slicer;this._tt=new Tooltip;setAttribute(this._btnMSel,"aria-label",s.multiSelect);setAttribute(this._btnClear,"aria-label",s.clearFilter);this._tt.setTooltip(this._btnMSel,s.multiSelect);this._tt.setTooltip(this._btnClear,s.clearFilter);this.addEventListener(this._btnClear,"click",e=>{this._clear()});this.addEventListener(this._btnMSel,"click",e=>{this.multiSelect=!this.multiSelect});this.initialize(t)}static get controlTemplate(){Slicer._ctrlTemplate||(Slicer._ctrlTemplate='<div wj-part="root">'+`<div wj-part="div-hdr" class="${SlicerClsNames.header}">`+'<div wj-part="div-hdr-text"></div>'+`<button wj-part="btn-msel" class="${InputFormElementsClsNames.btn} btn-msel" tabindex="-1">`+`<span class=${GlyphClsNames.glyph}>&#8801;</span>`+"</button>"+`<button wj-part="btn-clear" class="${InputFormElementsClsNames.btn} btn-clear" tabindex="-1">`+`<span class=${GlyphClsNames.glyph}>&times;</span>`+"</button></div></div>");return Slicer._ctrlTemplate}static set controlTemplate(e){Slicer._ctrlTemplate=e}get field(){return this._fld}set field(e){if(e!=this._fld){if(this._divListBox){removeChild(this._divListBox);this._divListBox=null;this._lbx.dispose();this._lbx=null}if(this._edt){this._clear();this._edt.dispose()}let t=this._fld;if(t){t.filter.filterType=this._originalFilterType;t.filter.valueFilter.uniqueValues=this._uniqueValues;t.propertyChanged.removeHandler(this._fldPropChangeBnd)}if(t=this._fld=asType(e,PivotField,!0)){this._originalFilterType=t.filter.filterType;t.filter.filterType=FilterType.Value;let e=t.engine;this._uniqueValues=t.filter.valueFilter.uniqueValues;if(e.isServer&&!this._uniqueValues){let i=e._getUniqueValues(t);t.filter.valueFilter.uniqueValues=i}t.propertyChanged.addHandler(this._fldPropChangeBnd);t.isActive||t.engine.filterFields.push(t);let i=document.createElement("div");this._edt=new ValueFilterEditor(i,t.filter.valueFilter)}if(this._edt){this._divListBox=this._edt.hostElement.querySelector(`.${ListBoxClsNames.hostElement}`);this._root.appendChild(this._divListBox);this._lbx=Control.getControl(this._divListBox);this._lbx.checkedItemsChanged.addHandler((e,i)=>{if(!this._propChanged){let e=this._lbx.selectedItem;if(!this.multiSelect&&e){this._mSel=!0;this._lbx.checkedItems=[e];this._mSel=!1}}if(this._edt&&t){this._updateFilter();t.engine.invalidate()}})}this._updateHeader();isIE()&&!isEdge()&&this.refresh()}}get header(){return this._hdr}set header(e){if(e!=this._hdr){this._hdr=asString(e);this._updateHeader()}}get showHeader(){return"none"!=this._divHdr.style.display}set showHeader(e){this._divHdr.style.display=asBoolean(e)?"":"none"}get showCheckboxes(){return!hasClass(this.hostElement,SlicerClsNames.noCheck)}set showCheckboxes(e){toggleClass(this.hostElement,SlicerClsNames.noCheck,!asBoolean(e))}get multiSelect(){return this._mSel}set multiSelect(e){this._mSel=asBoolean(e);toggleClass(this._btnMSel,ControlStateClsNames.active,this._mSel)}refresh(e=!0){isIE()&&!isEdge()&&this.hostElement&&(this._setCssTimer=setTimeout(()=>{setCss(this._lbx.hostElement,{height:this.hostElement.clientHeight-this._divHdr.offsetHeight})}));super.refresh(e)}_fldPropChange(e,t){this._propChanged=!0;switch(t.propertyName){case"header":this._updateHeader();break;case"format":case"binding":e.filter.clear();this._edt.updateEditor();break;case"filter":this._updatingFilter||this._edt.updateEditor()}this._propChanged=!1}_updateHeader(){let e=this._hdr;e||null==this._fld||(e=this._fld.header);this._divHdrText.textContent=e}_clear(){if(this._edt){this._edt.clearEditor(!1);this._updateFilter();this._fld.engine.invalidate()}}_updateFilter(){this._updatingFilter=!0;this._edt.updateFilter();this._updatingFilter=!1}dispose(){if(this._tt){this._tt.dispose();this._tt=null}if(this._edt){this._edt.dispose();this._edt=null}if(this._lbx){this._lbx.dispose();this._lbx=null}if(this._setCssTimer){clearTimeout(this._setCssTimer);this._setCssTimer=null}this._fld&&this._fld.propertyChanged.removeHandler(this._fldPropChangeBnd);super.dispose()}}Slicer._ctrlTemplate="";export class _GridContextMenu extends Menu{constructor(){super(document.createElement("div"),{header:"PivotGrid Context Menu",displayMemberPath:"text",commandParameterPath:"parm",command:{executeCommand:e=>{this._execute(e)},canExecuteCommand:e=>this._canExecute(e)}});this.itemsSource=this._getMenuItems();addClass(this.dropDown,`context-menu ${_GridContextMenuClsNames.hostElement}`)}static get controlTemplate(){_GridContextMenu._ctrlTemplate||(_GridContextMenu._ctrlTemplate=Menu.controlTemplate);return _GridContextMenu._ctrlTemplate}static set controlTemplate(e){_GridContextMenu._ctrlTemplate=e}refresh(e=!0){this.itemsSource=this._getMenuItems();super.refresh(e)}attach(e){assert(e instanceof PivotGrid,"Expecting a PivotGrid control...");let t=e.hostElement;this._gridOwner=t;this._contextMenuHandler=i=>{if(e.customContextMenu){i.preventDefault();this.owner=t;if(this._selectField(i)){let e=this.dropDown;this.selectedIndex=-1;if(this.onIsDroppedDownChanging(new CancelEventArgs)){showPopup(e,i);this.onIsDroppedDownChanged();e.focus()}}}};this._gridOwner.addEventListener("contextmenu",this._contextMenuHandler)}_selectField(e){this._targetField=null;this._htDown=null;let t=Control.getControl(this.owner),i=t.engine,s=i.valueFields,l=i.columnFields,n=t.hitTest(e),r=CellType;switch(n.cellType){case r.Cell:t.select(n.range);this._targetField=s[n.col%s.length];this._htDown=n;break;case r.ColumnHeader:this._targetField=n.row<l.length?l[n.row]:s[n.col%s.length];break;case r.RowHeader:this._targetField=t._colRowFields.get(n.getColumn());break;case r.TopLeft:n.row==n.panel.rows.length-1&&(this._targetField=t._colRowFields.get(n.getColumn()))}return null!=this._targetField}_getMenuItems(){let e=[{text:'<div class="menu-icon menu-icon-remove">&#10006;</div>Remove Field',parm:"remove"},{text:'<div class="menu-icon">&#9965;</div>Field Settings...',parm:"edit"},{text:`<div class="${UtilitesClsNames.separator}"></div>`},{text:'<div class="menu-icon">&#8981;</div>Show Detail...',parm:"detail"}];for(let t=0;t<e.length;t++){let i=e[t];if(i.parm){let e=culture.olap._ListContextMenu[i.parm];assert(e,"missing localized text for item "+i.parm);i.text=i.text.replace(/([^>]+$)/,e)}}return e}_execute(e){let t=this._targetField,i=Control.getControl(this.owner),s=i?i.engine:null,l=this._htDown;switch(e){case"remove":s.removeField(t);break;case"edit":s.editField(t);break;case"detail":i.showDetail(l.row,l.col)}}_canExecute(e){let t=this._targetField,i=Control.getControl(this.owner),s=i?i.engine:null,l=this._htDown;if(null==t||null==s)return!1;switch(e){case"remove":return!0;case"edit":return s.allowFieldEditing;case"detail":return null!=l&&!(t instanceof CubePivotField)&&s.valueFields.length>0}return!0}dispose(){if(this._gridOwner){this._gridOwner.removeEventListener("contextmenu",this._contextMenuHandler);this._contextMenuHandler=null;this._gridOwner=null}this._targetField=null;this._htDown=null;this.command=null;this.itemsSource=null;super.dispose()}}_GridContextMenu._ctrlTemplate="";export class PivotFieldCollection extends ObservableArray{constructor(e){super();this._ng=e}get maxItems(){return this._maxItems}set maxItems(e){this._maxItems=asInt(e,!0,!0)}get engine(){return this._ng}getField(e){return this._getField(this,e)}_getField(e,t){for(let i=0;i<e.length;i++){let s=e[i];if(s.key==t)return s;if(s._hasSubFields()&&(s=this._getField(s.subFields,t)))return s}return null}push(...e){let t=this._ng;for(let i=0;e&&i<e.length;i++){let s=e[i];isString(s)&&(s=this==t.fields?new PivotField(t,s):t.fields.getField(s));assert(s instanceof PivotField,"This collection must contain PivotField objects only.");if(s.key&&this.getField(s.key)){assert(!1,"PivotField keys must be unique.");return-1}if(null!=this._maxItems&&this.length>=this._maxItems)break;super.push(s)}return this.length}}export class _PivotNode{constructor(e,t,i,s,l,n){this._key=new _PivotKey(e,t,i,s,l);this._nodes={};this._parent=n}getNode(e,t,i,s,l){let n=this;for(let r=0;r<t;r++){let t=e[r]._getValue(l,!0),a=n._nodes[t];if(!a){a=new _PivotNode(e,r+1,i,s,l,n);n._nodes[t]=a}n=a}if(i&&s>-1){let r=i[s].header,a=n._nodes[r];if(!a){a=new _PivotNode(e,t,i,s,l,n);n._nodes[r]=a}n=a}return n}get key(){return this._key}get parent(){return this._parent}get tree(){this._tree||(this._tree=new _PivotNode(null,0,null,-1,null));return this._tree}}export class _ServerConnection{constructor(e,t){this._ng=asType(e,PivotEngine);assert(this._isValidUrl(t),"Invalid service Url: "+t+")")}getFields(){let e=null;httpRequest(this._getUrl("Fields"),{async:!1,success:t=>{e=JSON.parse(t.responseText);isArray(e)||console.error("Failed to get fields from server: "+t.responseText)},error:e=>{this._handleError("Getting Fields",e)}});return e}getUniqueValues(e){let t=null;httpRequest(this._getUrl("UniqueValues",null,e.header),{method:"POST",async:!1,data:{view:this._ng.viewDefinition},success:e=>{t=JSON.parse(e.responseText);isArray(t)||console.error("Failed to get unique field values from server: "+e.responseText)},error:e=>{this._handleError("Getting Unique Field Values",e)}});return t}getOutputView(e){this.clearPendingRequests();this._sendHttpRequest("Analyses",{method:"POST",data:{view:this._ng.viewDefinition},success:t=>{let i=JSON.parse(t.responseText);this._token=i.token;this._start=Date.now();this._handleResult(i.status,e)},error:e=>{this._handleError("Analyses",e)}})}getDetail(e,t){let i,s=[],l=this._ng.rowFields.length,n=e?e.values.length:0;for(let t=0;t<l;t++)t<n?s.push(_ServerConnection._getRequestedValue(e.values[t])):s.push(null);l=this._ng.columnFields.length;n=t?t.values.length:0;for(let e=0;e<l;e++)e<n?s.push(_ServerConnection._getRequestedValue(t.values[e])):s.push(null);i=new ObservableArray;this._loadArray("Detail",i,{method:"POST",view:this._ng.viewDefinition,keys:s,max:this._ng.serverMaxDetail});return i}getSortedKeys(e,t){let i=Object.keys(e);if(this._ng.sortOnServer){if(i.length>1){let e={},s=[],l=[];i.forEach(i=>{this._insertKey(e,i,t)});this._reorderKeys(e,null,null,s,t);if(!t&&this._ng.valueFields.length>1){let e=s.length/this._ng.valueFields.length,t=s.length/e;for(let i=0;i<e;i++)for(let n=0;n<t;n++)l.push(s[i+n*e]);return l}return s}}else i.sort((e,t)=>this._ng._keys[e].compareTo(this._ng._keys[t]));return i}static _getRequestedValue(e){if(isDate(e)){let t=e;return new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()))}return e}clearPendingRequests(){this._clearRequest();this._clearTimeout();this._clearToken()}updateTallies(e){let t=this._ng,i=t.rowFields.length,s=t.columnFields.length,l=t.valueFields.length,n=new _PivotNode(t.rowFields,0,null,-1,null);e.forEach((e,r,a)=>{let o=this._getAggregatedFieldCount(e,t.rowFields),h=n.getNode(t.rowFields,i-o,null,-1,e),d=h.key,u=d.toString(null),_=t._tallies[u];if(!_){t._keys[u]=d;t._tallies[u]=_={}}o=this._getAggregatedFieldCount(e,t.columnFields);for(let i=0;i<l;i++){let l=h.tree.getNode(t.columnFields,s-o,t.valueFields,i,e).key,n=l.toString(),r=t.valueFields[i],a=_[n];if(!a){t._keys[n]=l;(a=_[n]=new _ServerTally).add(this._getFieldValue(r,e,!1))}}})}_getFieldValue(e,t,i){let s=t[e.key];return i&&"string"!=typeof s?Globalize.format(s,e.format):s}_getKeyLength(e,t){return e.split(";").length-(t?1:2)}_insertKey(e,t,i){let s=t.split(";");i||s.pop();if(1==s.length)e[s.pop()]={};else{let t=s.pop(),i=e[t];i||(e[t]=i={});for(;s.length>0;){let e=s.shift();i[e]||(i[e]={});i=i[e]}}}_joinKeys(e,t,i){return t&&i?[t,e,i].join(";"):i?[e,i].join(";"):e}_reorderKeys(e,t,i,s,l){Object.keys(e).forEach(n=>{let r=this._joinKeys(n,t,i),a=l?this._ng.showRowTotals:this._ng.showColumnTotals,o=Object.keys(e[n]).length,h=!t&&!i&&a!==ShowTotals.None||!t&&!o||t||a===ShowTotals.Subtotals;l||(r+=";");this._ng.totalsBeforeData&&h&&s.push(r);i?t?this._reorderKeys(e[n],[t,n].join(";"),i,s,l):this._reorderKeys(e[n],n,i,s,l):this._reorderKeys(e[n],null,n,s,l);!this._ng.totalsBeforeData&&h&&s.push(r)})}_getParentKey(e,t){let i=e.split(";");t?i.splice(i.length-2,1):i.splice(0,i.length-2);return i.join(";")}_getAggregatedFieldCount(e,t){let i=t.length,s=0;for(let l=0;l<i;l++){let i=t[l];null==this._getFieldValue(i,e,!1)&&s++}return s}_loadArray(e,t,i){i||(i={});null==i.skip&&(i.skip=0);null==i.top&&(i.top=100);let s=isNumber(i.max)?i.max:1e6;this._request=httpRequest(this._getUrl(e),{data:i,method:i.method||"GET",success:l=>{let n=JSON.parse(l.responseText);t.deferUpdate(()=>{n.value.forEach(e=>{t.push(e)})});if(n.value.length==i.top&&t.length<s){i.skip+=i.top;this._loadArray(e,t,i)}},error:t=>{this._handleError(e,t)}})}_getUrl(e,t=this._token,i){let s=this._ng.itemsSource.toString(),l=s.lastIndexOf("/");s.substr(0,l);switch(e=e.toLowerCase()){case"rawdata":case"detail":return s;case"fields":case"analyses":return s+"/"+e;case"clear":return s+"/analyses/"+t+"/";case"result":case"status":return s+"/analyses/"+t+"/"+e;case"uniquevalues":return s+"/fields/"+i+"/"+e}assert(!1,"Unrecognized command")}_isValidUrl(e){let t=document.createElement("a");t.href=asString(e);t.href=t.href;return t.protocol&&t.hostname&&t.pathname&&"/"!=e[e.length-1]}_handleResult(e,t){switch(e.executingStatus.toLowerCase()){case"executing":case"notset":if(Date.now()-this._start>this._ng.serverTimeout){this._handleError("Analyses",{status:500,statusText:"Analysis timed out"});return}this._progress=e.progress;this._ng.onUpdatingView(new ProgressEventArgs(this._progress));this._clearTimeout();this._toGetStatus=setTimeout(()=>{this._waitUntilComplete(t)},this._ng.serverPollInterval);break;case"completed":this._progress=100;this._ng.onUpdatingView(new ProgressEventArgs(this._progress));this._getResults(t);break;case"exception":this._getResults(t);break;default:this._handleError("Analyses",{status:500,statusText:"Unexpected result..."})}}_waitUntilComplete(e){this._sendHttpRequest("Status",{success:t=>{let i=JSON.parse(t.responseText);this._handleResult(i,e)},error:e=>{this._handleError("Status",e)}})}_getResults(e){this._sendHttpRequest("Result",{success:t=>{this._clearToken();let i=JSON.parse(t.responseText);assert(isArray(i),"Result array Expected.");let s=[];this._ng._viewLists.forEach(e=>{s=s.concat(e.filter(e=>e.dataType==DataType.Date))});s.length>0&&i.forEach(e=>{s.forEach(t=>{let i=t._binding,s=i.getValue(e);isString(s)&&i.setValue(e,new Date(s))})});asFunction(e)(i)},error:e=>{this._handleError("Result",e)}})}_handleError(e,t){this.clearPendingRequests();e='** HttpRequest error on command "'+e+'"';this._ng.onError(new RequestErrorEventArgs(t,e))&&this._throwResponseError(e,t)}_sendHttpRequest(e,t){let i=this._getUrl(e);this._request=httpRequest(i,t)}_throwResponseError(e,t){e=e+"\r\n"+t.status+"\r\n";let i=t.responseText||"";if(500==t.status&&t.responseText){i=JSON.parse(t.responseText).ExceptionMessage}throw e+=i||t.statusText}_clearToken(){if(this._token){this._clearRequest();this._clearTimeout();this._sendHttpRequest("Clear",{method:"DELETE"});this._token=null}}_clearRequest(){if(this._request&&4!=this._request.readyState){this._request.abort();this._request=null}}_clearTimeout(){if(this._toGetStatus){clearTimeout(this._toGetStatus);this._toGetStatus=null}}}_ServerConnection._TIMEOUT=6e4;_ServerConnection._POLL_INTERVAL=500;_ServerConnection._MAXDETAIL=1e3;class _ServerTally extends _Tally{add(e,t){assert(0==this._cnt,"Server tallies have a single value.");this._aggregatedValue=e}getAggregate(e){return this._aggregatedValue}}_addCultureInfo("olap",{PivotEngine:{grandTotal:"Grand Total",subTotal:"Subtotal"},PivotPanel:{fields:"Choose fields to add to report:",drag:"Drag fields between areas below:",filters:"Filters",cols:"Columns",rows:"Rows",vals:"Values",defer:"Defer Updates",update:"Update"},PivotFieldEditor:{dialogHeader:"Field settings:",header:"Header:",summary:"Summary:",showAs:"Show As:",weighBy:"Weigh by:",sort:"Sort:",filter:"Filter:",format:"Format:",sample:"Sample:",edit:"Edit...",clear:"Clear",ok:"OK",cancel:"Cancel",none:"(none)",sorts:{asc:"Ascending",desc:"Descending"},aggs:{sum:"Sum",cnt:"Count",avg:"Average",max:"Max",min:"Min",rng:"Range",std:"StdDev",var:"Var",stdp:"StdDevPop",varp:"VarPop",first:"First",last:"Last"},calcs:{noCalc:"No calculation",dRow:"Difference from previous row",dRowPct:"% Difference from previous row",dCol:"Difference from previous column",dColPct:"% Difference from previous column",dPctGrand:"% of grand total",dPctRow:"% of row total",dPrevRow:"% of value in the previous row",dPctCol:"% of column total",dPrevCol:"% of value in the previous column",dRunTot:"Running total",dRunTotPct:"% running total"},formats:{n0:"Integer (n0)",n2:"Float (n2)",c:"Currency (c)",p0:"Percentage (p0)",p2:"Percentage (p2)",n2c:"Thousands (n2,)",n2cc:"Millions (n2,,)",n2ccc:"Billions (n2,,,)",d:"Date (d)",MMMMddyyyy:"Month Day Year (MMMM dd, yyyy)",dMyy:"Day Month Year (d/M/yy)",ddMyy:"Day Month Year (dd/M/yy)",dMyyyy:"Day Month Year (dd/M/yyyy)",MMMyyyy:"Month Year (MMM yyyy)",MMMMyyyy:"Month Year (MMMM yyyy)",yyyy:"Year (yyyy)",yyyyQq:'Year Quarter (yyyy "Q"q)',FYEEEEQU:'Fiscal Year Quarter ("FY"EEEE "Q"U)'}},_ListContextMenu:{up:"Move Up",down:"Move Down",first:"Move to Beginning",last:"Move to End",filter:"Move to Report Filter",rows:"Move to Row Labels",cols:"Move to Column Labels",vals:"Move to Values",remove:"Remove Field",edit:"Field Settings...",detail:"Show Detail..."},DetailDialog:{header:"Detail View:",ok:"OK",items:"{cnt:n0} items",item:"{cnt} item",row:"Row",col:"Column"},PivotChart:{by:"by",and:"and"},Slicer:{multiSelect:"Multi-Select",clearFilter:"Clear Filter"}});export var ShowTotals;!function(e){e[e.None=0]="None";e[e.GrandTotals=1]="GrandTotals";e[e.Subtotals=2]="Subtotals"}(ShowTotals||(ShowTotals={}));export var ShowAs;!function(e){e[e.NoCalculation=0]="NoCalculation";e[e.DiffRow=1]="DiffRow";e[e.DiffRowPct=2]="DiffRowPct";e[e.DiffCol=3]="DiffCol";e[e.DiffColPct=4]="DiffColPct";e[e.PctGrand=5]="PctGrand";e[e.PctRow=6]="PctRow";e[e.PctCol=7]="PctCol";e[e.RunTot=8]="RunTot";e[e.RunTotPct=9]="RunTotPct";e[e.PctPrevRow=10]="PctPrevRow";e[e.PctPrevCol=11]="PctPrevCol"}(ShowAs||(ShowAs={}));export class PivotEngine{constructor(e){this._autoGenFields=!0;this._allowFieldEditing=!0;this._showRowTotals=ShowTotals.GrandTotals;this._showColTotals=ShowTotals.GrandTotals;this._totalsBefore=!1;this._sortableGroups=!0;this._showZeros=!1;this._updating=0;this._xValueSearch=!0;this._async=!0;this._sortOnServer=!1;this._cntTotal=0;this._cntFiltered=0;this._serverParms={timeout:_ServerConnection._TIMEOUT,pollInterval:_ServerConnection._POLL_INTERVAL,maxDetail:_ServerConnection._MAXDETAIL};this.itemsSourceChanged=new Event;this.viewDefinitionChanged=new Event;this.updatingView=new Event;this.updatedView=new Event;this.error=new Event;this._isUpdatingChanged=new Event;this._hasDeferredUpdatesChanged=new Event;this._pivotView=new PivotCollectionView(this);this._fields=new PivotFieldCollection(this);this._rowFields=new PivotFieldCollection(this);this._columnFields=new PivotFieldCollection(this);this._valueFields=new PivotFieldCollection(this);this._filterFields=new PivotFieldCollection(this);this._viewLists=[this._rowFields,this._columnFields,this._valueFields,this._filterFields];let t=this._fieldListChanged.bind(this);this._fields.collectionChanged.addHandler(t);this._viewLists.forEach(e=>{e.collectionChanged.addHandler(t)});this._defaultFilterType=null;copy(this,e)}get itemsSource(){return this._items}set itemsSource(e){if(this._items!=e){if(this._cv){this._cv.collectionChanged.removeHandler(this._cvCollectionChanged,this);this._cv=null}if(this._server){this._server.clearPendingRequests();this._server=null}this._items=e;isString(e)?this._server=new _ServerConnection(this,e):isObject(e)&&!tryCast(e,"ICollectionView")?this._server=new _SqlServerConnection(this,e):this._cv=asCollectionView(e);null!=this._cv&&this._cv.collectionChanged.addHandler(this._cvCollectionChanged,this);this.deferUpdate(()=>{this.autoGenerateFields&&this._generateFields();this._updateFieldTypes()});this.onItemsSourceChanged()}}get isServer(){return null!=this._server}get collectionView(){return this._cv}get pivotView(){return this._pivotView}get showRowTotals(){return this._showRowTotals}set showRowTotals(e){if((e=asEnum(e,ShowTotals))!=this.showRowTotals){this._showRowTotals=e;this.onViewDefinitionChanged();this.invalidate()}}get showColumnTotals(){return this._showColTotals}set showColumnTotals(e){if((e=asEnum(e,ShowTotals))!=this.showColumnTotals){this._showColTotals=e;this.onViewDefinitionChanged();this.invalidate()}}get totalsBeforeData(){return this._totalsBefore}set totalsBeforeData(e){if(e!=this._totalsBefore){this._totalsBefore=asBoolean(e);this.onViewDefinitionChanged();this._updatePivotView()}}get sortableGroups(){return this._sortableGroups}set sortableGroups(e){if(e!=this._sortableGroups){this._sortableGroups=asBoolean(e);this.onViewDefinitionChanged()}}get sortOnServer(){return this._sortOnServer}set sortOnServer(e){this._sortOnServer=asBoolean(e)}get showZeros(){return this._showZeros}set showZeros(e){if(e!=this._showZeros){this._showZeros=asBoolean(e);this.onViewDefinitionChanged();this._updatePivotView()}}get defaultFilterType(){return null!=this._defaultFilterType?this._defaultFilterType:this._server?FilterType.Condition:FilterType.Both}set defaultFilterType(e){this._defaultFilterType=asEnum(e,FilterType,!0)}get exclusiveValueSearch(){return this._xValueSearch}set exclusiveValueSearch(e){this._xValueSearch=asBoolean(e)}get autoGenerateFields(){return this._autoGenFields}set autoGenerateFields(e){this._autoGenFields=asBoolean(e)}get allowFieldEditing(){return this._allowFieldEditing}set allowFieldEditing(e){this._allowFieldEditing=asBoolean(e)}get fields(){return this._fields}get rowFields(){return this._rowFields}get columnFields(){return this._columnFields}get filterFields(){return this._filterFields}get valueFields(){return this._valueFields}get viewDefinition(){let e={showZeros:this.showZeros,showColumnTotals:this.showColumnTotals,showRowTotals:this.showRowTotals,defaultFilterType:this.defaultFilterType,totalsBeforeData:this.totalsBeforeData,sortableGroups:this.sortableGroups,fields:[],rowFields:this._getFieldCollectionProxy(this.rowFields),columnFields:this._getFieldCollectionProxy(this.columnFields),filterFields:this._getFieldCollectionProxy(this.filterFields),valueFields:this._getFieldCollectionProxy(this.valueFields)};this.fields.forEach(t=>{let i=this._getFieldDefinition(t);e.fields.push(i)});return JSON.stringify(e)}set viewDefinition(e){let t=JSON.parse(e);t&&this.deferUpdate(()=>{this._copyProps(this,t,PivotEngine._props);this.fields.clear();t.fields.forEach(e=>{let t=this._getFieldFromDefinition(e);this.fields.push(t)});t.fields.forEach((e,t)=>{isString(e.weightField)&&(this.fields[t].weightField=this.fields.getField(e.weightField))});this._setFieldCollectionProxy(this.rowFields,t.rowFields);this._setFieldCollectionProxy(this.columnFields,t.columnFields);this._setFieldCollectionProxy(this.filterFields,t.filterFields);this._setFieldCollectionProxy(this.valueFields,t.valueFields)})}get isViewDefined(){let e=this._valueFields.length,t=this._rowFields.length,i=this._columnFields.length;return this._server?e>0&&(t>0||i>0):e>0||t>0||i>0}beginUpdate(){this.cancelPendingUpdates();this._updating++;1===this._updating&&this._onIsUpdatingChanged()}endUpdate(){this._updating--;if(this._updating<=0){if(this._viewDefinitionChanged){this._viewDefinitionChanged=!1;this.onViewDefinitionChanged();this._setHasDeferredUpdates(!1)}this._onIsUpdatingChanged();this.refresh()}}get isUpdating(){return this._updating>0}get hasDeferredUpdates(){return this._hasDeferredUpdates}_setHasDeferredUpdates(e){if(this._hasDeferredUpdates!==e){this._hasDeferredUpdates=e;this._onHasDeferredUpdatesChanged()}}deferUpdate(e){try{this.beginUpdate();e()}finally{this.endUpdate()}}refresh(e=!1){this._updateView(e)}invalidate(){this._toInv&&(this._toInv=clearTimeout(this._toInv));this.isUpdating||this.isDisposed||(this._toInv=setTimeout(()=>{this.refresh()},Control._REFRESH_INTERVAL))}get async(){return this._async}set async(e){if(e!=this._async){this.cancelPendingUpdates();this._async=asBoolean(e)}}get serverTimeout(){return this._serverParms.timeout}set serverTimeout(e){this._serverParms.timeout=asNumber(e,!1,!0)}get serverPollInterval(){return this._serverParms.pollInterval}set serverPollInterval(e){this._serverParms.pollInterval=asNumber(e,!1,!0)}get serverMaxDetail(){return this._serverParms.maxDetail}set serverMaxDetail(e){this._serverParms.maxDetail=asNumber(e,!1,!0)}cancelPendingUpdates(){if(this._toUpdateTallies){clearTimeout(this._toUpdateTallies);this._toUpdateTallies=null}}getDetail(e,t){let i=e?e[_PivotKey._ROW_KEY_NAME]:null,s=this._getKey(t);if(this._server)return this._server.getDetail(i,s);let l=this.collectionView.items,n=[];l.forEach(e=>{!this._applyFilter(e)||null!=i&&!i.matchesItem(e)||null!=s&&!s.matchesItem(e)||n.push(e)});return n}getDetailView(e,t){let i=this.getDetail(e,t);return new CollectionView(i)}getKeys(e,t){let i=e?e[_PivotKey._ROW_KEY_NAME]:null,s=this._getKey(t);return{rowKey:{fields:i?i.fieldNames:[],values:i?i.values:[]},colKey:{fields:s?s.fieldNames:[],values:s?s.values:[]}}}editField(e){if(this.allowFieldEditing){this.edt=new PivotFieldEditor(document.createElement("div"),{field:e});this._dlg=new Popup(document.createElement("div"),{content:this.edt.hostElement});this._dlg.show(!0)}}removeField(e){for(let t=0;t<this._viewLists.length;t++){let i=this._viewLists[t],s=i.indexOf(e);if(s>-1){i.removeAt(s);return}}}onItemsSourceChanged(e){this.itemsSourceChanged.raise(this,e)}onViewDefinitionChanged(e){if(this._updating<=0){this.viewDefinitionChanged.raise(this,e);this._viewDefinitionChanged=!1;this._setHasDeferredUpdates(!1)}else{this._viewDefinitionChanged=!0;this._setHasDeferredUpdates(!0)}}onUpdatingView(e){this.updatingView.raise(this,e)}onUpdatedView(e){this.updatedView.raise(this,e)}onError(e){this.error.raise(this,e);return!e.cancel}_onIsUpdatingChanged(e){this._isUpdatingChanged.raise(this,e)}_onHasDeferredUpdatesChanged(e){this._hasDeferredUpdatesChanged.raise(this,e)}_copy(e,t){let i;switch(e){case"fields":this.fields.clear();this._viewLists.forEach(e=>{e.clear()});(i=asArray(t)).forEach(e=>{let t=this._createField(e,!1);this.fields.push(t)});this._updateFieldTypes();return!0;case"rowFields":case"columnFields":case"valueFields":case"filterFields":this[e].clear();if(!isArray(t)){this[e].maxItems=t.maxItems;t=t.items}(i=asArray(t)).forEach(t=>{let i=this.fields.getField(t);this[e].push(i)});return!0}return!1}_getKey(e){return this._keys[e]}_getRowKey(e){let t=e;if(isNumber(e)){let i=this._pivotView;t=(i.items.length?i.items:i.sourceCollection)[e]}return t?t[_PivotKey._ROW_KEY_NAME]:null}_getRowLevel(e){let t=this._getRowKey(e);return t?t.level:-1}_getColKey(e){isNumber(e)&&(e=this._colBindings[e]);if(isString(e))return this._getKey(e);assert(null==e||e instanceof _PivotKey,"invalid parameter in call to _getColLevel");return e}_getColLevel(e){return(e=this._getColKey(e))?e.level:-1}_getFieldByColKey(e){const t=this._getColKey(e);return t&&t.valueField}_applyFilter(e){let t=this._activeFilterFields;for(let i=0;i<t.length;i++){if(!t[i].filter.apply(e))return!1}return!0}_updateView(e=!1){if(!this.isUpdating||e){this.cancelPendingUpdates();this._cntTotal=this._cntFiltered=0;this._tallies={};this._keys={};this._activeFilterFields=[];if(this._server&&this.isViewDefined){this._server.getOutputView(t=>{if(this.isViewDefined){this._server.updateTallies(t);this._updatePivotView(e)}});return}this._viewLists.forEach(e=>{e.forEach(e=>{e.filter.isActive&&this._activeFilterFields.push(e)})});if(this.isViewDefined&&hasItems(this._cv)){this._batchStart=Date.now();this._updateTallies(this._cv.items,0,e)}else this._updatePivotView(e);this._setHasDeferredUpdates(!1)}}_updateTallies(e,t,i=!1){let s=e.length,l=new _PivotNode(this._rowFields,0,null,-1,null),n=this.valueFields;0==n.length&&this.columnFields.length>0&&(n=new PivotFieldCollection(this)).push(new PivotField(this,"","",{aggregate:Aggregate.Sum}));let r=ShowTotals,a=this._rowFields.length,o=this._getShowRowTotals(),h=o==r.None?a:0,d=o==r.GrandTotals?Math.max(1,a):1,u=this._columnFields.length,_=this._getShowColTotals(),g=_==r.None?u:0,c=_==r.GrandTotals?Math.max(1,u):1,p=n.length;for(let r=t;r<s;r++){if(this._async&&r-t>=PivotEngine._BATCH_SIZE&&Date.now()-this._batchStart>PivotEngine._BATCH_DELAY){this._toUpdateTallies=setTimeout(()=>{this.onUpdatingView(new ProgressEventArgs(Math.round(r/e.length*100)));this._batchStart=Date.now();this._updateTallies(e,r,i)},PivotEngine._BATCH_TIMEOUT);return}this._cntTotal++;let s=e[r];if(!this._activeFilterFields.length||this._applyFilter(s)){this._cntFiltered++;for(let e=h;e<=a;e+=d){let t=l.getNode(this._rowFields,e,null,-1,s),i=t.key,r=i.toString(),a=this._tallies[r];if(!a){this._keys[r]=i;this._tallies[r]=a={}}for(let e=g;e<=u;e+=c)for(let i=0;i<p;i++){let l=t.tree.getNode(this._columnFields,e,n,i,s).key,r=l.toString(),o=a[r];if(!o){this._keys[r]=l;o=a[r]=new _Tally}let h=n[i],d=h._getValue(s,!1),u=h.weightField?h._getWeight(s):null;o.add(d,u)}}}}this._toUpdateTallies=null;this._updatePivotView(i)}_updatePivotView(e=!1){if(!this.isUpdating||e){let e=this._pivotView;e.deferUpdate(()=>{this.onUpdatingView(new ProgressEventArgs(100));e.cancelEdit();e.cancelNew();let t=e.sourceCollection;t.length=0;let i={};for(let e in this._tallies)i[e]=!0;let s={};for(let e in this._tallies){let t=this._tallies[e];for(let e in t)s[e]=!0}let l=[],n=[];if(this._server)l=this._server.getSortedKeys(i,!0),n=this._server.getSortedKeys(s,!1);else{l=this._getSortedKeys(i);n=this._getSortedKeys(s)}for(let e=0;e<l.length;e++){let i=l[e],s=this._tallies[i],r={};r[_PivotKey._ROW_KEY_NAME]=this._getKey(i);for(let e=0;e<n.length;e++){let t=n[e],i=s[t],l=this._getKey(t),a=i?i.getAggregate(l.aggregate):null;null==a&&this._showZeros&&(a=0);r[t]=a}t.push(r)}this._colBindings=n;this._updateFieldValues(t);e.sortDescriptions.clear();e.refresh()});this.onUpdatedView()}}_getSortedKeys(e){let t=Object.keys(e);t.sort((e,t)=>this._keys[e].compareTo(this._keys[t]));return t}_updateFieldValues(e){let t=this.valueFields.length;for(let i=0;i<t;i++){let s=this.valueFields[i];if(isFunction(s.getAggregateValue))for(let l=i;l<this._colBindings.length;l+=t)for(let t=0;t<e.length;t++){let i=e[t],n=this._colBindings[l],r=this._getAggregateObject(i,n);i[n]=s.getAggregateValue.call(this,r)}}for(let i=0;i<t;i++){let s=this.valueFields[i];switch(s.showAs){case ShowAs.RunTot:case ShowAs.RunTotPct:for(let l=i;l<this._colBindings.length;l+=t){for(let t=0;t<e.length;t++){e[t][this._colBindings[l]]=this._getRunningTotal(e,t,l)}if(s.showAs==ShowAs.RunTotPct)for(let t=0;t<e.length;t++){let i=e[t],s=this._colBindings[l],n=i[s];if(isNumber(n)){let r=this._getLastValueInRowGroup(e,t,l);0!=r&&(i[s]=n/r)}}}break;case ShowAs.PctGrand:case ShowAs.PctCol:let l=0;if(s.showAs==ShowAs.PctGrand)for(let s=i;s<this._colBindings.length;s+=t)-1==this._getColLevel(s)&&(l+=this._getColTotal(e,s));for(let n=i;n<this._colBindings.length;n+=t){s.showAs==ShowAs.PctCol&&(l=this._getColTotal(e,n));let t=this._colBindings[n];e.forEach(e=>{let i=e[t];isNumber(i)&&(e[t]=0!=l?i/l:null)})}break;case ShowAs.PctRow:for(let s=0;s<e.length;s++){let l=e[s],n=0;for(let e=i;e<this._colBindings.length;e+=t)if(-1==this._getColLevel(e)){let t=l[this._colBindings[e]];isNumber(t)&&(n+=t)}for(let e=i;e<this._colBindings.length;e+=t){let t=this._colBindings[e],i=l[t];isNumber(i)&&(l[t]=0!=n?i/n:null)}}break;case ShowAs.DiffRow:case ShowAs.DiffRowPct:case ShowAs.PctPrevRow:for(let l=i;l<this._colBindings.length;l+=t)for(let t=e.length-1;t>=0;t--){e[t][this._colBindings[l]]=this._getRowDifference(e,t,l,s.showAs)}break;case ShowAs.DiffCol:case ShowAs.DiffColPct:case ShowAs.PctPrevCol:for(let l=0;l<e.length;l++)for(let n=this._colBindings.length-t+i;n>=0;n-=t){e[l][this._colBindings[n]]=this._getColDifference(e,l,n,s.showAs)}}}}_getAggregateObject(e,t){let i={},s=/(.+:.+;)*((.+):.+;)/,l=t.match(s);for(let t in e){let n=t.match(s);n&&n[1]==l[1]&&(i[n[3]]=e[t])}return i}_getColTotal(e,t){let i=this._colBindings[t],s=0;e.forEach(e=>{if(-1==this._getRowLevel(e)){let t=e[i];isNumber(t)&&(s+=t)}});return s}_getRunningTotal(e,t,i){let s=this._getRowLevel(e[t]);if(0==s)return null;let l=this._colBindings[i],n=e[t][l],r=this._getShowRowTotals(),a=this.rowFields.length-2;for(let i=t-1;i>=0;i--){let o=this._getRowLevel(e[i]);if(o==s){if(a>-1&&s<0&&r!=ShowTotals.Subtotals){let s=e[t].$rowKey,l=e[i].$rowKey;if(s.values[a]!=l.values[a])return null}n+=e[i][l];break}if(o>s)break}return n}_getLastValueInRowGroup(e,t,i){let s=this._colBindings[i],l=e[t][s],n=this._getRowLevel(e[t]),r=this.rowFields.length-2,a=this._getShowRowTotals();for(let i=t+1;i<e.length;i++){let o=this._getRowLevel(e[i]);if(o==n){if(r>-1&&n<0&&a!=ShowTotals.Subtotals){let s=e[t].$rowKey,n=e[i].$rowKey;if(s.values[r]!=n.values[r])return l}l=e[i][s]}if(o>n)break}return l}_getRowDifference(e,t,i,s){let l=this._getRowLevel(e[t]);if(0==l)return null;let n=this._colBindings[i],r=e[t][n],a=this.rowFields.length-2,o=this._getShowRowTotals();for(let i=t-1;i>=0;i--){let h=this._getRowLevel(e[i]);if(h==l){if(a>-1&&l<0&&o!=ShowTotals.Subtotals){let s=e[t].$rowKey,l=e[i].$rowKey;if(s.values[a]!=l.values[a])return null}let h=e[i][n];switch(s){case ShowAs.DiffRow:r-=h;break;case ShowAs.DiffRowPct:r=(r-h)/h;break;case ShowAs.PctPrevRow:r/=h}return r}if(h>l)break}return s==ShowAs.PctPrevRow?1:null}_getColDifference(e,t,i,s){let l=this._getColLevel(i);if(0==l)return null;let n=e[t],r=n[this._colBindings[i]],a=this.valueFields.length,o=this.columnFields.length-2,h=this._getShowColTotals();for(let e=i-a;e>=0;e-=a){let t=this._getColLevel(e);if(t==l){if(o>-1&&l<0&&h!=ShowTotals.Subtotals){let t=this._getKey(this._colBindings[i]),s=this._getKey(this._colBindings[e]);if(t.values[o]!=s.values[o])return null}let t=n[this._colBindings[e]];switch(s){case ShowAs.DiffCol:r-=t;break;case ShowAs.DiffColPct:r=(r-t)/t;break;case ShowAs.PctPrevCol:r/=t}return r}if(t>l)break}return s==ShowAs.PctPrevCol?1:null}_getShowRowTotals(){return this._valueFields.length?this._showRowTotals:ShowTotals.None}_getShowColTotals(){return this._valueFields.length?this._showColTotals:ShowTotals.None}_getUniqueValues(e){return this._server?this._server.getUniqueValues(e):null}_generateFields(){this._viewLists.forEach(e=>{e.clear()});for(let e=0;e<this.fields.length;e++){if(this.fields[e]._autoGenerated){this.fields.removeAt(e);e--}}if(this._server){this._server.getFields().forEach(e=>{let t=this._createField(e,!0);this.fields.getField(t.header)||this.fields.push(t)});return}let e=this.collectionView,t=e?e.items:null;t&&t.length&&this.autoGenerateFields&&getTypes(t,0).forEach(e=>{let t=this._createField({binding:e.binding,header:toHeaderCase(e.binding),dataType:e.dataType},!0);this.fields.getField(t.header)||this.fields.push(t)})}_updateFieldTypes(){let e=this.collectionView,t=e?e.sourceCollection:null;t&&t.length&&this.fields.forEach(e=>{this._updateFieldType(e,t)})}_updateFieldType(e,t){if(e._hasSubFields())e.subFields.forEach(e=>{this._updateFieldType(e,t)});else{if(null==e.dataType&&e.binding)for(let i=0;i<t.length;i++){let s=e._binding.getValue(t[i]);if(null!=s){e.dataType=isPrimitive(s)?getType(s):null;break}}if(null!=e.dataType){e.format||(e.format=e.dataType==DataType.Date?"d":"n0");e.aggregate==Aggregate.Sum&&e.dataType!=DataType.Number&&(e.aggregate=Aggregate.Cnt)}}}_createField(e,t){let i;if(isString(e))i=new PivotField(this,e);else if(e){e.key&&delete e.key;i=null!=e.dimensionType?new CubePivotField(this,e.binding,e.header,e):new PivotField(this,e.binding,e.header,e);null!=e.dataType&&(i.dataType=e.dataType)}i._autoGenerated=t;if(t||isString(e)){i.format=i.dataType==DataType.Date?"d":"n0";i.aggregate=i.dataType==DataType.Number?Aggregate.Sum:Aggregate.Cnt}e&&!isString(e)&&copy(i,e);return i}_cvCollectionChanged(e,t){this.invalidate()}_fieldListChanged(e,t){if(t.action==NotifyCollectionChangedAction.Add){let i=e;for(let e=0;e<i.length-1;e++)if(i[e].key)for(let t=e+1;t<i.length;t++)if(i[e].key==i[t].key){i.removeAt(t);t--}if(i!=this._fields)if(this._fields.getField(t.item.key)){for(let e=0;e<this._viewLists.length;e++)if(this._viewLists[e]!=i){let i=this._viewLists[e],s=i.indexOf(t.item);s>-1&&i.removeAt(s)}}else i.removeAt(t.index);if(isNumber(i.maxItems)&&i.maxItems>-1)for(;i.length>i.maxItems;){let e=i.length-1;i[e]==t.item&&e>0&&e--;i.removeAt(e)}}this.onViewDefinitionChanged();this.invalidate()}_fieldPropertyChanged(e,t){this.onViewDefinitionChanged();if(!e.isActive)return;let i=t.propertyName;"visible"!=i&&("width"!=i&&"wordWrap"!=i&&"isContentHtml"!=i?"format"==i&&this.valueFields.indexOf(e)>-1?this._pivotView.refresh():"showAs"!=i?"descending"!=i?"aggregate"!=i?this.invalidate():this.valueFields.indexOf(e)>-1&&!this.isUpdating&&(this._server?this._updateView():this._updatePivotView()):this._updatePivotView():this.valueFields.indexOf(e)>-1&&!this.isUpdating&&this._updatePivotView():this._pivotView.refresh())}_copyProps(e,t,i){for(let s=0;s<i.length;s++){let l=i[s];null!=t[l]&&(e[l]=t[l])}}_getFieldFromDefinition(e){let t=e.filter;e.filter&&delete e.filter;let i=this._createField(e,!0);if(t){i._setFilterProxy(t);e.filter=t}return i}_getFieldDefinition(e){let t={binding:e.binding,header:e.header,dataType:e.dataType,aggregate:e.aggregate,showAs:e.showAs,descending:e.descending,format:e.format,align:e.align,wordWrap:e.wordWrap,width:e.width,isContentHtml:e.isContentHtml};e.weightField&&(t.weightField=e.weightField._getName());e.key&&(t.key=e.key);e.filter.isActive&&(t.filter=e._getFilterProxy());if(e._hasSubFields()){t.subFields=[];e.subFields.forEach(e=>{t.subFields.push(this._getFieldDefinition(e))})}e instanceof CubePivotField&&(t.dimensionType=e.dimensionType);return t}_getFieldCollectionProxy(e){let t={items:[]};isNumber(e.maxItems)&&e.maxItems>-1&&(t.maxItems=e.maxItems);for(let i=0;i<e.length;i++){let s=e[i];t.items.push(s.key)}return t}_setFieldCollectionProxy(e,t){e.clear();e.maxItems=isNumber(t.maxItems)?t.maxItems:null;for(let i=0;i<t.items.length;i++)e.push(t.items[i])}dispose(){this.isDisposed=!0;if(this._cv){this._cv.collectionChanged.removeHandler(this._cvCollectionChanged,this);this._cv=null}if(this._server){this._server.clearPendingRequests();this._server=null}this._fields&&this._fields.collectionChanged&&this._fields.collectionChanged.removeHandler(this._fieldListChanged,this);this._viewLists.forEach(e=>{e.collectionChanged&&e.collectionChanged.removeHandler(this._fieldListChanged,this)});this._tallies=null;this._keys=null;this._activeFilterFields=null;if(this._toInv){clearTimeout(this._toInv);this._toInv=null}if(this._toUpdateTallies){clearTimeout(this._toUpdateTallies);this._toUpdateTallies=null}if(this.edt){this.edt.dispose();this.edt=null}if(this._dlg){this._dlg.dispose();this._dlg=null}this._items=null;if(this._fields){this._fields.clear();this._fields=null}if(this._rowFields){this._rowFields.clear();this._rowFields=null}if(this._columnFields){this._columnFields.clear();this._columnFields=null}if(this._valueFields){this._valueFields.clear();this._valueFields=null}if(this._filterFields){this._filterFields.clear();this._filterFields=null}this._serverParms=null;this._colBindings=null;delete this.isDisposed}}PivotEngine._BATCH_SIZE=1e4;PivotEngine._BATCH_TIMEOUT=0;PivotEngine._BATCH_DELAY=100;PivotEngine._props=["showZeros","showRowTotals","showColumnTotals","totalsBeforeData","sortableGroups","defaultFilterType"];export class ProgressEventArgs extends EventArgs{constructor(e){super();this._progress=asNumber(e)}get progress(){return this._progress}}export class _ListContextMenu extends Menu{constructor(e){super(document.createElement("div"),{header:"Field Context Menu",displayMemberPath:"text",commandParameterPath:"parm",command:{executeCommand:e=>{this._execute(e)},canExecuteCommand:e=>this._canExecute(e)}});this._full=e;this.itemsSource=this._getMenuItems(e);addClass(this.dropDown,`context-menu ${_GridContextMenuClsNames.hostElement}`)}static get controlTemplate(){_ListContextMenu._ctrlTemplate||(_ListContextMenu._ctrlTemplate=Menu.controlTemplate);return _ListContextMenu._ctrlTemplate}static set controlTemplate(e){_ListContextMenu._ctrlTemplate=e}refresh(e=!0){this.itemsSource=this._getMenuItems(this._full);super.refresh(e)}attach(e){assert(e instanceof FlexGrid,"Expecting a FlexGrid control...");let t=e.hostElement;this._contextMenuHandler=i=>{if(this._selectField(e,i)){i.preventDefault();this.owner=t;this.show(i)}};t.addEventListener("contextmenu",this._contextMenuHandler)}_selectField(e,t){let i=e.hitTest(t);if(i.panel!=e.cells||!i.range.isValid)return!1;let s=e.rows[i.row].dataItem;if(s instanceof CubePivotField&&s.subFields&&s.subFields.length)return!1;e.select(i.range,!0);return!0}_getMenuItems(e){let t;t=e?[{text:'<div class="menu-icon"></div>*',parm:"up"},{text:'<div class="menu-icon"></div>*',parm:"down"},{text:'<div class="menu-icon"></div>*',parm:"first"},{text:'<div class="menu-icon"></div>*',parm:"last"},{text:`<div class="${UtilitesClsNames.separator}"></div>`},{text:`<div class="menu-icon"><span class=${GlyphClsNames.filter}></span></div>*`,parm:"filter"},{text:'<div class="menu-icon">&#8801;</div>*',parm:"rows"},{text:'<div class="menu-icon">&#10996;</div>*',parm:"cols"},{text:'<div class="menu-icon">&#931;</div>*',parm:"vals"},{text:`<div class="${UtilitesClsNames.separator}"></div>`},{text:'<div class="menu-icon menu-icon-remove">&#10006;</div>*',parm:"remove"},{text:`<div class="${UtilitesClsNames.separator}"></div>`},{text:'<div class="menu-icon">&#9965;</div>*',parm:"edit"}]:[{text:`<div class="menu-icon"><span class=${GlyphClsNames.filter}></span></div>*`,parm:"filter"},{text:'<div class="menu-icon">&#8801;</div>*',parm:"rows"},{text:'<div class="menu-icon">&#10996;</div>*',parm:"cols"},{text:'<div class="menu-icon">&#931;</div>*',parm:"vals"},{text:`<div class="${UtilitesClsNames.separator}"></div>`},{text:'<div class="menu-icon">&#9965;</div>*',parm:"edit"}];for(let e=0;e<t.length;e++){let i=t[e];if(i.parm){let e=culture.olap._ListContextMenu[i.parm];assert(e,"missing localized text for item "+i.parm);i.text=i.text.replace(/([^>]+$)/,e)}}return t}_execute(e){let t=Control.getControl(this.owner),i=t.itemsSource,s=t.selection.row,l=t.rows[s].dataItem,n=l?l.engine:null,r=this._getTargetList(n,e);switch(e){case"up":case"first":case"down":case"last":if(n){let t=i.indexOf(l),s="up"==e?t-1:"first"==e?0:"down"==e?t+1:"last"==e?i.length:-1;n.deferUpdate(()=>{i.removeAt(t);i.insert(s,l)})}break;case"filter":case"rows":case"cols":case"vals":r&&l&&r.push(l);break;case"remove":l&&n.removeField(l);break;case"edit":l&&n.editField(l)}}_canExecute(e){let t=Control.getControl(this.owner);if(!t)return!1;let i=t.selection.row,s=i>-1?t.rows[i].dataItem:null,l=s?s.engine:null,n=this._getTargetList(l,e),r=!!s&&s instanceof CubePivotField,a=!!s&&s.isMeasure;switch(e){case"up":case"first":return i>0;case"down":case"last":return i<t.rows.length-1;case"filter":case"rows":case"cols":return!a&&n&&n.indexOf(s)<0;case"vals":return(!r||a)&&n&&n.indexOf(s)<0;case"edit":return l&&l.allowFieldEditing;case"detail":return s&&!r}return!0}_getTargetList(e,t){if(e)switch(t){case"filter":return e.filterFields;case"rows":return e.rowFields;case"cols":return e.columnFields;case"vals":return e.valueFields}return null}dispose(){if(this.owner instanceof HTMLElement){this.owner.removeEventListener("contextmenu",this._contextMenuHandler);this._contextMenuHandler=null;this._owner=null}this.itemsSource=null;super.dispose()}}_ListContextMenu._ctrlTemplate="";export class PivotPanel extends Control{constructor(e,t){super(e,null,!0);this._showIcons=!0;this._restrictDrag=null;this.deferredUpdateChanged=new Event;this.itemsSourceChanged=new Event;this.viewDefinitionChanged=new Event;this.updatingView=new Event;this.updatedView=new Event;this._isUpdatingChangedBnd=this._isUpdatingChanged.bind(this);let i=this.getTemplate();this.applyTemplate(`${ControlClsNames.hostElement} ${ControlClsNames.content} ${PivotPanelClsNames.hostElement}`,i,{_dFields:"d-fields",_dFilters:"d-filters",_dRows:"d-rows",_dCols:"d-cols",_dVals:"d-vals",_dProgress:"d-prog",_btnUpdate:"btn-update",_chkDefer:"chk-defer",_gFlds:"g-flds",_gDrag:"g-drag",_gFlt:"g-flt",_gCols:"g-cols",_gRows:"g-rows",_gVals:"g-vals",_gDefer:"g-defer"});this._globalize();let s=this.hostElement;this.addEventListener(s,"dragstart",this._dragstart.bind(this));this.addEventListener(s,"dragover",this._dragover.bind(this));this.addEventListener(s,"dragleave",this._dragover.bind(this));this.addEventListener(s,"drop",this._drop.bind(this));this.addEventListener(s,"dragend",this._dragend.bind(this));this._lbFields=this._createFieldGrid(this._dFields);this._lbFilters=this._createFieldGrid(this._dFilters);this._lbRows=this._createFieldGrid(this._dRows);this._lbCols=this._createFieldGrid(this._dCols);this._lbVals=this._createFieldGrid(this._dVals);let l=this._ctxMenuShort=new _ListContextMenu(!1);l.attach(this._lbFields);(l=this._ctxMenuFull=new _ListContextMenu(!0)).attach(this._lbFilters);l.attach(this._lbRows);l.attach(this._lbCols);l.attach(this._lbVals);this._dMarker=createElement(`<div class="${FlexGridClsNames.marker}" style="display:none">&nbsp;</div>`);this.hostElement.appendChild(this._dMarker);this.addEventListener(this._btnUpdate,"click",e=>{this._ng.refresh(!0);this.refresh();e.preventDefault()});this.addEventListener(this._chkDefer,"click",e=>{this.deferredUpdate=this._chkDefer.checked;this._updateDeferredUpdateElements()});this.engine=new PivotEngine;this.initialize(t)}static get controlTemplate(){PivotPanel._ctrlTemplate||(PivotPanel._ctrlTemplate='<div><label wj-part="g-flds"></label><div wj-part="d-fields"></div><label wj-part="g-drag"></label><table><tr><td width="50%">'+`<label><span class="${GlyphClsNames.glyph} ${GlyphClsNames.filter}"></span> <span wj-part="g-flt"></span></label>`+'<div wj-part="d-filters"></div></td><td width= "50%" style="border-left-style:solid">'+`<label><span class=${GlyphClsNames.glyph}>&#10996;</span> <span wj-part="g-cols"></span></label>`+'<div wj-part="d-cols"></div></td></tr><tr style="border-top-style:solid"><td width="50%">'+`<label><span class=${GlyphClsNames.glyph}>&#8801;</span> <span wj-part="g-rows"></span></label>`+'<div wj-part="d-rows"></div></td><td width= "50%" style="border-left-style:solid">'+`<label><span class=${GlyphClsNames.glyph}>&#931;</span> <span wj-part="g-vals"></span></label>`+'<div wj-part="d-vals"></div></td></tr></table>'+`<div wj-part="d-prog" class=${ControlStateClsNames.selected} style="width:0px;height:3px"></div>`+'<div style="display:table"><label style="display:table-cell;vertical-align:middle"><input wj-part="chk-defer" type="checkbox"/> <span wj-part="g-defer"></span></label>'+`<button wj-part="btn-update" class="${InputFormElementsClsNames.btn} ${ControlStateClsNames.disabled}" style="float:right;margin:6px" disabled></button>`+"</div></div>");return PivotPanel._ctrlTemplate}static set controlTemplate(e){PivotPanel._ctrlTemplate=e}_getProductInfo(){return"D6F4,PivotPanel"}get engine(){return this._ng}set engine(e){let t,i=this._ng;if(i){i.itemsSourceChanged.removeHandler(this._itemsSourceChanged);i.viewDefinitionChanged.removeHandler(this._viewDefinitionChanged);i.updatingView.removeHandler(this._updatingView);i.updatedView.removeHandler(this._updatedView);i.error.removeHandler(this._requestError);i._isUpdatingChanged.removeHandler(this._isUpdatingChangedBnd);t=this.deferredUpdate}e=asType(e,PivotEngine,!1);(i=this._ng=e).itemsSourceChanged.addHandler(this._itemsSourceChanged,this);i.viewDefinitionChanged.addHandler(this._viewDefinitionChanged,this);i.updatingView.addHandler(this._updatingView,this);i.updatedView.addHandler(this._updatedView,this);i.error.addHandler(this._requestError,this);i._isUpdatingChanged.addHandler(this._isUpdatingChangedBnd);t!==this.deferredUpdate&&this.onDeferredUpdateChanged();this._lbFields.itemsSource=e.fields;this._lbFilters.itemsSource=e.filterFields;this._lbRows.itemsSource=e.rowFields;this._lbCols.itemsSource=e.columnFields;this._lbVals.itemsSource=e.valueFields;this._filterFieldVisibleWithRoot=e=>e.visible&&null==e.parentField;this._filterFieldVisibleOnly=e=>e.visible;this._lbFields.collectionView.filter=this._filterFieldVisibleWithRoot;"Filters,Rows,Cols,Vals".split(",").forEach(e=>{this["_lb"+e].collectionView.filter=this._filterFieldVisibleOnly});this._updateDeferredUpdateElements()}get itemsSource(){return this._ng.itemsSource}set itemsSource(e){e instanceof PivotEngine?this.engine=e:this._ng.itemsSource=e}get collectionView(){return this._ng.collectionView}get pivotView(){return this._ng.pivotView}get autoGenerateFields(){return this.engine.autoGenerateFields}set autoGenerateFields(e){this._ng.autoGenerateFields=e}get fields(){return this._ng.fields}get rowFields(){return this._ng.rowFields}get columnFields(){return this._ng.columnFields}get valueFields(){return this._ng.valueFields}get filterFields(){return this._ng.filterFields}get viewDefinition(){return this._ng.viewDefinition}set viewDefinition(e){this._ng.viewDefinition=e}get isViewDefined(){return this._ng.isViewDefined}get showFieldIcons(){return this._showIcons}set showFieldIcons(e){if(e!=this._showIcons){this._showIcons=asBoolean(e);this.invalidate()}}get restrictDragging(){return this._restrictDrag}set restrictDragging(e){this._restrictDrag=asBoolean(e,!0)}get deferredUpdate(){return this.engine.isUpdating}set deferredUpdate(e){this.deferredUpdate!=e&&(e?this._ng.beginUpdate():this._ng.endUpdate())}onDeferredUpdateChanged(e){this.deferredUpdateChanged.raise(this,e)}onItemsSourceChanged(e){this.itemsSourceChanged.raise(this,e)}onViewDefinitionChanged(e){this.viewDefinitionChanged.raise(this,e)}onUpdatingView(e){this.updatingView.raise(this,e)}onUpdatedView(e){this.updatedView.raise(this,e)}refresh(e=!0){if(this.hostElement){["Fields","Filters","Rows","Cols","Vals"].forEach(e=>{let t=this["_lb"+e],i=t?t.collectionView:null;if(t&&i){t.refresh();i.refresh()}});if(e){this._globalize();this._ctxMenuShort.refresh();this._ctxMenuFull.refresh()}}super.refresh(e)}_copy(e,t){switch(e){case"engine":this.engine=t;return!0}return!1}_globalize(){let e=culture.olap.PivotPanel;setText(this._gFlds,e.fields);setText(this._gDrag,e.drag);setText(this._gFlt,e.filters);setText(this._gCols,e.cols);setText(this._gRows,e.rows);setText(this._gVals,e.vals);setText(this._gDefer,e.defer);setText(this._btnUpdate,e.update)}_itemsSourceChanged(e,t){this.onItemsSourceChanged(t)}_viewDefinitionChanged(e,t){this.invalidate();this.onViewDefinitionChanged(t)}_updatingView(e,t){let i=clamp(t.progress,5,100)%100;this._dProgress.style.width=i+"%";this.onUpdatingView(t)}_updatedView(e,t){this.onUpdatedView(t)}_requestError(e,t){this._dProgress.style.width="0"}_isUpdatingChanged(){this._updateDeferredUpdateElements();this.onDeferredUpdateChanged()}_updateDeferredUpdateElements(){const e=this.deferredUpdate;this._chkDefer.checked=e;enable(this._btnUpdate,e)}_createFieldGrid(e){let t=new FlexGrid(e,{autoGenerateColumns:!1,childItemsPath:"subFields",columns:[{binding:"header",width:"*"}],headersVisibility:"None",selectionMode:"Cell",alternatingRowStep:0});t.cells.hostElement.parentElement.style.overflowX="hidden";t.formatItem.addHandler((e,t)=>{let i=e.rows[t.row].dataItem;assert(i instanceof PivotField,"PivotField expected...");let s=i._hasSubFields();toggleClass(t.cell,PivotPanelClsNames.header,s);t.cell.setAttribute("draggable",(!s).toString());let l=t.cell.innerHTML;i.filter.isActive&&(l+=`&nbsp;&nbsp;<span class=${GlyphClsNames.filter}></span>`);e!=this._lbVals||isFunction(i.getAggregateValue)||(l+=` <span class="${PivotPanelClsNames.aggregate}">(`+Aggregate[i.aggregate]+")</span>");if(e==this._lbFields&&!s){if(this._showIcons){let e=i.isMeasure?"measure":"dimension";l=`<span class="${GlyphClsNames.glyph}-`+e+'"></span> '+l}l='<label><input type="checkbox"'+(i.isActive?" checked":"")+"> "+l+"</label>"}t.cell.innerHTML=l});t.addEventListener(e,"click",e=>{let i=e.target;if(i instanceof HTMLInputElement&&"checkbox"==i.type){let s=this._hitTestField(t,e);s instanceof PivotField&&(s.isActive=i.checked)}});return t}_dragstart(e){let t=this._getFlexGridTarget(e);if(t){this._dragField=this._hitTestField(t,e);this._dragSource=this._dragField instanceof PivotField?t.hostElement:null;if(this._dragSource&&e.dataTransfer){_startDrag(e.dataTransfer,"copyMove");e.stopPropagation()}}}_dragover(e){let t=!1,i=this._getFlexGridTarget(e);if(i&&this._dragField){if(this._dragSource==this._dFields&&i!=this._lbFields){let e=i.itemsSource;if(null==e.maxItems||e.length<e.maxItems){let e=this._dragField;i.itemsSource.indexOf(e)<0?t=!0:i==this._lbVals&&(t=!(e instanceof CubePivotField))}}this._dragSource&&this._dragSource!=this._dFields&&(t=!0)}if(t&&this._getRestrictDrag()&&this._dragSource!=i.hostElement){let e=this._dragField.isMeasure;i==this._lbVals?t=e:i!=this._lbRows&&i!=this._lbCols||(t=!e)}if(t){this._updateDropMarker(i,e);e.dataTransfer.dropEffect=this._dragSource==this._dFields?"copy":"move";e.preventDefault();e.stopPropagation()}else this._updateDropMarker()}_drop(e){let t=this._getFlexGridTarget(e);if(t&&this._dragField){let e=Control.getControl(this._dragSource),i=this._dragField;if(e==this._lbFields&&t==this._lbVals&&t.itemsSource.indexOf(i)>-1){i=i._clone();this.engine.fields.push(i)}t==this._lbFields?i.isActive=!1:this._ng.deferUpdate(()=>{let e=t.itemsSource,s=e.indexOf(i);if(s!=this._dropIndex){if(s>-1){e.removeAt(s);s<this._dropIndex&&this._dropIndex--}e.insert(this._dropIndex,i)}})}this._resetMouseState()}_dragend(e){this._resetMouseState()}_hitTestField(e,t){let i=e.hitTest(t.target);if(i.panel==e.cells&&i.range.isValid){e.select(i.range,!0);return e.rows[i.row].dataItem}return null}_getRestrictDrag(){let e=this._restrictDrag;null==e&&this.fields.length&&(e=this.fields[0]instanceof CubePivotField);return e}_resetMouseState(){this._dragSource=null;this._updateDropMarker()}_getFlexGridTarget(e){let t=Control.getControl(closest(e.target,`.${FlexGridClsNames.hostElement}`));return t instanceof FlexGrid?t:null}_updateDropMarker(e,t){if(!t){this._dMarker.style.display="none";return}let i,s=this.hostElement,l=s.getBoundingClientRect();if(e.rows.length){let l=e.hitTest(t).row;if(l>-1){i=e.getCellBoundingRect(l,0);if(t.clientY>s.scrollTop+i.top+i.height/2&&l<e.rows.length){i.top+=i.height;l++}this._dropIndex=l}else{l=e.viewRange.bottomRow;(i=e.getCellBoundingRect(l,0)).top+=i.height;this._dropIndex=l+1}}else{(i=Rect.fromBoundingRect(e.hostElement.getBoundingClientRect())).top+=4;this._dropIndex=0}setCss(this._dMarker,{left:Math.round(i.left-l.left)+s.scrollLeft,top:Math.round(i.top-l.top-2)+s.scrollTop,width:Math.round(i.width),height:4,display:""})}dispose(){this._lbFields&&this._lbFields.collectionView&&(this._lbFields.collectionView.filter=null);["Filters","Rows","Cols","Vals"].forEach(e=>{const t=this["_lb"+e];t&&t.collectionView&&(t.collectionView.filter=null)});if(this._ctxMenuShort){this._ctxMenuShort.dispose();this._ctxMenuShort=null}if(this._ctxMenuFull){this._ctxMenuFull.dispose();this._ctxMenuFull=null}if(this._lbFields){this._lbFields.dispose();this._lbFields=null}if(this._lbFilters){this._lbFilters.dispose();this._lbFilters=null}if(this._lbRows){this._lbRows.dispose();this._lbRows=null}if(this._lbCols){this._lbCols.dispose();this._lbCols=null}if(this._lbVals){this._lbVals.dispose();this._lbVals=null}if(this._ng){this._ng.itemsSourceChanged.removeHandler(this._itemsSourceChanged);this._ng.viewDefinitionChanged.removeHandler(this._viewDefinitionChanged);this._ng.updatingView.removeHandler(this._updatingView);this._ng.updatedView.removeHandler(this._updatedView);this._ng.error.removeHandler(this._requestError);this._ng._isUpdatingChanged.removeHandler(this._isUpdatingChangedBnd)}this.engine.dispose();super.dispose()}}PivotPanel._ctrlTemplate="";export class PivotGrid extends FlexGrid{constructor(e,t){super(e);this._showDetailOnDoubleClick=!0;this._collapsibleSubtotals=!0;this._customCtxMenu=!0;this._ctxMenu=new _GridContextMenu;this._showRowFldSort=!1;this._showRowFldHdrs=!0;this._showColFldHdrs=!0;this._showValFldHdrs=!1;this._centerVert=!0;this._collapsedKeys={};this._resizingColumn=!1;this._outlineMode=!1;this._ignoreClick=!1;this._colRowFields=new Map;this._prevCulture=culture.Globalize.name;this._hdrCols._setDefaultSize(this._cols.defaultSize);addClass(this.hostElement,PivotGridClsNames.hostElement);this.isReadOnly=!0;this.copyHeaders=HeadersVisibility.All;this.deferResizing=!0;this.alternatingRowStep=0;this.autoGenerateColumns=!1;this.allowDragging=AllowDragging.None;this.allowMerging=AllowMerging.All;this.mergeManager=new _PivotMergeManager;this.customContextMenu=!0;this.treeIndent=32;this.initialize(t);this.formatItem.addHandler(this._formatItem,this);var i=this.hostElement;this.addEventListener(i,"mousedown",this._mousedown.bind(this),!0);this.addEventListener(i,"mouseup",this._mouseup.bind(this),!0);this.addEventListener(i,"dblclick",this._dblclick.bind(this),!0);this.addEventListener(i,"click",this._click.bind(this),!0);this.addEventListener(i,"keydown",this._keydown.bind(this),!0);this._ctxMenu.attach(this)}static get controlTemplate(){PivotGrid._ctrlTemplate||(PivotGrid._ctrlTemplate=FlexGrid.controlTemplate);return PivotGrid._ctrlTemplate}static set controlTemplate(e){PivotGrid._ctrlTemplate=e}_getProductInfo(){return"D6F4,PivotGrid"}get engine(){return this._ng}get showDetailOnDoubleClick(){return this._showDetailOnDoubleClick}set showDetailOnDoubleClick(e){this._showDetailOnDoubleClick=asBoolean(e)}get detailDialog(){this._dlgDetail||(this._dlgDetail=new DetailDialog(document.createElement("div")));return this._dlgDetail}get showRowFieldHeaders(){return this._showRowFldHdrs}set showRowFieldHeaders(e){if(e!=this._showRowFldHdrs){this._showRowFldHdrs=asBoolean(e);this._updateFixedContent()}}get showColumnFieldHeaders(){return this._showColFldHdrs}set showColumnFieldHeaders(e){if(e!=this._showColFldHdrs){this._showColFldHdrs=asBoolean(e);this._updateFixedContent()}}get showValueFieldHeaders(){return this._showValFldHdrs}set showValueFieldHeaders(e){if(e!=this._showValFldHdrs){this._showValFldHdrs=asBoolean(e);this._updateFixedCounts();this._updateFixedContent()}}get showRowFieldSort(){return this._showRowFldSort}set showRowFieldSort(e){if(e!=this._showRowFldSort){this._showRowFldSort=asBoolean(e);this._updateFixedContent()}}get customContextMenu(){return this._customCtxMenu}set customContextMenu(e){this._customCtxMenu=asBoolean(e)}get collapsibleSubtotals(){return this._collapsibleSubtotals}set collapsibleSubtotals(e){if(e!=this._collapsibleSubtotals){this._collapsibleSubtotals=asBoolean(e);this.invalidate()}}get centerHeadersVertically(){return this._centerVert}set centerHeadersVertically(e){if(e!=this._centerVert){this._centerVert=asBoolean(e);this.invalidate()}}get outlineMode(){return this._outlineMode}set outlineMode(e){if(e!=this._outlineMode){this._outlineMode=asBoolean(e);this._bindGrid(!0)}}getKeys(e,t){let i=this.rows[asInt(e)],s=this.columns[asInt(t)],l=i?i.dataItem:null,n=s?s.binding:null;return this._ng.getKeys(l,n)}getDetail(e,t){let i=this.rows[asInt(e)].dataItem,s=this.columns[asInt(t)].binding;return this._ng.getDetail(i,s)}getDetailView(e,t){let i=this.rows[asInt(e)].dataItem,s=this.columns[asInt(t)].binding;return this._ng.getDetailView(i,s)}showDetail(e,t){if(this._ng.valueFields.length){let i=this.detailDialog;i.showDetail(this,new CellRange(e,t));i.show(!0)}}collapseRowsToLevel(e){this._collapseRowsToLevel(e)}collapseColumnsToLevel(e){this._collapseColsToLevel(e)}_getQuickAutoSize(){return isBoolean(this.quickAutoSize)?this.quickAutoSize:this.formatItem.handlerCount<=1&&null==this.itemFormatter}_bindGrid(e){this.deferUpdate(()=>{let t=this.preserveOutlineState||this._resizingColumn,i=this._collapsedKeys,s=this.rows,l=this.columns;t||(i=this._collapsedKeys={});super._bindGrid(e);if(this._ng&&t&&!isEmpty(i)){let e=this._ng.totalsBeforeData,t=e?s.length-1:0,n=e?-1:s.length,r=e?-1:1;for(let e=t;e!=n;e+=r){let t=s[e].dataItem,l=t?t[_PivotKey._ROW_KEY_NAME]:null;l&&l.level>=0&&i[l.toString()]&&this._setRowCollapsed(new CellRange(e,l.level-1),!0)}t=e?l.length-1:0;n=e?-1:l.length;r=e?-1:1;for(let e=t;e!=n;e+=r){let t=l[e].binding,s=this._ng._getKey(t);s&&s.level>0&&i[s.toString()]&&this._setColCollapsed(new CellRange(s.level-1,e),!0)}}})}_getCollectionView(e){e instanceof PivotPanel?e=e.engine.pivotView:e instanceof PivotEngine&&(e=e.pivotView);return asCollectionView(e)}refresh(e=!0){this._ctxMenu.refresh();const t=culture.Globalize.name;if(this._prevCulture!==t){this._prevCulture=t;this._updateFixedContent()}super.refresh(e)}onItemsSourceChanged(e){if(this._ng){this._ng.updatingView.removeHandler(this._updatingView,this);this._ng.viewDefinitionChanged.removeHandler(this._viewDefinitionChanged,this);this._ng._hasDeferredUpdatesChanged.removeHandler(this._hasDeferredUpdatesChanged,this)}this._collapsedKeys={};let t=this.collectionView;this._ng=t instanceof PivotCollectionView?t.engine:null;if(this._ng){this._ng.updatingView.addHandler(this._updatingView,this);this._ng.viewDefinitionChanged.addHandler(this._viewDefinitionChanged,this);this._ng._hasDeferredUpdatesChanged.addHandler(this._hasDeferredUpdatesChanged,this)}this._updatingView();this._bindGrid(!0);super.onItemsSourceChanged(e)}onResizedColumn(e){let t=this._ng;if(t){this._resizingColumn=!0;if(e.panel.columns==this.rowHeaders.columns){let t=this._colRowFields.get(e.getColumn());t instanceof PivotField&&(t.width=e.panel.columns[e.col].renderWidth)}if(e.panel.columns==this.columnHeaders.columns){let i=t.valueFields;if(i.length>0){i[e.col%i.length].width=e.panel.columns[e.col].renderWidth}}this._resizingColumn=!1}super.onResizedColumn(e)}onSortingColumn(e){let t=this._ng;return(!t||!t.isUpdating)&&super.onSortingColumn(e)}onDraggingColumn(e){let t=this._ng;return(!t||!t.isUpdating)&&super.onDraggingColumn(e)}onDraggedColumn(e){let t=this._ng;if(t&&e.panel.columns==this.topLeftCells.columns){let i=t.rowFields,s=i[e.data.col];t.deferUpdate(()=>{i.removeAt(e.data.col);i.insert(e.col,s)})}super.onDraggedColumn(e)}_updatingView(){this._updateFixedCounts();this.columns.clear();this.rows.clear()}_viewDefinitionChanged(){this._resizingColumn||(this._collapsedKeys={})}_hasDeferredUpdatesChanged(){const e=this.engine,t=e&&e.hasDeferredUpdates,classToggler=e=>toggleClass(e,PivotGrid._WJC_DISABLED,t),i=this.hostElement.querySelectorAll(`.${PivotGrid._WJC_COLLAPSE}`);for(let e=0;e<i.length;e++)classToggler(i[e])}onLoadedRows(e){0==this.columns.length&&this._generateColumns();this._updateFixedCounts();this._updateFixedContent();super.onLoadedRows(e)}_generateColumns(){let e=this.collectionView,t=e?e.sourceCollection:null,i=t&&t.length,s=this.engine;if(s&&i){const e=Object.keys(t[0]).filter(e=>e!=_PivotKey._ROW_KEY_NAME),i=[Aggregate.Cnt,Aggregate.CntAll];for(let t=0;t<e.length;t++){const l=s._getFieldByColKey(e[t]);this.columns.push(new Column({binding:e[t],dataType:l&&-1===i.indexOf(l.aggregate)?l.dataType:DataType.Number,allowMerging:!0}))}}}_updateFixedCounts(){let e,t=this._ng,i=t&&t.isViewDefined;e=Math.max(1,i?t.rowFields.length:1);let s=this.topLeftCells.columns;s.clear();this._colRowFields.clear();for(let l=0;l<e;l++){let e=new Column({allowMerging:!0});s.push(e);i&&this._colRowFields.set(e,t.rowFields[l])}e=Math.max(1,i?t.columnFields.length:1);t&&t.columnFields.length&&(t.valueFields.length>1||this.showValueFieldHeaders)&&e++;let l=this.topLeftCells.rows;l.clear();for(let t=0;t<e;t++)l.push(new Row)}_updateFixedContent(){let e=this._ng;if(!e||!e.isViewDefined){this.topLeftCells.setCellData(0,0,null);return}let t=e.rowFields,i=e.columnFields,s=e.valueFields,l=this.outlineMode?t.map(e=>e.header).join(" / "):"",n=this.topLeftCells;for(let e=0;e<n.rows.length;e++)for(let s=0;s<n.columns.length;s++){let r="";this.showRowFieldHeaders&&s<t.length&&e==n.rows.length-1&&(r=this.outlineMode?l:t[s].header);this.showColumnFieldHeaders&&!r&&e<i.length&&0==s&&(r=i[e].header+":");n.setCellData(e,s,r,!1,!1)}n=this.rowHeaders;for(let e=0;e<n.rows.length;e++){let t=n.rows[e].dataItem[_PivotKey._ROW_KEY_NAME];assert(t instanceof _PivotKey,"missing PivotKey for row...");for(let i=0;i<n.columns.length;i++){let s=t.getValue(i,!0);n.setCellData(e,i,s,!1,!1)}}n=this.columnHeaders;for(let t=0;t<n.columns.length;t++){let l=e._getKey(n.columns[t].binding);assert(l instanceof _PivotKey,"missing PivotKey for column...");for(let e=0;e<n.rows.length;e++){let r=l.getValue(e,!0);e==n.rows.length-1&&s.length&&(s.length>1||0==i.length||l.level>-1||this.showValueFieldHeaders)&&(r=s[t%s.length].header);n.setCellData(e,t,r,!1,!1)}}n=this.topLeftCells;for(let e=0;e<n.columns.length;e++){let i=n.columns[e],s=e<t.length?t[e]:null;i.wordWrap=s?s.wordWrap:null;i.align=s?s.align:null;if(this.outlineMode&&e<n.columns.length-1){i.width=this.treeIndent;i.allowResizing=!1}else{i.allowResizing=!0;i.width=s&&isNumber(s.width)?s.width:null}}n=this.cells;for(let e=0;e<n.columns.length;e++){let t=n.columns[e],i=s.length?s[e%s.length]:null;t.width=i&&isNumber(i.width)?i.width:null;t.wordWrap=i?i.wordWrap:null;t.format=i?i.format:null;t.align=i?i.align:null}this.invalidate()}_updateDefaultSizes(){const e=super._updateDefaultSizes();this._hdrCols._setDefaultSize(4*e);return e}_formatItem(e,t){let i=this._ng,s=t.panel,l=t.cell;if(!i)return;if(s==this.topLeftCells){let e=0==i.rowFields.length||t.row<s.rows.length-1||t.row==s.rows.length-1&&!this.showRowFieldHeaders;toggleClass(l,PivotGridClsNames.colFieldHdr,e);toggleClass(l,PivotGridClsNames.rowFieldHdr,!e)}let n,r=null;s==this.topLeftCells&&t.row==s.rows.length-1&&this.allowDragging&AllowDragging.Columns&&(r=!0);setAttribute(l,"draggable",r);switch(s){case this.rowHeaders:n=i.rowFields[t.col%i.rowFields.length];break;case this.columnHeaders:n=i.columnFields[t.row];break;case this.cells:n=i.valueFields[t.col]}n&&n.isContentHtml&&(l.innerHTML=l.textContent);let a=s.columns[t.col].binding,o=s.rows==this.rows?i._getRowLevel(t.row):-1,h=s.columns==this.columns?i._getColLevel(a):-1;toggleClass(l,PivotPanelClsNames.aggregate,o>-1||h>-1);if(this._collapsibleSubtotals){if(s==this.rowHeaders&&i._getShowRowTotals()==ShowTotals.Subtotals)if(this.outlineMode){let e=this._getGroupedRows(t.range);if(t.col<i.rowFields.length-1){if(!e.containsRow(t.row)){let e=this._getRowCollapsed(t.range);l.innerHTML=this._getCollapsedGlyph(e)+l.innerHTML}}}else{let e=this.getMergedRange(s,t.row,t.col,!1)||t.range;if(t.col<i.rowFields.length-1&&e.rowSpan>1){let t=this._getRowCollapsed(e);l.innerHTML=this._getCollapsedGlyph(t)+l.innerHTML}}this.outlineMode&&s==this.rowHeaders&&t.range.rightCol<s.columns.length-1&&(l.innerHTML="");if(s==this.columnHeaders&&i._getShowColTotals()==ShowTotals.Subtotals){let e=this.getMergedRange(s,t.row,t.col,!1)||t.range;if(t.row<i.columnFields.length-1&&e.columnSpan>1){let t=this._getColCollapsed(e);l.innerHTML=this._getCollapsedGlyph(t)+l.innerHTML}}}if(s==this.topLeftCells&&this.showRowFieldSort&&t.col<i.rowFields.length&&t.row==this._getSortRowIndex()){n=i.rowFields[t.col];toggleClass(l,FlexGridClsNames.sortAsc,!n.descending);toggleClass(l,FlexGridClsNames.sortDesc,n.descending);l.innerHTML+=` <span class="${GlyphClsNames.glyph}-`+(n.descending?"down":"up")+'"></span>'}s!=this.cells&&toggleClass(l,UtilitesClsNames.alignVCenter,this._centerVert)}_getCollapsedGlyph(e){const t=this.engine,i=t&&t.hasDeferredUpdates;return'<div class="'+(PivotGrid._WJC_COLLAPSE+(i?` ${PivotGrid._WJC_DISABLED}`:""))+'">'+`<span class="${GlyphClsNames.glyph}-`+(e?"plus":"minus")+'"></span></div>'}_mousedown(e){if(e.defaultPrevented||0!=e.button){this._htDown=null;return}const t=this._htDown=this.hitTest(e),i=t.panel;this._ignoreClick=!1;const s=this.engine,l=s&&s.hasDeferredUpdates;let n=closestClass(e.target,PivotGrid._WJC_COLLAPSE);if(!l&&null!=n&&null!=i){let s,l=t.range;switch(i.cellType){case CellType.RowHeader:const t=this.getMergedRange(i,l.row,l.col);t&&l.copy(t);s=this._getRowCollapsed(l);e.shiftKey||e.ctrlKey?this._collapseRowsToLevel(l.col+(s?2:1)):this._setRowCollapsed(l,!s);break;case CellType.ColumnHeader:s=this._getColCollapsed(l);e.shiftKey||e.ctrlKey?this._collapseColsToLevel(l.row+(s?2:1)):this._setColCollapsed(l,!s)}e.preventDefault();this._ignoreClick=!0;this._htDown=null;this.focus()}}_mouseup(e){if(!this._htDown||e.defaultPrevented)return;if(this._mouseHdl._szRowCol)return;let t=this.hitTest(e);if(this._htDown.panel!=t.panel||!t.range.equals(this._htDown.range))return;let i=this._ng,s=this.topLeftCells;if(t.panel==s&&t.row==s.rows.length-1&&t.col>-1){let s=t.getColumn();if(this.allowSorting&&s.allowSorting&&!t.edgeRight){let e=this._colRowFields.get(s);if(e&&!i.isUpdating){let s=new CellRangeEventArgs(t.panel,t.range);if(this.onSortingColumn(s)){i.pivotView.sortDescriptions.clear();e.descending=!e.descending;this.onSortedColumn(s)}}}e.preventDefault();this._ignoreClick=!0}}_click(e){this._ignoreClick&&e.preventDefault()}_dblclick(e){if(!e.defaultPrevented&&this._showDetailOnDoubleClick){let e=this._htDown;if(e&&e.panel==this.cells){let t=this._ng;t&&t.fields.length>0&&(t.fields[0]instanceof CubePivotField||this.showDetail(e.row,e.col))}}}_keydown(e){if(!e.defaultPrevented&&!e.ctrlKey&&e.altKey&&this.collapsibleSubtotals){let t=this.selection;if(t.isValid){let i=this._getRowLevel(t.topRow);i<0&&(i=this.rowHeaders.columns.length-1);let s=this._getKeyCode(e);switch(s){case Key.Left:case Key.Right:let l=new CellRange(t.row,i-1);this._setRowCollapsed(l,s==Key.Left);e.preventDefault()}}}}_getRowLevel(e){return this._ng._getRowLevel(e)}_getGroupedRows(e){let t,i=this._getRowLevel.bind(this),s=e.col+1,l=this.rows.length,n=this._ng.totalsBeforeData,r=e.row;if(0==i(r)){r=n?1:0;t=n?l-1:l-2}else{if(n)for(;r<l&&!(i(r)<0);r++);else for(;r>=0&&!(i(r)<0);r--);for(;r>0;r--){let e=i(r-1);if(e>=0&&e<=s)break}for(t=r;t<l-1;t++){let e=i(t+1);if(e>=0&&e<=s)break}}assert(t>=r,"group end < start?");return t>=r?new CellRange(r,e.col,t,e.col2):e}_toggleRowCollapsed(e){this._setRowCollapsed(e,!this._getRowCollapsed(e))}_getRowCollapsed(e){e=this._getGroupedRows(e);let t=this._ng.totalsBeforeData?e.row-1:e.row2+1,i=this.rows[t]||this.rows[e.row],s=i?i.dataItem[_PivotKey._ROW_KEY_NAME]:null;return!!s&&this._collapsedKeys[s.toString()]}_setRowCollapsed(e,t){e=this._getGroupedRows(e);let i=this._ng.totalsBeforeData?e.row-1:e.row2+1,s=this.rows[i]||this.rows[e.row],l=s?s.dataItem[_PivotKey._ROW_KEY_NAME]:null;l&&(this._collapsedKeys[l.toString()]=t);this.deferUpdate(()=>{for(let i=e.row;i<=e.row2;i++)this.rows[i].visible=!t;s&&(s.visible=!0);if(!t){let t=this._getRowLevel(i),s=[];for(let i=e.row;i<=e.row2;i++)if(this._getRowLevel(i)>-1){let l=this._getGroupedRows(new CellRange(i,t));assert(l.row>=e.row&&l.row2<=e.row2,"child range overflow");s.push(l);i++}s.forEach(e=>{let t=this._getRowCollapsed(e);this._setRowCollapsed(e,t)})}})}_collapseRowsToLevel(e){e>=this._ng.rowFields.length&&(e=-1);this.deferUpdate(()=>{for(let t=0;t<this.rows.length;t++){let i=this._getRowLevel(t);if(i>0){let s=this.rows[t].dataItem[_PivotKey._ROW_KEY_NAME];this._collapsedKeys[s.toString()]=e>0&&i>=e}if(e<0)this.rows[t].visible=!0;else{let s=i>-1&&i<=e;s||(this._ng.totalsBeforeData?0==t&&(s=!0):t==this.rows.length-1&&(s=!0));this.rows[t].visible=s}}})}_getColLevel(e){return this._ng._getColLevel(this.columns[e].binding)}_getGroupedCols(e){let t,i=this._getColLevel.bind(this),s=e.row+1,l=this.columns.length,n=this._ng.totalsBeforeData,r=e.col;if(0==i(r)){r=n?1:0;t=n?l-1:l-2}else{if(this._ng.totalsBeforeData)for(r=e.col;r<l&&!(i(r)<0);r++);else for(r=e.col;r>=0&&!(i(r)<0);r--);for(;r>0;r--){let e=i(r-1);if(e>=0&&e<=s)break}for(t=r;t<l-1;t++){let e=i(t+1);if(e>=0&&e<=s)break}}assert(t>=r,"group end < start?");return t>=r?new CellRange(e.row,r,e.row2,t):e}_toggleColCollapsed(e){this._setColCollapsed(e,!this._getColCollapsed(e))}_getColCollapsed(e){e=this._getGroupedCols(e);let t=this._ng,i=t.totalsBeforeData?e.col-t.valueFields.length:e.col2+1,s=this.columns[i],l=s?s.binding:null;return!!l&&this._collapsedKeys[l.toString()]}_setColCollapsed(e,t){e=this._getGroupedCols(e);let i=this._ng,s=i.totalsBeforeData?e.col-i.valueFields.length:e.col2+1,l=this.columns[s],n=l?l.binding:null;n&&(this._collapsedKeys[n.toString()]=t);this.deferUpdate(()=>{for(let t=1;t<=i.valueFields.length;t++)this.columns[i.totalsBeforeData?e.col-t:e.col2+t].visible=!0;for(let i=e.col;i<=e.col2;i++)this.columns[i].visible=!t;if(!t){let t=this._getColLevel(s),l=[];for(let s=e.col;s<=e.col2;s++)if(this._getColLevel(s)>-1){let n=this._getGroupedCols(new CellRange(t,s));assert(n.col>=e.col&&n.col2<=e.col2,"child range overflow");l.push(n);s+=i.valueFields.length-1}l.forEach(e=>{let t=this._getColCollapsed(e);this._setColCollapsed(e,t)})}})}_collapseColsToLevel(e){e>=this._ng.columnFields.length&&(e=-1);this.deferUpdate(()=>{for(let t=0;t<this.columns.length;t++){let i=this._getColLevel(t);if(i>0){let s=this._ng._getKey(this.columns[t].binding);this._collapsedKeys[s.toString()]=e>0&&i>=e}if(e<0)this.columns[t].visible=!0;else{let s=i>-1&&i<=e;this.columns[t].visible=s}}})}dispose(){if(this._ctxMenu){this._ctxMenu.dispose();this._ctxMenu=null}if(this._dlgDetail){this._dlgDetail.dispose();this._dlgDetail=null}if(this._ng){this._ng.updatingView.removeHandler(this._updatingView,this);this._ng.viewDefinitionChanged.removeHandler(this._viewDefinitionChanged,this);this._ng._hasDeferredUpdatesChanged.removeHandler(this._hasDeferredUpdatesChanged,this)}super.dispose()}}PivotGrid._WJC_COLLAPSE=PivotGridClsNames.pivotCollapse;PivotGrid._WJC_DISABLED=ControlStateClsNames.disabled;PivotGrid._ctrlTemplate="";export class DetailDialog extends Popup{constructor(e,t){super(e,null);let i=this.getTemplate();this.applyTemplate(`${ControlClsNames.hostElement} ${DetailDialogClsNames.hostElement}`,i,{_sCnt:"sp-cnt",_dSummary:"div-summary",_dGrid:"div-grid",_btnOK:"btn-ok",_gHdr:"g-hdr"});this._g=new FlexGrid(this._dGrid,{isReadOnly:!0});this.initialize(t)}static get controlTemplate(){DetailDialog._ctrlTemplate||(DetailDialog._ctrlTemplate="<div>"+`<div class="${DetailDialogClsNames.dialogHeader}">`+'<span wj-part="g-hdr">Detail View:</span> <span wj-part="sp-cnt"></span></div>'+`<div class="${DetailDialogClsNames.dialogBody}">`+`<div wj-part="div-summary" class="${DetailDialogClsNames.summary}"></div>`+'<div wj-part="div-grid"></div></div>'+`<div class="${DetailDialogClsNames.dialogFooter}">`+`<button wj-part="btn-ok"class="${UtilitesClsNames.hide} ${InputFormElementsClsNames.btn}">OK</button>&nbsp;&nbsp;`+"</div></div>");return DetailDialog._ctrlTemplate}static set controlTemplate(e){DetailDialog._ctrlTemplate=e}showDetail(e,t){let i=e.getDetailView(t.row,t.col);this._g.itemsSource=i;let s=tryCast(i,"IPagedCollectionView");this._updateDetailCount(s?s.totalItemCount:i.items.length);i.collectionChanged.addHandler(()=>{this._updateDetailCount(i.items.length)});let l=e.engine,n=culture.olap.DetailDialog,r="";this._gHdr.textContent=n.header;this._btnOK.textContent=n.ok;let a=e.rows[t.row].dataItem[_PivotKey._ROW_KEY_NAME];this._rowHdr=escapeHtml(this._getHeader(a));this._rowHdr&&(r+=n.row+": <b>"+this._rowHdr+"</b><br>");let o=l._getKey(e.columns[t.col].binding);this._colHdr=escapeHtml(this._getHeader(o));this._colHdr&&(r+=n.col+": <b>"+this._colHdr+"</b><br>");let h=l.valueFields,d=h[t.col%h.length],u=e.getCellData(t.row,t.col,!0);this._cellHdr=escapeHtml(d.header);this._cellValue=escapeHtml(u);r+=this._cellHdr+": <b>"+this._cellValue+"</b>";this._dSummary.innerHTML=r}get rowHeader(){return this._rowHdr}get columnHeader(){return this._colHdr}get cellHeader(){return this._cellHdr}get cellValue(){return this._cellValue}get detailCount(){return this._detailCount}_updateDetailCount(e){let t=culture.olap.DetailDialog;this._sCnt.textContent=format(1==e?t.item:t.items,{cnt:e});this._detailCount=e}_getHeader(e){if(e&&e.values&&e.values.length){let t=[];for(let i=0;i<e.values.length;i++)t.push(e.getValue(i,!0));return t.join(" - ")}return null}}DetailDialog._ctrlTemplate="";export class _PivotMergeManager extends MergeManager{getMergedRange(e,t,i,s=!0){return this._getMergedRange(e,t,i,s)}_getMergedRange(e,t,i,s=!0,l=!0){let n=e.grid.collectionView;this._ng=n instanceof PivotCollectionView?n.engine:null;if(!this._ng)return super._getMergedRange(e,t,i,s,l);if(t<0||t>=e.rows.length||i<0||i>=e.columns.length)return null;let r=e.grid.allowMerging,a=AllowMerging;switch(e.cellType){case CellType.TopLeft:return 0!=(r&a.AllHeaders)?this._getMergedTopLeftRange(e,t,i):null;case CellType.RowHeader:return 0!=(r&a.RowHeaders)?this._getMergedRowHeaderRange(e,t,i,s?e.viewRange:null):null;case CellType.ColumnHeader:return 0!=(r&a.ColumnHeaders)?this._getMergedColumnHeaderRange(e,t,i,s?e.viewRange:null):null}return null}_getMergedTopLeftRange(e,t,i){let s=new CellRange(t,i),l=e.grid;if(l.outlineMode&&l.showRowFieldHeaders&&s.row==e.rows.length-1){s.col=0;s.col2=e.columns.length-1;return s}for(;s.col>0&&!e.getCellData(t,s.col,!0);)s.col--;for(;s.col2<e.columns.length-1&&!e.getCellData(t,s.col2+1,!0);)s.col2++;return s.isSingleCell?null:s}_getMergedRowHeaderRange(e,t,i,s){let l=e.grid;if(!e.columns[i].allowMerging)return null;if(l.outlineMode){if(this._isSubtotal(e,t,i)||this._isSubtotal(e,t,i+1)){let s=this._getOutlineRange(e,t,i);return s.isSingleCell?null:s}if(i<e.columns.length-1){let e=l._getGroupedRows(new CellRange(t,i));return e.isSingleCell?null:e}return null}let n=this._ng._getRowLevel(t);if(n>-1&&i>=n){let l,n,r=e.getCellData(t,i,!1),a=s?s.col:0,o=s?s.col2:e.columns.length-1;for(l=i;l>a&&e.getCellData(t,l-1,!1)==r;l--);for(n=i;n<o&&e.getCellData(t,n+1,!1)==r;n++);return l!=n?new CellRange(t,l,t,n):null}let r,a,o=s?s.row:0,h=s?s.row2:e.rows.length-1;for(r=t;r>o&&this._sameColumnValues(e,t,r-1,i);r--);for(a=t;a<h&&this._sameColumnValues(e,t,a+1,i);a++);return r!=a?new CellRange(r,i,a,i):null}_sameColumnValues(e,t,i,s){for(;s>=0;s--){if(e.getCellData(t,s,!1)!=e.getCellData(i,s,!1))return!1}return!0}_isSubtotal(e,t,i){let s=e.rows[t].dataItem,l=s?s[_PivotKey._ROW_KEY_NAME]:null;return s&&i>l.values.length-1&&i<e.columns.length}_getOutlineRange(e,t,i){let s=new CellRange(t,i);s.col2=e.columns.length-1;for(;s.col&&this._isSubtotal(e,t,s.col);)s.col--;return s}_getMergedColumnHeaderRange(e,t,i,s){let l=e.columns[i],n=this._ng._getKey(l.binding),r=e.getCellData(t,i,!1),a=this._ng._getColLevel(n);if(a>-1&&t>=a){let l,n,a=s?s.row:0,o=s?s.row2:e.rows.length-1;for(l=t;l>a&&e.getCellData(l-1,i,!1)==r;l--);for(n=t;n<o&&e.getCellData(n+1,i,!1)==r;n++);if(l!=n)return new CellRange(l,i,n,i)}if(s){i<e.columns._frozenInternal&&(s.col=s.col2=0);t<e.rows._frozenInternal&&(s.row=s.row2=0)}let o,h,d=s?s.col:0,u=s?s.col2:e.columns.length-1;for(o=i;o>d&&this._sameRowValues(e,t,i,o-1);o--);for(h=i;h<u&&this._sameRowValues(e,t,i,h+1);h++);return o!=h?new CellRange(t,o,t,h):null}_sameRowValues(e,t,i,s){for(;t>=0;t--){if(e.getCellData(t,i,!1)!=e.getCellData(t,s,!1))return!1}return!0}}export var PivotChartType;!function(e){e[e.Column=0]="Column";e[e.Bar=1]="Bar";e[e.Scatter=2]="Scatter";e[e.Line=3]="Line";e[e.Area=4]="Area";e[e.Pie=5]="Pie"}(PivotChartType||(PivotChartType={}));export var LegendVisibility;!function(e){e[e.Always=0]="Always";e[e.Never=1]="Never";e[e.Auto=2]="Auto"}(LegendVisibility||(LegendVisibility={}));export class PivotChart extends Control{constructor(e,t){super(e);this._chartType=PivotChartType.Column;this._showHierarchicalAxes=!0;this._showTotals=!1;this._showTitle=!0;this._showLegend=LegendVisibility.Always;this._legendPosition=Position.Right;this._maxSeries=PivotChart.MAX_SERIES;this._maxPoints=PivotChart.MAX_POINTS;this._stacking=Stacking.None;this._colItms=[];this._dataItms=[];this._lblsSrc=[];this._grpLblsSrc=[];addClass(this.hostElement,PivotChartClsNames.hostElement);this._isPieChart()?this._createFlexPie():this._createFlexChart();super.initialize(t)}_getProductInfo(){return"D6F4,PivotChart"}get engine(){return this._ng}get itemsSource(){return this._itemsSource}set itemsSource(e){if(e&&this._itemsSource!==e){let t=this._itemsSource;e instanceof PivotPanel?e=e.engine.pivotView:e instanceof PivotEngine&&(e=e.pivotView);this._itemsSource=asCollectionView(e);this._onItemsSourceChanged(t)}}get chartType(){return this._chartType}set chartType(e){if((e=asEnum(e,PivotChartType))!=this._chartType){var t=this._chartType;this._chartType=e;this._changeChartType();e!==PivotChartType.Bar&&t!==PivotChartType.Bar||this._updatePivotChart()}}get showHierarchicalAxes(){return this._showHierarchicalAxes}set showHierarchicalAxes(e){if(e!=this._showHierarchicalAxes){this._showHierarchicalAxes=asBoolean(e,!0);!this._isPieChart()&&this._flexChart&&this._updateFlexChart(this._dataItms,this._lblsSrc,this._grpLblsSrc)}}get showTotals(){return this._showTotals}set showTotals(e){if(e!=this._showTotals){this._showTotals=asBoolean(e,!0);this._updatePivotChart()}}get showTitle(){return this._showTitle}set showTitle(e){if(e!=this._showTitle){this._showTitle=asBoolean(e,!0);this._updatePivotChart()}}get showLegend(){return this._showLegend}set showLegend(e){if((e=asEnum(e,LegendVisibility))!=this.showLegend){this._showLegend=e;this._updatePivotChart()}}get legendPosition(){return this._legendPosition}set legendPosition(e){if((e=asEnum(e,Position))!=this.legendPosition){this._legendPosition=e;this._updatePivotChart()}}get stacking(){return this._stacking}set stacking(e){if((e=asEnum(e,Stacking))!=this._stacking){this._stacking=e;if(this._flexChart){this._flexChart.stacking=this._stacking;this._updatePivotChart()}}}get maxSeries(){return this._maxSeries}set maxSeries(e){if(e!=this._maxSeries){this._maxSeries=asNumber(e);this._updatePivotChart()}}get maxPoints(){return this._maxPoints}set maxPoints(e){if(e!=this._maxPoints){this._maxPoints=asNumber(e);this._updatePivotChart()}}get flexChart(){return this._flexChart}get flexPie(){return this._flexPie}get header(){return this._header}set header(e){if(e!=this._header){this._header=asString(e,!0);this.invalidate()}}get footer(){return this._footer}set footer(e){if(e!=this._footer){this._footer=asString(e,!0);this.invalidate()}}get headerStyle(){return this._headerStyle}set headerStyle(e){if(e!=this._headerStyle){this._headerStyle=e;this.invalidate()}}get footerStyle(){return this._footerStyle}set footerStyle(e){if(e!=this._footerStyle){this._footerStyle=e;this.invalidate()}}refresh(e=!0){super.refresh(e);this._isPieChart()?this._flexPie&&this._flexPie.refresh(e):this._flexChart&&this._flexChart.refresh(e);this._updatePivotChart()}saveImageToDataUrl(e,t){this._isPieChart()?this._flexPie&&this._flexPie.saveImageToDataUrl(e,t):this._flexChart&&this._flexChart.saveImageToDataUrl(e,t)}saveImageToFile(e){this._isPieChart()?this._flexPie&&this._flexPie.saveImageToFile(e):this._flexChart&&this._flexChart.saveImageToFile(e)}_onItemsSourceChanged(e){this._ng&&this._ng.updatedView.removeHandler(this._updatePivotChart,this);e&&e.collectionChanged.removeHandler(this._updatePivotChart,this);let t=this._itemsSource;this._ng=t instanceof PivotCollectionView?t.engine:null;this._ng&&this._ng.updatedView.addHandler(this._updatePivotChart,this);this._itemsSource&&this._itemsSource.collectionChanged.addHandler(this._updatePivotChart,this);this._updatePivotChart()}_createFlexChart(){let e=document.createElement("div");this.hostElement.appendChild(e);this._flexChart=new FlexChart(e);this._flexChart._bindingSeparator=null;this._flexChart.legend.position=Position.Right;this._flexChart.bindingX=_PivotKey._ROW_KEY_NAME;this._flexChart.stacking=this._stacking;this._flexChart.tooltip.content=e=>{let t=e.name?"<b>"+e.name+"</b> <br/>":"";return t+=this._getLabel(e.x)+" "+this._getValue(e)};this._flexChart.hostElement.style.visibility="hidden"}_createFlexPie(){let e=document.createElement("div");this.hostElement.appendChild(e);this._colMenu=new MultiSelect(e,{displayMemberPath:"text",placeholder:culture.olap.PivotPanel.cols,selectedValuePath:"prop",showSelectAllCheckbox:!0,keyActionPrintCharacters:0,keyActionTab:0});this._colMenu.hostElement.style.visibility="hidden";this._colMenu.checkedItemsChanged.addHandler((e,t)=>this._updateFlexPieBinding());let t=document.createElement("div");this.hostElement.appendChild(t);this._flexPie=new FlexPie(t);this._flexPie.bindingName=_PivotKey._ROW_KEY_NAME;this._flexPie.tooltip.content=e=>"<b>"+this._getLabel(this._dataItms[e.pointIndex][_PivotKey._ROW_KEY_NAME])+"</b> <br/>"+this._getValue(e);this._flexPie.rendering.addHandler(this._updatePieInfo,this)}_updatePivotChart(){if(!this._ng||!this._ng.pivotView)return;let e,t=[],i=[],s=[],l=0,n=this._ng.pivotView,r=this._ng.rowFields;for(let a=0;a<n.items.length;a++){let o=n.items[a],h=o.$rowKey;0==a&&this._getColumns(o);if(t.length>=this._maxPoints)break;if(!this._isTotalRow(o[_PivotKey._ROW_KEY_NAME])){t.push(o);i.push({value:t.length-1,text:this._getLabel(o[_PivotKey._ROW_KEY_NAME])});for(let i=0;i<r.length;i++){s.length<=i&&s.push([]);if(this._getMergeIndex(h,e)<i){l=s[i].length-1;let e=s[i][l];0===l&&i<r.length-1&&(e.value=(e.width-1)/2);if(l>0&&i<r.length-1){let t=this._getOffsetWidth(s[i]);e.value=t+(e.width-1)/2}s[i].push({value:t.length-1,text:h.getValue(i,!0),width:1})}else{l=s[i].length-1;s[i][l].width++}}e=h}}for(let e=0;e<r.length;e++)if(e<s.length){l=s[e].length-1;s[e][l].value=this._getOffsetWidth(s[e])+(s[e][l].width-1)/2}this._dataItms=t;this._lblsSrc=i;this._grpLblsSrc=s;this._updateFlexChartOrPie()}_updateFlexChartOrPie(){let e=this._isPieChart();!e&&this._flexChart?this._updateFlexChart(this._dataItms,this._lblsSrc,this._grpLblsSrc):e&&this._flexPie&&this._updateFlexPie(this._dataItms,this._lblsSrc)}_updateFlexChart(e,t,i){let s,l=this._flexChart,n=l?l.hostElement:null;if(this._ng&&l&&n){l.beginUpdate();l.itemsSource=e;this._createSeries();l.series&&l.series.length>0&&e.length>0?n.style.visibility="visible":n.style.visibility="hidden";l.header=this.header||this._getChartTitle();this.headerStyle&&(l.headerStyle=this.headerStyle);this.footer&&(l.footer=this.footer);this.footerStyle&&(l.footerStyle=this.footerStyle);if(this._isRotatedChart()){if(this._showHierarchicalAxes&&i.length>0){l.axisY.itemsSource=i[i.length-1];l.axisX.labelAngle=void 0;if(i.length>=2)for(let e=i.length-2;e>=0;e--)this._createGroupAxes(i[e])}else{l.axisY.labelAngle=void 0;l.axisY.itemsSource=t}l.axisX.itemsSource=void 0}else{if(this._showHierarchicalAxes&&i.length>0){l.axisX.itemsSource=i[i.length-1];if(i.length>=2)for(let e=i.length-2;e>=0;e--)this._createGroupAxes(i[e])}else{l.axisX.labelAngle=void 0;l.axisX.itemsSource=t}l.axisY.itemsSource=void 0}l.axisX.labelPadding=6;l.axisY.labelPadding=6;if(this._isRotatedChart()){s=l.axisX;l.axisY.reversed=!0}else{s=l.axisY;l.axisY.reversed=!1}l.stacking!==Stacking.Stacked100pc&&this._ng.valueFields.length>0&&this._ng.valueFields[0].format?s.format=this._ng.valueFields[0].format:s.format="";l.legend.position=this._getLegendPosition();l.endUpdate()}}_updateFlexPie(e,t){let i=this._flexPie,s=i?i.hostElement:null,l=this._colMenu;if(!this._ng||!i||!s)return;this._colItms.length>0&&e.length>0?s.style.visibility="visible":s.style.visibility="hidden";i.beginUpdate();i.itemsSource=e;i.bindingName=_PivotKey._ROW_KEY_NAME;this._colItms&&this._colItms.length>0&&(i.binding=this._colItms[0].prop);i.header=this.header||this._getChartTitle();this.headerStyle&&(i.headerStyle=this.headerStyle);this.footer&&(i.footer=this.footer);this.footerStyle&&(i.footerStyle=this.footerStyle);i.legend.position=this._getLegendPosition();i.endUpdate();let n=this._getTitle(this._ng.columnFields);""!==n&&(n="<b>"+n+": </b>");if(this._colItms&&this._colItms.length>1&&e.length>0){l.hostElement.style.visibility="visible";l.itemsSource=this._colItms;l.checkedItems=[this._colItms[0]];l.invalidate()}else l.hostElement.style.visibility="hidden"}_getLegendPosition(){let e=this.legendPosition;if(this.showLegend==LegendVisibility.Never)e=Position.None;else if(this.showLegend==LegendVisibility.Auto&&this.flexChart&&this.flexChart.series){let t=0;this.flexChart.series.forEach(e=>{let i=e.visibility;e.name&&i!=SeriesVisibility.Hidden&&i!=SeriesVisibility.Plot&&t++});t<2&&(e=Position.None)}return e}_createSeries(){this._flexChart&&(this._flexChart.series.length=0);let e=1==this._ng.valueFields.length;for(let t=0;t<this._colItms.length;t++){let i=new Series,s=this._colItms[t].prop,l=this._colItms[t].text;if(e){let e=l.lastIndexOf(";");e>-1&&(l=l.substr(0,e))}i.binding=s;i.name=l;this._flexChart.series.push(i)}}_getColumns(e){let t,i,s=0;if(e){this._colItms=[];for(let l in e)if(e.hasOwnProperty(l)&&l!==_PivotKey._ROW_KEY_NAME&&s<this._maxSeries&&this._isValidColumn(l)){t=this._ng._getKey(l);i=this._getLabel(t);this._colItms.push({prop:l,text:this._getLabel(t)});s++}}}_createGroupAxes(e){let t,i=this._flexChart,s=this._isRotatedChart()?i.axisY:i.axisX;if(!e)return;(t=new Axis).labelAngle=0;t.labelPadding=6;t.position=this._isRotatedChart()?Position.Left:Position.Bottom;t.majorTickMarks=TickMark.None;t.itemsSource=e;t.reversed=s.reversed;t.axisLine=!1;t.itemFormatter=(i,s)=>{if(t._axrect){let l=.5*e.filter((function(e){return e.value==s.val}))[0].width;if(this._isRotatedChart()){let e=t.reversed?-1:1,n=t.convert(s.val+l)+5*e,r=t.convert(s.val-l)-5*e,a=t._axrect.left+t._axrect.width-5;i.drawLine(a,n,a,r,PivotChart.HRHAXISCSS);i.drawLine(a,n,a+5,n,PivotChart.HRHAXISCSS);i.drawLine(a,r,a+5,r,PivotChart.HRHAXISCSS);i.drawLine(a,s.pos.y,a-5,s.pos.y,PivotChart.HRHAXISCSS)}else{let e=t.convert(s.val-l)+5,n=t.convert(s.val+l)-5,r=t._axrect.top;i.drawLine(e,r,n,r,PivotChart.HRHAXISCSS);i.drawLine(e,r,e,r-5,PivotChart.HRHAXISCSS);i.drawLine(n,r,n,r-5,PivotChart.HRHAXISCSS);i.drawLine(s.pos.x,r,s.pos.x,r+5,PivotChart.HRHAXISCSS)}}return s};t.min=s.actualMin;t.max=s.actualMax;s.rangeChanged.addHandler((function(){isNaN(t.min)&&isNaN(s.actualMin)||t.min==s.actualMin||(t.min=s.actualMin);isNaN(t.max)&&isNaN(s.actualMax)||t.max==s.actualMax||(t.max=s.actualMax)}));let l=new Series;l.visibility=SeriesVisibility.Hidden;this._isRotatedChart()?l.axisY=t:l.axisX=t;i.series.push(l)}_updateFlexPieBinding(){let e="",t=[];this._colMenu.checkedItems.forEach(i=>{e.length>0&&(e+=",");e+=i.prop;t.push(i.text)});this._flexPie.binding=e;this._flexPie.titles=t.length>1?t:null}_updatePieInfo(){this._flexPie&&(this._flexPie._labels=this._flexPie._labels.map((e,t)=>this._lblsSrc[t].text))}_changeChartType(){let e=null;if(this.chartType===PivotChartType.Pie){this._flexPie||this._createFlexPie();this._updateFlexPie(this._dataItms,this._lblsSrc);this._swapChartAndPie(!1)}else{switch(this.chartType){case PivotChartType.Column:e=ChartType.Column;break;case PivotChartType.Bar:e=ChartType.Bar;break;case PivotChartType.Scatter:e=ChartType.Scatter;break;case PivotChartType.Line:e=ChartType.Line;break;case PivotChartType.Area:e=ChartType.Area}if(this._flexChart)"none"!==this._flexChart.hostElement.style.display&&e!==PivotChartType.Bar&&this._flexChart.chartType!==ChartType.Bar||this._updateFlexChart(this._dataItms,this._lblsSrc,this._grpLblsSrc);else{this._createFlexChart();this._updateFlexChart(this._dataItms,this._lblsSrc,this._grpLblsSrc)}this._flexChart.chartType=e;this._swapChartAndPie(!0)}}_swapChartAndPie(e){this._flexChart&&(this._flexChart.hostElement.style.display=e?"block":"none");this._flexPie&&(this._flexPie.hostElement.style.display=e?"none":"block");if(this._colMenu&&this._colMenu.hostElement){this._colMenu.hostElement.style.display=e?"none":"block";this._colMenu.hostElement.style.top="0";this._clearStyleTopTimer=setTimeout(()=>{this._colMenu.hostElement.style.top=""},0)}}_getLabel(e){let t="";if(!e||!e.values)return t;let i=e.valueFields?e.valueField:null;switch(e.values.length){case 0:i&&(t+=i.header);break;case 1:t+=e.getValue(0,!0);i&&(t+="; "+i.header);break;default:for(let i=0;i<e.values.length;i++){i>0&&(t+="; ");t+=e.getValue(i,!0)}i&&(t+="; "+i.header)}return t}_getValue(e){let t=this._ng.valueFields,i=e.series?e.series.chart.series.indexOf(e.series):0,s=i<t.length?t[i].format:t.length?t[0].format:"";return s?Globalize.format(e.y,s):e._yfmt}_getChartTitle(){if(!this.showTitle||!this._ng.valueFields.length)return null;let e=this._ng,t=this._getTitle(e.valueFields),i=this._getTitle(e.rowFields),s=this._getTitle(e.columnFields),l=t,n=culture.olap.PivotChart;if(t&&this._dataItms.length>0){i&&(l+=format(" {by} {rows}",{by:n.by,rows:i}));s&&(l+=format(" {and} {cols}",{and:i?n.and:n.by,cols:s}))}return l}_getTitle(e){let t="";for(let i=0;i<e.length;i++){t.length>0&&(t+="; ");t+=e[i].header}return t}_isValidColumn(e){let t=e.split(";"),i=this._showTotals;return 0===this._ng.columnFields.length||(t&&2===t.length?i:!(!t||t.length-2!==this._ng.columnFields.length)&&!i)}_isTotalRow(e){return e.values.length<this._ng.rowFields.length}_isPieChart(){return this._chartType==PivotChartType.Pie}_isRotatedChart(){return!this._isPieChart()&&this._chartType==PivotChartType.Bar!==this._flexChart.rotated}_getMergeIndex(e,t){let i=-1;if(null!=e&&null!=t&&e.values.length==t.values.length&&e.values.length==e.fields.length&&t.values.length==t.fields.length)for(let s=0;s<e.values.length;s++){if(e.getValue(s,!0)!=t.getValue(s,!0))return i;i=s}return i}_getOffsetWidth(e){let t=0;if(e.length<=1)return t;for(let i=0;i<e.length-1;i++)t+=e[i].width;return t}dispose(){if(this._flexChart){this._flexChart.dispose();this._flexChart=null}if(this._flexPie){this._flexPie.dispose();this._flexPie=null}if(this._colMenu){this._colMenu.dispose();this._colMenu=null}if(this._clearStyleTopTimer){clearTimeout(this._clearStyleTopTimer);this._clearStyleTopTimer=null}this._ng&&this._ng.updatedView.removeHandler(this._updatePivotChart,this);this._itemsSource&&this._itemsSource.collectionChanged.removeHandler(this._updatePivotChart,this);super.dispose()}}PivotChart.MAX_SERIES=100;PivotChart.MAX_POINTS=100;PivotChart.HRHAXISCSS=PivotChartClsNames.hierarchicalAxesLine;export class _MdxQueryBuilder{constructor(e,t){this._ng=null;this._cubeName=null;this._ng=e;this._cubeName=t}buildQuery(){let e=new _TextBuilder,t=this.buildWhereSection(this._ng.valueFields);e.append("SELECT ",this.buildAxes()," FROM ",this.buildCubeName(),t);e.append(" CELL PROPERTIES VALUE, FORMAT_STRING");return e.toString()}buildWhereSection(e){let t=new _TextBuilder;if(1==e.length){t.append(this.buildSetForMeasuresShelf(e));t.wrap(" WHERE ","")}return t.toString()}buildCubeName(){let e=new _TextBuilder;e.append(this.buildSubcubeExpression());let t=e.length>0;t&&e.wrap("SELECT "," FROM ");e.append("[",this._cubeName,"]");t&&e.wrap("(",")");return e.toString()}buildSubcubeExpression(){let e=new _TextBuilder,t=this.getMeasureFilterExpressions(this._ng.valueFields),i=this.buildFilterAttributeSet(this._ng.filterFields),s=this.buildFilterAttributeSet(this._ng.rowFields,t),l=this.buildFilterAttributeSet(this._ng.columnFields,0==s.length?t:null);e.joinItemToList(i);e.joinItemToList(s);e.joinItemToList(l);if(e.length>0){e.wrap("(",")");e.append(" ON COLUMNS")}return e.toString()}buildFilterAttributeSet(e,t){let i=new _TextBuilder;for(let s=0;s<e.length;s++){let l=e[s],n=this.buildFilterString(l,0==s?t:null);i.joinItemToList(n)}return i.toString()}buildFilterString(e,t){let i=new _TextBuilder;e.filter.isActive?e.filter.conditionFilter.isActive?i.append(this.getConditionFilterString(e,t)):e.filter.valueFilter.isActive&&i.append(this.getValueFilterString(e)):t&&i.append(this.getConditionFilterString(e,t));return i.toString()}getValueFilterString(e){let t=new _TextBuilder,i=e.filter.valueFilter,s=Object.keys(i.showValues).map(t=>e.key+".["+t+"]");t.append(s.join(","));t.length>0&&t.wrap("{","}");return t.toString()}getConditionFilterString(e,t){let i=new _TextBuilder,s=e.key+".LEVELS(1).ALLMEMBERS",l=e.filter.conditionFilter.condition1,n=e.filter.conditionFilter.condition2;if(l.isActive){i.append(this.getConditionFilterExpression(e,l));n.isActive&&i.append(e.filter.conditionFilter.and?" AND ":" OR ")}n.isActive&&i.append(this.getConditionFilterExpression(e,n));if(t&&t.length>0){i.length>0&&i.append(" AND ");i.append(t.join(" AND "))}i.length>0&&i.wrap("Filter("+s+",(","))");return i.toString()}getMeasureFilterExpressions(e){let t=[];for(let i=0;i<e.length;i++){let s=new _TextBuilder,l=e[i],n=(l.dimensionType,DimensionType.Measure,l.filter.conditionFilter.condition1),r=l.filter.conditionFilter.condition2;if(n.isActive){s.append(this.getConditionFilterExpression(l,n));r.isActive&&s.append(l.filter.conditionFilter.and?" AND ":" OR ")}r.isActive&&s.append(this.getConditionFilterExpression(l,r));if(s.length>0){s.wrap("(",")");t.push(s.toString())}}return t}getConditionFilterExpression(e,t){if(!t.isActive)return"";let i=e.dimensionType==DimensionType.Measure,s=e.dataType==DataType.Number,l=e.dataType==DataType.Date,n=s||l?"member_value":"member_caption",r=i?e.key:e.key+".CurrentMember."+n,a=l?"CDate('"+Globalize.formatDate(t.value,"d")+"')":t.value.toString(),o=new _TextBuilder;switch(t.operator){case Operator.BW:o.append("(Left(",r,",",a.length.toString(),')="',a,'")');break;case Operator.NBW:o.append("(Left(",r,",",a.length.toString(),')<>"',a,'")');break;case Operator.EW:o.append("(Right(",r,",",a.length.toString(),')="',a,'")');break;case Operator.NEW:o.append("(Right(",r,",",a.length.toString(),')<>"',a,'")');break;case Operator.EQ:i||s||l?o.append("(",r,")=",a):o.append("(",r,')="',a,'"');break;case Operator.NE:i||s||l?o.append("(",r,")<>",a):o.append("(",r,')<>"',a,'"');break;case Operator.CT:o.append("(InStr(1,",r,',"',a,'")>0)');break;case Operator.NC:o.append("(InStr(1,",r,',"',a,'")=0))');break;case Operator.GT:o.append("(",r,")>",a);break;case Operator.LT:o.append("(",r,")<",a);break;case Operator.GE:o.append("(",r,")>=",a);break;case Operator.LE:o.append("(",r,")<=",a)}return o.toString()}buildAxes(){let e=new _TextBuilder,t=this.buildSetForAttributesShelf(this._ng.rowFields);e.joinItemToList(t);this._ng.rowFields.length>0&&(this._ng.columnFields.length>0||this._ng.valueFields.length>1?e.append(" ON ROWS"):e.append(" ON COLUMNS"));t=this.buildSetForAttributesColumnShelf(this._ng.columnFields);e.joinItemToList(t);this._ng.columnFields.length>0&&e.append(" ON COLUMNS");if(this._ng.valueFields.length>1&&0==this._ng.columnFields.length){t=this.buildSetForMeasuresShelf(this._ng.valueFields);e.joinItemToList(t);e.append(" ON COLUMNS")}return e.toString()}buildSetForAttributesShelf(e){let t=new _TextBuilder;for(let s=0;s<e.length;s++){var i=e[s];i.dimensionType!=DimensionType.Attribute&&i.dimensionType!=DimensionType.Hierarchy||t.joinItemToList(this.buildAttributeSetForAxis(i));s>0&&t.wrap("CrossJoin(",")")}t.wrap("NON EMPTY ","");return t.toString()}buildSetForAttributesColumnShelf(e){let t=new _TextBuilder;for(let s=0;s<e.length;s++){var i=e[s];i.dimensionType!=DimensionType.Attribute&&i.dimensionType!=DimensionType.Hierarchy||t.joinItemToList(this.buildAttributeSetForAxis(i))}this._ng.valueFields.length>1&&e.length>0&&t.joinItemToList(this.buildSetForMeasuresShelf(this._ng.valueFields));(this._ng.valueFields.length>1&&e.length>0||e.length>1)&&t.wrap("CrossJoin(",")");t.wrap("NON EMPTY ","");return t.toString()}buildSetForMeasuresShelf(e){let t=new _TextBuilder;for(let s=0;s<e.length;s++){var i=e[s];i.dimensionType!=DimensionType.Measure&&i.dimensionType!=DimensionType.Kpi||t.joinItemToList(this.buildMeasureSetForAxis(i))}t.wrap("{","}");return t.toString()}buildAttributeSetForAxis(e){let t=new _TextBuilder;if(e.dimensionType==DimensionType.Hierarchy){t.append(e.key);t.append(".ALLMEMBERS");t.wrap("{","}");t.wrap("HIERARCHIZE(",")")}return t.toString()}buildMeasureSetForAxis(e){let t=new _TextBuilder;e.dimensionType!=DimensionType.Measure&&e.dimensionType!=DimensionType.Kpi||t.append(e.key);return t.toString()}}export class _SqlServerConnection extends _ServerConnection{constructor(e,t){super(e,t.url);this._jsonResult=null;this._dataTypes=null;this._debug=!1;e.sortOnServer=!0;assert(isString(t.cube)&&!isNullOrWhiteSpace(t.cube),"Cube name required.");this._cubeName=t.cube;this._catalogName=isString(t.catalog)&&!isNullOrWhiteSpace(t.catalog)?t.catalog:"";this._url=t.url;this._user=t.user;this._password=t.password}getFields(){this._getSession();this._jsonResult=null;this._dataTypes=null;this._getProperties(this._token);this._getDimensions(this._token);this._endSession();return this._jsonResult}getOutputView(e){this._ng.onUpdatingView(new ProgressEventArgs(0));let t=new _MdxQueryBuilder(this._ng,this._cubeName).buildQuery();this._jsonResult=[];this._getSession();this._execQuery(this._token,t,t=>{asFunction(e)(this._jsonResult);this._ng.onUpdatedView(new ProgressEventArgs(100))})}getDetail(e,t){throw"getDetail method not supported"}getSortedKeys(e,t){let i=Object.keys(e);if(this._ng.sortOnServer){if(i.length>1){let e=t?this._ng.showRowTotals:this._ng.showColumnTotals,s=t?this._ng.rowFields.length:this._ng.columnFields.length,l=this._ng.valueFields.length;if(!this._ng.totalsBeforeData&&e!==ShowTotals.None){let e=-1,n=[],r=[];i.forEach(i=>{let a=this._getKeyLength(i,t);if(a===s)r.push(i);else if(a>=e)n.push(i);else{if(n.length>=l)for(var o=0;o<l;o++)r.push(n.pop());n.push(i)}e=a});if(n.length>0){n.reverse();r=r.concat(n)}return r}}}else i.sort((e,t)=>this._ng._keys[e].compareTo(this._ng._keys[t]));return i}_getSession(){let e=this._url;return httpRequest(e,{async:!1,data:_ENV_SESSION,method:"POST",user:this._user,password:this._password,requestHeaders:{"Content-Type":"text/xml"},success:e=>{let t=e.responseXML.getElementsByTagName("Session");this._token=t[0].getAttribute("SessionId")},error:e=>{this._handleError("Begin Session",e)}})}_endSession(){let e=this._url;return httpRequest(e,{async:!1,data:_ENV_ENDSESSION(this._token),method:"POST",user:this._user,password:this._password,requestHeaders:{"Content-Type":"text/xml"},error:e=>{this._handleError("End Session",e)},complete:e=>{this._token=void 0}})}_getProperties(e){let t=this._url;return httpRequest(t,{async:!1,data:_ENV_PROPERTIES(e,this._catalogName,this._cubeName),method:"POST",user:this._user,password:this._password,requestHeaders:{"Content-Type":"text/xml"},success:e=>{for(var t={},i=e.responseXML.getElementsByTagName("row"),s=0;s<i.length;s++){var l=_getTagValue(i[s],"HIERARCHY_UNIQUE_NAME");switch(Number(_getTagValue(i[s],"DATA_TYPE"))){case 2:case 3:case 4:case 5:case 6:t[l]=DataType.Number;break;case 7:t[l]=DataType.Date}}this._dataTypes=t},error:e=>{this._handleError("Get Properties",e)}})}_getDimensions(e){let t=this._url;return httpRequest(t,{async:!1,data:_ENV_DIMENSIONS(e,this._catalogName,this._cubeName),method:"POST",user:this._user,password:this._password,requestHeaders:{"Content-Type":"text/xml"},success:t=>{for(var i=[],s=t.responseXML.getElementsByTagName("row"),l=0;l<s.length;l++){if("2"!==_getTagValue(s[l],"DIMENSION_TYPE")){var n=_getTagValue(s[l],"DIMENSION_UNIQUE_NAME"),r={header:_getTagValue(s[l],"DIMENSION_CAPTION"),dataType:DataType.Object,dimensionType:DimensionType.Dimension,subFields:[]};this._getSubFolders(e,n,r);i.push(r)}else this._getMeasures(e,i)}var a={header:"KPIs",dataType:DataType.Object,dimensionType:DimensionType.Kpi,subFields:[]};this._getKPIs(e,a);i.push(a);this._jsonResult=i},error:e=>{this._handleError("Get Dimensions",e)}})}_getSubFolders(e,t,i){let s=this._url;httpRequest(s,{async:!1,data:_ENV_HIERARCHIES(e,this._catalogName,this._cubeName,t),method:"POST",user:this._user,password:this._password,requestHeaders:{"Content-Type":"text/xml"},success:e=>{for(var t=e.responseXML.getElementsByTagName("row"),s=0;s<t.length;s++){var l={header:_getTagValue(t[s],"HIERARCHY_NAME"),binding:_getTagValue(t[s],"HIERARCHY_UNIQUE_NAME"),dataType:DataType.String,dimensionType:DimensionType.Hierarchy};this._dataTypes[l.binding]&&(l.dataType=this._dataTypes[l.binding]);for(var n=_getTagValue(t[s],"HIERARCHY_DISPLAY_FOLDER").split("\\"),r=i,a=0;a<n.length;a++)if(""!=n[a]){var o={header:n[a],dataType:DataType.Object,dimensionType:DimensionType.Folder,subFields:[]};if(_containsFolder(r,n[a]))r=_findSubFieldByName(r,n[a]);else{r.subFields.push(o);r=o}}r.subFields.push(l)}},error:e=>{this._handleError("Get Hierarchies",e)}})}_getMeasures(e,t){let i=this._url;return httpRequest(i,{async:!1,data:_ENV_MEASURES(e,this._catalogName,this._cubeName),method:"POST",user:this._user,password:this._password,requestHeaders:{"Content-Type":"text/xml"},success:e=>{for(var i=e.responseXML.getElementsByTagName("row"),s={},l=0;l<i.length;l++){var n=_getTagValue(i[l],"MEASUREGROUP_NAME"),r={header:_getTagValue(i[l],"MEASURE_CAPTION"),binding:_getTagValue(i[l],"MEASURE_UNIQUE_NAME"),dataType:DataType.Number,dimensionType:DimensionType.Measure};if(Object.keys(s).indexOf(n)<0){var a={header:n,dataType:DataType.Number,dimensionType:DimensionType.Measure,subFields:[]};a.subFields.push(r);t.push(a);s[n]=a}else s[n].subFields.push(r)}},error:e=>{this._handleError("Get Measures",e)}})}_getKPIs(e,t){let i=this._url;return httpRequest(i,{async:!1,data:_ENV_KPIS(e,this._catalogName,this._cubeName),method:"POST",user:this._user,password:this._password,requestHeaders:{"Content-Type":"text/xml"},success:e=>{for(var i=e.responseXML.getElementsByTagName("row"),s=0;s<i.length;s++){for(var l=_getTagValue(i[s],"KPI_DISPLAY_FOLDER").split("\\"),n=t,r=0;r<l.length;r++){var a={header:l[r],dataType:DataType.Object,dimensionType:DimensionType.Folder,subFields:[]};if(_containsFolder(n,l[r]))n=_findSubFieldByName(n,l[r]);else{n.subFields.push(a);n=a}}var o={header:_getTagValue(i[s],"KPI_CAPTION"),binding:_getTagValue(i[s],"KPI_VALUE"),dataType:DataType.Number,dimensionType:DimensionType.Kpi};n.subFields.push(o)}},error:e=>{this._handleError("Get KPIs",e)}})}_execQuery(e,t,i){let s=this._url;return httpRequest(s,{async:!0,data:_ENV_QUERY(e,this._catalogName,t),method:"POST",user:this._user,password:this._password,requestHeaders:{"Content-Type":"text/xml"},success:e=>{let s=e.responseXML,l=s.querySelector("Error");if(l){throw"SSAS Error\r\n"+l.getAttribute("Description")+"\r\n"+t}this._createPivotKeys(s);asFunction(i)(e)},error:e=>{this._handleError("Execute Query",e)},complete:()=>{this._endSession()}})}_createPivotKeys(e){let t=null,i=null,s=e.querySelector("CellData");if(this._ng.columnFields.length>0||this._ng.valueFields.length>1){i=e.querySelector("Axis[name='Axis0']");this._ng.rowFields.length>0&&(t=e.querySelector("Axis[name='Axis1']"))}else this._ng.rowFields.length>0&&(t=e.querySelector("Axis[name='Axis0']"));let l=t&&this._ng.rowFields.length>0,n=i&&this._ng.columnFields.length>0;l&&n?this._createRowKeys(s,t,i):l?this._createRowOnlyKeys(s,t):n&&this._createColumnOnlyKeys(s,i)}_createRowKeys(e,t,i){let s=t.getElementsByTagName("Tuple"),l=i.getElementsByTagName("Tuple"),n=this._ng.showRowTotals!==ShowTotals.None?0:1,r=this._ng.showColumnTotals!==ShowTotals.None?0:this._ng.valueFields.length;for(let t=n;t<s.length;t++){let i=t*l.length,n=s[t],a=this._validateTuple(n,this._ng.showRowTotals);if(a)for(let t=r;t<l.length;t++){let s=l[t],n=this._validateTuple(s,this._ng.showColumnTotals);if(n){for(let e in a)n[e]=a[e];for(let s=0;s<this._ng.valueFields.length;s++){n[this._ng.valueFields[s].key]=_getCellValue(e,i+t+s)}this._jsonResult.push(n)}}}}_createRowOnlyKeys(e,t){let i=t.getElementsByTagName("Tuple"),s=this._ng.valueFields.length,l=this._ng.showRowTotals!==ShowTotals.None?0:1,n=l*s;for(let t=l;t<i.length;t++){let s=i[t],l=this._validateTuple(s,this._ng.showRowTotals);if(l){for(let t=0;t<this._ng.valueFields.length;t++){l[this._ng.valueFields[t].key]=_getCellValue(e,n++)}this._jsonResult.push(l)}else n++}}_createColumnOnlyKeys(e,t){let i=t.getElementsByTagName("Tuple"),s=this._ng.valueFields.length,l=this._ng.showColumnTotals!==ShowTotals.None?0:1;for(let t=l;t<i.length;t+=s){let s=i[t],n=this._validateTuple(s,this._ng.showColumnTotals);if(n){for(let i=0;i<this._ng.valueFields.length;i++){n[this._ng.valueFields[i].key]=_getCellValue(e,t-l+i)}this._jsonResult.push(n)}}}_validateTuple(e,t){let i=e.getElementsByTagName("Member"),s=void 0,l={};for(let e=0;e<i.length;e++){let n=i[e],r=_getLevelNumber(n),a=n.getAttribute("Hierarchy"),o=_getCaptionValue(n);if(0==e)s=r;else{if(r>s)return null;if(t!==ShowTotals.Subtotals&&r!==s&&"[Measures]"!==a)return null;s=r}a.indexOf(".")>=0?l[a]=o:null!==o&&(l[o]=null)}return l}}function _getTagValue(e,t){let i=e.querySelector(t);return i?i.innerHTML||i.textContent:null}function _getLevelNumber(e){return Number(_getTagValue(e,"LNum"))}function _getCaptionValue(e){return _getLevelNumber(e)>0?_getTagValue(e,"Caption"):null}function _getCellValue(e,t){let i="Cell[CellOrdinal='"+t.toString()+"']",s=e.querySelector(i);if(s){let e=_getTagValue(s,"Value");if(e)return Number(e)}return null}function _findSubFieldByName(e,t){if(e.subFields)for(var i=0;i<e.subFields.length;i++){var s=e.subFields[i];if(s.header==t)return s}return e}function _containsFolder(e,t){if(e.subFields)for(var i=0;i<e.subFields.length;i++){if(e.subFields[i].header==t)return!0}return!1}const _ENV_SESSION='\n <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">\n <Header>\n <BeginSession soap:mustUnderstand="1" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:schemas-microsoft-com:xml-analysis" />\n </Header>\n <Body>\n <Execute xmlns="urn:schemas-microsoft-com:xml-analysis">\n <Command>\n <Statement />\n </Command>\n <Properties>\n </Properties>\n </Execute>\n </Body>\n </Envelope>',_ENV_ENDSESSION=e=>`\n <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">\n <Header>\n <XA:EndSession soap:mustUnderstand="1" SessionId="${e}" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:XA="urn:schemas-microsoft-com:xml-analysis" />\n </Header>\n <Body>\n <Execute xmlns="urn:schemas-microsoft-com:xml-analysis">\n <Command>\n <Statement />\n </Command>\n <Properties>\n </Properties>\n </Execute>\n </Body>\n </Envelope>`,_ENV_DIMENSIONS=(e,t,i)=>`\n <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">\n <Header>\n <XA:Session soap:mustUnderstand="1" SessionId="${e}" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:XA="urn:schemas-microsoft-com:xml-analysis" />\n </Header>\n <Body>\n <Discover xmlns="urn:schemas-microsoft-com:xml-analysis">\n <RequestType>MDSCHEMA_DIMENSIONS</RequestType>\n <Restrictions>\n <RestrictionList>\n <CATALOG_NAME>${t}</CATALOG_NAME>\n <CUBE_NAME>${i}</CUBE_NAME>\n </RestrictionList>\n </Restrictions>\n <Properties>\n </Properties>\n </Discover>\n </Body>\n </Envelope>`,_ENV_HIERARCHIES=(e,t,i,s)=>`\n <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">\n <Header>\n <XA:Session soap:mustUnderstand="1" SessionId="${e}" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:XA="urn:schemas-microsoft-com:xml-analysis" />\n </Header>\n <Body>\n <Discover xmlns="urn:schemas-microsoft-com:xml-analysis">\n <RequestType>MDSCHEMA_HIERARCHIES</RequestType>\n <Restrictions>\n <RestrictionList>\n <CATALOG_NAME>${t}</CATALOG_NAME>\n <CUBE_NAME>${i}</CUBE_NAME>\n <DIMENSION_UNIQUE_NAME>${s}</DIMENSION_UNIQUE_NAME>\n </RestrictionList>\n </Restrictions>\n <Properties>\n </Properties>\n </Discover>\n </Body>\n </Envelope>`,_ENV_MEASURES=(e,t,i)=>`\n <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">\n <Header>\n <XA:Session soap:mustUnderstand="1" SessionId="${e}" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:XA="urn:schemas-microsoft-com:xml-analysis" />\n </Header>\n <Body>\n <Discover xmlns="urn:schemas-microsoft-com:xml-analysis">\n <RequestType>MDSCHEMA_MEASURES</RequestType>\n <Restrictions>\n <RestrictionList>\n <CATALOG_NAME>${t}</CATALOG_NAME>\n <CUBE_NAME>${i}</CUBE_NAME>\n </RestrictionList>\n </Restrictions>\n <Properties>\n </Properties>\n </Discover>\n </Body>\n </Envelope>`,_ENV_KPIS=(e,t,i)=>`\n <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">\n <Header>\n <XA:Session soap:mustUnderstand="1" SessionId="${e}" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:XA="urn:schemas-microsoft-com:xml-analysis" />\n </Header>\n <Body>\n <Discover xmlns="urn:schemas-microsoft-com:xml-analysis">\n <RequestType>MDSCHEMA_KPIS</RequestType>\n <Restrictions>\n <RestrictionList>\n <CATALOG_NAME>${t}</CATALOG_NAME>\n <CUBE_NAME>${i}</CUBE_NAME>\n </RestrictionList>\n </Restrictions>\n <Properties>\n </Properties>\n </Discover>\n </Body>\n </Envelope>`,_ENV_LEVELS=(e,t,i)=>`\n <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">\n <Header>\n <XA:Session soap:mustUnderstand="1" SessionId="${e}" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:XA="urn:schemas-microsoft-com:xml-analysis" />\n </Header>\n <Body>\n <Discover xmlns="urn:schemas-microsoft-com:xml-analysis">\n <RequestType>MDSCHEMA_LEVELS</RequestType>\n <Restrictions>\n <RestrictionList>\n <CATALOG_NAME>${t}</CATALOG_NAME>\n <CUBE_NAME>${i}</CUBE_NAME>\n </RestrictionList>\n </Restrictions>\n <Properties>\n </Properties>\n </Discover>\n </Body>\n </Envelope>`,_ENV_PROPERTIES=(e,t,i)=>`\n <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">\n <Header>\n <XA:Session soap:mustUnderstand="1" SessionId="${e}" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:XA="urn:schemas-microsoft-com:xml-analysis" />\n </Header>\n <Body>\n <Discover xmlns="urn:schemas-microsoft-com:xml-analysis">\n <RequestType>MDSCHEMA_PROPERTIES</RequestType>\n <Restrictions>\n <RestrictionList>\n <CATALOG_NAME>${t}</CATALOG_NAME>\n <CUBE_NAME>${i}</CUBE_NAME>\n <PROPERTY_NAME>MEMBER_VALUE</PROPERTY_NAME>\n </RestrictionList>\n </Restrictions>\n <Properties>\n </Properties>\n </Discover>\n </Body>\n </Envelope>`,_ENV_QUERY=(e,t,i)=>`\n <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">\n <Header>\n <XA:Session soap:mustUnderstand="1" SessionId="${e}" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:XA="urn:schemas-microsoft-com:xml-analysis" />\n </Header>\n <Body>\n <Execute xmlns="urn:schemas-microsoft-com:xml-analysis">\n <Command>\n <Statement>\n <![CDATA[\n ${i}\n ]]>\n </Statement>\n </Command>\n <Properties>\n <PropertyList>\n <Catalog>${t}</Catalog>\n <Content>Data</Content>\n </PropertyList>\n </Properties>\n </Execute>\n </Body>\n </Envelope>`;export class PivotFilter{constructor(e){this._fld=e;let t=e;this._valueFilter=new ValueFilter(t);this._valueFilter.exclusiveValueSearch=this._fld.engine.exclusiveValueSearch;this._conditionFilter=new ConditionFilter(t)}get filterType(){return null!=this._filterType?this._filterType:this._fld.engine.defaultFilterType}set filterType(e){if((e=asEnum(e,FilterType,!0))!=this._filterType){this._filterType=e;this.clear()}}apply(e){return this._conditionFilter.apply(e)&&this._valueFilter.apply(e)}get isActive(){return this._conditionFilter.isActive||this._valueFilter.isActive}clear(){let e=!1;if(this._valueFilter.isActive){this._valueFilter.clear();e=!0}if(this._conditionFilter.isActive){this._valueFilter.clear();e=!0}e&&this._fld.onPropertyChanged(new PropertyChangedEventArgs("filter",null,null))}get valueFilter(){return this._valueFilter}get conditionFilter(){return this._conditionFilter}}export class PivotFilterEditor extends Control{constructor(e,t,i){super(e);this.finishEditing=new Event;this.hostElement.tabIndex=-1;let s=this.getTemplate();this.applyTemplate(`${ControlClsNames.hostElement} ${ControlClsNames.content} ${PivotFilterEditorClsNames.hostElement}`,s,{_divType:"div-type",_aVal:"a-val",_aCnd:"a-cnd",_divEdtVal:"div-edt-val",_divEdtCnd:"div-edt-cnd",_btnOk:"btn-ok"});setText(this._aVal,culture.FlexGridFilter.values);setText(this._aCnd,culture.FlexGridFilter.conditions);setText(this._btnOk,culture.olap.PivotFieldEditor.ok);let l=this._btnClicked.bind(this);this.addEventListener(this._btnOk,"click",l);this.addEventListener(this._aVal,"click",l);this.addEventListener(this._aCnd,"click",l);this.addEventListener(this.hostElement,"keydown",e=>{switch(e.keyCode){case Key.Enter:switch(e.target.tagName){case"A":case"BUTTON":this._btnClicked(e);break;default:this.onFinishEditing(new CancelEventArgs)}e.preventDefault();break;case Key.Escape:this.onFinishEditing(new CancelEventArgs);e.preventDefault();break;case Key.Tab:moveFocus(this.hostElement,e.shiftKey?-1:1);e.preventDefault()}});this._fld=t;this._uniqueValues=t.filter.valueFilter.uniqueValues;this.initialize(i);this.updateEditor()}static get controlTemplate(){PivotFilterEditor._ctrlTemplate||(PivotFilterEditor._ctrlTemplate='<div><div wj-part="div-type" style="text-align:center;margin-bottom:12px;font-size:80%"><a wj-part="a-cnd" href="" tabindex="-1" draggable="false"></a>&nbsp;|&nbsp;<a wj-part="a-val" href="" tabindex="-1" draggable="false"></a></div><div wj-part="div-edt-val" tabindex="-1"></div><div wj-part="div-edt-cnd" tabindex="-1"></div><div style="text-align:right;margin-top:10px">'+`<button wj-part="btn-ok" class="${InputFormElementsClsNames.btn}"></button>`+"</div></div>");return PivotFilterEditor._ctrlTemplate}static set controlTemplate(e){PivotFilterEditor._ctrlTemplate=e}get field(){return this._fld}get filter(){return this._fld?this._fld.filter:null}get isEditorClear(){switch(this._getFilterType()){case FilterType.Value:return!this._edtVal||this._edtVal.isEditorClear;case FilterType.Condition:return!this._edtCnd||this._edtCnd.isEditorClear}assert(!1,"unknown filter type?");return!1}updateEditor(){let e=FilterType,t=e.None;if(this.filter){t=this.filter.conditionFilter.isActive||0==(this.filter.filterType&e.Value)?e.Condition:e.Value;this._showFilter(t)}if(this._edtVal){let e=this._fld,t=e.engine;if(t.isServer&&!this._uniqueValues){let i=t._getUniqueValues(e);e.filter.valueFilter.uniqueValues=i}this._edtVal.updateEditor()}this._edtCnd&&this._edtCnd.updateEditor()}updateFilter(){switch(this._getFilterType()){case FilterType.Value:this._edtVal.updateFilter();this.filter.conditionFilter.clear();break;case FilterType.Condition:this._edtCnd.updateFilter();this.filter.valueFilter.clear()}this.field.onPropertyChanged(new PropertyChangedEventArgs("filter",null,null))}clearEditor(){this._edtVal&&this._edtVal.clearEditor();this._edtCnd&&this._edtCnd.clearEditor()}onFinishEditing(e){this.finishEditing.raise(this,e);return!e.cancel}_showFilter(e){e==FilterType.Value&&null==this._edtVal&&(this._edtVal=new ValueFilterEditor(this._divEdtVal,this.filter.valueFilter));e==FilterType.Condition&&null==this._edtCnd&&(this._edtCnd=new ConditionFilterEditor(this._divEdtCnd,this.filter.conditionFilter));if(0!=(e&this.filter.filterType))if(e==FilterType.Value){this._divEdtVal.style.display="";this._divEdtCnd.style.display="none";this._enableLink(this._aVal,!1);this._enableLink(this._aCnd,!0)}else{this._divEdtVal.style.display="none";this._divEdtCnd.style.display="";this._enableLink(this._aVal,!0);this._enableLink(this._aCnd,!1)}switch(this.filter.filterType){case FilterType.None:case FilterType.Condition:case FilterType.Value:this._divType.style.display="none";break;default:this._divType.style.display=""}}_enableLink(e,t){e.style.textDecoration=t?"":"none";e.style.fontWeight=t?"":"bold";setAttribute(e,"href",t?"":null)}_getFilterType(){let e=FilterType;return"none"!=this._divEdtVal.style.display?e.Value:e.Condition}_btnClicked(e){e.preventDefault();e.stopPropagation();if(!hasClass(e.target,ControlStateClsNames.disabled))if(e.target!=this._aVal)if(e.target!=this._aCnd)this.onFinishEditing(new CancelEventArgs);else{this._showFilter(FilterType.Condition);moveFocus(this._edtCnd.hostElement,0)}else{this._showFilter(FilterType.Value);moveFocus(this._edtVal.hostElement,0)}}}PivotFilterEditor._ctrlTemplate="";export class PivotFieldEditor extends Control{constructor(e,t){super(e,null,!0);this.hostElement.tabIndex=-1;let i=this.getTemplate();this.applyTemplate(`${ControlClsNames.hostElement} ${PivotFieldEditorClsNames.hostElement}`,i,{_dBnd:"sp-bnd",_dHdr:"div-hdr",_dAgg:"div-agg",_dShw:"div-shw",_dWFl:"div-wfl",_dSrt:"div-srt",_btnFltEdt:"btn-flt-edt",_btnFltClr:"btn-flt-clr",_dFmt:"div-fmt",_dSmp:"div-smp",_btnApply:"btn-apply",_btnCancel:"btn-cancel",_gDlg:"g-dlg",_gHdr:"g-hdr",_gAgg:"g-agg",_gShw:"g-shw",_gWfl:"g-wfl",_gSrt:"g-srt",_gFlt:"g-flt",_gFmt:"g-fmt",_gSmp:"g-smp"});this._pvDate=new Date;let s=culture.olap.PivotFieldEditor;setText(this._gDlg,s.dialogHeader);setText(this._gHdr,s.header);setText(this._gAgg,s.summary);setText(this._gShw,s.showAs);setText(this._gWfl,s.weighBy);setText(this._gSrt,s.sort);setText(this._gFlt,s.filter);setText(this._gFmt,s.format);setText(this._gSmp,s.sample);setText(this._btnFltEdt,s.edit);setText(this._btnFltClr,s.clear);setText(this._btnApply,s.ok);setText(this._btnCancel,s.cancel);this._cmbHdr=new ComboBox(this._dHdr,{keyActionPrintCharacters:0,keyActionTab:0});this._cmbAgg=new ComboBox(this._dAgg,{keyActionPrintCharacters:0,keyActionTab:0});this._cmbShw=new ComboBox(this._dShw,{keyActionPrintCharacters:0,keyActionTab:0});this._cmbWFl=new ComboBox(this._dWFl,{keyActionPrintCharacters:0,keyActionTab:0});this._cmbSrt=new ComboBox(this._dSrt,{keyActionPrintCharacters:0,keyActionTab:0});this._cmbFmt=new ComboBox(this._dFmt,{keyActionPrintCharacters:0,keyActionTab:0});this._cmbSmp=new ComboBox(this._dSmp,{keyActionPrintCharacters:0,keyActionTab:0});this._initAggregateOptions();this._initShowAsOptions();this._initFormatOptions();this._initSortOptions();this._updatePreview();this._cmbShw.textChanged.addHandler(this._updateFormat,this);this._cmbFmt.textChanged.addHandler(this._updatePreview,this);this.addEventListener(this._btnFltEdt,"click",e=>{this._editFilter();e.preventDefault()});this.addEventListener(this._btnFltClr,"click",e=>{this._createFilterEditor();this._closeAndFocusTimer=setTimeout(()=>{this._eFlt.clearEditor();this._btnFltEdt.focus();enable(this._btnFltClr,!1)});e.preventDefault()});this.addEventListener(this._btnApply,"click",e=>{this.updateField()});this.initialize(t)}static get controlTemplate(){PivotFieldEditor._ctrlTemplate||(PivotFieldEditor._ctrlTemplate="<div>"+`<div class="${DetailDialogClsNames.dialogHeader}" tabindex="-1">`+'<span wj-part="g-dlg"></span> <span wj-part="sp-bnd"></span></div>'+`<div class="${DetailDialogClsNames.dialogBody}">`+'<table style="table-layout:fixed"><tr><td wj-part="g-hdr"></td><td><div wj-part="div-hdr"></div></td></tr>'+`<tr class="${UtilitesClsNames.separator}">`+'<td wj-part="g-agg"></td><td><div wj-part="div-agg"></div></td></tr>'+`<tr class="${UtilitesClsNames.separator}">`+'<td wj-part="g-shw"></td><td><div wj-part="div-shw"></div></td></tr><tr><td wj-part="g-wfl"></td><td><div wj-part="div-wfl"></div></td></tr><tr><td wj-part="g-srt"></td><td><div wj-part="div-srt"></div></td></tr>'+`<tr class="${UtilitesClsNames.separator}">`+'<td wj-part="g-flt"></td><td><div>'+`<button wj-part="btn-flt-edt" class="${InputFormElementsClsNames.btn}"></button>&nbsp;&nbsp;`+`<button wj-part="btn-flt-clr" class="${InputFormElementsClsNames.btn}"></button>`+"</div></td></tr>"+`<tr class="${UtilitesClsNames.separator}">`+'<td wj-part="g-fmt"></td><td><div wj-part="div-fmt"></div></td></tr><tr><td wj-part="g-smp"></td><td><div wj-part="div-smp" readonly tabindex="-1"></div></td></tr></table></div>'+`<div class="${DetailDialogClsNames.dialogFooter}">`+`<button wj-part="btn-apply" class="${InputFormElementsClsNames.btn} ${UtilitesClsNames.hide}"></button>&nbsp;&nbsp;`+`<button wj-part="btn-cancel" class="${InputFormElementsClsNames.btn} ${UtilitesClsNames.hide}"></button>`+"</div></div>");return PivotFieldEditor._ctrlTemplate}static set controlTemplate(e){PivotFieldEditor._ctrlTemplate=e}get field(){return this._fld}set field(e){if(e!=this._fld){this._fld=asType(e,PivotField);this.updateEditor()}}updateEditor(){let e=this._fld;if(e&&e.engine){this._dBnd.textContent=e.binding;this._cmbHdr.text=e.header;this._cmbAgg.collectionView.refresh();this._cmbAgg.selectedValue=e.aggregate;this._cmbSrt.selectedValue=e.descending;this._cmbShw.selectedValue=e.showAs;this._initWeighByOptions();let t=e.engine.defaultFilterType!=FilterType.None&&(null!=e.binding||isFunction(e.getValue));enable(this._btnFltEdt,t);enable(this._btnFltClr,t&&e.filter.isActive);this._cmbFmt.collectionView.refresh();this._cmbFmt.selectedValue=e.format;this._cmbFmt.selectedValue||(this._cmbFmt.text=e.format);let i=e instanceof CubePivotField;this._cmbAgg.isDisabled=i||!!e.getAggregateValue;this._cmbWFl.isDisabled=i}}updateField(){let e=this._fld;if(e){let t=this._cmbHdr.text.trim();e.header=t||toHeaderCase(e.binding);e.aggregate=this._cmbAgg.selectedValue;e.showAs=this._cmbShw.selectedValue;e.weightField=this._cmbWFl.selectedValue;e.descending=this._cmbSrt.selectedValue;let i=e.format;e.format=this._cmbFmt.selectedValue||this._cmbFmt.text;let s=this._eFlt;if(s){s.updateFilter();const t=e.dataType==DataType.Number,l=e.dataType==DataType.Date;if(i!=e.format&&(t||l)){let s=e.filter.valueFilter;if(s&&s.isActive&&!s.dataMap){let n={};if(t)for(let t in s.showValues){let i=Globalize.parseFloat(t);n[Globalize.format(i,e.format)]=!0}else if(l)for(let t in s.showValues){let s=Globalize.parseDate(t,i);n[Globalize.format(s,e.format)]=!0}s.showValues=n}}}}}_initAggregateOptions(){let e=culture.olap.PivotFieldEditor.aggs,t=Aggregate,i=[{key:e.sum,val:t.Sum,all:!1},{key:e.cnt,val:t.Cnt,all:!0},{key:e.avg,val:t.Avg,all:!1},{key:e.max,val:t.Max,all:!0},{key:e.min,val:t.Min,all:!0},{key:e.rng,val:t.Rng,all:!1},{key:e.std,val:t.Std,all:!1},{key:e.var,val:t.Var,all:!1},{key:e.stdp,val:t.StdPop,all:!1},{key:e.varp,val:t.VarPop,all:!1},{key:e.first,val:t.First,all:!0},{key:e.last,val:t.Last,all:!0}];this._cmbAgg.itemsSource=i;this._cmbAgg.collectionView.filter=e=>{if(e&&e.all)return!0;if(this._fld){let e=this._fld.dataType;return e==DataType.Number||e==DataType.Boolean}return!1};this._cmbAgg.initialize({displayMemberPath:"key",selectedValuePath:"val"})}_initShowAsOptions(){let e=culture.olap.PivotFieldEditor.calcs,t=[{key:e.noCalc,val:ShowAs.NoCalculation},{key:e.dRow,val:ShowAs.DiffRow},{key:e.dRowPct,val:ShowAs.DiffRowPct},{key:e.dCol,val:ShowAs.DiffCol},{key:e.dColPct,val:ShowAs.DiffColPct},{key:e.dPctGrand,val:ShowAs.PctGrand},{key:e.dPctRow,val:ShowAs.PctRow},{key:e.dPrevRow,val:ShowAs.PctPrevRow},{key:e.dPctCol,val:ShowAs.PctCol},{key:e.dPrevCol,val:ShowAs.PctPrevCol},{key:e.dRunTot,val:ShowAs.RunTot},{key:e.dRunTotPct,val:ShowAs.RunTotPct}];this._cmbShw.itemsSource=t;this._cmbShw.initialize({displayMemberPath:"key",selectedValuePath:"val"})}_initFormatOptions(){let e=culture.olap.PivotFieldEditor.formats,t=[{key:e.n0,val:"n0",all:!0},{key:e.n2,val:"n2",all:!0},{key:e.c,val:"c",all:!0},{key:e.p0,val:"p0",all:!0},{key:e.p2,val:"p2",all:!0},{key:e.n2c,val:"n2,",all:!0},{key:e.n2cc,val:"n2,,",all:!0},{key:e.n2ccc,val:"n2,,,",all:!0},{key:e.d,val:"d",all:!1},{key:e.MMMMddyyyy,val:"MMMM dd, yyyy",all:!1},{key:e.dMyy,val:"d/M/yy",all:!1},{key:e.ddMyy,val:"dd/M/yy",all:!1},{key:e.dMyyyy,val:"dd/M/yyyy",all:!1},{key:e.MMMyyyy,val:"MMM yyyy",all:!1},{key:e.MMMMyyyy,val:"MMMM yyyy",all:!1},{key:e.yyyy,val:"yyyy",all:!1},{key:e.yyyyQq,val:'yyyy "Q"q',all:!1},{key:e.FYEEEEQU,val:'"FY"EEEE "Q"U',all:!1}];this._cmbFmt.itemsSource=t;this._cmbFmt.isEditable=!0;this._cmbFmt.isRequired=!1;this._cmbFmt.collectionView.filter=e=>!(!e||!e.all)||!!this._fld&&this._fld.dataType==DataType.Date;this._cmbFmt.initialize({displayMemberPath:"key",selectedValuePath:"val"})}_initWeighByOptions(){let e=this._fld;if(e){let t=[{key:culture.olap.PivotFieldEditor.none,val:null}];e.engine.fields.forEach(i=>{i!=e&&i.dataType==DataType.Number&&t.push({key:i.header,val:i})});this._cmbWFl.initialize({displayMemberPath:"key",selectedValuePath:"val",itemsSource:t,selectedValue:e.weightField})}}_initSortOptions(){let e=culture.olap.PivotFieldEditor.sorts,t=[{key:e.asc,val:!1},{key:e.desc,val:!0}];this._cmbSrt.itemsSource=t;this._cmbSrt.initialize({displayMemberPath:"key",selectedValuePath:"val"})}_updateFormat(){let e=ShowAs[this._cmbShw.selectedValue];this._cmbFmt.selectedValue=e.indexOf("Pct")>-1?"p0":"n0"}_updatePreview(){let e=this._cmbFmt.selectedValue||this._cmbFmt.text,t=Globalize.format,i="";if(e){let s=e[0].toLowerCase();i="nfgxc".indexOf(s)>-1?t(1234.5678,e):t("p"==s?.12345678:this._pvDate,e)}this._cmbSmp.text=i}_editFilter(){this._createFilterEditor();showPopup(this._dFlt,this._btnFltEdt,!1,!1,!1);moveFocus(this._dFlt,0)}_createFilterEditor(){if(!this._dFlt){this._dFlt=document.createElement("div");this._eFlt=new PivotFilterEditor(this._dFlt,this._fld);addClass(this._dFlt,DropDownClsNames.dropDownPanel);this._lostFocusHandler=()=>{this._closeFilterTimer=setTimeout(()=>{let e=Control.getControl(this._dFlt);e&&!e.containsFocus()&&this._closeFilter()},10)};this._eFlt.lostFocus.addHandler(this._lostFocusHandler);this._eFlt.finishEditing.addHandler(()=>{this._closeFilter();enable(this._btnFltClr,!this._eFlt.isEditorClear)})}}_closeFilter(){if(this._dFlt){hidePopup(this._dFlt,!0);this.focus()}}dispose(){if(this._closeFilterTimer){clearTimeout(this._closeFilterTimer);this._closeFilterTimer=null}this._cmbShw&&this._cmbShw.textChanged.removeHandler(this._updateFormat,this);this._cmbFmt&&this._cmbFmt.textChanged.removeHandler(this._updatePreview,this);if(this._eFlt){this._eFlt.dispose();this._eFlt=null}if(this._dFlt){this._dFlt.innerHTML="";this._dFlt=null}if(this._closeFilterTimer){clearTimeout(this._closeFilterTimer);this._closeFilterTimer=null}if(this._closeAndFocusTimer){clearTimeout(this._closeAndFocusTimer);this._closeAndFocusTimer=null}this.hostElement&&(this.hostElement[Control._CTRL_KEY]=null);super.dispose()}}PivotFieldEditor._ctrlTemplate="";_registerModule("wijmo.olap",selfModule);export class PivotFieldBinding extends Binding{constructor(e,t){super(t);this._fld=e}getValue(e){const t=this._fld;return isFunction(t.getValue)?t._getValue(e,!1):super.getValue(e)}}
14
+ import{CollectionView,asType,assert,ObservableArray,asInt,isString,isBoolean,isNumber,Aggregate,httpRequest,isArray,isDate,Globalize,asString,DataType,asFunction,RequestErrorEventArgs,isNullOrWhiteSpace,PropertyChangedEventArgs,asEnum,Control,setText,culture,Key,CancelEventArgs,moveFocus,setAttribute,hasClass,Event,ControlStateClsNames,ControlClsNames,InputFormElementsClsNames,addClass,enable,showPopup,toHeaderCase,hidePopup,isFunction,UtilitesClsNames,EventArgs,NotifyCollectionChangedAction,_addCultureInfo,copy,tryCast,getType,getTypes,isObject,isPrimitive,asCollectionView,asBoolean,asNumber,asArray,hasItems,Binding,changeType,DateTime,GlyphClsNames,createElement,clamp,toggleClass,_startDrag,closest,Rect,setCss,format,isEmpty,closestClass,escapeHtml,isIE,isEdge,Tooltip,removeChild,_registerModule}from"@mescius/wijmo";import{FilterType,Operator,ValueFilter,ConditionFilter,ValueFilterEditor,ConditionFilterEditor}from"@mescius/wijmo.grid.filter";import{ComboBox,DropDownClsNames,Popup,Menu,MultiSelect,ListBoxClsNames}from"@mescius/wijmo.input";import{FlexGrid,FlexGridClsNames,CellType,AllowMerging,MergeManager,CellRange,AllowDragging,HeadersVisibility,Row,Column,CellRangeEventArgs}from"@mescius/wijmo.grid";import{Stacking,FlexChart,FlexPie,Position,Axis,SeriesVisibility,Series,TickMark,ChartType}from"@mescius/wijmo.chart";import*as selfModule from"@mescius/wijmo.olap";export class _TextBuilder{constructor(){this._text=""}get length(){return this._text.length}toString(){return this._text}append(...e){this._text=this._text.concat(...e)}joinToList(e,...t){let i=t.join();this.length>0&&i.length>0?this._text=this._text.concat(e,...t):i.length>0&&(this._text=i)}joinItemToList(e){this.joinToList(",",e)}wrap(e,t){this.length>0&&(this._text=e.concat(this._text,t))}static wrap(e,t,i){return t.length>0?e.concat(t,i):""}}export const DetailDialogClsNames={dialogBody:"wj-dialog-body",dialogFooter:"wj-dialog-footer",dialogHeader:"wj-dialog-header",hostElement:"wj-detaildialog",summary:"wj-summary"};export const PivotChartClsNames={hierarchicalAxesLine:"wj-hierarchicalaxes-line",hostElement:"wj-pivotchart"};export const PivotFieldEditorClsNames={hostElement:"wj-pivotfieldeditor"};export const PivotFilterEditorClsNames={hostElement:"wj-pivotfiltereditor"};export const PivotGridClsNames={colFieldHdr:"wj-col-field-hdr",hostElement:"wj-pivotgrid",pivotCollapse:"wj-pivot-collapse",rowFieldHdr:"wj-row-field-hdr"};export const PivotPanelClsNames={aggregate:"wj-aggregate",header:"wj-header",hostElement:"wj-pivotpanel"};export const SlicerClsNames={header:"wj-header",hostElement:"wj-slicer",noCheck:"wj-nocheck"};export const _GridContextMenuClsNames={hostElement:"wj-olap-context-menu"};export class _Tally{constructor(){this._cntAll=0;this._cnt=0;this._cntn=0;this._sum=0;this._sum2=0;this._min=null;this._max=null;this._first=null;this._last=null}add(e,t){if(e instanceof _Tally){this._sum+=e._sum;this._sum2+=e._sum2;this._max=this._max&&e._max?Math.max(this._max,e._max):this._max||e._max;this._min=this._min&&e._min?Math.min(this._min,e._min):this._min||e._min;this._cnt+=e._cnt;this._cntn+=e._cntn;this._cntAll+=e._cntAll}else{this._cntAll++;if(null!=e){this._cnt++;isBoolean(e)&&(e=e?1:0);(null==this._min||e<this._min)&&(this._min=e);(null==this._max||e>this._max)&&(this._max=e);null==this._first&&(this._first=e);this._last=e;if(isNumber(e)&&!isNaN(e)){isNumber(t)&&(e*=t);this._cntn++;this._sum+=e;this._sum2+=e*e}}}}getAggregate(e){if(0==this._cnt)return null;let t=0==this._cntn?0:this._sum/this._cntn,i=Aggregate;switch(e){case i.None:return null;case i.CntAll:return this._cntAll;case i.Avg:return t;case i.Cnt:return this._cnt;case i.Max:return this._max;case i.Min:return this._min;case i.Rng:return this._max-this._min;case i.Sum:return this._sum;case i.VarPop:return this._cntn<=1?0:this._sum2/this._cntn-t*t;case i.StdPop:return this._cntn<=1?0:Math.sqrt(this._sum2/this._cntn-t*t);case i.Var:return this._cntn<=1?0:(this._sum2/this._cntn-t*t)*this._cntn/(this._cntn-1);case i.Std:return this._cntn<=1?0:Math.sqrt((this._sum2/this._cntn-t*t)*this._cntn/(this._cntn-1));case i.First:return this._first;case i.Last:return this._last}throw"Invalid aggregate type."}}export class _PivotKey{constructor(e,t,i,s,l){this._fields=e;this._fieldCount=t;this._valueFields=i;this._valueFieldIndex=s;this._item=l}get fields(){return this._fields}get valueFields(){return this._valueFields}get valueField(){return this._valueFields[this._valueFieldIndex]}get values(){if(null==this._vals){this._vals=new Array(this._fieldCount);for(let e=0;e<this._fieldCount;e++){let t=this._fields[e];this._vals[e]=t._getValue(this._item,!1)}}return this._vals}get fieldNames(){if(!this._names){this._names=[];for(let e=0;e<this.fields.length;e++){let t=this._fields[e];this._names.push(t._getName())}}return this._names}get aggregate(){let e=this._valueFields,t=this._valueFieldIndex;assert(e&&t>-1&&t<e.length,"aggregate not available for this key");return e[t].aggregate}getValue(e,t){if(0==this.values.length)return culture.olap.PivotEngine.grandTotal;if(e>this.values.length-1)return culture.olap.PivotEngine.subTotal;let i=this.values[e];if(t&&!isString(i)){let t=this.fields[e],s=t?t.format:"";i=Globalize.format(this.values[e],s)}return i}get level(){return this._fieldCount==this._fields.length?-1:this._fieldCount}compareTo(e){let t=0;if(null!=e&&e._fields==this._fields){let i=this.values,s=e.values,l=Math.min(i.length,s.length);for(let n=0;n<l;n++){let l=null!=i[n]?getType(i[n]):null,r=i[n],a=s[n],o=this._fields[n];if(o.sortComparer){t=o.sortComparer(r,a);if(isNumber(t)){if(0!=t)return o.descending?-t:t;continue}}if(l==DataType.Date){let t=o.format;if(t&&"d"!=t&&"D"!=t){let i=o._getValue(this._item,!0),s=o._getValue(e._item,!0),l=Globalize.parseDate(i,t),n=Globalize.parseDate(s,t);if(l&&n){r=l;a=n}else{r=i;a=s}}}if(!(r==a||DateTime.equals(r,a))){if(null==r)return 1;if(null==a)return-1;t=r<a?-1:1;return o.descending?-t:t}}if(i.length==s.length&&0!=(t=this._valueFieldIndex-e._valueFieldIndex))return t;if(0!=(t=s.length-i.length))return t*(this.fields.engine.totalsBeforeData?-1:1)}return 0}matchesItem(e){for(let t=0;t<this._vals.length;t++){if(this.getValue(t,!0)!=this._fields[t]._getValue(e,!0))return!1}return!0}toString(e){if(!this._key||e){let t="";for(let e=0;e<this._fieldCount;e++){let i=this._fields[e];t+=i._getName()+":"+i._getValue(this._item,!0)+";"}if(this._valueFields){t+=this._valueFields[this._valueFieldIndex]._getName()+":0;"}else t+="{total}";if(e)return t+e.toString();this._key=t}return this._key}}_PivotKey._ROW_KEY_NAME="$rowKey";const _NOT_EDITABLE="This collection is not editable.";export class PivotCollectionView extends CollectionView{constructor(e){super();this.canAddNew=this.canRemove=!1;this._ng=asType(e,PivotEngine,!1)}get engine(){return this._ng}implementsInterface(e){return"IEditableCollectionView"!=e&&super.implementsInterface(e)}editItem(e){assert(!1,_NOT_EDITABLE)}addNew(){assert(!1,_NOT_EDITABLE)}_performSort(e){let t=this._ng;if(t.sortableGroups&&t._getShowRowTotals()==ShowTotals.Subtotals){let t=0,i=e.length-1;0==this._getItemLevel(e[t])&&t++;0==this._getItemLevel(e[i])&&i--;this._sortGroups(e,1,t,i)}else this._sortData(e)}_performFilter(e){return this._ng&&0==this._ng.valueFields.length&&0==this._ng.rowFields.length?[]:this.canFilter&&this._filter?e.filter(this._filter,this):e}_getGroupRange(e,t){let i=this._ng,s=e.indexOf(t),l=s,n=this._getItemLevel(e[s]);if(i.totalsBeforeData)for(l=s;l<e.length-1;l++){let t=this._getItemLevel(e[l+1]);if(t>-1&&t<=n)break}else for(s=l;s;s--){let t=this._getItemLevel(e[s-1]);if(t>-1&&t<=n)break}return[s,l]}_sortGroups(e,t,i,s){let l=[];for(let n=i;n<=s;n++)this._getItemLevel(e[n])==t&&l.push(e[n]);if(!l.length){this._sortData(e);return}super._performSort(l);let n=[];for(let s=0;s<l.length;s++){var r=this._getGroupRange(e,l[s]),a=n.length;for(let t=r[0];t<=r[1];t++)n.push(e[t]);const o=n.length-1;if(t<this._ng.rowFields.length-1)this._sortGroups(n,t+1,i+a,o);else{const e=this._ng.totalsBeforeData?1:0;this._sortSegment(n,a+e,o+e)}}for(let t=0;t<n.length;t++)e[i+t]=n[t]}_sortSegment(e,t,i){let s=e.slice(t,i);super._performSort(s);for(let i=0;i<s.length;i++)e[t+i]=s[i]}_sortData(e){for(let t=0;t<e.length;t++){if(this._getItemLevel(e[t])>-1)continue;let i=t;for(;i<e.length-1&&!(this._getItemLevel(e[i+1])>-1);i++);if(i>t){let s=e.slice(t,i+1);super._performSort(s);for(let i=0;i<s.length;i++)e[t+i]=s[i]}t=i}}_getItemLevel(e){return e[_PivotKey._ROW_KEY_NAME].level}}export class PivotField{constructor(e,t,i,s){this._isExplicitAggregate=!1;this.propertyChanged=new Event;this._ng=e;this._binding=new PivotFieldBinding(this,t);this._header=i||toHeaderCase(t);this._showAs=ShowAs.NoCalculation;this._isContentHtml=!1;this._visible=!0;this._format="";this._filter=new PivotFilter(this);copy(this,s);null==this._dataType&&this._updateDataTypeByBinding();this._isExplicitAggregate||this._updateAggregateByDataType()}get binding(){return this._binding?this._binding.path:null}set binding(e){if(e!=this.binding){let t=this.binding,i=asString(e);this._binding=i?new PivotFieldBinding(this,i):null;if(null==this._dataType){this._updateDataTypeByBinding();this._isExplicitAggregate||this._updateAggregateByDataType()}let s=new PropertyChangedEventArgs("binding",t,e);this.onPropertyChanged(s)}}get getValue(){return this._getValueFn}set getValue(e){this._getValueFn=asFunction(e,!0)}get getAggregateValue(){return this._getAggValueFn}set getAggregateValue(e){this._getAggValueFn=asFunction(e,!0)}get header(){return this._header}set header(e){e=asString(e,!1);let t=this._ng.fields.getField(e);!e||t&&t!=this?assert(!1,"field headers must be unique and non-empty."):this._setProp("_header",asString(e))}get filter(){return this._filter}get aggregate(){return this._aggregate}set aggregate(e){this._isExplicitAggregate=!0;this._setProp("_aggregate",asEnum(e,Aggregate))}get showAs(){return this._showAs}set showAs(e){this._setProp("_showAs",asEnum(e,ShowAs))}get weightField(){return this._weightField}set weightField(e){this._setProp("_weightField",asType(e,PivotField,!0))}get dataType(){return this._dataType}set dataType(e){this._setProp("_dataType",asEnum(e,DataType))}get isMeasure(){return this._dataType==DataType.Number}get subFields(){return this._subFields}get format(){return this._format}set format(e){this._setProp("_format",asString(e))}get align(){return this._align}set align(e){this._setProp("_align",asString(e))}get width(){return this._width}set width(e){this._setProp("_width",asNumber(e,!0,!0))}get wordWrap(){return this._wordWrap}set wordWrap(e){this._setProp("_wordWrap",asBoolean(e))}get descending(){return!!this._descending}set descending(e){this._setProp("_descending",asBoolean(e))}get isContentHtml(){return this._isContentHtml}set isContentHtml(e){this._setProp("_isContentHtml",asBoolean(e))}get visible(){return this._visible}set visible(e){this._setProp("_visible",asBoolean(e))}get sortComparer(){return this._srtCmp}set sortComparer(e){e!=this.sortComparer&&(this._srtCmp=asFunction(e))}get engine(){return this._ng}get collectionView(){return this.engine?this.engine.collectionView:null}get isActive(){return this._getIsActive()}set isActive(e){this._setIsActive(e)}get parentField(){return this._parent}get key(){return this.header}onPropertyChanged(e){this.propertyChanged.raise(this,e);this._ng._fieldPropertyChanged(this,e)}_updateDataTypeByBinding(){if(this._ng&&this._binding){const e=this._ng.collectionView,t=e?e.items.length:0;for(let i=0;i<t;i++){const t=e.items[i];if(null!=t){this._dataType=getType(this._binding.getValue(t));break}}}}_updateAggregateByDataType(){this._aggregate=this.dataType==DataType.Number?Aggregate.Sum:Aggregate.Cnt}_copy(e,t){if("subFields"==e){this._subFields?this._subFields.splice(0,this._subFields.length):this._subFields=[];t&&t.length&&t.forEach(e=>{let t=this.engine._createField(e,this._autoGenerated);this._subFields.push(t)});return!0}if("filter"==e){this._setFilterProxy(t);return!0}return!1}_getFilterProxy(){let e=this.filter;if(e.conditionFilter.isActive){let t=e.conditionFilter,i={condition1:{operator:t.condition1.operator,value:t.condition1.value},and:t.and,condition2:{operator:t.condition2.operator,value:t.condition2.value}};t.condition1.isActive||delete i.condition1;t.condition2.isActive||delete i.condition2;return i}if(e.valueFilter.isActive){let t=e.valueFilter;return{filterText:t.filterText,showValues:t.showValues}}assert(!1,"inactive filters shouldn't be persisted.");return null}_setFilterProxy(e){let t=this.filter,i=t.conditionFilter,s=t.valueFilter;t.clear();e.conditionFilter?e=e.conditionFilter:e.valueFilter&&(e=e.valueFilter);if(e.condition1){let t=e.condition1,s=changeType(t.value,this.dataType);i.condition1.value=s||t.value;i.condition1.operator=t.operator;let l=e.condition2;if(l){let e=changeType(l.value,this.dataType);i.condition2.value=e||l.value;i.condition2.operator=l.operator}isBoolean(e.and)&&(i.and=e.and)}if(e.showValues){s.filterText=e.filterText;s.showValues=e.showValues}}_getIsActive(){if(this._ng&&!this._hasSubFields()){let e=this._ng._viewLists;for(let t=0;t<e.length;t++)if(e[t].indexOf(this)>-1)return!0}return!1}_setIsActive(e){if(this._ng&&!this._hasSubFields()){let t=this.isActive;if((e=asBoolean(e))!=t)if(e)this.isMeasure?this._ng.valueFields.push(this):this._ng.rowFields.push(this);else{let e=this._ng._viewLists;for(let t=0;t<e.length;t++){let i=e[t];for(let e=0;e<i.length;e++){let t=i[e];if(t==this||t.parentField==this){i.removeAt(e);e--}}}let t=this._ng.fields;for(let e=t.length-1;e>=0;e--){if(t[e].parentField==this){t.removeAt(e);e--}}}}}_hasSubFields(){return null!=this._subFields&&this._subFields.length>0}_clone(){let e=new PivotField(this._ng,this.binding);this._ng._copyProps(e,this,PivotField._props);e._autoGenerated=!0;e._parent=this;let t=this.header.replace(/\d+$/,"");for(let i=2;;i++){let s=t+i.toString();if(null==this._ng.fields.getField(s)){e._header=s;break}}return e}_setProp(e,t,i){let s=this[e];if(t!=s){this[e]=t;let i=new PropertyChangedEventArgs(e.substr(1),s,t);this.onPropertyChanged(i)}}_getName(){return this.header||this.binding}_getValue(e,t){let i=this._binding,s=null;e&&(s=isFunction(this._getValueFn)?this._getValueFn.call(this,e):this._ng.isServer?e[this.key]:i._key?e[i._key]:i.getValue(e));return t&&"string"!=typeof s?Globalize.format(s,this._format):s}_getWeight(e){let t=this._weightField?this._weightField._getValue(e,!1):null;return isNumber(t)?t:null}}PivotField._props=["dataType","format","width","wordWrap","aggregate","showAs","descending","isContentHtml","visible"];export class CubePivotField extends PivotField{constructor(e,t,i,s){super(e,t,i,s);assert(null!=this.dimensionType,"CubePivotField objects must specify the field's dimensionType")}get header(){return this._header}set header(e){this._setProp("_header",asString(e))}get dimensionType(){return this._dimensionType}set dimensionType(e){this._setProp("_dimensionType",asEnum(e,DimensionType,!1))}get isMeasure(){switch(this._dimensionType){case 1:case 2:case 8:return!0}return!1}get key(){return this.binding}_clone(){throw"CubePivotField objects cannot be cloned"}}export var DimensionType;!function(e){e[e.Dimension=0]="Dimension";e[e.Measure=1]="Measure";e[e.Kpi=2]="Kpi";e[e.NameSet=3]="NameSet";e[e.Attribute=4]="Attribute";e[e.Folder=5]="Folder";e[e.Hierarchy=6]="Hierarchy";e[e.Date=7]="Date";e[e.Currency=8]="Currency"}(DimensionType||(DimensionType={}));export class Slicer extends Control{constructor(e,t){super(e,null,isIE()&&!isEdge());this._hdr=null;this._mSel=!1;this._updatingFilter=!1;this._propChanged=!1;this._fldPropChangeBnd=this._fldPropChange.bind(this);let i=this.getTemplate();this.applyTemplate(`${SlicerClsNames.hostElement} ${SlicerClsNames.noCheck} ${ControlClsNames.hostElement} ${ControlClsNames.content}`,i,{_root:"root",_divHdr:"div-hdr",_divHdrText:"div-hdr-text",_btnMSel:"btn-msel",_btnClear:"btn-clear"});let s=culture.olap.Slicer;this._tt=new Tooltip;setAttribute(this._btnMSel,"aria-label",s.multiSelect);setAttribute(this._btnClear,"aria-label",s.clearFilter);this._tt.setTooltip(this._btnMSel,s.multiSelect);this._tt.setTooltip(this._btnClear,s.clearFilter);this.addEventListener(this._btnClear,"click",e=>{this._clear()});this.addEventListener(this._btnMSel,"click",e=>{this.multiSelect=!this.multiSelect});this.initialize(t)}static get controlTemplate(){Slicer._ctrlTemplate||(Slicer._ctrlTemplate='<div wj-part="root">'+`<div wj-part="div-hdr" class="${SlicerClsNames.header}">`+'<div wj-part="div-hdr-text"></div>'+`<button wj-part="btn-msel" class="${InputFormElementsClsNames.btn} btn-msel" tabindex="-1">`+`<span class=${GlyphClsNames.glyph}>&#8801;</span>`+"</button>"+`<button wj-part="btn-clear" class="${InputFormElementsClsNames.btn} btn-clear" tabindex="-1">`+`<span class=${GlyphClsNames.glyph}>&times;</span>`+"</button></div></div>");return Slicer._ctrlTemplate}static set controlTemplate(e){Slicer._ctrlTemplate=e}get field(){return this._fld}set field(e){if(e!=this._fld){if(this._divListBox){removeChild(this._divListBox);this._divListBox=null;this._lbx.dispose();this._lbx=null}if(this._edt){this._clear();this._edt.dispose()}let t=this._fld;if(t){t.filter.filterType=this._originalFilterType;t.filter.valueFilter.uniqueValues=this._uniqueValues;t.propertyChanged.removeHandler(this._fldPropChangeBnd)}if(t=this._fld=asType(e,PivotField,!0)){this._originalFilterType=t.filter.filterType;t.filter.filterType=FilterType.Value;let e=t.engine;this._uniqueValues=t.filter.valueFilter.uniqueValues;if(e.isServer&&!this._uniqueValues){let i=e._getUniqueValues(t);t.filter.valueFilter.uniqueValues=i}t.propertyChanged.addHandler(this._fldPropChangeBnd);t.isActive||t.engine.filterFields.push(t);let i=document.createElement("div");this._edt=new ValueFilterEditor(i,t.filter.valueFilter)}if(this._edt){this._divListBox=this._edt.hostElement.querySelector(`.${ListBoxClsNames.hostElement}`);this._root.appendChild(this._divListBox);this._lbx=Control.getControl(this._divListBox);this._lbx.checkedItemsChanged.addHandler((e,i)=>{if(!this._propChanged){let e=this._lbx.selectedItem;if(!this.multiSelect&&e){this._mSel=!0;this._lbx.checkedItems=[e];this._mSel=!1}}if(this._edt&&t){this._updateFilter();t.engine.invalidate()}})}this._updateHeader();isIE()&&!isEdge()&&this.refresh()}}get header(){return this._hdr}set header(e){if(e!=this._hdr){this._hdr=asString(e);this._updateHeader()}}get showHeader(){return"none"!=this._divHdr.style.display}set showHeader(e){this._divHdr.style.display=asBoolean(e)?"":"none"}get showCheckboxes(){return!hasClass(this.hostElement,SlicerClsNames.noCheck)}set showCheckboxes(e){toggleClass(this.hostElement,SlicerClsNames.noCheck,!asBoolean(e))}get multiSelect(){return this._mSel}set multiSelect(e){this._mSel=asBoolean(e);toggleClass(this._btnMSel,ControlStateClsNames.active,this._mSel)}refresh(e=!0){isIE()&&!isEdge()&&this.hostElement&&(this._setCssTimer=setTimeout(()=>{setCss(this._lbx.hostElement,{height:this.hostElement.clientHeight-this._divHdr.offsetHeight})}));super.refresh(e)}_fldPropChange(e,t){this._propChanged=!0;switch(t.propertyName){case"header":this._updateHeader();break;case"format":case"binding":e.filter.clear();this._edt.updateEditor();break;case"filter":this._updatingFilter||this._edt.updateEditor()}this._propChanged=!1}_updateHeader(){let e=this._hdr;e||null==this._fld||(e=this._fld.header);this._divHdrText.textContent=e}_clear(){if(this._edt){this._edt.clearEditor(!1);this._updateFilter();this._fld.engine.invalidate()}}_updateFilter(){this._updatingFilter=!0;this._edt.updateFilter();this._updatingFilter=!1}dispose(){if(this._tt){this._tt.dispose();this._tt=null}if(this._edt){this._edt.dispose();this._edt=null}if(this._lbx){this._lbx.dispose();this._lbx=null}if(this._setCssTimer){clearTimeout(this._setCssTimer);this._setCssTimer=null}this._fld&&this._fld.propertyChanged.removeHandler(this._fldPropChangeBnd);super.dispose()}}Slicer._ctrlTemplate="";export class _GridContextMenu extends Menu{constructor(){super(document.createElement("div"),{header:"PivotGrid Context Menu",displayMemberPath:"text",commandParameterPath:"parm",command:{executeCommand:e=>{this._execute(e)},canExecuteCommand:e=>this._canExecute(e)}});this.itemsSource=this._getMenuItems();addClass(this.dropDown,`context-menu ${_GridContextMenuClsNames.hostElement}`)}static get controlTemplate(){_GridContextMenu._ctrlTemplate||(_GridContextMenu._ctrlTemplate=Menu.controlTemplate);return _GridContextMenu._ctrlTemplate}static set controlTemplate(e){_GridContextMenu._ctrlTemplate=e}refresh(e=!0){this.itemsSource=this._getMenuItems();super.refresh(e)}attach(e){assert(e instanceof PivotGrid,"Expecting a PivotGrid control...");let t=e.hostElement;this._gridOwner=t;this._contextMenuHandler=i=>{if(e.customContextMenu){i.preventDefault();this.owner=t;if(this._selectField(i)){let e=this.dropDown;this.selectedIndex=-1;if(this.onIsDroppedDownChanging(new CancelEventArgs)){showPopup(e,i);this.onIsDroppedDownChanged();e.focus()}}}};this._gridOwner.addEventListener("contextmenu",this._contextMenuHandler)}_selectField(e){this._targetField=null;this._htDown=null;let t=Control.getControl(this.owner),i=t.engine,s=i.valueFields,l=i.columnFields,n=t.hitTest(e),r=CellType;switch(n.cellType){case r.Cell:t.select(n.range);this._targetField=s[n.col%s.length];this._htDown=n;break;case r.ColumnHeader:this._targetField=n.row<l.length?l[n.row]:s[n.col%s.length];break;case r.RowHeader:this._targetField=t._colRowFields.get(n.getColumn());break;case r.TopLeft:n.row==n.panel.rows.length-1&&(this._targetField=t._colRowFields.get(n.getColumn()))}return null!=this._targetField}_getMenuItems(){let e=[{text:'<div class="menu-icon menu-icon-remove">&#10006;</div>Remove Field',parm:"remove"},{text:'<div class="menu-icon">&#9965;</div>Field Settings...',parm:"edit"},{text:`<div class="${UtilitesClsNames.separator}"></div>`},{text:'<div class="menu-icon">&#8981;</div>Show Detail...',parm:"detail"}];for(let t=0;t<e.length;t++){let i=e[t];if(i.parm){let e=culture.olap._ListContextMenu[i.parm];assert(e,"missing localized text for item "+i.parm);i.text=i.text.replace(/([^>]+$)/,e)}}return e}_execute(e){let t=this._targetField,i=Control.getControl(this.owner),s=i?i.engine:null,l=this._htDown;switch(e){case"remove":s.removeField(t);break;case"edit":s.editField(t);break;case"detail":i.showDetail(l.row,l.col)}}_canExecute(e){let t=this._targetField,i=Control.getControl(this.owner),s=i?i.engine:null,l=this._htDown;if(null==t||null==s)return!1;switch(e){case"remove":return!0;case"edit":return s.allowFieldEditing;case"detail":return null!=l&&!(t instanceof CubePivotField)&&s.valueFields.length>0}return!0}dispose(){if(this._gridOwner){this._gridOwner.removeEventListener("contextmenu",this._contextMenuHandler);this._contextMenuHandler=null;this._gridOwner=null}this._targetField=null;this._htDown=null;this.command=null;this.itemsSource=null;super.dispose()}}_GridContextMenu._ctrlTemplate="";export class PivotFieldCollection extends ObservableArray{constructor(e){super();this._ng=e}get maxItems(){return this._maxItems}set maxItems(e){this._maxItems=asInt(e,!0,!0)}get engine(){return this._ng}getField(e){return this._getField(this,e)}_getField(e,t){for(let i=0;i<e.length;i++){let s=e[i];if(s.key==t)return s;if(s._hasSubFields()&&(s=this._getField(s.subFields,t)))return s}return null}push(...e){let t=this._ng;for(let i=0;e&&i<e.length;i++){let s=e[i];isString(s)&&(s=this==t.fields?new PivotField(t,s):t.fields.getField(s));assert(s instanceof PivotField,"This collection must contain PivotField objects only.");if(s.key&&this.getField(s.key)){assert(!1,"PivotField keys must be unique.");return-1}if(null!=this._maxItems&&this.length>=this._maxItems)break;super.push(s)}return this.length}}export class _PivotNode{constructor(e,t,i,s,l,n){this._key=new _PivotKey(e,t,i,s,l);this._nodes={};this._parent=n}getNode(e,t,i,s,l){let n=this;for(let r=0;r<t;r++){let t=e[r]._getValue(l,!0),a=n._nodes[t];if(!a){a=new _PivotNode(e,r+1,i,s,l,n);n._nodes[t]=a}n=a}if(i&&s>-1){let r=i[s].header,a=n._nodes[r];if(!a){a=new _PivotNode(e,t,i,s,l,n);n._nodes[r]=a}n=a}return n}get key(){return this._key}get parent(){return this._parent}get tree(){this._tree||(this._tree=new _PivotNode(null,0,null,-1,null));return this._tree}}export class _ServerConnection{constructor(e,t){this._ng=asType(e,PivotEngine);assert(this._isValidUrl(t),"Invalid service Url: "+t+")")}getFields(){let e=null;httpRequest(this._getUrl("Fields"),{async:!1,success:t=>{e=JSON.parse(t.responseText);isArray(e)||console.error("Failed to get fields from server: "+t.responseText)},error:e=>{this._handleError("Getting Fields",e)}});return e}getUniqueValues(e){let t=null;httpRequest(this._getUrl("UniqueValues",null,e.header),{method:"POST",async:!1,data:{view:this._ng.viewDefinition},success:e=>{t=JSON.parse(e.responseText);isArray(t)||console.error("Failed to get unique field values from server: "+e.responseText)},error:e=>{this._handleError("Getting Unique Field Values",e)}});return t}getOutputView(e){this.clearPendingRequests();this._sendHttpRequest("Analyses",{method:"POST",data:{view:this._ng.viewDefinition},success:t=>{let i=JSON.parse(t.responseText);this._token=i.token;this._start=Date.now();this._handleResult(i.status,e)},error:e=>{this._handleError("Analyses",e)}})}getDetail(e,t){let i,s=[],l=this._ng.rowFields.length,n=e?e.values.length:0;for(let t=0;t<l;t++)t<n?s.push(_ServerConnection._getRequestedValue(e.values[t])):s.push(null);l=this._ng.columnFields.length;n=t?t.values.length:0;for(let e=0;e<l;e++)e<n?s.push(_ServerConnection._getRequestedValue(t.values[e])):s.push(null);i=new ObservableArray;this._loadArray("Detail",i,{method:"POST",view:this._ng.viewDefinition,keys:s,max:this._ng.serverMaxDetail});return i}getSortedKeys(e,t){let i=Object.keys(e);if(this._ng.sortOnServer){if(i.length>1){let e={},s=[],l=[];i.forEach(i=>{this._insertKey(e,i,t)});this._reorderKeys(e,null,null,s,t);if(!t&&this._ng.valueFields.length>1){let e=s.length/this._ng.valueFields.length,t=s.length/e;for(let i=0;i<e;i++)for(let n=0;n<t;n++)l.push(s[i+n*e]);return l}return s}}else i.sort((e,t)=>this._ng._keys[e].compareTo(this._ng._keys[t]));return i}static _getRequestedValue(e){if(isDate(e)){let t=e;return new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()))}return e}clearPendingRequests(){this._clearRequest();this._clearTimeout();this._clearToken()}updateTallies(e){let t=this._ng,i=t.rowFields.length,s=t.columnFields.length,l=t.valueFields.length,n=new _PivotNode(t.rowFields,0,null,-1,null);e.forEach((e,r,a)=>{let o=this._getAggregatedFieldCount(e,t.rowFields),h=n.getNode(t.rowFields,i-o,null,-1,e),d=h.key,u=d.toString(null),_=t._tallies[u];if(!_){t._keys[u]=d;t._tallies[u]=_={}}o=this._getAggregatedFieldCount(e,t.columnFields);for(let i=0;i<l;i++){let l=h.tree.getNode(t.columnFields,s-o,t.valueFields,i,e).key,n=l.toString(),r=t.valueFields[i],a=_[n];if(!a){t._keys[n]=l;(a=_[n]=new _ServerTally).add(this._getFieldValue(r,e,!1))}}})}_getFieldValue(e,t,i){let s=t[e.key];return i&&"string"!=typeof s?Globalize.format(s,e.format):s}_getKeyLength(e,t){return e.split(";").length-(t?1:2)}_insertKey(e,t,i){let s=t.split(";");i||s.pop();if(1==s.length)e[s.pop()]={};else{let t=s.pop(),i=e[t];i||(e[t]=i={});for(;s.length>0;){let e=s.shift();i[e]||(i[e]={});i=i[e]}}}_joinKeys(e,t,i){return t&&i?[t,e,i].join(";"):i?[e,i].join(";"):e}_reorderKeys(e,t,i,s,l){Object.keys(e).forEach(n=>{let r=this._joinKeys(n,t,i),a=l?this._ng.showRowTotals:this._ng.showColumnTotals,o=Object.keys(e[n]).length,h=!t&&!i&&a!==ShowTotals.None||!t&&!o||t||a===ShowTotals.Subtotals;l||(r+=";");this._ng.totalsBeforeData&&h&&s.push(r);i?t?this._reorderKeys(e[n],[t,n].join(";"),i,s,l):this._reorderKeys(e[n],n,i,s,l):this._reorderKeys(e[n],null,n,s,l);!this._ng.totalsBeforeData&&h&&s.push(r)})}_getParentKey(e,t){let i=e.split(";");t?i.splice(i.length-2,1):i.splice(0,i.length-2);return i.join(";")}_getAggregatedFieldCount(e,t){let i=t.length,s=0;for(let l=0;l<i;l++){let i=t[l];null==this._getFieldValue(i,e,!1)&&s++}return s}_loadArray(e,t,i){i||(i={});null==i.skip&&(i.skip=0);null==i.top&&(i.top=100);let s=isNumber(i.max)?i.max:1e6;this._request=httpRequest(this._getUrl(e),{data:i,method:i.method||"GET",success:l=>{let n=JSON.parse(l.responseText);t.deferUpdate(()=>{n.value.forEach(e=>{t.push(e)})});if(n.value.length==i.top&&t.length<s){i.skip+=i.top;this._loadArray(e,t,i)}},error:t=>{this._handleError(e,t)}})}_getUrl(e,t=this._token,i){let s=this._ng.itemsSource.toString(),l=s.lastIndexOf("/");s.substr(0,l);switch(e=e.toLowerCase()){case"rawdata":case"detail":return s;case"fields":case"analyses":return s+"/"+e;case"clear":return s+"/analyses/"+t+"/";case"result":case"status":return s+"/analyses/"+t+"/"+e;case"uniquevalues":return s+"/fields/"+i+"/"+e}assert(!1,"Unrecognized command")}_isValidUrl(e){let t=document.createElement("a");t.href=asString(e);t.href=t.href;return t.protocol&&t.hostname&&t.pathname&&"/"!=e[e.length-1]}_handleResult(e,t){switch(e.executingStatus.toLowerCase()){case"executing":case"notset":if(Date.now()-this._start>this._ng.serverTimeout){this._handleError("Analyses",{status:500,statusText:"Analysis timed out"});return}this._progress=e.progress;this._ng.onUpdatingView(new ProgressEventArgs(this._progress));this._clearTimeout();this._toGetStatus=setTimeout(()=>{this._waitUntilComplete(t)},this._ng.serverPollInterval);break;case"completed":this._progress=100;this._ng.onUpdatingView(new ProgressEventArgs(this._progress));this._getResults(t);break;case"exception":this._getResults(t);break;default:this._handleError("Analyses",{status:500,statusText:"Unexpected result..."})}}_waitUntilComplete(e){this._sendHttpRequest("Status",{success:t=>{let i=JSON.parse(t.responseText);this._handleResult(i,e)},error:e=>{this._handleError("Status",e)}})}_getResults(e){this._sendHttpRequest("Result",{success:t=>{this._clearToken();let i=JSON.parse(t.responseText);assert(isArray(i),"Result array Expected.");let s=[];this._ng._viewLists.forEach(e=>{s=s.concat(e.filter(e=>e.dataType==DataType.Date))});s.length>0&&i.forEach(e=>{s.forEach(t=>{let i=t._binding,s=i.getValue(e);isString(s)&&i.setValue(e,new Date(s))})});asFunction(e)(i)},error:e=>{this._handleError("Result",e)}})}_handleError(e,t){this.clearPendingRequests();e='** HttpRequest error on command "'+e+'"';this._ng.onError(new RequestErrorEventArgs(t,e))&&this._throwResponseError(e,t)}_sendHttpRequest(e,t){let i=this._getUrl(e);this._request=httpRequest(i,t)}_throwResponseError(e,t){e=e+"\r\n"+t.status+"\r\n";let i=t.responseText||"";if(500==t.status&&t.responseText){i=JSON.parse(t.responseText).ExceptionMessage}throw e+=i||t.statusText}_clearToken(){if(this._token){this._clearRequest();this._clearTimeout();this._sendHttpRequest("Clear",{method:"DELETE"});this._token=null}}_clearRequest(){if(this._request&&4!=this._request.readyState){this._request.abort();this._request=null}}_clearTimeout(){if(this._toGetStatus){clearTimeout(this._toGetStatus);this._toGetStatus=null}}}_ServerConnection._TIMEOUT=6e4;_ServerConnection._POLL_INTERVAL=500;_ServerConnection._MAXDETAIL=1e3;class _ServerTally extends _Tally{add(e,t){assert(0==this._cnt,"Server tallies have a single value.");this._aggregatedValue=e}getAggregate(e){return this._aggregatedValue}}_addCultureInfo("olap",{PivotEngine:{grandTotal:"Grand Total",subTotal:"Subtotal"},PivotPanel:{fields:"Choose fields to add to report:",drag:"Drag fields between areas below:",filters:"Filters",cols:"Columns",rows:"Rows",vals:"Values",defer:"Defer Updates",update:"Update"},PivotFieldEditor:{dialogHeader:"Field settings:",header:"Header:",summary:"Summary:",showAs:"Show As:",weighBy:"Weigh by:",sort:"Sort:",filter:"Filter:",format:"Format:",sample:"Sample:",edit:"Edit...",clear:"Clear",ok:"OK",cancel:"Cancel",none:"(none)",sorts:{asc:"Ascending",desc:"Descending"},aggs:{sum:"Sum",cnt:"Count",avg:"Average",max:"Max",min:"Min",rng:"Range",std:"StdDev",var:"Var",stdp:"StdDevPop",varp:"VarPop",first:"First",last:"Last"},calcs:{noCalc:"No calculation",dRow:"Difference from previous row",dRowPct:"% Difference from previous row",dCol:"Difference from previous column",dColPct:"% Difference from previous column",dPctGrand:"% of grand total",dPctRow:"% of row total",dPrevRow:"% of value in the previous row",dPctCol:"% of column total",dPrevCol:"% of value in the previous column",dRunTot:"Running total",dRunTotPct:"% running total"},formats:{n0:"Integer (n0)",n2:"Float (n2)",c:"Currency (c)",p0:"Percentage (p0)",p2:"Percentage (p2)",n2c:"Thousands (n2,)",n2cc:"Millions (n2,,)",n2ccc:"Billions (n2,,,)",d:"Date (d)",MMMMddyyyy:"Month Day Year (MMMM dd, yyyy)",dMyy:"Day Month Year (d/M/yy)",ddMyy:"Day Month Year (dd/M/yy)",dMyyyy:"Day Month Year (dd/M/yyyy)",MMMyyyy:"Month Year (MMM yyyy)",MMMMyyyy:"Month Year (MMMM yyyy)",yyyy:"Year (yyyy)",yyyyQq:'Year Quarter (yyyy "Q"q)',FYEEEEQU:'Fiscal Year Quarter ("FY"EEEE "Q"U)'}},_ListContextMenu:{up:"Move Up",down:"Move Down",first:"Move to Beginning",last:"Move to End",filter:"Move to Report Filter",rows:"Move to Row Labels",cols:"Move to Column Labels",vals:"Move to Values",remove:"Remove Field",edit:"Field Settings...",detail:"Show Detail..."},DetailDialog:{header:"Detail View:",ok:"OK",items:"{cnt:n0} items",item:"{cnt} item",row:"Row",col:"Column"},PivotChart:{by:"by",and:"and"},Slicer:{multiSelect:"Multi-Select",clearFilter:"Clear Filter"}});export var ShowTotals;!function(e){e[e.None=0]="None";e[e.GrandTotals=1]="GrandTotals";e[e.Subtotals=2]="Subtotals"}(ShowTotals||(ShowTotals={}));export var ShowAs;!function(e){e[e.NoCalculation=0]="NoCalculation";e[e.DiffRow=1]="DiffRow";e[e.DiffRowPct=2]="DiffRowPct";e[e.DiffCol=3]="DiffCol";e[e.DiffColPct=4]="DiffColPct";e[e.PctGrand=5]="PctGrand";e[e.PctRow=6]="PctRow";e[e.PctCol=7]="PctCol";e[e.RunTot=8]="RunTot";e[e.RunTotPct=9]="RunTotPct";e[e.PctPrevRow=10]="PctPrevRow";e[e.PctPrevCol=11]="PctPrevCol"}(ShowAs||(ShowAs={}));export class PivotEngine{constructor(e){this._autoGenFields=!0;this._allowFieldEditing=!0;this._showRowTotals=ShowTotals.GrandTotals;this._showColTotals=ShowTotals.GrandTotals;this._totalsBefore=!1;this._sortableGroups=!0;this._showZeros=!1;this._updating=0;this._xValueSearch=!0;this._async=!0;this._sortOnServer=!1;this._cntTotal=0;this._cntFiltered=0;this._serverParms={timeout:_ServerConnection._TIMEOUT,pollInterval:_ServerConnection._POLL_INTERVAL,maxDetail:_ServerConnection._MAXDETAIL};this.itemsSourceChanged=new Event;this.viewDefinitionChanged=new Event;this.updatingView=new Event;this.updatedView=new Event;this.error=new Event;this._isUpdatingChanged=new Event;this._hasDeferredUpdatesChanged=new Event;this._pivotView=new PivotCollectionView(this);this._fields=new PivotFieldCollection(this);this._rowFields=new PivotFieldCollection(this);this._columnFields=new PivotFieldCollection(this);this._valueFields=new PivotFieldCollection(this);this._filterFields=new PivotFieldCollection(this);this._viewLists=[this._rowFields,this._columnFields,this._valueFields,this._filterFields];let t=this._fieldListChanged.bind(this);this._fields.collectionChanged.addHandler(t);this._viewLists.forEach(e=>{e.collectionChanged.addHandler(t)});this._defaultFilterType=null;copy(this,e)}get itemsSource(){return this._items}set itemsSource(e){if(this._items!=e){if(this._cv){this._cv.collectionChanged.removeHandler(this._cvCollectionChanged,this);this._cv=null}if(this._server){this._server.clearPendingRequests();this._server=null}this._items=e;isString(e)?this._server=new _ServerConnection(this,e):isObject(e)&&!tryCast(e,"ICollectionView")?this._server=new _SqlServerConnection(this,e):this._cv=asCollectionView(e);null!=this._cv&&this._cv.collectionChanged.addHandler(this._cvCollectionChanged,this);this.deferUpdate(()=>{this.autoGenerateFields&&this._generateFields();this._updateFieldTypes()});this.onItemsSourceChanged()}}get isServer(){return null!=this._server}get collectionView(){return this._cv}get pivotView(){return this._pivotView}get showRowTotals(){return this._showRowTotals}set showRowTotals(e){if((e=asEnum(e,ShowTotals))!=this.showRowTotals){this._showRowTotals=e;this.onViewDefinitionChanged();this.invalidate()}}get showColumnTotals(){return this._showColTotals}set showColumnTotals(e){if((e=asEnum(e,ShowTotals))!=this.showColumnTotals){this._showColTotals=e;this.onViewDefinitionChanged();this.invalidate()}}get totalsBeforeData(){return this._totalsBefore}set totalsBeforeData(e){if(e!=this._totalsBefore){this._totalsBefore=asBoolean(e);this.onViewDefinitionChanged();this._updatePivotView()}}get sortableGroups(){return this._sortableGroups}set sortableGroups(e){if(e!=this._sortableGroups){this._sortableGroups=asBoolean(e);this.onViewDefinitionChanged()}}get sortOnServer(){return this._sortOnServer}set sortOnServer(e){this._sortOnServer=asBoolean(e)}get showZeros(){return this._showZeros}set showZeros(e){if(e!=this._showZeros){this._showZeros=asBoolean(e);this.onViewDefinitionChanged();this._updatePivotView()}}get defaultFilterType(){return null!=this._defaultFilterType?this._defaultFilterType:this._server?FilterType.Condition:FilterType.Both}set defaultFilterType(e){this._defaultFilterType=asEnum(e,FilterType,!0)}get exclusiveValueSearch(){return this._xValueSearch}set exclusiveValueSearch(e){this._xValueSearch=asBoolean(e)}get autoGenerateFields(){return this._autoGenFields}set autoGenerateFields(e){this._autoGenFields=asBoolean(e)}get allowFieldEditing(){return this._allowFieldEditing}set allowFieldEditing(e){this._allowFieldEditing=asBoolean(e)}get fields(){return this._fields}get rowFields(){return this._rowFields}get columnFields(){return this._columnFields}get filterFields(){return this._filterFields}get valueFields(){return this._valueFields}get viewDefinition(){let e={showZeros:this.showZeros,showColumnTotals:this.showColumnTotals,showRowTotals:this.showRowTotals,defaultFilterType:this.defaultFilterType,totalsBeforeData:this.totalsBeforeData,sortableGroups:this.sortableGroups,fields:[],rowFields:this._getFieldCollectionProxy(this.rowFields),columnFields:this._getFieldCollectionProxy(this.columnFields),filterFields:this._getFieldCollectionProxy(this.filterFields),valueFields:this._getFieldCollectionProxy(this.valueFields)};this.fields.forEach(t=>{let i=this._getFieldDefinition(t);e.fields.push(i)});return JSON.stringify(e)}set viewDefinition(e){let t=JSON.parse(e);t&&this.deferUpdate(()=>{this._copyProps(this,t,PivotEngine._props);this.fields.clear();t.fields.forEach(e=>{let t=this._getFieldFromDefinition(e);this.fields.push(t)});t.fields.forEach((e,t)=>{isString(e.weightField)&&(this.fields[t].weightField=this.fields.getField(e.weightField))});this._setFieldCollectionProxy(this.rowFields,t.rowFields);this._setFieldCollectionProxy(this.columnFields,t.columnFields);this._setFieldCollectionProxy(this.filterFields,t.filterFields);this._setFieldCollectionProxy(this.valueFields,t.valueFields)})}get isViewDefined(){let e=this._valueFields.length,t=this._rowFields.length,i=this._columnFields.length;return this._server?e>0&&(t>0||i>0):e>0||t>0||i>0}beginUpdate(){this.cancelPendingUpdates();this._updating++;1===this._updating&&this._onIsUpdatingChanged()}endUpdate(){this._updating--;if(this._updating<=0){if(this._viewDefinitionChanged){this._viewDefinitionChanged=!1;this.onViewDefinitionChanged();this._setHasDeferredUpdates(!1)}this._onIsUpdatingChanged();this.refresh()}}get isUpdating(){return this._updating>0}get hasDeferredUpdates(){return this._hasDeferredUpdates}_setHasDeferredUpdates(e){if(this._hasDeferredUpdates!==e){this._hasDeferredUpdates=e;this._onHasDeferredUpdatesChanged()}}deferUpdate(e){try{this.beginUpdate();e()}finally{this.endUpdate()}}refresh(e=!1){this._updateView(e)}invalidate(){this._toInv&&(this._toInv=clearTimeout(this._toInv));this.isUpdating||this.isDisposed||(this._toInv=setTimeout(()=>{this.refresh()},Control._REFRESH_INTERVAL))}get async(){return this._async}set async(e){if(e!=this._async){this.cancelPendingUpdates();this._async=asBoolean(e)}}get serverTimeout(){return this._serverParms.timeout}set serverTimeout(e){this._serverParms.timeout=asNumber(e,!1,!0)}get serverPollInterval(){return this._serverParms.pollInterval}set serverPollInterval(e){this._serverParms.pollInterval=asNumber(e,!1,!0)}get serverMaxDetail(){return this._serverParms.maxDetail}set serverMaxDetail(e){this._serverParms.maxDetail=asNumber(e,!1,!0)}cancelPendingUpdates(){if(this._toUpdateTallies){clearTimeout(this._toUpdateTallies);this._toUpdateTallies=null}}getDetail(e,t){let i=e?e[_PivotKey._ROW_KEY_NAME]:null,s=this._getKey(t);if(this._server)return this._server.getDetail(i,s);let l=this.collectionView.items,n=[];l.forEach(e=>{!this._applyFilter(e)||null!=i&&!i.matchesItem(e)||null!=s&&!s.matchesItem(e)||n.push(e)});return n}getDetailView(e,t){let i=this.getDetail(e,t);return new CollectionView(i)}getKeys(e,t){let i=e?e[_PivotKey._ROW_KEY_NAME]:null,s=this._getKey(t);return{rowKey:{fields:i?i.fieldNames:[],values:i?i.values:[]},colKey:{fields:s?s.fieldNames:[],values:s?s.values:[]}}}editField(e){if(this.allowFieldEditing){this.edt=new PivotFieldEditor(document.createElement("div"),{field:e});this._dlg=new Popup(document.createElement("div"),{content:this.edt.hostElement});this._dlg.show(!0)}}removeField(e){for(let t=0;t<this._viewLists.length;t++){let i=this._viewLists[t],s=i.indexOf(e);if(s>-1){i.removeAt(s);return}}}onItemsSourceChanged(e){this.itemsSourceChanged.raise(this,e)}onViewDefinitionChanged(e){if(this._updating<=0){this.viewDefinitionChanged.raise(this,e);this._viewDefinitionChanged=!1;this._setHasDeferredUpdates(!1)}else{this._viewDefinitionChanged=!0;this._setHasDeferredUpdates(!0)}}onUpdatingView(e){this.updatingView.raise(this,e)}onUpdatedView(e){this.updatedView.raise(this,e)}onError(e){this.error.raise(this,e);return!e.cancel}_onIsUpdatingChanged(e){this._isUpdatingChanged.raise(this,e)}_onHasDeferredUpdatesChanged(e){this._hasDeferredUpdatesChanged.raise(this,e)}_copy(e,t){let i;switch(e){case"fields":this.fields.clear();this._viewLists.forEach(e=>{e.clear()});(i=asArray(t)).forEach(e=>{let t=this._createField(e,!1);this.fields.push(t)});this._updateFieldTypes();return!0;case"rowFields":case"columnFields":case"valueFields":case"filterFields":this[e].clear();if(!isArray(t)){this[e].maxItems=t.maxItems;t=t.items}(i=asArray(t)).forEach(t=>{let i=this.fields.getField(t);this[e].push(i)});return!0}return!1}_getKey(e){return this._keys[e]}_getRowKey(e){let t=e;if(isNumber(e)){let i=this._pivotView;t=(i.items.length?i.items:i.sourceCollection)[e]}return t?t[_PivotKey._ROW_KEY_NAME]:null}_getRowLevel(e){let t=this._getRowKey(e);return t?t.level:-1}_getColKey(e){isNumber(e)&&(e=this._colBindings[e]);if(isString(e))return this._getKey(e);assert(null==e||e instanceof _PivotKey,"invalid parameter in call to _getColLevel");return e}_getColLevel(e){return(e=this._getColKey(e))?e.level:-1}_getFieldByColKey(e){const t=this._getColKey(e);return t&&t.valueField}_applyFilter(e){let t=this._activeFilterFields;for(let i=0;i<t.length;i++){if(!t[i].filter.apply(e))return!1}return!0}_updateView(e=!1){if(!this.isUpdating||e){this.cancelPendingUpdates();this._cntTotal=this._cntFiltered=0;this._tallies={};this._keys={};this._activeFilterFields=[];if(this._server&&this.isViewDefined){this._server.getOutputView(t=>{if(this.isViewDefined){this._server.updateTallies(t);this._updatePivotView(e)}});return}this._viewLists.forEach(e=>{e.forEach(e=>{e.filter.isActive&&this._activeFilterFields.push(e)})});if(this.isViewDefined&&hasItems(this._cv)){this._batchStart=Date.now();this._updateTallies(this._cv.items,0,e)}else this._updatePivotView(e);this._setHasDeferredUpdates(!1)}}_updateTallies(e,t,i=!1){let s=e.length,l=new _PivotNode(this._rowFields,0,null,-1,null),n=this.valueFields;0==n.length&&this.columnFields.length>0&&(n=new PivotFieldCollection(this)).push(new PivotField(this,"","",{aggregate:Aggregate.Sum}));let r=ShowTotals,a=this._rowFields.length,o=this._getShowRowTotals(),h=o==r.None?a:0,d=o==r.GrandTotals?Math.max(1,a):1,u=this._columnFields.length,_=this._getShowColTotals(),g=_==r.None?u:0,c=_==r.GrandTotals?Math.max(1,u):1,p=n.length;for(let r=t;r<s;r++){if(this._async&&r-t>=PivotEngine._BATCH_SIZE&&Date.now()-this._batchStart>PivotEngine._BATCH_DELAY){this._toUpdateTallies=setTimeout(()=>{this.onUpdatingView(new ProgressEventArgs(Math.round(r/e.length*100)));this._batchStart=Date.now();this._updateTallies(e,r,i)},PivotEngine._BATCH_TIMEOUT);return}this._cntTotal++;let s=e[r];if(!this._activeFilterFields.length||this._applyFilter(s)){this._cntFiltered++;for(let e=h;e<=a;e+=d){let t=l.getNode(this._rowFields,e,null,-1,s),i=t.key,r=i.toString(),a=this._tallies[r];if(!a){this._keys[r]=i;this._tallies[r]=a={}}for(let e=g;e<=u;e+=c)for(let i=0;i<p;i++){let l=t.tree.getNode(this._columnFields,e,n,i,s).key,r=l.toString(),o=a[r];if(!o){this._keys[r]=l;o=a[r]=new _Tally}let h=n[i],d=h._getValue(s,!1),u=h.weightField?h._getWeight(s):null;o.add(d,u)}}}}this._toUpdateTallies=null;this._updatePivotView(i)}_updatePivotView(e=!1){if(!this.isUpdating||e){let e=this._pivotView;e.deferUpdate(()=>{this.onUpdatingView(new ProgressEventArgs(100));e.cancelEdit();e.cancelNew();let t=e.sourceCollection;t.length=0;let i={};for(let e in this._tallies)i[e]=!0;let s={};for(let e in this._tallies){let t=this._tallies[e];for(let e in t)s[e]=!0}let l=[],n=[];if(this._server)l=this._server.getSortedKeys(i,!0),n=this._server.getSortedKeys(s,!1);else{l=this._getSortedKeys(i);n=this._getSortedKeys(s)}for(let e=0;e<l.length;e++){let i=l[e],s=this._tallies[i],r={};r[_PivotKey._ROW_KEY_NAME]=this._getKey(i);for(let e=0;e<n.length;e++){let t=n[e],i=s[t],l=this._getKey(t),a=i?i.getAggregate(l.aggregate):null;null==a&&this._showZeros&&(a=0);r[t]=a}t.push(r)}this._colBindings=n;this._updateFieldValues(t);e.sortDescriptions.clear();e.refresh()});this.onUpdatedView()}}_getSortedKeys(e){let t=Object.keys(e);t.sort((e,t)=>this._keys[e].compareTo(this._keys[t]));return t}_updateFieldValues(e){let t=this.valueFields.length;for(let i=0;i<t;i++){let s=this.valueFields[i];if(isFunction(s.getAggregateValue))for(let l=i;l<this._colBindings.length;l+=t)for(let t=0;t<e.length;t++){let i=e[t],n=this._colBindings[l],r=this._getAggregateObject(i,n);i[n]=s.getAggregateValue.call(this,r)}}for(let i=0;i<t;i++){let s=this.valueFields[i];switch(s.showAs){case ShowAs.RunTot:case ShowAs.RunTotPct:for(let l=i;l<this._colBindings.length;l+=t){for(let t=0;t<e.length;t++){e[t][this._colBindings[l]]=this._getRunningTotal(e,t,l)}if(s.showAs==ShowAs.RunTotPct)for(let t=0;t<e.length;t++){let i=e[t],s=this._colBindings[l],n=i[s];if(isNumber(n)){let r=this._getLastValueInRowGroup(e,t,l);0!=r&&(i[s]=n/r)}}}break;case ShowAs.PctGrand:case ShowAs.PctCol:let l=0;if(s.showAs==ShowAs.PctGrand)for(let s=i;s<this._colBindings.length;s+=t)-1==this._getColLevel(s)&&(l+=this._getColTotal(e,s));for(let n=i;n<this._colBindings.length;n+=t){s.showAs==ShowAs.PctCol&&(l=this._getColTotal(e,n));let t=this._colBindings[n];e.forEach(e=>{let i=e[t];isNumber(i)&&(e[t]=0!=l?i/l:null)})}break;case ShowAs.PctRow:for(let s=0;s<e.length;s++){let l=e[s],n=0;for(let e=i;e<this._colBindings.length;e+=t)if(-1==this._getColLevel(e)){let t=l[this._colBindings[e]];isNumber(t)&&(n+=t)}for(let e=i;e<this._colBindings.length;e+=t){let t=this._colBindings[e],i=l[t];isNumber(i)&&(l[t]=0!=n?i/n:null)}}break;case ShowAs.DiffRow:case ShowAs.DiffRowPct:case ShowAs.PctPrevRow:for(let l=i;l<this._colBindings.length;l+=t)for(let t=e.length-1;t>=0;t--){e[t][this._colBindings[l]]=this._getRowDifference(e,t,l,s.showAs)}break;case ShowAs.DiffCol:case ShowAs.DiffColPct:case ShowAs.PctPrevCol:for(let l=0;l<e.length;l++)for(let n=this._colBindings.length-t+i;n>=0;n-=t){e[l][this._colBindings[n]]=this._getColDifference(e,l,n,s.showAs)}}}}_getAggregateObject(e,t){let i={},s=/(.+:.+;)*((.+):.+;)/,l=t.match(s);for(let t in e){let n=t.match(s);n&&n[1]==l[1]&&(i[n[3]]=e[t])}return i}_getColTotal(e,t){let i=this._colBindings[t],s=0;e.forEach(e=>{if(-1==this._getRowLevel(e)){let t=e[i];isNumber(t)&&(s+=t)}});return s}_getRunningTotal(e,t,i){let s=this._getRowLevel(e[t]);if(0==s)return null;let l=this._colBindings[i],n=e[t][l],r=this._getShowRowTotals(),a=this.rowFields.length-2;for(let i=t-1;i>=0;i--){let o=this._getRowLevel(e[i]);if(o==s){if(a>-1&&s<0&&r!=ShowTotals.Subtotals){let s=e[t].$rowKey,l=e[i].$rowKey;if(s.values[a]!=l.values[a])return null}n+=e[i][l];break}if(o>s)break}return n}_getLastValueInRowGroup(e,t,i){let s=this._colBindings[i],l=e[t][s],n=this._getRowLevel(e[t]),r=this.rowFields.length-2,a=this._getShowRowTotals();for(let i=t+1;i<e.length;i++){let o=this._getRowLevel(e[i]);if(o==n){if(r>-1&&n<0&&a!=ShowTotals.Subtotals){let s=e[t].$rowKey,n=e[i].$rowKey;if(s.values[r]!=n.values[r])return l}l=e[i][s]}if(o>n)break}return l}_getRowDifference(e,t,i,s){let l=this._getRowLevel(e[t]);if(0==l)return null;let n=this._colBindings[i],r=e[t][n],a=this.rowFields.length-2,o=this._getShowRowTotals();for(let i=t-1;i>=0;i--){let h=this._getRowLevel(e[i]);if(h==l){if(a>-1&&l<0&&o!=ShowTotals.Subtotals){let s=e[t].$rowKey,l=e[i].$rowKey;if(s.values[a]!=l.values[a])return null}let h=e[i][n];switch(s){case ShowAs.DiffRow:r-=h;break;case ShowAs.DiffRowPct:r=(r-h)/h;break;case ShowAs.PctPrevRow:r/=h}return r}if(h>l)break}return s==ShowAs.PctPrevRow?1:null}_getColDifference(e,t,i,s){let l=this._getColLevel(i);if(0==l)return null;let n=e[t],r=n[this._colBindings[i]],a=this.valueFields.length,o=this.columnFields.length-2,h=this._getShowColTotals();for(let e=i-a;e>=0;e-=a){let t=this._getColLevel(e);if(t==l){if(o>-1&&l<0&&h!=ShowTotals.Subtotals){let t=this._getKey(this._colBindings[i]),s=this._getKey(this._colBindings[e]);if(t.values[o]!=s.values[o])return null}let t=n[this._colBindings[e]];switch(s){case ShowAs.DiffCol:r-=t;break;case ShowAs.DiffColPct:r=(r-t)/t;break;case ShowAs.PctPrevCol:r/=t}return r}if(t>l)break}return s==ShowAs.PctPrevCol?1:null}_getShowRowTotals(){return this._valueFields.length?this._showRowTotals:ShowTotals.None}_getShowColTotals(){return this._valueFields.length?this._showColTotals:ShowTotals.None}_getUniqueValues(e){return this._server?this._server.getUniqueValues(e):null}_generateFields(){this._viewLists.forEach(e=>{e.clear()});for(let e=0;e<this.fields.length;e++){if(this.fields[e]._autoGenerated){this.fields.removeAt(e);e--}}if(this._server){this._server.getFields().forEach(e=>{let t=this._createField(e,!0);this.fields.getField(t.header)||this.fields.push(t)});return}let e=this.collectionView,t=e?e.items:null;t&&t.length&&this.autoGenerateFields&&getTypes(t,0).forEach(e=>{let t=this._createField({binding:e.binding,header:toHeaderCase(e.binding),dataType:e.dataType},!0);this.fields.getField(t.header)||this.fields.push(t)})}_updateFieldTypes(){let e=this.collectionView,t=e?e.sourceCollection:null;t&&t.length&&this.fields.forEach(e=>{this._updateFieldType(e,t)})}_updateFieldType(e,t){if(e._hasSubFields())e.subFields.forEach(e=>{this._updateFieldType(e,t)});else{if(null==e.dataType&&e.binding)for(let i=0;i<t.length;i++){let s=e._binding.getValue(t[i]);if(null!=s){e.dataType=isPrimitive(s)?getType(s):null;break}}if(null!=e.dataType){e.format||(e.format=e.dataType==DataType.Date?"d":"n0");e.aggregate==Aggregate.Sum&&e.dataType!=DataType.Number&&(e.aggregate=Aggregate.Cnt)}}}_createField(e,t){let i;if(isString(e))i=new PivotField(this,e);else if(e){e.key&&delete e.key;i=null!=e.dimensionType?new CubePivotField(this,e.binding,e.header,e):new PivotField(this,e.binding,e.header,e);null!=e.dataType&&(i.dataType=e.dataType)}i._autoGenerated=t;if(t||isString(e)){i.format=i.dataType==DataType.Date?"d":"n0";i.aggregate=i.dataType==DataType.Number?Aggregate.Sum:Aggregate.Cnt}e&&!isString(e)&&copy(i,e);return i}_cvCollectionChanged(e,t){this.invalidate()}_fieldListChanged(e,t){if(t.action==NotifyCollectionChangedAction.Add){let i=e;for(let e=0;e<i.length-1;e++)if(i[e].key)for(let t=e+1;t<i.length;t++)if(i[e].key==i[t].key){i.removeAt(t);t--}if(i!=this._fields)if(this._fields.getField(t.item.key)){for(let e=0;e<this._viewLists.length;e++)if(this._viewLists[e]!=i){let i=this._viewLists[e],s=i.indexOf(t.item);s>-1&&i.removeAt(s)}}else i.removeAt(t.index);if(isNumber(i.maxItems)&&i.maxItems>-1)for(;i.length>i.maxItems;){let e=i.length-1;i[e]==t.item&&e>0&&e--;i.removeAt(e)}}this.onViewDefinitionChanged();this.invalidate()}_fieldPropertyChanged(e,t){this.onViewDefinitionChanged();if(!e.isActive)return;let i=t.propertyName;"visible"!=i&&("width"!=i&&"wordWrap"!=i&&"isContentHtml"!=i?"format"==i&&this.valueFields.indexOf(e)>-1?this._pivotView.refresh():"showAs"!=i?"descending"!=i?"aggregate"!=i?this.invalidate():this.valueFields.indexOf(e)>-1&&!this.isUpdating&&(this._server?this._updateView():this._updatePivotView()):this._updatePivotView():this.valueFields.indexOf(e)>-1&&!this.isUpdating&&this._updatePivotView():this._pivotView.refresh())}_copyProps(e,t,i){for(let s=0;s<i.length;s++){let l=i[s];null!=t[l]&&(e[l]=t[l])}}_getFieldFromDefinition(e){let t=e.filter;e.filter&&delete e.filter;let i=this._createField(e,!0);if(t){i._setFilterProxy(t);e.filter=t}return i}_getFieldDefinition(e){let t={binding:e.binding,header:e.header,dataType:e.dataType,aggregate:e.aggregate,showAs:e.showAs,descending:e.descending,format:e.format,align:e.align,wordWrap:e.wordWrap,width:e.width,isContentHtml:e.isContentHtml};e.weightField&&(t.weightField=e.weightField._getName());e.key&&(t.key=e.key);e.filter.isActive&&(t.filter=e._getFilterProxy());if(e._hasSubFields()){t.subFields=[];e.subFields.forEach(e=>{t.subFields.push(this._getFieldDefinition(e))})}e instanceof CubePivotField&&(t.dimensionType=e.dimensionType);return t}_getFieldCollectionProxy(e){let t={items:[]};isNumber(e.maxItems)&&e.maxItems>-1&&(t.maxItems=e.maxItems);for(let i=0;i<e.length;i++){let s=e[i];t.items.push(s.key)}return t}_setFieldCollectionProxy(e,t){e.clear();e.maxItems=isNumber(t.maxItems)?t.maxItems:null;for(let i=0;i<t.items.length;i++)e.push(t.items[i])}dispose(){this.isDisposed=!0;if(this._cv){this._cv.collectionChanged.removeHandler(this._cvCollectionChanged,this);this._cv=null}if(this._server){this._server.clearPendingRequests();this._server=null}this._fields&&this._fields.collectionChanged&&this._fields.collectionChanged.removeHandler(this._fieldListChanged,this);this._viewLists.forEach(e=>{e.collectionChanged&&e.collectionChanged.removeHandler(this._fieldListChanged,this)});this._tallies=null;this._keys=null;this._activeFilterFields=null;if(this._toInv){clearTimeout(this._toInv);this._toInv=null}if(this._toUpdateTallies){clearTimeout(this._toUpdateTallies);this._toUpdateTallies=null}if(this.edt){this.edt.dispose();this.edt=null}if(this._dlg){this._dlg.dispose();this._dlg=null}this._items=null;if(this._fields){this._fields.clear();this._fields=null}if(this._rowFields){this._rowFields.clear();this._rowFields=null}if(this._columnFields){this._columnFields.clear();this._columnFields=null}if(this._valueFields){this._valueFields.clear();this._valueFields=null}if(this._filterFields){this._filterFields.clear();this._filterFields=null}this._serverParms=null;this._colBindings=null;delete this.isDisposed}}PivotEngine._BATCH_SIZE=1e4;PivotEngine._BATCH_TIMEOUT=0;PivotEngine._BATCH_DELAY=100;PivotEngine._props=["showZeros","showRowTotals","showColumnTotals","totalsBeforeData","sortableGroups","defaultFilterType"];export class ProgressEventArgs extends EventArgs{constructor(e){super();this._progress=asNumber(e)}get progress(){return this._progress}}export class _ListContextMenu extends Menu{constructor(e){super(document.createElement("div"),{header:"Field Context Menu",displayMemberPath:"text",commandParameterPath:"parm",command:{executeCommand:e=>{this._execute(e)},canExecuteCommand:e=>this._canExecute(e)}});this._full=e;this.itemsSource=this._getMenuItems(e);addClass(this.dropDown,`context-menu ${_GridContextMenuClsNames.hostElement}`)}static get controlTemplate(){_ListContextMenu._ctrlTemplate||(_ListContextMenu._ctrlTemplate=Menu.controlTemplate);return _ListContextMenu._ctrlTemplate}static set controlTemplate(e){_ListContextMenu._ctrlTemplate=e}refresh(e=!0){this.itemsSource=this._getMenuItems(this._full);super.refresh(e)}attach(e){assert(e instanceof FlexGrid,"Expecting a FlexGrid control...");let t=e.hostElement;this._contextMenuHandler=i=>{if(this._selectField(e,i)){i.preventDefault();this.owner=t;this.show(i)}};t.addEventListener("contextmenu",this._contextMenuHandler)}_selectField(e,t){let i=e.hitTest(t);if(i.panel!=e.cells||!i.range.isValid)return!1;let s=e.rows[i.row].dataItem;if(s instanceof CubePivotField&&s.subFields&&s.subFields.length)return!1;e.select(i.range,!0);return!0}_getMenuItems(e){let t;t=e?[{text:'<div class="menu-icon"></div>*',parm:"up"},{text:'<div class="menu-icon"></div>*',parm:"down"},{text:'<div class="menu-icon"></div>*',parm:"first"},{text:'<div class="menu-icon"></div>*',parm:"last"},{text:`<div class="${UtilitesClsNames.separator}"></div>`},{text:`<div class="menu-icon"><span class=${GlyphClsNames.filter}></span></div>*`,parm:"filter"},{text:'<div class="menu-icon">&#8801;</div>*',parm:"rows"},{text:'<div class="menu-icon">&#10996;</div>*',parm:"cols"},{text:'<div class="menu-icon">&#931;</div>*',parm:"vals"},{text:`<div class="${UtilitesClsNames.separator}"></div>`},{text:'<div class="menu-icon menu-icon-remove">&#10006;</div>*',parm:"remove"},{text:`<div class="${UtilitesClsNames.separator}"></div>`},{text:'<div class="menu-icon">&#9965;</div>*',parm:"edit"}]:[{text:`<div class="menu-icon"><span class=${GlyphClsNames.filter}></span></div>*`,parm:"filter"},{text:'<div class="menu-icon">&#8801;</div>*',parm:"rows"},{text:'<div class="menu-icon">&#10996;</div>*',parm:"cols"},{text:'<div class="menu-icon">&#931;</div>*',parm:"vals"},{text:`<div class="${UtilitesClsNames.separator}"></div>`},{text:'<div class="menu-icon">&#9965;</div>*',parm:"edit"}];for(let e=0;e<t.length;e++){let i=t[e];if(i.parm){let e=culture.olap._ListContextMenu[i.parm];assert(e,"missing localized text for item "+i.parm);i.text=i.text.replace(/([^>]+$)/,e)}}return t}_execute(e){let t=Control.getControl(this.owner),i=t.itemsSource,s=t.selection.row,l=t.rows[s].dataItem,n=l?l.engine:null,r=this._getTargetList(n,e);switch(e){case"up":case"first":case"down":case"last":if(n){let t=i.indexOf(l),s="up"==e?t-1:"first"==e?0:"down"==e?t+1:"last"==e?i.length:-1;n.deferUpdate(()=>{i.removeAt(t);i.insert(s,l)})}break;case"filter":case"rows":case"cols":case"vals":r&&l&&r.push(l);break;case"remove":l&&n.removeField(l);break;case"edit":l&&n.editField(l)}}_canExecute(e){let t=Control.getControl(this.owner);if(!t)return!1;let i=t.selection.row,s=i>-1?t.rows[i].dataItem:null,l=s?s.engine:null,n=this._getTargetList(l,e),r=!!s&&s instanceof CubePivotField,a=!!s&&s.isMeasure;switch(e){case"up":case"first":return i>0;case"down":case"last":return i<t.rows.length-1;case"filter":case"rows":case"cols":return!a&&n&&n.indexOf(s)<0;case"vals":return(!r||a)&&n&&n.indexOf(s)<0;case"edit":return l&&l.allowFieldEditing;case"detail":return s&&!r}return!0}_getTargetList(e,t){if(e)switch(t){case"filter":return e.filterFields;case"rows":return e.rowFields;case"cols":return e.columnFields;case"vals":return e.valueFields}return null}dispose(){if(this.owner instanceof HTMLElement){this.owner.removeEventListener("contextmenu",this._contextMenuHandler);this._contextMenuHandler=null;this._owner=null}this.itemsSource=null;super.dispose()}}_ListContextMenu._ctrlTemplate="";export class PivotPanel extends Control{constructor(e,t){super(e,null,!0);this._showIcons=!0;this._restrictDrag=null;this.deferredUpdateChanged=new Event;this.itemsSourceChanged=new Event;this.viewDefinitionChanged=new Event;this.updatingView=new Event;this.updatedView=new Event;this._isUpdatingChangedBnd=this._isUpdatingChanged.bind(this);let i=this.getTemplate();this.applyTemplate(`${ControlClsNames.hostElement} ${ControlClsNames.content} ${PivotPanelClsNames.hostElement}`,i,{_dFields:"d-fields",_dFilters:"d-filters",_dRows:"d-rows",_dCols:"d-cols",_dVals:"d-vals",_dProgress:"d-prog",_btnUpdate:"btn-update",_chkDefer:"chk-defer",_gFlds:"g-flds",_gDrag:"g-drag",_gFlt:"g-flt",_gCols:"g-cols",_gRows:"g-rows",_gVals:"g-vals",_gDefer:"g-defer"});this._globalize();let s=this.hostElement;this.addEventListener(s,"dragstart",this._dragstart.bind(this));this.addEventListener(s,"dragover",this._dragover.bind(this));this.addEventListener(s,"dragleave",this._dragover.bind(this));this.addEventListener(s,"drop",this._drop.bind(this));this.addEventListener(s,"dragend",this._dragend.bind(this));this._lbFields=this._createFieldGrid(this._dFields);this._lbFilters=this._createFieldGrid(this._dFilters);this._lbRows=this._createFieldGrid(this._dRows);this._lbCols=this._createFieldGrid(this._dCols);this._lbVals=this._createFieldGrid(this._dVals);let l=this._ctxMenuShort=new _ListContextMenu(!1);l.attach(this._lbFields);(l=this._ctxMenuFull=new _ListContextMenu(!0)).attach(this._lbFilters);l.attach(this._lbRows);l.attach(this._lbCols);l.attach(this._lbVals);this._dMarker=createElement(`<div class="${FlexGridClsNames.marker}" style="display:none">&nbsp;</div>`);this.hostElement.appendChild(this._dMarker);this.addEventListener(this._btnUpdate,"click",e=>{this._ng.refresh(!0);this.refresh();e.preventDefault()});this.addEventListener(this._chkDefer,"click",e=>{this.deferredUpdate=this._chkDefer.checked;this._updateDeferredUpdateElements()});this.engine=new PivotEngine;this.initialize(t)}static get controlTemplate(){PivotPanel._ctrlTemplate||(PivotPanel._ctrlTemplate='<div><label wj-part="g-flds"></label><div wj-part="d-fields"></div><label wj-part="g-drag"></label><table><tr><td width="50%">'+`<label><span class="${GlyphClsNames.glyph} ${GlyphClsNames.filter}"></span> <span wj-part="g-flt"></span></label>`+'<div wj-part="d-filters"></div></td><td width= "50%" style="border-left-style:solid">'+`<label><span class=${GlyphClsNames.glyph}>&#10996;</span> <span wj-part="g-cols"></span></label>`+'<div wj-part="d-cols"></div></td></tr><tr style="border-top-style:solid"><td width="50%">'+`<label><span class=${GlyphClsNames.glyph}>&#8801;</span> <span wj-part="g-rows"></span></label>`+'<div wj-part="d-rows"></div></td><td width= "50%" style="border-left-style:solid">'+`<label><span class=${GlyphClsNames.glyph}>&#931;</span> <span wj-part="g-vals"></span></label>`+'<div wj-part="d-vals"></div></td></tr></table>'+`<div wj-part="d-prog" class=${ControlStateClsNames.selected} style="width:0px;height:3px"></div>`+'<div style="display:table"><label style="display:table-cell;vertical-align:middle"><input wj-part="chk-defer" type="checkbox"/> <span wj-part="g-defer"></span></label>'+`<button wj-part="btn-update" class="${InputFormElementsClsNames.btn} ${ControlStateClsNames.disabled}" style="float:right;margin:6px" disabled></button>`+"</div></div>");return PivotPanel._ctrlTemplate}static set controlTemplate(e){PivotPanel._ctrlTemplate=e}_getProductInfo(){return"D6F4,PivotPanel"}get engine(){return this._ng}set engine(e){let t,i=this._ng;if(i){i.itemsSourceChanged.removeHandler(this._itemsSourceChanged);i.viewDefinitionChanged.removeHandler(this._viewDefinitionChanged);i.updatingView.removeHandler(this._updatingView);i.updatedView.removeHandler(this._updatedView);i.error.removeHandler(this._requestError);i._isUpdatingChanged.removeHandler(this._isUpdatingChangedBnd);t=this.deferredUpdate}e=asType(e,PivotEngine,!1);(i=this._ng=e).itemsSourceChanged.addHandler(this._itemsSourceChanged,this);i.viewDefinitionChanged.addHandler(this._viewDefinitionChanged,this);i.updatingView.addHandler(this._updatingView,this);i.updatedView.addHandler(this._updatedView,this);i.error.addHandler(this._requestError,this);i._isUpdatingChanged.addHandler(this._isUpdatingChangedBnd);t!==this.deferredUpdate&&this.onDeferredUpdateChanged();this._lbFields.itemsSource=e.fields;this._lbFilters.itemsSource=e.filterFields;this._lbRows.itemsSource=e.rowFields;this._lbCols.itemsSource=e.columnFields;this._lbVals.itemsSource=e.valueFields;this._filterFieldVisibleWithRoot=e=>e.visible&&null==e.parentField;this._filterFieldVisibleOnly=e=>e.visible;this._lbFields.collectionView.filter=this._filterFieldVisibleWithRoot;"Filters,Rows,Cols,Vals".split(",").forEach(e=>{this["_lb"+e].collectionView.filter=this._filterFieldVisibleOnly});this._updateDeferredUpdateElements()}get itemsSource(){return this._ng.itemsSource}set itemsSource(e){e instanceof PivotEngine?this.engine=e:this._ng.itemsSource=e}get collectionView(){return this._ng.collectionView}get pivotView(){return this._ng.pivotView}get autoGenerateFields(){return this.engine.autoGenerateFields}set autoGenerateFields(e){this._ng.autoGenerateFields=e}get fields(){return this._ng.fields}get rowFields(){return this._ng.rowFields}get columnFields(){return this._ng.columnFields}get valueFields(){return this._ng.valueFields}get filterFields(){return this._ng.filterFields}get viewDefinition(){return this._ng.viewDefinition}set viewDefinition(e){this._ng.viewDefinition=e}get isViewDefined(){return this._ng.isViewDefined}get showFieldIcons(){return this._showIcons}set showFieldIcons(e){if(e!=this._showIcons){this._showIcons=asBoolean(e);this.invalidate()}}get restrictDragging(){return this._restrictDrag}set restrictDragging(e){this._restrictDrag=asBoolean(e,!0)}get deferredUpdate(){return this.engine.isUpdating}set deferredUpdate(e){this.deferredUpdate!=e&&(e?this._ng.beginUpdate():this._ng.endUpdate())}onDeferredUpdateChanged(e){this.deferredUpdateChanged.raise(this,e)}onItemsSourceChanged(e){this.itemsSourceChanged.raise(this,e)}onViewDefinitionChanged(e){this.viewDefinitionChanged.raise(this,e)}onUpdatingView(e){this.updatingView.raise(this,e)}onUpdatedView(e){this.updatedView.raise(this,e)}refresh(e=!0){if(this.hostElement){["Fields","Filters","Rows","Cols","Vals"].forEach(e=>{let t=this["_lb"+e],i=t?t.collectionView:null;if(t&&i){t.refresh();i.refresh()}});if(e){this._globalize();this._ctxMenuShort.refresh();this._ctxMenuFull.refresh()}}super.refresh(e)}_copy(e,t){switch(e){case"engine":this.engine=t;return!0}return!1}_globalize(){let e=culture.olap.PivotPanel;setText(this._gFlds,e.fields);setText(this._gDrag,e.drag);setText(this._gFlt,e.filters);setText(this._gCols,e.cols);setText(this._gRows,e.rows);setText(this._gVals,e.vals);setText(this._gDefer,e.defer);setText(this._btnUpdate,e.update)}_itemsSourceChanged(e,t){this.onItemsSourceChanged(t)}_viewDefinitionChanged(e,t){this.invalidate();this.onViewDefinitionChanged(t)}_updatingView(e,t){let i=clamp(t.progress,5,100)%100;this._dProgress.style.width=i+"%";this.onUpdatingView(t)}_updatedView(e,t){this.onUpdatedView(t)}_requestError(e,t){this._dProgress.style.width="0"}_isUpdatingChanged(){this._updateDeferredUpdateElements();this.onDeferredUpdateChanged()}_updateDeferredUpdateElements(){const e=this.deferredUpdate;this._chkDefer.checked=e;enable(this._btnUpdate,e)}_createFieldGrid(e){let t=new FlexGrid(e,{autoGenerateColumns:!1,childItemsPath:"subFields",columns:[{binding:"header",width:"*"}],headersVisibility:"None",selectionMode:"Cell",alternatingRowStep:0});t.cells.hostElement.parentElement.style.overflowX="hidden";t.formatItem.addHandler((e,t)=>{let i=e.rows[t.row].dataItem;assert(i instanceof PivotField,"PivotField expected...");let s=i._hasSubFields();toggleClass(t.cell,PivotPanelClsNames.header,s);t.cell.setAttribute("draggable",(!s).toString());let l=t.cell.innerHTML;i.filter.isActive&&(l+=`&nbsp;&nbsp;<span class=${GlyphClsNames.filter}></span>`);e!=this._lbVals||isFunction(i.getAggregateValue)||(l+=` <span class="${PivotPanelClsNames.aggregate}">(`+Aggregate[i.aggregate]+")</span>");if(e==this._lbFields&&!s){if(this._showIcons){let e=i.isMeasure?"measure":"dimension";l=`<span class="${GlyphClsNames.glyph}-`+e+'"></span> '+l}l='<label><input type="checkbox"'+(i.isActive?" checked":"")+"> "+l+"</label>"}t.cell.innerHTML=l});t.addEventListener(e,"click",e=>{let i=e.target;if(i instanceof HTMLInputElement&&"checkbox"==i.type){let s=this._hitTestField(t,e);s instanceof PivotField&&(s.isActive=i.checked)}});return t}_dragstart(e){let t=this._getFlexGridTarget(e);if(t){this._dragField=this._hitTestField(t,e);this._dragSource=this._dragField instanceof PivotField?t.hostElement:null;if(this._dragSource&&e.dataTransfer){_startDrag(e.dataTransfer,"copyMove");e.stopPropagation()}}}_dragover(e){let t=!1,i=this._getFlexGridTarget(e);if(i&&this._dragField){if(this._dragSource==this._dFields&&i!=this._lbFields){let e=i.itemsSource;if(null==e.maxItems||e.length<e.maxItems){let e=this._dragField;i.itemsSource.indexOf(e)<0?t=!0:i==this._lbVals&&(t=!(e instanceof CubePivotField))}}this._dragSource&&this._dragSource!=this._dFields&&(t=!0)}if(t&&this._getRestrictDrag()&&this._dragSource!=i.hostElement){let e=this._dragField.isMeasure;i==this._lbVals?t=e:i!=this._lbRows&&i!=this._lbCols||(t=!e)}if(t){this._updateDropMarker(i,e);e.dataTransfer.dropEffect=this._dragSource==this._dFields?"copy":"move";e.preventDefault();e.stopPropagation()}else this._updateDropMarker()}_drop(e){let t=this._getFlexGridTarget(e);if(t&&this._dragField){let e=Control.getControl(this._dragSource),i=this._dragField;if(e==this._lbFields&&t==this._lbVals&&t.itemsSource.indexOf(i)>-1){i=i._clone();this.engine.fields.push(i)}t==this._lbFields?i.isActive=!1:this._ng.deferUpdate(()=>{let e=t.itemsSource,s=e.indexOf(i);if(s!=this._dropIndex){if(s>-1){e.removeAt(s);s<this._dropIndex&&this._dropIndex--}e.insert(this._dropIndex,i)}})}this._resetMouseState()}_dragend(e){this._resetMouseState()}_hitTestField(e,t){let i=e.hitTest(t.target);if(i.panel==e.cells&&i.range.isValid){e.select(i.range,!0);return e.rows[i.row].dataItem}return null}_getRestrictDrag(){let e=this._restrictDrag;null==e&&this.fields.length&&(e=this.fields[0]instanceof CubePivotField);return e}_resetMouseState(){this._dragSource=null;this._updateDropMarker()}_getFlexGridTarget(e){let t=Control.getControl(closest(e.target,`.${FlexGridClsNames.hostElement}`));return t instanceof FlexGrid?t:null}_updateDropMarker(e,t){if(!t){this._dMarker.style.display="none";return}let i,s=this.hostElement,l=s.getBoundingClientRect();if(e.rows.length){let l=e.hitTest(t).row;if(l>-1){i=e.getCellBoundingRect(l,0);if(t.clientY>s.scrollTop+i.top+i.height/2&&l<e.rows.length){i.top+=i.height;l++}this._dropIndex=l}else{l=e.viewRange.bottomRow;(i=e.getCellBoundingRect(l,0)).top+=i.height;this._dropIndex=l+1}}else{(i=Rect.fromBoundingRect(e.hostElement.getBoundingClientRect())).top+=4;this._dropIndex=0}setCss(this._dMarker,{left:Math.round(i.left-l.left)+s.scrollLeft,top:Math.round(i.top-l.top-2)+s.scrollTop,width:Math.round(i.width),height:4,display:""})}dispose(){this._lbFields&&this._lbFields.collectionView&&(this._lbFields.collectionView.filter=null);["Filters","Rows","Cols","Vals"].forEach(e=>{const t=this["_lb"+e];t&&t.collectionView&&(t.collectionView.filter=null)});if(this._ctxMenuShort){this._ctxMenuShort.dispose();this._ctxMenuShort=null}if(this._ctxMenuFull){this._ctxMenuFull.dispose();this._ctxMenuFull=null}if(this._lbFields){this._lbFields.dispose();this._lbFields=null}if(this._lbFilters){this._lbFilters.dispose();this._lbFilters=null}if(this._lbRows){this._lbRows.dispose();this._lbRows=null}if(this._lbCols){this._lbCols.dispose();this._lbCols=null}if(this._lbVals){this._lbVals.dispose();this._lbVals=null}if(this._ng){this._ng.itemsSourceChanged.removeHandler(this._itemsSourceChanged);this._ng.viewDefinitionChanged.removeHandler(this._viewDefinitionChanged);this._ng.updatingView.removeHandler(this._updatingView);this._ng.updatedView.removeHandler(this._updatedView);this._ng.error.removeHandler(this._requestError);this._ng._isUpdatingChanged.removeHandler(this._isUpdatingChangedBnd)}this.engine.dispose();super.dispose()}}PivotPanel._ctrlTemplate="";export class PivotGrid extends FlexGrid{constructor(e,t){super(e);this._showDetailOnDoubleClick=!0;this._collapsibleSubtotals=!0;this._customCtxMenu=!0;this._ctxMenu=new _GridContextMenu;this._showRowFldSort=!1;this._showRowFldHdrs=!0;this._showColFldHdrs=!0;this._showValFldHdrs=!1;this._centerVert=!0;this._collapsedKeys={};this._resizingColumn=!1;this._outlineMode=!1;this._ignoreClick=!1;this._colRowFields=new Map;this._prevCulture=culture.Globalize.name;this._hdrCols._setDefaultSize(this._cols.defaultSize);addClass(this.hostElement,PivotGridClsNames.hostElement);this.isReadOnly=!0;this.copyHeaders=HeadersVisibility.All;this.deferResizing=!0;this.alternatingRowStep=0;this.autoGenerateColumns=!1;this.allowDragging=AllowDragging.None;this.allowMerging=AllowMerging.All;this.mergeManager=new _PivotMergeManager;this.customContextMenu=!0;this.treeIndent=32;this.initialize(t);this.formatItem.addHandler(this._formatItem,this);var i=this.hostElement;this.addEventListener(i,"mousedown",this._mousedown.bind(this),!0);this.addEventListener(i,"mouseup",this._mouseup.bind(this),!0);this.addEventListener(i,"dblclick",this._dblclick.bind(this),!0);this.addEventListener(i,"click",this._click.bind(this),!0);this.addEventListener(i,"keydown",this._keydown.bind(this),!0);this._ctxMenu.attach(this)}static get controlTemplate(){PivotGrid._ctrlTemplate||(PivotGrid._ctrlTemplate=FlexGrid.controlTemplate);return PivotGrid._ctrlTemplate}static set controlTemplate(e){PivotGrid._ctrlTemplate=e}_getProductInfo(){return"D6F4,PivotGrid"}get engine(){return this._ng}get showDetailOnDoubleClick(){return this._showDetailOnDoubleClick}set showDetailOnDoubleClick(e){this._showDetailOnDoubleClick=asBoolean(e)}get detailDialog(){this._dlgDetail||(this._dlgDetail=new DetailDialog(document.createElement("div")));return this._dlgDetail}get showRowFieldHeaders(){return this._showRowFldHdrs}set showRowFieldHeaders(e){if(e!=this._showRowFldHdrs){this._showRowFldHdrs=asBoolean(e);this._updateFixedContent()}}get showColumnFieldHeaders(){return this._showColFldHdrs}set showColumnFieldHeaders(e){if(e!=this._showColFldHdrs){this._showColFldHdrs=asBoolean(e);this._updateFixedContent()}}get showValueFieldHeaders(){return this._showValFldHdrs}set showValueFieldHeaders(e){if(e!=this._showValFldHdrs){this._showValFldHdrs=asBoolean(e);this._updateFixedCounts();this._updateFixedContent()}}get showRowFieldSort(){return this._showRowFldSort}set showRowFieldSort(e){if(e!=this._showRowFldSort){this._showRowFldSort=asBoolean(e);this._updateFixedContent()}}get customContextMenu(){return this._customCtxMenu}set customContextMenu(e){this._customCtxMenu=asBoolean(e)}get collapsibleSubtotals(){return this._collapsibleSubtotals}set collapsibleSubtotals(e){if(e!=this._collapsibleSubtotals){this._collapsibleSubtotals=asBoolean(e);this.invalidate()}}get centerHeadersVertically(){return this._centerVert}set centerHeadersVertically(e){if(e!=this._centerVert){this._centerVert=asBoolean(e);this.invalidate()}}get outlineMode(){return this._outlineMode}set outlineMode(e){if(e!=this._outlineMode){this._outlineMode=asBoolean(e);this._bindGrid(!0)}}getKeys(e,t){let i=this.rows[asInt(e)],s=this.columns[asInt(t)],l=i?i.dataItem:null,n=s?s.binding:null;return this._ng.getKeys(l,n)}getDetail(e,t){let i=this.rows[asInt(e)].dataItem,s=this.columns[asInt(t)].binding;return this._ng.getDetail(i,s)}getDetailView(e,t){let i=this.rows[asInt(e)].dataItem,s=this.columns[asInt(t)].binding;return this._ng.getDetailView(i,s)}showDetail(e,t){if(this._ng.valueFields.length){let i=this.detailDialog;i.showDetail(this,new CellRange(e,t));i.show(!0)}}collapseRowsToLevel(e){this._collapseRowsToLevel(e)}collapseColumnsToLevel(e){this._collapseColsToLevel(e)}_getQuickAutoSize(){return isBoolean(this.quickAutoSize)?this.quickAutoSize:this.formatItem.handlerCount<=1&&null==this.itemFormatter}_bindGrid(e){this.deferUpdate(()=>{let t=this.preserveOutlineState||this._resizingColumn,i=this._collapsedKeys,s=this.rows,l=this.columns;t||(i=this._collapsedKeys={});super._bindGrid(e);if(this._ng&&t&&!isEmpty(i)){let e=this._ng.totalsBeforeData,t=e?s.length-1:0,n=e?-1:s.length,r=e?-1:1;for(let e=t;e!=n;e+=r){let t=s[e].dataItem,l=t?t[_PivotKey._ROW_KEY_NAME]:null;l&&l.level>=0&&i[l.toString()]&&this._setRowCollapsed(new CellRange(e,l.level-1),!0)}t=e?l.length-1:0;n=e?-1:l.length;r=e?-1:1;for(let e=t;e!=n;e+=r){let t=l[e].binding,s=this._ng._getKey(t);s&&s.level>0&&i[s.toString()]&&this._setColCollapsed(new CellRange(s.level-1,e),!0)}}})}_getCollectionView(e){e instanceof PivotPanel?e=e.engine.pivotView:e instanceof PivotEngine&&(e=e.pivotView);return asCollectionView(e)}refresh(e=!0){this._ctxMenu.refresh();const t=culture.Globalize.name;if(this._prevCulture!==t){this._prevCulture=t;this._updateFixedContent()}super.refresh(e)}onItemsSourceChanged(e){if(this._ng){this._ng.updatingView.removeHandler(this._updatingView,this);this._ng.viewDefinitionChanged.removeHandler(this._viewDefinitionChanged,this);this._ng._hasDeferredUpdatesChanged.removeHandler(this._hasDeferredUpdatesChanged,this)}this._collapsedKeys={};let t=this.collectionView;this._ng=t instanceof PivotCollectionView?t.engine:null;if(this._ng){this._ng.updatingView.addHandler(this._updatingView,this);this._ng.viewDefinitionChanged.addHandler(this._viewDefinitionChanged,this);this._ng._hasDeferredUpdatesChanged.addHandler(this._hasDeferredUpdatesChanged,this)}this._updatingView();this._bindGrid(!0);super.onItemsSourceChanged(e)}onResizedColumn(e){let t=this._ng;if(t){this._resizingColumn=!0;if(e.panel.columns==this.rowHeaders.columns){let t=this._colRowFields.get(e.getColumn());t instanceof PivotField&&(t.width=e.panel.columns[e.col].renderWidth)}if(e.panel.columns==this.columnHeaders.columns){let i=t.valueFields;if(i.length>0){i[e.col%i.length].width=e.panel.columns[e.col].renderWidth}}this._resizingColumn=!1}super.onResizedColumn(e)}onSortingColumn(e){let t=this._ng;return(!t||!t.isUpdating)&&super.onSortingColumn(e)}onDraggingColumn(e){let t=this._ng;return(!t||!t.isUpdating)&&super.onDraggingColumn(e)}onDraggedColumn(e){let t=this._ng;if(t&&e.panel.columns==this.topLeftCells.columns){let i=t.rowFields,s=i[e.data.col];t.deferUpdate(()=>{i.removeAt(e.data.col);i.insert(e.col,s)})}super.onDraggedColumn(e)}_updatingView(){this._updateFixedCounts();this.columns.clear();this.rows.clear()}_viewDefinitionChanged(){this._resizingColumn||(this._collapsedKeys={})}_hasDeferredUpdatesChanged(){const e=this.engine,t=e&&e.hasDeferredUpdates,classToggler=e=>toggleClass(e,PivotGrid._WJC_DISABLED,t),i=this.hostElement.querySelectorAll(`.${PivotGrid._WJC_COLLAPSE}`);for(let e=0;e<i.length;e++)classToggler(i[e])}onLoadedRows(e){0==this.columns.length&&this._generateColumns();this._updateFixedCounts();this._updateFixedContent();super.onLoadedRows(e)}_generateColumns(){let e=this.collectionView,t=e?e.sourceCollection:null,i=t&&t.length,s=this.engine;if(s&&i){const e=Object.keys(t[0]).filter(e=>e!=_PivotKey._ROW_KEY_NAME),i=[Aggregate.Cnt,Aggregate.CntAll];for(let t=0;t<e.length;t++){const l=s._getFieldByColKey(e[t]);this.columns.push(new Column({binding:e[t],dataType:l&&-1===i.indexOf(l.aggregate)?l.dataType:DataType.Number,allowMerging:!0}))}}}_updateFixedCounts(){let e,t=this._ng,i=t&&t.isViewDefined;e=Math.max(1,i?t.rowFields.length:1);let s=this.topLeftCells.columns;s.clear();this._colRowFields.clear();for(let l=0;l<e;l++){let e=new Column({allowMerging:!0});s.push(e);i&&this._colRowFields.set(e,t.rowFields[l])}e=Math.max(1,i?t.columnFields.length:1);t&&t.columnFields.length&&(t.valueFields.length>1||this.showValueFieldHeaders)&&e++;let l=this.topLeftCells.rows;l.clear();for(let t=0;t<e;t++)l.push(new Row)}_updateFixedContent(){let e=this._ng;if(!e||!e.isViewDefined){this.topLeftCells.setCellData(0,0,null);return}let t=e.rowFields,i=e.columnFields,s=e.valueFields,l=this.outlineMode?t.map(e=>e.header).join(" / "):"",n=this.topLeftCells;for(let e=0;e<n.rows.length;e++)for(let s=0;s<n.columns.length;s++){let r="";this.showRowFieldHeaders&&s<t.length&&e==n.rows.length-1&&(r=this.outlineMode?l:t[s].header);this.showColumnFieldHeaders&&!r&&e<i.length&&0==s&&(r=i[e].header+":");n.setCellData(e,s,r,!1,!1)}n=this.rowHeaders;for(let e=0;e<n.rows.length;e++){let t=n.rows[e].dataItem[_PivotKey._ROW_KEY_NAME];assert(t instanceof _PivotKey,"missing PivotKey for row...");for(let i=0;i<n.columns.length;i++){let s=t.getValue(i,!0);n.setCellData(e,i,s,!1,!1)}}n=this.columnHeaders;for(let t=0;t<n.columns.length;t++){let l=e._getKey(n.columns[t].binding);assert(l instanceof _PivotKey,"missing PivotKey for column...");for(let e=0;e<n.rows.length;e++){let r=l.getValue(e,!0);e==n.rows.length-1&&s.length&&(s.length>1||0==i.length||l.level>-1||this.showValueFieldHeaders)&&(r=s[t%s.length].header);n.setCellData(e,t,r,!1,!1)}}n=this.topLeftCells;for(let e=0;e<n.columns.length;e++){let i=n.columns[e],s=e<t.length?t[e]:null;i.wordWrap=s?s.wordWrap:null;i.align=s?s.align:null;if(this.outlineMode&&e<n.columns.length-1){i.width=this.treeIndent;i.allowResizing=!1}else{i.allowResizing=!0;i.width=s&&isNumber(s.width)?s.width:null}}n=this.cells;for(let e=0;e<n.columns.length;e++){let t=n.columns[e],i=s.length?s[e%s.length]:null;t.width=i&&isNumber(i.width)?i.width:null;t.wordWrap=i?i.wordWrap:null;t.format=i?i.format:null;t.align=i?i.align:null}this.invalidate()}_updateDefaultSizes(){const e=super._updateDefaultSizes();this._hdrCols._setDefaultSize(4*e);return e}_formatItem(e,t){let i=this._ng,s=t.panel,l=t.cell;if(!i)return;if(s==this.topLeftCells){let e=0==i.rowFields.length||t.row<s.rows.length-1||t.row==s.rows.length-1&&!this.showRowFieldHeaders;toggleClass(l,PivotGridClsNames.colFieldHdr,e);toggleClass(l,PivotGridClsNames.rowFieldHdr,!e)}let n,r=null;s==this.topLeftCells&&t.row==s.rows.length-1&&this.allowDragging&AllowDragging.Columns&&(r=!0);setAttribute(l,"draggable",r);switch(s){case this.rowHeaders:n=i.rowFields[t.col%i.rowFields.length];break;case this.columnHeaders:n=i.columnFields[t.row];break;case this.cells:n=i.valueFields[t.col]}n&&n.isContentHtml&&(l.innerHTML=l.textContent);let a=s.columns[t.col].binding,o=s.rows==this.rows?i._getRowLevel(t.row):-1,h=s.columns==this.columns?i._getColLevel(a):-1;toggleClass(l,PivotPanelClsNames.aggregate,o>-1||h>-1);if(this._collapsibleSubtotals){if(s==this.rowHeaders&&i._getShowRowTotals()==ShowTotals.Subtotals)if(this.outlineMode){let e=this._getGroupedRows(t.range);if(t.col<i.rowFields.length-1){if(!e.containsRow(t.row)){let e=this._getRowCollapsed(t.range);l.innerHTML=this._getCollapsedGlyph(e)+l.innerHTML}}}else{let e=this.getMergedRange(s,t.row,t.col,!1)||t.range;if(t.col<i.rowFields.length-1&&e.rowSpan>1){let t=this._getRowCollapsed(e);l.innerHTML=this._getCollapsedGlyph(t)+l.innerHTML}}this.outlineMode&&s==this.rowHeaders&&t.range.rightCol<s.columns.length-1&&(l.innerHTML="");if(s==this.columnHeaders&&i._getShowColTotals()==ShowTotals.Subtotals){let e=this.getMergedRange(s,t.row,t.col,!1)||t.range;if(t.row<i.columnFields.length-1&&e.columnSpan>1){let t=this._getColCollapsed(e);l.innerHTML=this._getCollapsedGlyph(t)+l.innerHTML}}}if(s==this.topLeftCells&&this.showRowFieldSort&&t.col<i.rowFields.length&&t.row==this._getSortRowIndex()){n=i.rowFields[t.col];toggleClass(l,FlexGridClsNames.sortAsc,!n.descending);toggleClass(l,FlexGridClsNames.sortDesc,n.descending);l.innerHTML+=` <span class="${GlyphClsNames.glyph}-`+(n.descending?"down":"up")+'"></span>'}s!=this.cells&&toggleClass(l,UtilitesClsNames.alignVCenter,this._centerVert)}_getCollapsedGlyph(e){const t=this.engine,i=t&&t.hasDeferredUpdates;return'<div class="'+(PivotGrid._WJC_COLLAPSE+(i?` ${PivotGrid._WJC_DISABLED}`:""))+'">'+`<span class="${GlyphClsNames.glyph}-`+(e?"plus":"minus")+'"></span></div>'}_mousedown(e){if(e.defaultPrevented||0!=e.button){this._htDown=null;return}const t=this._htDown=this.hitTest(e),i=t.panel;this._ignoreClick=!1;const s=this.engine,l=s&&s.hasDeferredUpdates;let n=closestClass(e.target,PivotGrid._WJC_COLLAPSE);if(!l&&null!=n&&null!=i){let s,l=t.range;switch(i.cellType){case CellType.RowHeader:const t=this.getMergedRange(i,l.row,l.col);t&&l.copy(t);s=this._getRowCollapsed(l);e.shiftKey||e.ctrlKey?this._collapseRowsToLevel(l.col+(s?2:1)):this._setRowCollapsed(l,!s);break;case CellType.ColumnHeader:s=this._getColCollapsed(l);e.shiftKey||e.ctrlKey?this._collapseColsToLevel(l.row+(s?2:1)):this._setColCollapsed(l,!s)}e.preventDefault();this._ignoreClick=!0;this._htDown=null;this.focus()}}_mouseup(e){if(!this._htDown||e.defaultPrevented)return;if(this._mouseHdl._szRowCol)return;let t=this.hitTest(e);if(this._htDown.panel!=t.panel||!t.range.equals(this._htDown.range))return;let i=this._ng,s=this.topLeftCells;if(t.panel==s&&t.row==s.rows.length-1&&t.col>-1){let s=t.getColumn();if(this.allowSorting&&s.allowSorting&&!t.edgeRight){let e=this._colRowFields.get(s);if(e&&!i.isUpdating){let s=new CellRangeEventArgs(t.panel,t.range);if(this.onSortingColumn(s)){i.pivotView.sortDescriptions.clear();e.descending=!e.descending;this.onSortedColumn(s)}}}e.preventDefault();this._ignoreClick=!0}}_click(e){this._ignoreClick&&e.preventDefault()}_dblclick(e){if(!e.defaultPrevented&&this._showDetailOnDoubleClick){let e=this._htDown;if(e&&e.panel==this.cells){let t=this._ng;t&&t.fields.length>0&&(t.fields[0]instanceof CubePivotField||this.showDetail(e.row,e.col))}}}_keydown(e){if(!e.defaultPrevented&&!e.ctrlKey&&e.altKey&&this.collapsibleSubtotals){let t=this.selection;if(t.isValid){let i=this._getRowLevel(t.topRow);i<0&&(i=this.rowHeaders.columns.length-1);let s=this._getKeyCode(e);switch(s){case Key.Left:case Key.Right:let l=new CellRange(t.row,i-1);this._setRowCollapsed(l,s==Key.Left);e.preventDefault()}}}}_getRowLevel(e){return this._ng._getRowLevel(e)}_getGroupedRows(e){let t,i=this._getRowLevel.bind(this),s=e.col+1,l=this.rows.length,n=this._ng.totalsBeforeData,r=e.row;if(0==i(r)){r=n?1:0;t=n?l-1:l-2}else{if(n)for(;r<l&&!(i(r)<0);r++);else for(;r>=0&&!(i(r)<0);r--);for(;r>0;r--){let e=i(r-1);if(e>=0&&e<=s)break}for(t=r;t<l-1;t++){let e=i(t+1);if(e>=0&&e<=s)break}}assert(t>=r,"group end < start?");return t>=r?new CellRange(r,e.col,t,e.col2):e}_toggleRowCollapsed(e){this._setRowCollapsed(e,!this._getRowCollapsed(e))}_getRowCollapsed(e){e=this._getGroupedRows(e);let t=this._ng.totalsBeforeData?e.row-1:e.row2+1,i=this.rows[t]||this.rows[e.row],s=i?i.dataItem[_PivotKey._ROW_KEY_NAME]:null;return!!s&&this._collapsedKeys[s.toString()]}_setRowCollapsed(e,t){e=this._getGroupedRows(e);let i=this._ng.totalsBeforeData?e.row-1:e.row2+1,s=this.rows[i]||this.rows[e.row],l=s?s.dataItem[_PivotKey._ROW_KEY_NAME]:null;l&&(this._collapsedKeys[l.toString()]=t);this.deferUpdate(()=>{for(let i=e.row;i<=e.row2;i++)this.rows[i].visible=!t;s&&(s.visible=!0);if(!t){let t=this._getRowLevel(i),s=[];for(let i=e.row;i<=e.row2;i++)if(this._getRowLevel(i)>-1){let l=this._getGroupedRows(new CellRange(i,t));assert(l.row>=e.row&&l.row2<=e.row2,"child range overflow");s.push(l);i++}s.forEach(e=>{let t=this._getRowCollapsed(e);this._setRowCollapsed(e,t)})}})}_collapseRowsToLevel(e){e>=this._ng.rowFields.length&&(e=-1);this.deferUpdate(()=>{for(let t=0;t<this.rows.length;t++){let i=this._getRowLevel(t);if(i>0){let s=this.rows[t].dataItem[_PivotKey._ROW_KEY_NAME];this._collapsedKeys[s.toString()]=e>0&&i>=e}if(e<0)this.rows[t].visible=!0;else{let s=i>-1&&i<=e;s||(this._ng.totalsBeforeData?0==t&&(s=!0):t==this.rows.length-1&&(s=!0));this.rows[t].visible=s}}})}_getColLevel(e){return this._ng._getColLevel(this.columns[e].binding)}_getGroupedCols(e){let t,i=this._getColLevel.bind(this),s=e.row+1,l=this.columns.length,n=this._ng.totalsBeforeData,r=e.col;if(0==i(r)){r=n?1:0;t=n?l-1:l-2}else{if(this._ng.totalsBeforeData)for(r=e.col;r<l&&!(i(r)<0);r++);else for(r=e.col;r>=0&&!(i(r)<0);r--);for(;r>0;r--){let e=i(r-1);if(e>=0&&e<=s)break}for(t=r;t<l-1;t++){let e=i(t+1);if(e>=0&&e<=s)break}}assert(t>=r,"group end < start?");return t>=r?new CellRange(e.row,r,e.row2,t):e}_toggleColCollapsed(e){this._setColCollapsed(e,!this._getColCollapsed(e))}_getColCollapsed(e){e=this._getGroupedCols(e);let t=this._ng,i=t.totalsBeforeData?e.col-t.valueFields.length:e.col2+1,s=this.columns[i],l=s?s.binding:null;return!!l&&this._collapsedKeys[l.toString()]}_setColCollapsed(e,t){e=this._getGroupedCols(e);let i=this._ng,s=i.totalsBeforeData?e.col-i.valueFields.length:e.col2+1,l=this.columns[s],n=l?l.binding:null;n&&(this._collapsedKeys[n.toString()]=t);this.deferUpdate(()=>{for(let t=1;t<=i.valueFields.length;t++)this.columns[i.totalsBeforeData?e.col-t:e.col2+t].visible=!0;for(let i=e.col;i<=e.col2;i++)this.columns[i].visible=!t;if(!t){let t=this._getColLevel(s),l=[];for(let s=e.col;s<=e.col2;s++)if(this._getColLevel(s)>-1){let n=this._getGroupedCols(new CellRange(t,s));assert(n.col>=e.col&&n.col2<=e.col2,"child range overflow");l.push(n);s+=i.valueFields.length-1}l.forEach(e=>{let t=this._getColCollapsed(e);this._setColCollapsed(e,t)})}})}_collapseColsToLevel(e){e>=this._ng.columnFields.length&&(e=-1);this.deferUpdate(()=>{for(let t=0;t<this.columns.length;t++){let i=this._getColLevel(t);if(i>0){let s=this._ng._getKey(this.columns[t].binding);this._collapsedKeys[s.toString()]=e>0&&i>=e}if(e<0)this.columns[t].visible=!0;else{let s=i>-1&&i<=e;this.columns[t].visible=s}}})}dispose(){if(this._ctxMenu){this._ctxMenu.dispose();this._ctxMenu=null}if(this._dlgDetail){this._dlgDetail.dispose();this._dlgDetail=null}if(this._ng){this._ng.updatingView.removeHandler(this._updatingView,this);this._ng.viewDefinitionChanged.removeHandler(this._viewDefinitionChanged,this);this._ng._hasDeferredUpdatesChanged.removeHandler(this._hasDeferredUpdatesChanged,this)}super.dispose()}}PivotGrid._WJC_COLLAPSE=PivotGridClsNames.pivotCollapse;PivotGrid._WJC_DISABLED=ControlStateClsNames.disabled;PivotGrid._ctrlTemplate="";export class DetailDialog extends Popup{constructor(e,t){super(e,null);let i=this.getTemplate();this.applyTemplate(`${ControlClsNames.hostElement} ${DetailDialogClsNames.hostElement}`,i,{_sCnt:"sp-cnt",_dSummary:"div-summary",_dGrid:"div-grid",_btnOK:"btn-ok",_gHdr:"g-hdr"});this._g=new FlexGrid(this._dGrid,{isReadOnly:!0});this.initialize(t)}static get controlTemplate(){DetailDialog._ctrlTemplate||(DetailDialog._ctrlTemplate="<div>"+`<div class="${DetailDialogClsNames.dialogHeader}">`+'<span wj-part="g-hdr">Detail View:</span> <span wj-part="sp-cnt"></span></div>'+`<div class="${DetailDialogClsNames.dialogBody}">`+`<div wj-part="div-summary" class="${DetailDialogClsNames.summary}"></div>`+'<div wj-part="div-grid"></div></div>'+`<div class="${DetailDialogClsNames.dialogFooter}">`+`<button wj-part="btn-ok"class="${UtilitesClsNames.hide} ${InputFormElementsClsNames.btn}">OK</button>&nbsp;&nbsp;`+"</div></div>");return DetailDialog._ctrlTemplate}static set controlTemplate(e){DetailDialog._ctrlTemplate=e}showDetail(e,t){let i=e.getDetailView(t.row,t.col);this._g.itemsSource=i;let s=tryCast(i,"IPagedCollectionView");this._updateDetailCount(s?s.totalItemCount:i.items.length);i.collectionChanged.addHandler(()=>{this._updateDetailCount(i.items.length)});let l=e.engine,n=culture.olap.DetailDialog,r="";this._gHdr.textContent=n.header;this._btnOK.textContent=n.ok;let a=e.rows[t.row].dataItem[_PivotKey._ROW_KEY_NAME];this._rowHdr=escapeHtml(this._getHeader(a));this._rowHdr&&(r+=n.row+": <b>"+this._rowHdr+"</b><br>");let o=l._getKey(e.columns[t.col].binding);this._colHdr=escapeHtml(this._getHeader(o));this._colHdr&&(r+=n.col+": <b>"+this._colHdr+"</b><br>");let h=l.valueFields,d=h[t.col%h.length],u=e.getCellData(t.row,t.col,!0);this._cellHdr=escapeHtml(d.header);this._cellValue=escapeHtml(u);r+=this._cellHdr+": <b>"+this._cellValue+"</b>";this._dSummary.innerHTML=r}get rowHeader(){return this._rowHdr}get columnHeader(){return this._colHdr}get cellHeader(){return this._cellHdr}get cellValue(){return this._cellValue}get detailCount(){return this._detailCount}_updateDetailCount(e){let t=culture.olap.DetailDialog;this._sCnt.textContent=format(1==e?t.item:t.items,{cnt:e});this._detailCount=e}_getHeader(e){if(e&&e.values&&e.values.length){let t=[];for(let i=0;i<e.values.length;i++)t.push(e.getValue(i,!0));return t.join(" - ")}return null}}DetailDialog._ctrlTemplate="";export class _PivotMergeManager extends MergeManager{getMergedRange(e,t,i,s=!0){return this._getMergedRange(e,t,i,s)}_getMergedRange(e,t,i,s=!0,l=!0){let n=e.grid.collectionView;this._ng=n instanceof PivotCollectionView?n.engine:null;if(!this._ng)return super._getMergedRange(e,t,i,s,l);if(t<0||t>=e.rows.length||i<0||i>=e.columns.length)return null;let r=e.grid.allowMerging,a=AllowMerging;switch(e.cellType){case CellType.TopLeft:return 0!=(r&a.AllHeaders)?this._getMergedTopLeftRange(e,t,i):null;case CellType.RowHeader:return 0!=(r&a.RowHeaders)?this._getMergedRowHeaderRange(e,t,i,s?e.viewRange:null):null;case CellType.ColumnHeader:return 0!=(r&a.ColumnHeaders)?this._getMergedColumnHeaderRange(e,t,i,s?e.viewRange:null):null}return null}_getMergedTopLeftRange(e,t,i){let s=new CellRange(t,i),l=e.grid;if(l.outlineMode&&l.showRowFieldHeaders&&s.row==e.rows.length-1){s.col=0;s.col2=e.columns.length-1;return s}for(;s.col>0&&!e.getCellData(t,s.col,!0);)s.col--;for(;s.col2<e.columns.length-1&&!e.getCellData(t,s.col2+1,!0);)s.col2++;return s.isSingleCell?null:s}_getMergedRowHeaderRange(e,t,i,s){let l=e.grid,n=e.columns[i],r=e.columns,a=e.rows;if(!n.allowMerging)return null;if(l.outlineMode){if(this._isSubtotal(e,t,i)||this._isSubtotal(e,t,i+1)){let s=this._getOutlineRange(e,t,i);return s.isSingleCell?null:s}if(i<e.columns.length-1){let e=l._getGroupedRows(new CellRange(t,i));return e.isSingleCell?null:e}return null}let o=this._ng._getRowLevel(t);if(o>-1&&i>=o){let n,a,o=e.getCellData(t,i,!1),h=0,d=r.length-1;if(i>=r._frozenInternal&&l._vtCols<r.length&&s){h=s.col;d=s.col2}for(n=i;n>h&&e.getCellData(t,n-1,!1)==o;n--);for(a=i;a<d&&e.getCellData(t,a+1,!1)==o;a++);return n!=a?new CellRange(t,n,t,a):null}let h,d,u=0,_=a.length-1;if(i>=a._frozenInternal&&l._vtRows<a.length&&s){u=s.row;_=s.row2}for(h=t;h>u&&this._sameColumnValues(e,t,h-1,i);h--);for(d=t;d<_&&this._sameColumnValues(e,t,d+1,i);d++);return h!=d?new CellRange(h,i,d,i):null}_sameColumnValues(e,t,i,s){for(;s>=0;s--){if(e.getCellData(t,s,!1)!=e.getCellData(i,s,!1))return!1}return!0}_isSubtotal(e,t,i){let s=e.rows[t].dataItem,l=s?s[_PivotKey._ROW_KEY_NAME]:null;return s&&i>l.values.length-1&&i<e.columns.length}_getOutlineRange(e,t,i){let s=new CellRange(t,i);s.col2=e.columns.length-1;for(;s.col&&this._isSubtotal(e,t,s.col);)s.col--;return s}_getMergedColumnHeaderRange(e,t,i,s){let l=e.columns[i],n=this._ng._getKey(l.binding),r=e.getCellData(t,i,!1),a=e.grid,o=e.columns,h=e.rows,d=this._ng._getColLevel(n);if(d>-1&&t>=d){let l,n,o=0,d=h.length-1;if(i>=h._frozenInternal&&a._vtRows<h.length&&s){o=s.row;d=s.row2}for(l=t;l>o&&e.getCellData(l-1,i,!1)==r;l--);for(n=t;n<d&&e.getCellData(n+1,i,!1)==r;n++);if(l!=n)return new CellRange(l,i,n,i)}if(s){i<e.columns._frozenInternal&&(s.col=s.col2=0);t<e.rows._frozenInternal&&(s.row=s.row2=0)}let u,_,g=0,c=o.length-1;if(i>=o._frozenInternal&&a._vtCols<o.length&&s){g=s.col;c=s.col2}for(u=i;u>g&&this._sameRowValues(e,t,i,u-1);u--);for(_=i;_<c&&this._sameRowValues(e,t,i,_+1);_++);return u!=_?new CellRange(t,u,t,_):null}_sameRowValues(e,t,i,s){for(;t>=0;t--){if(e.getCellData(t,i,!1)!=e.getCellData(t,s,!1))return!1}return!0}}export var PivotChartType;!function(e){e[e.Column=0]="Column";e[e.Bar=1]="Bar";e[e.Scatter=2]="Scatter";e[e.Line=3]="Line";e[e.Area=4]="Area";e[e.Pie=5]="Pie"}(PivotChartType||(PivotChartType={}));export var LegendVisibility;!function(e){e[e.Always=0]="Always";e[e.Never=1]="Never";e[e.Auto=2]="Auto"}(LegendVisibility||(LegendVisibility={}));export class PivotChart extends Control{constructor(e,t){super(e);this._chartType=PivotChartType.Column;this._showHierarchicalAxes=!0;this._showTotals=!1;this._showTitle=!0;this._showLegend=LegendVisibility.Always;this._legendPosition=Position.Right;this._maxSeries=PivotChart.MAX_SERIES;this._maxPoints=PivotChart.MAX_POINTS;this._stacking=Stacking.None;this._colItms=[];this._dataItms=[];this._lblsSrc=[];this._grpLblsSrc=[];addClass(this.hostElement,PivotChartClsNames.hostElement);this._isPieChart()?this._createFlexPie():this._createFlexChart();super.initialize(t)}_getProductInfo(){return"D6F4,PivotChart"}get engine(){return this._ng}get itemsSource(){return this._itemsSource}set itemsSource(e){if(e&&this._itemsSource!==e){let t=this._itemsSource;e instanceof PivotPanel?e=e.engine.pivotView:e instanceof PivotEngine&&(e=e.pivotView);this._itemsSource=asCollectionView(e);this._onItemsSourceChanged(t)}}get chartType(){return this._chartType}set chartType(e){if((e=asEnum(e,PivotChartType))!=this._chartType){var t=this._chartType;this._chartType=e;this._changeChartType();e!==PivotChartType.Bar&&t!==PivotChartType.Bar||this._updatePivotChart()}}get showHierarchicalAxes(){return this._showHierarchicalAxes}set showHierarchicalAxes(e){if(e!=this._showHierarchicalAxes){this._showHierarchicalAxes=asBoolean(e,!0);!this._isPieChart()&&this._flexChart&&this._updateFlexChart(this._dataItms,this._lblsSrc,this._grpLblsSrc)}}get showTotals(){return this._showTotals}set showTotals(e){if(e!=this._showTotals){this._showTotals=asBoolean(e,!0);this._updatePivotChart()}}get showTitle(){return this._showTitle}set showTitle(e){if(e!=this._showTitle){this._showTitle=asBoolean(e,!0);this._updatePivotChart()}}get showLegend(){return this._showLegend}set showLegend(e){if((e=asEnum(e,LegendVisibility))!=this.showLegend){this._showLegend=e;this._updatePivotChart()}}get legendPosition(){return this._legendPosition}set legendPosition(e){if((e=asEnum(e,Position))!=this.legendPosition){this._legendPosition=e;this._updatePivotChart()}}get stacking(){return this._stacking}set stacking(e){if((e=asEnum(e,Stacking))!=this._stacking){this._stacking=e;if(this._flexChart){this._flexChart.stacking=this._stacking;this._updatePivotChart()}}}get maxSeries(){return this._maxSeries}set maxSeries(e){if(e!=this._maxSeries){this._maxSeries=asNumber(e);this._updatePivotChart()}}get maxPoints(){return this._maxPoints}set maxPoints(e){if(e!=this._maxPoints){this._maxPoints=asNumber(e);this._updatePivotChart()}}get flexChart(){return this._flexChart}get flexPie(){return this._flexPie}get header(){return this._header}set header(e){if(e!=this._header){this._header=asString(e,!0);this.invalidate()}}get footer(){return this._footer}set footer(e){if(e!=this._footer){this._footer=asString(e,!0);this.invalidate()}}get headerStyle(){return this._headerStyle}set headerStyle(e){if(e!=this._headerStyle){this._headerStyle=e;this.invalidate()}}get footerStyle(){return this._footerStyle}set footerStyle(e){if(e!=this._footerStyle){this._footerStyle=e;this.invalidate()}}refresh(e=!0){super.refresh(e);this._isPieChart()?this._flexPie&&this._flexPie.refresh(e):this._flexChart&&this._flexChart.refresh(e);this._updatePivotChart()}saveImageToDataUrl(e,t){this._isPieChart()?this._flexPie&&this._flexPie.saveImageToDataUrl(e,t):this._flexChart&&this._flexChart.saveImageToDataUrl(e,t)}saveImageToFile(e){this._isPieChart()?this._flexPie&&this._flexPie.saveImageToFile(e):this._flexChart&&this._flexChart.saveImageToFile(e)}_onItemsSourceChanged(e){this._ng&&this._ng.updatedView.removeHandler(this._updatePivotChart,this);e&&e.collectionChanged.removeHandler(this._updatePivotChart,this);let t=this._itemsSource;this._ng=t instanceof PivotCollectionView?t.engine:null;this._ng&&this._ng.updatedView.addHandler(this._updatePivotChart,this);this._itemsSource&&this._itemsSource.collectionChanged.addHandler(this._updatePivotChart,this);this._updatePivotChart()}_createFlexChart(){let e=document.createElement("div");this.hostElement.appendChild(e);this._flexChart=new FlexChart(e);this._flexChart._bindingSeparator=null;this._flexChart.legend.position=Position.Right;this._flexChart.bindingX=_PivotKey._ROW_KEY_NAME;this._flexChart.stacking=this._stacking;this._flexChart.tooltip.content=e=>{let t=e.name?"<b>"+e.name+"</b> <br/>":"";return t+=this._getLabel(e.x)+" "+this._getValue(e)};this._flexChart.hostElement.style.visibility="hidden"}_createFlexPie(){let e=document.createElement("div");this.hostElement.appendChild(e);this._colMenu=new MultiSelect(e,{displayMemberPath:"text",placeholder:culture.olap.PivotPanel.cols,selectedValuePath:"prop",showSelectAllCheckbox:!0,keyActionPrintCharacters:0,keyActionTab:0});this._colMenu.hostElement.style.visibility="hidden";this._colMenu.checkedItemsChanged.addHandler((e,t)=>this._updateFlexPieBinding());let t=document.createElement("div");this.hostElement.appendChild(t);this._flexPie=new FlexPie(t);this._flexPie.bindingName=_PivotKey._ROW_KEY_NAME;this._flexPie.tooltip.content=e=>"<b>"+this._getLabel(this._dataItms[e.pointIndex][_PivotKey._ROW_KEY_NAME])+"</b> <br/>"+this._getValue(e);this._flexPie.rendering.addHandler(this._updatePieInfo,this)}_updatePivotChart(){if(!this._ng||!this._ng.pivotView)return;let e,t=[],i=[],s=[],l=0,n=this._ng.pivotView,r=this._ng.rowFields;for(let a=0;a<n.items.length;a++){let o=n.items[a],h=o.$rowKey;0==a&&this._getColumns(o);if(t.length>=this._maxPoints)break;if(!this._isTotalRow(o[_PivotKey._ROW_KEY_NAME])){t.push(o);i.push({value:t.length-1,text:this._getLabel(o[_PivotKey._ROW_KEY_NAME])});for(let i=0;i<r.length;i++){s.length<=i&&s.push([]);if(this._getMergeIndex(h,e)<i){l=s[i].length-1;let e=s[i][l];0===l&&i<r.length-1&&(e.value=(e.width-1)/2);if(l>0&&i<r.length-1){let t=this._getOffsetWidth(s[i]);e.value=t+(e.width-1)/2}s[i].push({value:t.length-1,text:h.getValue(i,!0),width:1})}else{l=s[i].length-1;s[i][l].width++}}e=h}}for(let e=0;e<r.length;e++)if(e<s.length){l=s[e].length-1;s[e][l].value=this._getOffsetWidth(s[e])+(s[e][l].width-1)/2}this._dataItms=t;this._lblsSrc=i;this._grpLblsSrc=s;this._updateFlexChartOrPie()}_updateFlexChartOrPie(){let e=this._isPieChart();!e&&this._flexChart?this._updateFlexChart(this._dataItms,this._lblsSrc,this._grpLblsSrc):e&&this._flexPie&&this._updateFlexPie(this._dataItms,this._lblsSrc)}_updateFlexChart(e,t,i){let s,l=this._flexChart,n=l?l.hostElement:null;if(this._ng&&l&&n){l.beginUpdate();l.itemsSource=e;this._createSeries();l.series&&l.series.length>0&&e.length>0?n.style.visibility="visible":n.style.visibility="hidden";l.header=this.header||this._getChartTitle();this.headerStyle&&(l.headerStyle=this.headerStyle);this.footer&&(l.footer=this.footer);this.footerStyle&&(l.footerStyle=this.footerStyle);if(this._isRotatedChart()){if(this._showHierarchicalAxes&&i.length>0){l.axisY.itemsSource=i[i.length-1];l.axisX.labelAngle=void 0;if(i.length>=2)for(let e=i.length-2;e>=0;e--)this._createGroupAxes(i[e])}else{l.axisY.labelAngle=void 0;l.axisY.itemsSource=t}l.axisX.itemsSource=void 0}else{if(this._showHierarchicalAxes&&i.length>0){l.axisX.itemsSource=i[i.length-1];if(i.length>=2)for(let e=i.length-2;e>=0;e--)this._createGroupAxes(i[e])}else{l.axisX.labelAngle=void 0;l.axisX.itemsSource=t}l.axisY.itemsSource=void 0}l.axisX.labelPadding=6;l.axisY.labelPadding=6;if(this._isRotatedChart()){s=l.axisX;l.axisY.reversed=!0}else{s=l.axisY;l.axisY.reversed=!1}l.stacking!==Stacking.Stacked100pc&&this._ng.valueFields.length>0&&this._ng.valueFields[0].format?s.format=this._ng.valueFields[0].format:s.format="";l.legend.position=this._getLegendPosition();l.endUpdate()}}_updateFlexPie(e,t){let i=this._flexPie,s=i?i.hostElement:null,l=this._colMenu;if(!this._ng||!i||!s)return;this._colItms.length>0&&e.length>0?s.style.visibility="visible":s.style.visibility="hidden";i.beginUpdate();i.itemsSource=e;i.bindingName=_PivotKey._ROW_KEY_NAME;this._colItms&&this._colItms.length>0&&(i.binding=this._colItms[0].prop);i.header=this.header||this._getChartTitle();this.headerStyle&&(i.headerStyle=this.headerStyle);this.footer&&(i.footer=this.footer);this.footerStyle&&(i.footerStyle=this.footerStyle);i.legend.position=this._getLegendPosition();i.endUpdate();let n=this._getTitle(this._ng.columnFields);""!==n&&(n="<b>"+n+": </b>");if(this._colItms&&this._colItms.length>1&&e.length>0){l.hostElement.style.visibility="visible";l.itemsSource=this._colItms;l.checkedItems=[this._colItms[0]];l.invalidate()}else l.hostElement.style.visibility="hidden"}_getLegendPosition(){let e=this.legendPosition;if(this.showLegend==LegendVisibility.Never)e=Position.None;else if(this.showLegend==LegendVisibility.Auto&&this.flexChart&&this.flexChart.series){let t=0;this.flexChart.series.forEach(e=>{let i=e.visibility;e.name&&i!=SeriesVisibility.Hidden&&i!=SeriesVisibility.Plot&&t++});t<2&&(e=Position.None)}return e}_createSeries(){this._flexChart&&(this._flexChart.series.length=0);let e=1==this._ng.valueFields.length;for(let t=0;t<this._colItms.length;t++){let i=new Series,s=this._colItms[t].prop,l=this._colItms[t].text;if(e){let e=l.lastIndexOf(";");e>-1&&(l=l.substr(0,e))}i.binding=s;i.name=l;this._flexChart.series.push(i)}}_getColumns(e){let t,i,s=0;if(e){this._colItms=[];for(let l in e)if(e.hasOwnProperty(l)&&l!==_PivotKey._ROW_KEY_NAME&&s<this._maxSeries&&this._isValidColumn(l)){t=this._ng._getKey(l);i=this._getLabel(t);this._colItms.push({prop:l,text:this._getLabel(t)});s++}}}_createGroupAxes(e){let t,i=this._flexChart,s=this._isRotatedChart()?i.axisY:i.axisX;if(!e)return;(t=new Axis).labelAngle=0;t.labelPadding=6;t.position=this._isRotatedChart()?Position.Left:Position.Bottom;t.majorTickMarks=TickMark.None;t.itemsSource=e;t.reversed=s.reversed;t.axisLine=!1;t.itemFormatter=(i,s)=>{if(t._axrect){let l=.5*e.filter((function(e){return e.value==s.val}))[0].width;if(this._isRotatedChart()){let e=t.reversed?-1:1,n=t.convert(s.val+l)+5*e,r=t.convert(s.val-l)-5*e,a=t._axrect.left+t._axrect.width-5;i.drawLine(a,n,a,r,PivotChart.HRHAXISCSS);i.drawLine(a,n,a+5,n,PivotChart.HRHAXISCSS);i.drawLine(a,r,a+5,r,PivotChart.HRHAXISCSS);i.drawLine(a,s.pos.y,a-5,s.pos.y,PivotChart.HRHAXISCSS)}else{let e=t.convert(s.val-l)+5,n=t.convert(s.val+l)-5,r=t._axrect.top;i.drawLine(e,r,n,r,PivotChart.HRHAXISCSS);i.drawLine(e,r,e,r-5,PivotChart.HRHAXISCSS);i.drawLine(n,r,n,r-5,PivotChart.HRHAXISCSS);i.drawLine(s.pos.x,r,s.pos.x,r+5,PivotChart.HRHAXISCSS)}}return s};t.min=s.actualMin;t.max=s.actualMax;s.rangeChanged.addHandler((function(){isNaN(t.min)&&isNaN(s.actualMin)||t.min==s.actualMin||(t.min=s.actualMin);isNaN(t.max)&&isNaN(s.actualMax)||t.max==s.actualMax||(t.max=s.actualMax)}));let l=new Series;l.visibility=SeriesVisibility.Hidden;this._isRotatedChart()?l.axisY=t:l.axisX=t;i.series.push(l)}_updateFlexPieBinding(){let e="",t=[];this._colMenu.checkedItems.forEach(i=>{e.length>0&&(e+=",");e+=i.prop;t.push(i.text)});this._flexPie.binding=e;this._flexPie.titles=t.length>1?t:null}_updatePieInfo(){this._flexPie&&(this._flexPie._labels=this._flexPie._labels.map((e,t)=>this._lblsSrc[t].text))}_changeChartType(){let e=null;if(this.chartType===PivotChartType.Pie){this._flexPie||this._createFlexPie();this._updateFlexPie(this._dataItms,this._lblsSrc);this._swapChartAndPie(!1)}else{switch(this.chartType){case PivotChartType.Column:e=ChartType.Column;break;case PivotChartType.Bar:e=ChartType.Bar;break;case PivotChartType.Scatter:e=ChartType.Scatter;break;case PivotChartType.Line:e=ChartType.Line;break;case PivotChartType.Area:e=ChartType.Area}if(this._flexChart)"none"!==this._flexChart.hostElement.style.display&&e!==PivotChartType.Bar&&this._flexChart.chartType!==ChartType.Bar||this._updateFlexChart(this._dataItms,this._lblsSrc,this._grpLblsSrc);else{this._createFlexChart();this._updateFlexChart(this._dataItms,this._lblsSrc,this._grpLblsSrc)}this._flexChart.chartType=e;this._swapChartAndPie(!0)}}_swapChartAndPie(e){this._flexChart&&(this._flexChart.hostElement.style.display=e?"block":"none");this._flexPie&&(this._flexPie.hostElement.style.display=e?"none":"block");if(this._colMenu&&this._colMenu.hostElement){this._colMenu.hostElement.style.display=e?"none":"block";this._colMenu.hostElement.style.top="0";this._clearStyleTopTimer=setTimeout(()=>{this._colMenu.hostElement.style.top=""},0)}}_getLabel(e){let t="";if(!e||!e.values)return t;let i=e.valueFields?e.valueField:null;switch(e.values.length){case 0:i&&(t+=i.header);break;case 1:t+=e.getValue(0,!0);i&&(t+="; "+i.header);break;default:for(let i=0;i<e.values.length;i++){i>0&&(t+="; ");t+=e.getValue(i,!0)}i&&(t+="; "+i.header)}return t}_getValue(e){let t=this._ng.valueFields,i=e.series?e.series.chart.series.indexOf(e.series):0,s=i<t.length?t[i].format:t.length?t[0].format:"";return s?Globalize.format(e.y,s):e._yfmt}_getChartTitle(){if(!this.showTitle||!this._ng.valueFields.length)return null;let e=this._ng,t=this._getTitle(e.valueFields),i=this._getTitle(e.rowFields),s=this._getTitle(e.columnFields),l=t,n=culture.olap.PivotChart;if(t&&this._dataItms.length>0){i&&(l+=format(" {by} {rows}",{by:n.by,rows:i}));s&&(l+=format(" {and} {cols}",{and:i?n.and:n.by,cols:s}))}return l}_getTitle(e){let t="";for(let i=0;i<e.length;i++){t.length>0&&(t+="; ");t+=e[i].header}return t}_isValidColumn(e){let t=e.split(";"),i=this._showTotals;return 0===this._ng.columnFields.length||(t&&2===t.length?i:!(!t||t.length-2!==this._ng.columnFields.length)&&!i)}_isTotalRow(e){return e.values.length<this._ng.rowFields.length}_isPieChart(){return this._chartType==PivotChartType.Pie}_isRotatedChart(){return!this._isPieChart()&&this._chartType==PivotChartType.Bar!==this._flexChart.rotated}_getMergeIndex(e,t){let i=-1;if(null!=e&&null!=t&&e.values.length==t.values.length&&e.values.length==e.fields.length&&t.values.length==t.fields.length)for(let s=0;s<e.values.length;s++){if(e.getValue(s,!0)!=t.getValue(s,!0))return i;i=s}return i}_getOffsetWidth(e){let t=0;if(e.length<=1)return t;for(let i=0;i<e.length-1;i++)t+=e[i].width;return t}dispose(){if(this._flexChart){this._flexChart.dispose();this._flexChart=null}if(this._flexPie){this._flexPie.dispose();this._flexPie=null}if(this._colMenu){this._colMenu.dispose();this._colMenu=null}if(this._clearStyleTopTimer){clearTimeout(this._clearStyleTopTimer);this._clearStyleTopTimer=null}this._ng&&this._ng.updatedView.removeHandler(this._updatePivotChart,this);this._itemsSource&&this._itemsSource.collectionChanged.removeHandler(this._updatePivotChart,this);super.dispose()}}PivotChart.MAX_SERIES=100;PivotChart.MAX_POINTS=100;PivotChart.HRHAXISCSS=PivotChartClsNames.hierarchicalAxesLine;export class _MdxQueryBuilder{constructor(e,t){this._ng=null;this._cubeName=null;this._ng=e;this._cubeName=t}buildQuery(){let e=new _TextBuilder,t=this.buildWhereSection(this._ng.valueFields);e.append("SELECT ",this.buildAxes()," FROM ",this.buildCubeName(),t);e.append(" CELL PROPERTIES VALUE, FORMAT_STRING");return e.toString()}buildWhereSection(e){let t=new _TextBuilder;if(1==e.length){t.append(this.buildSetForMeasuresShelf(e));t.wrap(" WHERE ","")}return t.toString()}buildCubeName(){let e=new _TextBuilder;e.append(this.buildSubcubeExpression());let t=e.length>0;t&&e.wrap("SELECT "," FROM ");e.append("[",this._cubeName,"]");t&&e.wrap("(",")");return e.toString()}buildSubcubeExpression(){let e=new _TextBuilder,t=this.getMeasureFilterExpressions(this._ng.valueFields),i=this.buildFilterAttributeSet(this._ng.filterFields),s=this.buildFilterAttributeSet(this._ng.rowFields,t),l=this.buildFilterAttributeSet(this._ng.columnFields,0==s.length?t:null);e.joinItemToList(i);e.joinItemToList(s);e.joinItemToList(l);if(e.length>0){e.wrap("(",")");e.append(" ON COLUMNS")}return e.toString()}buildFilterAttributeSet(e,t){let i=new _TextBuilder;for(let s=0;s<e.length;s++){let l=e[s],n=this.buildFilterString(l,0==s?t:null);i.joinItemToList(n)}return i.toString()}buildFilterString(e,t){let i=new _TextBuilder;e.filter.isActive?e.filter.conditionFilter.isActive?i.append(this.getConditionFilterString(e,t)):e.filter.valueFilter.isActive&&i.append(this.getValueFilterString(e)):t&&i.append(this.getConditionFilterString(e,t));return i.toString()}getValueFilterString(e){let t=new _TextBuilder,i=e.filter.valueFilter,s=Object.keys(i.showValues).map(t=>e.key+".["+t+"]");t.append(s.join(","));t.length>0&&t.wrap("{","}");return t.toString()}getConditionFilterString(e,t){let i=new _TextBuilder,s=e.key+".LEVELS(1).ALLMEMBERS",l=e.filter.conditionFilter.condition1,n=e.filter.conditionFilter.condition2;if(l.isActive){i.append(this.getConditionFilterExpression(e,l));n.isActive&&i.append(e.filter.conditionFilter.and?" AND ":" OR ")}n.isActive&&i.append(this.getConditionFilterExpression(e,n));if(t&&t.length>0){i.length>0&&i.append(" AND ");i.append(t.join(" AND "))}i.length>0&&i.wrap("Filter("+s+",(","))");return i.toString()}getMeasureFilterExpressions(e){let t=[];for(let i=0;i<e.length;i++){let s=new _TextBuilder,l=e[i],n=(l.dimensionType,DimensionType.Measure,l.filter.conditionFilter.condition1),r=l.filter.conditionFilter.condition2;if(n.isActive){s.append(this.getConditionFilterExpression(l,n));r.isActive&&s.append(l.filter.conditionFilter.and?" AND ":" OR ")}r.isActive&&s.append(this.getConditionFilterExpression(l,r));if(s.length>0){s.wrap("(",")");t.push(s.toString())}}return t}getConditionFilterExpression(e,t){if(!t.isActive)return"";let i=e.dimensionType==DimensionType.Measure,s=e.dataType==DataType.Number,l=e.dataType==DataType.Date,n=s||l?"member_value":"member_caption",r=i?e.key:e.key+".CurrentMember."+n,a=l?"CDate('"+Globalize.formatDate(t.value,"d")+"')":t.value.toString(),o=new _TextBuilder;switch(t.operator){case Operator.BW:o.append("(Left(",r,",",a.length.toString(),')="',a,'")');break;case Operator.NBW:o.append("(Left(",r,",",a.length.toString(),')<>"',a,'")');break;case Operator.EW:o.append("(Right(",r,",",a.length.toString(),')="',a,'")');break;case Operator.NEW:o.append("(Right(",r,",",a.length.toString(),')<>"',a,'")');break;case Operator.EQ:i||s||l?o.append("(",r,")=",a):o.append("(",r,')="',a,'"');break;case Operator.NE:i||s||l?o.append("(",r,")<>",a):o.append("(",r,')<>"',a,'"');break;case Operator.CT:o.append("(InStr(1,",r,',"',a,'")>0)');break;case Operator.NC:o.append("(InStr(1,",r,',"',a,'")=0))');break;case Operator.GT:o.append("(",r,")>",a);break;case Operator.LT:o.append("(",r,")<",a);break;case Operator.GE:o.append("(",r,")>=",a);break;case Operator.LE:o.append("(",r,")<=",a)}return o.toString()}buildAxes(){let e=new _TextBuilder,t=this.buildSetForAttributesShelf(this._ng.rowFields);e.joinItemToList(t);this._ng.rowFields.length>0&&(this._ng.columnFields.length>0||this._ng.valueFields.length>1?e.append(" ON ROWS"):e.append(" ON COLUMNS"));t=this.buildSetForAttributesColumnShelf(this._ng.columnFields);e.joinItemToList(t);this._ng.columnFields.length>0&&e.append(" ON COLUMNS");if(this._ng.valueFields.length>1&&0==this._ng.columnFields.length){t=this.buildSetForMeasuresShelf(this._ng.valueFields);e.joinItemToList(t);e.append(" ON COLUMNS")}return e.toString()}buildSetForAttributesShelf(e){let t=new _TextBuilder;for(let s=0;s<e.length;s++){var i=e[s];i.dimensionType!=DimensionType.Attribute&&i.dimensionType!=DimensionType.Hierarchy||t.joinItemToList(this.buildAttributeSetForAxis(i));s>0&&t.wrap("CrossJoin(",")")}t.wrap("NON EMPTY ","");return t.toString()}buildSetForAttributesColumnShelf(e){let t=new _TextBuilder;for(let s=0;s<e.length;s++){var i=e[s];i.dimensionType!=DimensionType.Attribute&&i.dimensionType!=DimensionType.Hierarchy||t.joinItemToList(this.buildAttributeSetForAxis(i))}this._ng.valueFields.length>1&&e.length>0&&t.joinItemToList(this.buildSetForMeasuresShelf(this._ng.valueFields));(this._ng.valueFields.length>1&&e.length>0||e.length>1)&&t.wrap("CrossJoin(",")");t.wrap("NON EMPTY ","");return t.toString()}buildSetForMeasuresShelf(e){let t=new _TextBuilder;for(let s=0;s<e.length;s++){var i=e[s];i.dimensionType!=DimensionType.Measure&&i.dimensionType!=DimensionType.Kpi||t.joinItemToList(this.buildMeasureSetForAxis(i))}t.wrap("{","}");return t.toString()}buildAttributeSetForAxis(e){let t=new _TextBuilder;if(e.dimensionType==DimensionType.Hierarchy){t.append(e.key);t.append(".ALLMEMBERS");t.wrap("{","}");t.wrap("HIERARCHIZE(",")")}return t.toString()}buildMeasureSetForAxis(e){let t=new _TextBuilder;e.dimensionType!=DimensionType.Measure&&e.dimensionType!=DimensionType.Kpi||t.append(e.key);return t.toString()}}export class _SqlServerConnection extends _ServerConnection{constructor(e,t){super(e,t.url);this._jsonResult=null;this._dataTypes=null;this._debug=!1;e.sortOnServer=!0;assert(isString(t.cube)&&!isNullOrWhiteSpace(t.cube),"Cube name required.");this._cubeName=t.cube;this._catalogName=isString(t.catalog)&&!isNullOrWhiteSpace(t.catalog)?t.catalog:"";this._url=t.url;this._user=t.user;this._password=t.password}getFields(){this._getSession();this._jsonResult=null;this._dataTypes=null;this._getProperties(this._token);this._getDimensions(this._token);this._endSession();return this._jsonResult}getOutputView(e){this._ng.onUpdatingView(new ProgressEventArgs(0));let t=new _MdxQueryBuilder(this._ng,this._cubeName).buildQuery();this._jsonResult=[];this._getSession();this._execQuery(this._token,t,t=>{asFunction(e)(this._jsonResult);this._ng.onUpdatedView(new ProgressEventArgs(100))})}getDetail(e,t){throw"getDetail method not supported"}getSortedKeys(e,t){let i=Object.keys(e);if(this._ng.sortOnServer){if(i.length>1){let e=t?this._ng.showRowTotals:this._ng.showColumnTotals,s=t?this._ng.rowFields.length:this._ng.columnFields.length,l=this._ng.valueFields.length;if(!this._ng.totalsBeforeData&&e!==ShowTotals.None){let e=-1,n=[],r=[];i.forEach(i=>{let a=this._getKeyLength(i,t);if(a===s)r.push(i);else if(a>=e)n.push(i);else{if(n.length>=l)for(var o=0;o<l;o++)r.push(n.pop());n.push(i)}e=a});if(n.length>0){n.reverse();r=r.concat(n)}return r}}}else i.sort((e,t)=>this._ng._keys[e].compareTo(this._ng._keys[t]));return i}_getSession(){let e=this._url;return httpRequest(e,{async:!1,data:_ENV_SESSION,method:"POST",user:this._user,password:this._password,requestHeaders:{"Content-Type":"text/xml"},success:e=>{let t=e.responseXML.getElementsByTagName("Session");this._token=t[0].getAttribute("SessionId")},error:e=>{this._handleError("Begin Session",e)}})}_endSession(){let e=this._url;return httpRequest(e,{async:!1,data:_ENV_ENDSESSION(this._token),method:"POST",user:this._user,password:this._password,requestHeaders:{"Content-Type":"text/xml"},error:e=>{this._handleError("End Session",e)},complete:e=>{this._token=void 0}})}_getProperties(e){let t=this._url;return httpRequest(t,{async:!1,data:_ENV_PROPERTIES(e,this._catalogName,this._cubeName),method:"POST",user:this._user,password:this._password,requestHeaders:{"Content-Type":"text/xml"},success:e=>{for(var t={},i=e.responseXML.getElementsByTagName("row"),s=0;s<i.length;s++){var l=_getTagValue(i[s],"HIERARCHY_UNIQUE_NAME");switch(Number(_getTagValue(i[s],"DATA_TYPE"))){case 2:case 3:case 4:case 5:case 6:t[l]=DataType.Number;break;case 7:t[l]=DataType.Date}}this._dataTypes=t},error:e=>{this._handleError("Get Properties",e)}})}_getDimensions(e){let t=this._url;return httpRequest(t,{async:!1,data:_ENV_DIMENSIONS(e,this._catalogName,this._cubeName),method:"POST",user:this._user,password:this._password,requestHeaders:{"Content-Type":"text/xml"},success:t=>{for(var i=[],s=t.responseXML.getElementsByTagName("row"),l=0;l<s.length;l++){if("2"!==_getTagValue(s[l],"DIMENSION_TYPE")){var n=_getTagValue(s[l],"DIMENSION_UNIQUE_NAME"),r={header:_getTagValue(s[l],"DIMENSION_CAPTION"),dataType:DataType.Object,dimensionType:DimensionType.Dimension,subFields:[]};this._getSubFolders(e,n,r);i.push(r)}else this._getMeasures(e,i)}var a={header:"KPIs",dataType:DataType.Object,dimensionType:DimensionType.Kpi,subFields:[]};this._getKPIs(e,a);i.push(a);this._jsonResult=i},error:e=>{this._handleError("Get Dimensions",e)}})}_getSubFolders(e,t,i){let s=this._url;httpRequest(s,{async:!1,data:_ENV_HIERARCHIES(e,this._catalogName,this._cubeName,t),method:"POST",user:this._user,password:this._password,requestHeaders:{"Content-Type":"text/xml"},success:e=>{for(var t=e.responseXML.getElementsByTagName("row"),s=0;s<t.length;s++){var l={header:_getTagValue(t[s],"HIERARCHY_NAME"),binding:_getTagValue(t[s],"HIERARCHY_UNIQUE_NAME"),dataType:DataType.String,dimensionType:DimensionType.Hierarchy};this._dataTypes[l.binding]&&(l.dataType=this._dataTypes[l.binding]);for(var n=_getTagValue(t[s],"HIERARCHY_DISPLAY_FOLDER").split("\\"),r=i,a=0;a<n.length;a++)if(""!=n[a]){var o={header:n[a],dataType:DataType.Object,dimensionType:DimensionType.Folder,subFields:[]};if(_containsFolder(r,n[a]))r=_findSubFieldByName(r,n[a]);else{r.subFields.push(o);r=o}}r.subFields.push(l)}},error:e=>{this._handleError("Get Hierarchies",e)}})}_getMeasures(e,t){let i=this._url;return httpRequest(i,{async:!1,data:_ENV_MEASURES(e,this._catalogName,this._cubeName),method:"POST",user:this._user,password:this._password,requestHeaders:{"Content-Type":"text/xml"},success:e=>{for(var i=e.responseXML.getElementsByTagName("row"),s={},l=0;l<i.length;l++){var n=_getTagValue(i[l],"MEASUREGROUP_NAME"),r={header:_getTagValue(i[l],"MEASURE_CAPTION"),binding:_getTagValue(i[l],"MEASURE_UNIQUE_NAME"),dataType:DataType.Number,dimensionType:DimensionType.Measure};if(Object.keys(s).indexOf(n)<0){var a={header:n,dataType:DataType.Number,dimensionType:DimensionType.Measure,subFields:[]};a.subFields.push(r);t.push(a);s[n]=a}else s[n].subFields.push(r)}},error:e=>{this._handleError("Get Measures",e)}})}_getKPIs(e,t){let i=this._url;return httpRequest(i,{async:!1,data:_ENV_KPIS(e,this._catalogName,this._cubeName),method:"POST",user:this._user,password:this._password,requestHeaders:{"Content-Type":"text/xml"},success:e=>{for(var i=e.responseXML.getElementsByTagName("row"),s=0;s<i.length;s++){for(var l=_getTagValue(i[s],"KPI_DISPLAY_FOLDER").split("\\"),n=t,r=0;r<l.length;r++){var a={header:l[r],dataType:DataType.Object,dimensionType:DimensionType.Folder,subFields:[]};if(_containsFolder(n,l[r]))n=_findSubFieldByName(n,l[r]);else{n.subFields.push(a);n=a}}var o={header:_getTagValue(i[s],"KPI_CAPTION"),binding:_getTagValue(i[s],"KPI_VALUE"),dataType:DataType.Number,dimensionType:DimensionType.Kpi};n.subFields.push(o)}},error:e=>{this._handleError("Get KPIs",e)}})}_execQuery(e,t,i){let s=this._url;return httpRequest(s,{async:!0,data:_ENV_QUERY(e,this._catalogName,t),method:"POST",user:this._user,password:this._password,requestHeaders:{"Content-Type":"text/xml"},success:e=>{let s=e.responseXML,l=s.querySelector("Error");if(l){throw"SSAS Error\r\n"+l.getAttribute("Description")+"\r\n"+t}this._createPivotKeys(s);asFunction(i)(e)},error:e=>{this._handleError("Execute Query",e)},complete:()=>{this._endSession()}})}_createPivotKeys(e){let t=null,i=null,s=e.querySelector("CellData");if(this._ng.columnFields.length>0||this._ng.valueFields.length>1){i=e.querySelector("Axis[name='Axis0']");this._ng.rowFields.length>0&&(t=e.querySelector("Axis[name='Axis1']"))}else this._ng.rowFields.length>0&&(t=e.querySelector("Axis[name='Axis0']"));let l=t&&this._ng.rowFields.length>0,n=i&&this._ng.columnFields.length>0;l&&n?this._createRowKeys(s,t,i):l?this._createRowOnlyKeys(s,t):n&&this._createColumnOnlyKeys(s,i)}_createRowKeys(e,t,i){let s=t.getElementsByTagName("Tuple"),l=i.getElementsByTagName("Tuple"),n=this._ng.showRowTotals!==ShowTotals.None?0:1,r=this._ng.showColumnTotals!==ShowTotals.None?0:this._ng.valueFields.length;for(let t=n;t<s.length;t++){let i=t*l.length,n=s[t],a=this._validateTuple(n,this._ng.showRowTotals);if(a)for(let t=r;t<l.length;t++){let s=l[t],n=this._validateTuple(s,this._ng.showColumnTotals);if(n){for(let e in a)n[e]=a[e];for(let s=0;s<this._ng.valueFields.length;s++){n[this._ng.valueFields[s].key]=_getCellValue(e,i+t+s)}this._jsonResult.push(n)}}}}_createRowOnlyKeys(e,t){let i=t.getElementsByTagName("Tuple"),s=this._ng.valueFields.length,l=this._ng.showRowTotals!==ShowTotals.None?0:1,n=l*s;for(let t=l;t<i.length;t++){let s=i[t],l=this._validateTuple(s,this._ng.showRowTotals);if(l){for(let t=0;t<this._ng.valueFields.length;t++){l[this._ng.valueFields[t].key]=_getCellValue(e,n++)}this._jsonResult.push(l)}else n++}}_createColumnOnlyKeys(e,t){let i=t.getElementsByTagName("Tuple"),s=this._ng.valueFields.length,l=this._ng.showColumnTotals!==ShowTotals.None?0:1;for(let t=l;t<i.length;t+=s){let s=i[t],n=this._validateTuple(s,this._ng.showColumnTotals);if(n){for(let i=0;i<this._ng.valueFields.length;i++){n[this._ng.valueFields[i].key]=_getCellValue(e,t-l+i)}this._jsonResult.push(n)}}}_validateTuple(e,t){let i=e.getElementsByTagName("Member"),s=void 0,l={};for(let e=0;e<i.length;e++){let n=i[e],r=_getLevelNumber(n),a=n.getAttribute("Hierarchy"),o=_getCaptionValue(n);if(0==e)s=r;else{if(r>s)return null;if(t!==ShowTotals.Subtotals&&r!==s&&"[Measures]"!==a)return null;s=r}a.indexOf(".")>=0?l[a]=o:null!==o&&(l[o]=null)}return l}}function _getTagValue(e,t){let i=e.querySelector(t);return i?i.innerHTML||i.textContent:null}function _getLevelNumber(e){return Number(_getTagValue(e,"LNum"))}function _getCaptionValue(e){return _getLevelNumber(e)>0?_getTagValue(e,"Caption"):null}function _getCellValue(e,t){let i="Cell[CellOrdinal='"+t.toString()+"']",s=e.querySelector(i);if(s){let e=_getTagValue(s,"Value");if(e)return Number(e)}return null}function _findSubFieldByName(e,t){if(e.subFields)for(var i=0;i<e.subFields.length;i++){var s=e.subFields[i];if(s.header==t)return s}return e}function _containsFolder(e,t){if(e.subFields)for(var i=0;i<e.subFields.length;i++){if(e.subFields[i].header==t)return!0}return!1}const _ENV_SESSION='\n <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">\n <Header>\n <BeginSession soap:mustUnderstand="1" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:schemas-microsoft-com:xml-analysis" />\n </Header>\n <Body>\n <Execute xmlns="urn:schemas-microsoft-com:xml-analysis">\n <Command>\n <Statement />\n </Command>\n <Properties>\n </Properties>\n </Execute>\n </Body>\n </Envelope>',_ENV_ENDSESSION=e=>`\n <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">\n <Header>\n <XA:EndSession soap:mustUnderstand="1" SessionId="${e}" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:XA="urn:schemas-microsoft-com:xml-analysis" />\n </Header>\n <Body>\n <Execute xmlns="urn:schemas-microsoft-com:xml-analysis">\n <Command>\n <Statement />\n </Command>\n <Properties>\n </Properties>\n </Execute>\n </Body>\n </Envelope>`,_ENV_DIMENSIONS=(e,t,i)=>`\n <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">\n <Header>\n <XA:Session soap:mustUnderstand="1" SessionId="${e}" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:XA="urn:schemas-microsoft-com:xml-analysis" />\n </Header>\n <Body>\n <Discover xmlns="urn:schemas-microsoft-com:xml-analysis">\n <RequestType>MDSCHEMA_DIMENSIONS</RequestType>\n <Restrictions>\n <RestrictionList>\n <CATALOG_NAME>${t}</CATALOG_NAME>\n <CUBE_NAME>${i}</CUBE_NAME>\n </RestrictionList>\n </Restrictions>\n <Properties>\n </Properties>\n </Discover>\n </Body>\n </Envelope>`,_ENV_HIERARCHIES=(e,t,i,s)=>`\n <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">\n <Header>\n <XA:Session soap:mustUnderstand="1" SessionId="${e}" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:XA="urn:schemas-microsoft-com:xml-analysis" />\n </Header>\n <Body>\n <Discover xmlns="urn:schemas-microsoft-com:xml-analysis">\n <RequestType>MDSCHEMA_HIERARCHIES</RequestType>\n <Restrictions>\n <RestrictionList>\n <CATALOG_NAME>${t}</CATALOG_NAME>\n <CUBE_NAME>${i}</CUBE_NAME>\n <DIMENSION_UNIQUE_NAME>${s}</DIMENSION_UNIQUE_NAME>\n </RestrictionList>\n </Restrictions>\n <Properties>\n </Properties>\n </Discover>\n </Body>\n </Envelope>`,_ENV_MEASURES=(e,t,i)=>`\n <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">\n <Header>\n <XA:Session soap:mustUnderstand="1" SessionId="${e}" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:XA="urn:schemas-microsoft-com:xml-analysis" />\n </Header>\n <Body>\n <Discover xmlns="urn:schemas-microsoft-com:xml-analysis">\n <RequestType>MDSCHEMA_MEASURES</RequestType>\n <Restrictions>\n <RestrictionList>\n <CATALOG_NAME>${t}</CATALOG_NAME>\n <CUBE_NAME>${i}</CUBE_NAME>\n </RestrictionList>\n </Restrictions>\n <Properties>\n </Properties>\n </Discover>\n </Body>\n </Envelope>`,_ENV_KPIS=(e,t,i)=>`\n <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">\n <Header>\n <XA:Session soap:mustUnderstand="1" SessionId="${e}" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:XA="urn:schemas-microsoft-com:xml-analysis" />\n </Header>\n <Body>\n <Discover xmlns="urn:schemas-microsoft-com:xml-analysis">\n <RequestType>MDSCHEMA_KPIS</RequestType>\n <Restrictions>\n <RestrictionList>\n <CATALOG_NAME>${t}</CATALOG_NAME>\n <CUBE_NAME>${i}</CUBE_NAME>\n </RestrictionList>\n </Restrictions>\n <Properties>\n </Properties>\n </Discover>\n </Body>\n </Envelope>`,_ENV_LEVELS=(e,t,i)=>`\n <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">\n <Header>\n <XA:Session soap:mustUnderstand="1" SessionId="${e}" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:XA="urn:schemas-microsoft-com:xml-analysis" />\n </Header>\n <Body>\n <Discover xmlns="urn:schemas-microsoft-com:xml-analysis">\n <RequestType>MDSCHEMA_LEVELS</RequestType>\n <Restrictions>\n <RestrictionList>\n <CATALOG_NAME>${t}</CATALOG_NAME>\n <CUBE_NAME>${i}</CUBE_NAME>\n </RestrictionList>\n </Restrictions>\n <Properties>\n </Properties>\n </Discover>\n </Body>\n </Envelope>`,_ENV_PROPERTIES=(e,t,i)=>`\n <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">\n <Header>\n <XA:Session soap:mustUnderstand="1" SessionId="${e}" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:XA="urn:schemas-microsoft-com:xml-analysis" />\n </Header>\n <Body>\n <Discover xmlns="urn:schemas-microsoft-com:xml-analysis">\n <RequestType>MDSCHEMA_PROPERTIES</RequestType>\n <Restrictions>\n <RestrictionList>\n <CATALOG_NAME>${t}</CATALOG_NAME>\n <CUBE_NAME>${i}</CUBE_NAME>\n <PROPERTY_NAME>MEMBER_VALUE</PROPERTY_NAME>\n </RestrictionList>\n </Restrictions>\n <Properties>\n </Properties>\n </Discover>\n </Body>\n </Envelope>`,_ENV_QUERY=(e,t,i)=>`\n <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">\n <Header>\n <XA:Session soap:mustUnderstand="1" SessionId="${e}" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:XA="urn:schemas-microsoft-com:xml-analysis" />\n </Header>\n <Body>\n <Execute xmlns="urn:schemas-microsoft-com:xml-analysis">\n <Command>\n <Statement>\n <![CDATA[\n ${i}\n ]]>\n </Statement>\n </Command>\n <Properties>\n <PropertyList>\n <Catalog>${t}</Catalog>\n <Content>Data</Content>\n </PropertyList>\n </Properties>\n </Execute>\n </Body>\n </Envelope>`;export class PivotFilter{constructor(e){this._fld=e;let t=e;this._valueFilter=new ValueFilter(t);this._valueFilter.exclusiveValueSearch=this._fld.engine.exclusiveValueSearch;this._conditionFilter=new ConditionFilter(t)}get filterType(){return null!=this._filterType?this._filterType:this._fld.engine.defaultFilterType}set filterType(e){if((e=asEnum(e,FilterType,!0))!=this._filterType){this._filterType=e;this.clear()}}apply(e){return this._conditionFilter.apply(e)&&this._valueFilter.apply(e)}get isActive(){return this._conditionFilter.isActive||this._valueFilter.isActive}clear(){let e=!1;if(this._valueFilter.isActive){this._valueFilter.clear();e=!0}if(this._conditionFilter.isActive){this._valueFilter.clear();e=!0}e&&this._fld.onPropertyChanged(new PropertyChangedEventArgs("filter",null,null))}get valueFilter(){return this._valueFilter}get conditionFilter(){return this._conditionFilter}}export class PivotFilterEditor extends Control{constructor(e,t,i){super(e);this.finishEditing=new Event;this.hostElement.tabIndex=-1;let s=this.getTemplate();this.applyTemplate(`${ControlClsNames.hostElement} ${ControlClsNames.content} ${PivotFilterEditorClsNames.hostElement}`,s,{_divType:"div-type",_aVal:"a-val",_aCnd:"a-cnd",_divEdtVal:"div-edt-val",_divEdtCnd:"div-edt-cnd",_btnOk:"btn-ok"});setText(this._aVal,culture.FlexGridFilter.values);setText(this._aCnd,culture.FlexGridFilter.conditions);setText(this._btnOk,culture.olap.PivotFieldEditor.ok);let l=this._btnClicked.bind(this);this.addEventListener(this._btnOk,"click",l);this.addEventListener(this._aVal,"click",l);this.addEventListener(this._aCnd,"click",l);this.addEventListener(this.hostElement,"keydown",e=>{switch(e.keyCode){case Key.Enter:switch(e.target.tagName){case"A":case"BUTTON":this._btnClicked(e);break;default:this.onFinishEditing(new CancelEventArgs)}e.preventDefault();break;case Key.Escape:this.onFinishEditing(new CancelEventArgs);e.preventDefault();break;case Key.Tab:moveFocus(this.hostElement,e.shiftKey?-1:1);e.preventDefault()}});this._fld=t;this._uniqueValues=t.filter.valueFilter.uniqueValues;this.initialize(i);this.updateEditor()}static get controlTemplate(){PivotFilterEditor._ctrlTemplate||(PivotFilterEditor._ctrlTemplate='<div><div wj-part="div-type" style="text-align:center;margin-bottom:12px;font-size:80%"><a wj-part="a-cnd" href="" tabindex="-1" draggable="false"></a>&nbsp;|&nbsp;<a wj-part="a-val" href="" tabindex="-1" draggable="false"></a></div><div wj-part="div-edt-val" tabindex="-1"></div><div wj-part="div-edt-cnd" tabindex="-1"></div><div style="text-align:right;margin-top:10px">'+`<button wj-part="btn-ok" class="${InputFormElementsClsNames.btn}"></button>`+"</div></div>");return PivotFilterEditor._ctrlTemplate}static set controlTemplate(e){PivotFilterEditor._ctrlTemplate=e}get field(){return this._fld}get filter(){return this._fld?this._fld.filter:null}get isEditorClear(){switch(this._getFilterType()){case FilterType.Value:return!this._edtVal||this._edtVal.isEditorClear;case FilterType.Condition:return!this._edtCnd||this._edtCnd.isEditorClear}assert(!1,"unknown filter type?");return!1}updateEditor(){let e=FilterType,t=e.None;if(this.filter){t=this.filter.conditionFilter.isActive||0==(this.filter.filterType&e.Value)?e.Condition:e.Value;this._showFilter(t)}if(this._edtVal){let e=this._fld,t=e.engine;if(t.isServer&&!this._uniqueValues){let i=t._getUniqueValues(e);e.filter.valueFilter.uniqueValues=i}this._edtVal.updateEditor()}this._edtCnd&&this._edtCnd.updateEditor()}updateFilter(){switch(this._getFilterType()){case FilterType.Value:this._edtVal.updateFilter();this.filter.conditionFilter.clear();break;case FilterType.Condition:this._edtCnd.updateFilter();this.filter.valueFilter.clear()}this.field.onPropertyChanged(new PropertyChangedEventArgs("filter",null,null))}clearEditor(){this._edtVal&&this._edtVal.clearEditor();this._edtCnd&&this._edtCnd.clearEditor()}onFinishEditing(e){this.finishEditing.raise(this,e);return!e.cancel}_showFilter(e){e==FilterType.Value&&null==this._edtVal&&(this._edtVal=new ValueFilterEditor(this._divEdtVal,this.filter.valueFilter));e==FilterType.Condition&&null==this._edtCnd&&(this._edtCnd=new ConditionFilterEditor(this._divEdtCnd,this.filter.conditionFilter));if(0!=(e&this.filter.filterType))if(e==FilterType.Value){this._divEdtVal.style.display="";this._divEdtCnd.style.display="none";this._enableLink(this._aVal,!1);this._enableLink(this._aCnd,!0)}else{this._divEdtVal.style.display="none";this._divEdtCnd.style.display="";this._enableLink(this._aVal,!0);this._enableLink(this._aCnd,!1)}switch(this.filter.filterType){case FilterType.None:case FilterType.Condition:case FilterType.Value:this._divType.style.display="none";break;default:this._divType.style.display=""}}_enableLink(e,t){e.style.textDecoration=t?"":"none";e.style.fontWeight=t?"":"bold";setAttribute(e,"href",t?"":null)}_getFilterType(){let e=FilterType;return"none"!=this._divEdtVal.style.display?e.Value:e.Condition}_btnClicked(e){e.preventDefault();e.stopPropagation();if(!hasClass(e.target,ControlStateClsNames.disabled))if(e.target!=this._aVal)if(e.target!=this._aCnd)this.onFinishEditing(new CancelEventArgs);else{this._showFilter(FilterType.Condition);moveFocus(this._edtCnd.hostElement,0)}else{this._showFilter(FilterType.Value);moveFocus(this._edtVal.hostElement,0)}}}PivotFilterEditor._ctrlTemplate="";export class PivotFieldEditor extends Control{constructor(e,t){super(e,null,!0);this.hostElement.tabIndex=-1;let i=this.getTemplate();this.applyTemplate(`${ControlClsNames.hostElement} ${PivotFieldEditorClsNames.hostElement}`,i,{_dBnd:"sp-bnd",_dHdr:"div-hdr",_dAgg:"div-agg",_dShw:"div-shw",_dWFl:"div-wfl",_dSrt:"div-srt",_btnFltEdt:"btn-flt-edt",_btnFltClr:"btn-flt-clr",_dFmt:"div-fmt",_dSmp:"div-smp",_btnApply:"btn-apply",_btnCancel:"btn-cancel",_gDlg:"g-dlg",_gHdr:"g-hdr",_gAgg:"g-agg",_gShw:"g-shw",_gWfl:"g-wfl",_gSrt:"g-srt",_gFlt:"g-flt",_gFmt:"g-fmt",_gSmp:"g-smp"});this._pvDate=new Date;let s=culture.olap.PivotFieldEditor;setText(this._gDlg,s.dialogHeader);setText(this._gHdr,s.header);setText(this._gAgg,s.summary);setText(this._gShw,s.showAs);setText(this._gWfl,s.weighBy);setText(this._gSrt,s.sort);setText(this._gFlt,s.filter);setText(this._gFmt,s.format);setText(this._gSmp,s.sample);setText(this._btnFltEdt,s.edit);setText(this._btnFltClr,s.clear);setText(this._btnApply,s.ok);setText(this._btnCancel,s.cancel);this._cmbHdr=new ComboBox(this._dHdr,{keyActionPrintCharacters:0,keyActionTab:0});this._cmbAgg=new ComboBox(this._dAgg,{keyActionPrintCharacters:0,keyActionTab:0});this._cmbShw=new ComboBox(this._dShw,{keyActionPrintCharacters:0,keyActionTab:0});this._cmbWFl=new ComboBox(this._dWFl,{keyActionPrintCharacters:0,keyActionTab:0});this._cmbSrt=new ComboBox(this._dSrt,{keyActionPrintCharacters:0,keyActionTab:0});this._cmbFmt=new ComboBox(this._dFmt,{keyActionPrintCharacters:0,keyActionTab:0});this._cmbSmp=new ComboBox(this._dSmp,{keyActionPrintCharacters:0,keyActionTab:0});this._initAggregateOptions();this._initShowAsOptions();this._initFormatOptions();this._initSortOptions();this._updatePreview();this._cmbShw.textChanged.addHandler(this._updateFormat,this);this._cmbFmt.textChanged.addHandler(this._updatePreview,this);this.addEventListener(this._btnFltEdt,"click",e=>{this._editFilter();e.preventDefault()});this.addEventListener(this._btnFltClr,"click",e=>{this._createFilterEditor();this._closeAndFocusTimer=setTimeout(()=>{this._eFlt.clearEditor();this._btnFltEdt.focus();enable(this._btnFltClr,!1)});e.preventDefault()});this.addEventListener(this._btnApply,"click",e=>{this.updateField()});this.initialize(t)}static get controlTemplate(){PivotFieldEditor._ctrlTemplate||(PivotFieldEditor._ctrlTemplate="<div>"+`<div class="${DetailDialogClsNames.dialogHeader}" tabindex="-1">`+'<span wj-part="g-dlg"></span> <span wj-part="sp-bnd"></span></div>'+`<div class="${DetailDialogClsNames.dialogBody}">`+'<table style="table-layout:fixed"><tr><td wj-part="g-hdr"></td><td><div wj-part="div-hdr"></div></td></tr>'+`<tr class="${UtilitesClsNames.separator}">`+'<td wj-part="g-agg"></td><td><div wj-part="div-agg"></div></td></tr>'+`<tr class="${UtilitesClsNames.separator}">`+'<td wj-part="g-shw"></td><td><div wj-part="div-shw"></div></td></tr><tr><td wj-part="g-wfl"></td><td><div wj-part="div-wfl"></div></td></tr><tr><td wj-part="g-srt"></td><td><div wj-part="div-srt"></div></td></tr>'+`<tr class="${UtilitesClsNames.separator}">`+'<td wj-part="g-flt"></td><td><div>'+`<button wj-part="btn-flt-edt" class="${InputFormElementsClsNames.btn}"></button>&nbsp;&nbsp;`+`<button wj-part="btn-flt-clr" class="${InputFormElementsClsNames.btn}"></button>`+"</div></td></tr>"+`<tr class="${UtilitesClsNames.separator}">`+'<td wj-part="g-fmt"></td><td><div wj-part="div-fmt"></div></td></tr><tr><td wj-part="g-smp"></td><td><div wj-part="div-smp" readonly tabindex="-1"></div></td></tr></table></div>'+`<div class="${DetailDialogClsNames.dialogFooter}">`+`<button wj-part="btn-apply" class="${InputFormElementsClsNames.btn} ${UtilitesClsNames.hide}"></button>&nbsp;&nbsp;`+`<button wj-part="btn-cancel" class="${InputFormElementsClsNames.btn} ${UtilitesClsNames.hide}"></button>`+"</div></div>");return PivotFieldEditor._ctrlTemplate}static set controlTemplate(e){PivotFieldEditor._ctrlTemplate=e}get field(){return this._fld}set field(e){if(e!=this._fld){this._fld=asType(e,PivotField);this.updateEditor()}}updateEditor(){let e=this._fld;if(e&&e.engine){this._dBnd.textContent=e.binding;this._cmbHdr.text=e.header;this._cmbAgg.collectionView.refresh();this._cmbAgg.selectedValue=e.aggregate;this._cmbSrt.selectedValue=e.descending;this._cmbShw.selectedValue=e.showAs;this._initWeighByOptions();let t=e.engine.defaultFilterType!=FilterType.None&&(null!=e.binding||isFunction(e.getValue));enable(this._btnFltEdt,t);enable(this._btnFltClr,t&&e.filter.isActive);this._cmbFmt.collectionView.refresh();this._cmbFmt.selectedValue=e.format;this._cmbFmt.selectedValue||(this._cmbFmt.text=e.format);let i=e instanceof CubePivotField;this._cmbAgg.isDisabled=i||!!e.getAggregateValue;this._cmbWFl.isDisabled=i}}updateField(){let e=this._fld;if(e){let t=this._cmbHdr.text.trim();e.header=t||toHeaderCase(e.binding);e.aggregate=this._cmbAgg.selectedValue;e.showAs=this._cmbShw.selectedValue;e.weightField=this._cmbWFl.selectedValue;e.descending=this._cmbSrt.selectedValue;let i=e.format;e.format=this._cmbFmt.selectedValue||this._cmbFmt.text;let s=this._eFlt;if(s){s.updateFilter();const t=e.dataType==DataType.Number,l=e.dataType==DataType.Date;if(i!=e.format&&(t||l)){let s=e.filter.valueFilter;if(s&&s.isActive&&!s.dataMap){let n={};if(t)for(let t in s.showValues){let i=Globalize.parseFloat(t);n[Globalize.format(i,e.format)]=!0}else if(l)for(let t in s.showValues){let s=Globalize.parseDate(t,i);n[Globalize.format(s,e.format)]=!0}s.showValues=n}}}}}_initAggregateOptions(){let e=culture.olap.PivotFieldEditor.aggs,t=Aggregate,i=[{key:e.sum,val:t.Sum,all:!1},{key:e.cnt,val:t.Cnt,all:!0},{key:e.avg,val:t.Avg,all:!1},{key:e.max,val:t.Max,all:!0},{key:e.min,val:t.Min,all:!0},{key:e.rng,val:t.Rng,all:!1},{key:e.std,val:t.Std,all:!1},{key:e.var,val:t.Var,all:!1},{key:e.stdp,val:t.StdPop,all:!1},{key:e.varp,val:t.VarPop,all:!1},{key:e.first,val:t.First,all:!0},{key:e.last,val:t.Last,all:!0}];this._cmbAgg.itemsSource=i;this._cmbAgg.collectionView.filter=e=>{if(e&&e.all)return!0;if(this._fld){let e=this._fld.dataType;return e==DataType.Number||e==DataType.Boolean}return!1};this._cmbAgg.initialize({displayMemberPath:"key",selectedValuePath:"val"})}_initShowAsOptions(){let e=culture.olap.PivotFieldEditor.calcs,t=[{key:e.noCalc,val:ShowAs.NoCalculation},{key:e.dRow,val:ShowAs.DiffRow},{key:e.dRowPct,val:ShowAs.DiffRowPct},{key:e.dCol,val:ShowAs.DiffCol},{key:e.dColPct,val:ShowAs.DiffColPct},{key:e.dPctGrand,val:ShowAs.PctGrand},{key:e.dPctRow,val:ShowAs.PctRow},{key:e.dPrevRow,val:ShowAs.PctPrevRow},{key:e.dPctCol,val:ShowAs.PctCol},{key:e.dPrevCol,val:ShowAs.PctPrevCol},{key:e.dRunTot,val:ShowAs.RunTot},{key:e.dRunTotPct,val:ShowAs.RunTotPct}];this._cmbShw.itemsSource=t;this._cmbShw.initialize({displayMemberPath:"key",selectedValuePath:"val"})}_initFormatOptions(){let e=culture.olap.PivotFieldEditor.formats,t=[{key:e.n0,val:"n0",all:!0},{key:e.n2,val:"n2",all:!0},{key:e.c,val:"c",all:!0},{key:e.p0,val:"p0",all:!0},{key:e.p2,val:"p2",all:!0},{key:e.n2c,val:"n2,",all:!0},{key:e.n2cc,val:"n2,,",all:!0},{key:e.n2ccc,val:"n2,,,",all:!0},{key:e.d,val:"d",all:!1},{key:e.MMMMddyyyy,val:"MMMM dd, yyyy",all:!1},{key:e.dMyy,val:"d/M/yy",all:!1},{key:e.ddMyy,val:"dd/M/yy",all:!1},{key:e.dMyyyy,val:"dd/M/yyyy",all:!1},{key:e.MMMyyyy,val:"MMM yyyy",all:!1},{key:e.MMMMyyyy,val:"MMMM yyyy",all:!1},{key:e.yyyy,val:"yyyy",all:!1},{key:e.yyyyQq,val:'yyyy "Q"q',all:!1},{key:e.FYEEEEQU,val:'"FY"EEEE "Q"U',all:!1}];this._cmbFmt.itemsSource=t;this._cmbFmt.isEditable=!0;this._cmbFmt.isRequired=!1;this._cmbFmt.collectionView.filter=e=>!(!e||!e.all)||!!this._fld&&this._fld.dataType==DataType.Date;this._cmbFmt.initialize({displayMemberPath:"key",selectedValuePath:"val"})}_initWeighByOptions(){let e=this._fld;if(e){let t=[{key:culture.olap.PivotFieldEditor.none,val:null}];e.engine.fields.forEach(i=>{i!=e&&i.dataType==DataType.Number&&t.push({key:i.header,val:i})});this._cmbWFl.initialize({displayMemberPath:"key",selectedValuePath:"val",itemsSource:t,selectedValue:e.weightField})}}_initSortOptions(){let e=culture.olap.PivotFieldEditor.sorts,t=[{key:e.asc,val:!1},{key:e.desc,val:!0}];this._cmbSrt.itemsSource=t;this._cmbSrt.initialize({displayMemberPath:"key",selectedValuePath:"val"})}_updateFormat(){let e=ShowAs[this._cmbShw.selectedValue];this._cmbFmt.selectedValue=e.indexOf("Pct")>-1?"p0":"n0"}_updatePreview(){let e=this._cmbFmt.selectedValue||this._cmbFmt.text,t=Globalize.format,i="";if(e){let s=e[0].toLowerCase();i="nfgxc".indexOf(s)>-1?t(1234.5678,e):t("p"==s?.12345678:this._pvDate,e)}this._cmbSmp.text=i}_editFilter(){this._createFilterEditor();showPopup(this._dFlt,this._btnFltEdt,!1,!1,!1);moveFocus(this._dFlt,0)}_createFilterEditor(){if(!this._dFlt){this._dFlt=document.createElement("div");this._eFlt=new PivotFilterEditor(this._dFlt,this._fld);addClass(this._dFlt,DropDownClsNames.dropDownPanel);this._lostFocusHandler=()=>{this._closeFilterTimer=setTimeout(()=>{let e=Control.getControl(this._dFlt);e&&!e.containsFocus()&&this._closeFilter()},10)};this._eFlt.lostFocus.addHandler(this._lostFocusHandler);this._eFlt.finishEditing.addHandler(()=>{this._closeFilter();enable(this._btnFltClr,!this._eFlt.isEditorClear)})}}_closeFilter(){if(this._dFlt){hidePopup(this._dFlt,!0);this.focus()}}dispose(){if(this._closeFilterTimer){clearTimeout(this._closeFilterTimer);this._closeFilterTimer=null}this._cmbShw&&this._cmbShw.textChanged.removeHandler(this._updateFormat,this);this._cmbFmt&&this._cmbFmt.textChanged.removeHandler(this._updatePreview,this);if(this._eFlt){this._eFlt.dispose();this._eFlt=null}if(this._dFlt){this._dFlt.innerHTML="";this._dFlt=null}if(this._closeFilterTimer){clearTimeout(this._closeFilterTimer);this._closeFilterTimer=null}if(this._closeAndFocusTimer){clearTimeout(this._closeAndFocusTimer);this._closeAndFocusTimer=null}this.hostElement&&(this.hostElement[Control._CTRL_KEY]=null);super.dispose()}}PivotFieldEditor._ctrlTemplate="";_registerModule("wijmo.olap",selfModule);export class PivotFieldBinding extends Binding{constructor(e,t){super(t);this._fld=e}getValue(e){const t=this._fld;return isFunction(t.getValue)?t._getValue(e,!1):super.getValue(e)}}