UNPKG

turnilo

Version:

Business intelligence, data exploration and visualization web application for Druid, formerly known as Swiv and Pivot

1 lines 84.5 kB
(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{484:function(e,t,s){"use strict";s.d(t,"a",(function(){return c}));var a=s(82),n=s(0),i=s.n(n),r=s(9);function l(e,t=!1){switch(e){case-1:return t?"delta-positive":"delta-negative";case 0:return"delta-neutral";case 1:return t?"delta-negative":"delta-positive"}}const o=Object(a.c)(".1%");const c=({lowerIsBetter:e,currentValue:t,previousValue:s,formatter:a})=>{const n=function(e,t){if(Object(r.l)(e)||Object(r.l)(t))return null;const s=e-t;return{deltaSign:s?s<0?-1:1:0,deltaRatio:Math.abs(s/t),delta:s}}(t,s);if(null===n)return i.a.createElement("span",{className:"delta-neutral"},"-");const{delta:c,deltaRatio:u,deltaSign:m}=n;return i.a.createElement("span",{className:l(m,e)},function(e){switch(e){case-1:return"▼";case 0:return"";case 1:return"▲"}}(m),a(Math.abs(c)),(h=u,isFinite(h)?` (${o(h)})`:null));var h}},485:function(e,t,s){"use strict";s.d(t,"b",(function(){return Bt})),s.d(t,"c",(function(){return Qt})),s.d(t,"a",(function(){return Gt}));var a=s(0),n=s.n(a),i=s(13);class r extends n.a.Component{render(){return n.a.createElement("div",{className:"drop-indicator"},n.a.createElement("div",{className:"white-out"}),n.a.createElement("div",{className:"action"},n.a.createElement(i.a,{svg:s(294)})))}}var l=s(1),o=s(24),c=s(8),u=s(139),m=s(6),h=s(3),d=s(48),p=s(69),g=s(170),f=s(521),b=s(528);const v=e=>{const{appendFilter:t,menuStage:s,essence:{filter:a,dataCube:i}}=e,r=Object(c.a)(i.dimensions).filter(e=>!a.getClauseForDimension(e)).map(e=>({key:e.name,label:e.title,value:e}));return n.a.createElement(b.a,{tiles:r,onSelect:t,containerStage:s})};function S(e,t,s){return[...e.slice(0,t),s,...e.slice(t)]}var E=s(511),O=s(7),C=s(83),j=s(101),k=s(4),y=s(26),w=s(85),N=s(37),M=s(51),x=s(168),D=s(44),F=s(118);class T extends n.a.Component{constructor(...e){super(...e),Object(l.a)(this,"context",void 0),Object(l.a)(this,"state",this.initialValues()),Object(l.a)(this,"onOkClick",()=>{if(!this.actionEnabled())return;const{saveClause:e,onClose:t}=this.props;e(this.constructClause()),t()}),Object(l.a)(this,"onCancelClick",()=>{const{onClose:e}=this.props;e()}),Object(l.a)(this,"selectValue",e=>{const{selectedValues:t}=this.state,s=t.has(e)?t.remove(e):t.add(e);this.setState({selectedValues:s})}),Object(l.a)(this,"renderRow",e=>{const{selectedValues:t}=this.state;return n.a.createElement("div",{className:"row",key:String(e),title:String(e),onClick:()=>this.selectValue(e)},n.a.createElement("div",{className:"row-wrapper"},n.a.createElement(x.a,{selected:t.has(e)}),n.a.createElement("span",{className:"label"},String(e))))})}initialValues(){const{essence:{filter:e},dimension:t}=this.props,s=e.getClauseForDimension(t);if(!s)return{selectedValues:k.f.of(),values:[]};if(!(s instanceof O.a))throw new Error("Expected boolean filter clause, got: "+s);return{selectedValues:s.values,values:[]}}componentDidMount(){this.fetchData()}fetchData(){const{booleanFilterQuery:e}=this.context,{essence:t,dimension:s}=this.props;this.setState({loading:!0}),e(t,s).then(e=>{this.setState({loading:!1,values:e.data.map(e=>e[s.name]),error:null})},e=>{this.setState({loading:!1,values:[],error:e})})}constructClause(){const{selectedValues:e}=this.state;if(e.isEmpty())return null;const{dimension:t}=this.props;return new O.a({reference:t.name,values:e})}actionEnabled(){const{essence:{filter:e},dimension:t}=this.props,s=this.constructClause(),a=e.getClauseForDimension(t);return s&&!s.equals(a)}render(){const{onClose:e,containerStage:t,openOn:s}=this.props,{values:a,error:i,loading:r}=this.state;return n.a.createElement(N.a,{className:"boolean-filter-menu",direction:"down",containerStage:t,stage:y.a.fromSize(250,210),openOn:s,onClose:e},n.a.createElement("div",{className:"menu-table"},n.a.createElement("div",{className:"rows"},a.map(this.renderRow)),i&&n.a.createElement(F.a,{error:i}),r&&n.a.createElement(D.a,null)),n.a.createElement("div",{className:"ok-cancel-bar"},n.a.createElement(M.a,{type:"primary",title:m.m.ok,onClick:this.onOkClick,disabled:!this.actionEnabled()}),n.a.createElement(M.a,{type:"secondary",title:m.m.cancel,onClick:this.onCancelClick})))}}Object(l.a)(T,"contextType",w.a);var R=s(58),L=s(86);const P=[{label:m.m.include,value:R.c.INCLUDE,svg:s(289),checkType:"check"},{label:m.m.exclude,value:R.c.EXCLUDE,svg:s(288),checkType:"cross"},{label:m.m.contains,value:R.c.CONTAINS,svg:s(287)},{label:m.m.regex,value:R.c.REGEX,svg:s(290)}];class I extends n.a.Component{constructor(...e){super(...e),Object(l.a)(this,"onSelectOption",e=>{this.props.onSelectOption(e.value)}),Object(l.a)(this,"renderFilterOption",e=>n.a.createElement("span",{className:"filter-option"},n.a.createElement(i.a,{className:"icon",svg:e.svg}),n.a.createElement("span",{className:"option-label"},e.label)))}static getFilterOptions(...e){return P.filter(t=>-1!==e.indexOf(t.value))}render(){const{selectedOption:e,filterOptions:t=P}=this.props,s=t.find(({value:t})=>t===e)||t[0];return n.a.createElement("div",{className:"filter-options-dropdown"},n.a.createElement(L.a,{menuClassName:"filter-options",items:t,selectedItem:s,equal:(e,t)=>e.value===t.value,keyItem:e=>e.value,renderItem:this.renderFilterOption,renderSelectedItem:e=>n.a.createElement(i.a,{className:"icon",svg:e.svg}),onSelect:this.onSelectOption}))}}var V=s(9);class z extends n.a.Component{constructor(...e){super(...e),Object(l.a)(this,"mounted",void 0),Object(l.a)(this,"state",{anchor:null}),Object(l.a)(this,"onGlobalMouseMove",e=>{const{onChange:t,leftBound:s,rightBound:a}=this.props,{anchor:n}=this.state,i=Object(h.f)(e)-n;t(Object(h.a)(i,s,a))}),Object(l.a)(this,"onMouseDown",e=>{const{offset:t,positionLeft:s}=this.props,a=Object(h.f)(e)-t-s;this.setState({anchor:a}),e.preventDefault(),window.addEventListener("mouseup",this.onGlobalMouseUp),window.addEventListener("mousemove",this.onGlobalMouseMove)}),Object(l.a)(this,"onGlobalMouseUp",()=>{window.removeEventListener("mouseup",this.onGlobalMouseUp),window.removeEventListener("mousemove",this.onGlobalMouseMove)})}render(){const{positionLeft:e,isAny:t,isBeyondMin:s,isBeyondMax:a}=this.props,i={left:e};return n.a.createElement("div",{className:Object(h.b)("range-handle",{empty:t,"beyond min":s,"beyond max":a}),style:i,onMouseDown:this.onMouseDown})}}function q(e){return e+16}function A(e){return e&&e>16?e-16:0}function U(e){return e+8}class B extends n.a.Component{constructor(e){super(e),Object(l.a)(this,"context",void 0),Object(l.a)(this,"mounted",void 0),Object(l.a)(this,"picker",n.a.createRef()),Object(l.a)(this,"updateStart",e=>{const{onRangeStartChange:t}=this.props,{leftOffset:s}=this.state,a=e-s;t(this.relativePositionToValue(q(a),"start"))}),Object(l.a)(this,"updateEnd",e=>{const{onRangeEndChange:t}=this.props,{leftOffset:s}=this.state,a=e-s;t(this.relativePositionToValue(a,"end"))}),this.state={min:null,max:null,step:null,loading:!1,error:null}}fetchData(e,t,s,a){const{numberFilterQuery:n}=this.context;this.setState({loading:!0}),n(e,s).then(e=>{if(!this.mounted)return;const t=e.data[0].Min,s=e.data[0].Max,n=Object(V.o)(s)&&Object(V.o)(t)&&isFinite(s)&&isFinite(t)?(s-t)/a:1;this.setState({min:t,max:s,loading:!1,step:0!==n&&isFinite(n)?n:1})},e=>{this.mounted&&this.setState({loading:!1,error:e})})}componentDidMount(){this.mounted=!0;const e=this.picker.current.getBoundingClientRect(),{essence:t,timekeeper:s,dimension:a}=this.props,n=e.left,i=e.width;this.setState({leftOffset:n,rightBound:i}),this.fetchData(t,s,a,i)}componentWillUnmount(){this.mounted=!1}relativePositionToValue(e,t){const{step:s,min:a,max:n,rightBound:i}=this.state;if(e<=q(0)&&"start"===t)return null;if(e>=i&&"end"===t)return null;const r=n-a!=0?n-a:Math.abs(n);return Object(V.t)(e*s,function(e){const t=Object(V.g)(e/300);return t>3?Math.min(t,4):3}(r))}valueToRelativePosition(e){const{step:t}=this.state;return e/t}onBarClick(e,t,s){const{leftOffset:a}=this.state,n=Object(h.f)(s),i=n-a;if(i<8)return this.updateStart(a);const r=q(e)+5,l=A(t)+5,o=i>t+16,c=i<t&&i>r;if(i<e)this.updateStart(n-16);else if(o)this.updateEnd(n);else if(c){const e=l-i,t=i-r;return void(e<t?this.updateEnd(l+a-e):this.updateStart(r+a+t-16))}}render(){const{start:e,end:t,exclude:s}=this.props,{min:a,max:i,loading:r,error:l,step:o,rightBound:c,leftOffset:u}=this.state;let m=null;if(c&&o&&isFinite(i)&&isFinite(a)){const s=null===e?0:A(this.valueToRelativePosition(e)),r=null===t?c:this.valueToRelativePosition(t),l=A(c),o=Object(h.a)(r,q(s),l),d=e?Object(h.a)(s,0,A(o)):0,p={left:U(d),width:o-d},g=u+c;m=n.a.createElement("div",{className:"range-slider",onMouseDown:this.onBarClick.bind(this,d,o)},n.a.createElement("div",{className:"range-bar full"}),n.a.createElement("div",{className:"range-bar selected",style:p}),n.a.createElement(z,{positionLeft:d,onChange:this.updateStart,isAny:null===e,isBeyondMin:null!==e&&e<a,leftBound:u,rightBound:u+A(o),offset:u}),n.a.createElement(z,{positionLeft:o,onChange:this.updateEnd,isAny:null===t,isBeyondMax:null!==t&&i<t,leftBound:u+q(d),rightBound:g,offset:u}))}return n.a.createElement("div",{className:Object(h.b)("number-range-picker",{inverted:s}),ref:this.picker},m,r&&n.a.createElement(D.a,null),l&&n.a.createElement(F.a,{error:l}))}}function Q(e){return null===e?m.m.any:""+e}function G(e){const t=parseFloat(e);return isNaN(t)?null:t}Object(l.a)(B,"contextType",w.a);const K=I.getFilterOptions(R.c.INCLUDE,R.c.EXCLUDE);class X extends n.a.Component{constructor(...e){super(...e),Object(l.a)(this,"state",{leftOffset:null,rightBound:null,start:null,end:null}),Object(l.a)(this,"globalKeyDownListener",e=>{Object(h.c)(e)&&this.onOkClick()}),Object(l.a)(this,"onOkClick",()=>{if(!this.actionEnabled())return;const{saveClause:e,onClose:t}=this.props;e(this.constructClause()),t()}),Object(l.a)(this,"onCancelClick",()=>{const{onClose:e}=this.props;e()}),Object(l.a)(this,"onRangeInputStartChange",e=>{const t=e.target.value;this.setState({start:G(t)})}),Object(l.a)(this,"onRangeInputEndChange",e=>{const t=e.target.value;this.setState({end:G(t)})}),Object(l.a)(this,"onRangeStartChange",e=>{this.setState({start:e})}),Object(l.a)(this,"onRangeEndChange",e=>{this.setState({end:e})}),Object(l.a)(this,"onSelectFilterOption",e=>{this.setState({filterMode:e})})}UNSAFE_componentWillMount(){const{essence:e,dimension:t}=this.props,s=e.filter.getClauseForDimension(t);if(!s)return;if(!(s instanceof O.d))throw new Error("Expected number filter. Got: "+s);if(0!==s.values.count()){const{start:a,end:n}=s.values.first();this.setState({start:a,end:n,filterMode:e.filter.getModeForDimension(t)||R.c.INCLUDE})}}componentDidMount(){window.addEventListener("keydown",this.globalKeyDownListener)}componentWillUnmount(){window.removeEventListener("keydown",this.globalKeyDownListener)}constructClause(){const{dimension:e}=this.props,{start:t,end:s,filterMode:a}=this.state;return isNaN(t)||isNaN(s)||null===t&&null===s||null!==t&&null!==s&&t>s?null:new O.d({reference:e.name,not:a===R.c.EXCLUDE,values:k.a.of(new O.e({start:t,end:s,bounds:t===s?"[]":"[)"}))})}actionEnabled(){const{essence:{filter:e},dimension:t}=this.props,s=this.constructClause(),a=e.getClauseForDimension(t);return Boolean(s)&&!s.equals(a)}render(){const{essence:e,timekeeper:t,dimension:s,onClose:a,containerStage:i,openOn:r}=this.props,{end:l,start:o,filterMode:c}=this.state,u=y.a.fromSize(250,410);return n.a.createElement(N.a,{className:"number-filter-menu",direction:"down",containerStage:i,stage:u,openOn:r,onClose:a},n.a.createElement("div",{className:"side-by-side"},n.a.createElement("div",{className:"group"},n.a.createElement("label",{className:"input-top-label"},"Type"),n.a.createElement(I,{selectedOption:c,onSelectOption:this.onSelectFilterOption,filterOptions:K})),n.a.createElement("div",{className:"group"},n.a.createElement("label",{className:"input-top-label"},"Min"),n.a.createElement("input",{value:Q(o),onChange:this.onRangeInputStartChange})),n.a.createElement("div",{className:"group"},n.a.createElement("label",{className:"input-top-label"},"Max"),n.a.createElement("input",{value:Q(l),onChange:this.onRangeInputEndChange}))),n.a.createElement(B,{onRangeEndChange:this.onRangeEndChange,onRangeStartChange:this.onRangeStartChange,start:o,end:l,dimension:s,essence:e,timekeeper:t,exclude:c===R.c.EXCLUDE}),n.a.createElement("div",{className:"ok-cancel-bar"},n.a.createElement(M.a,{type:"primary",title:m.m.ok,onClick:this.onOkClick,disabled:!this.actionEnabled()}),n.a.createElement(M.a,{type:"secondary",title:m.m.cancel,onClick:this.onCancelClick})))}}var W=s(10),_=s(63),H=s(18),J=s(91),Y=s(92),$=s(116),Z=s(70);const ee=e=>n.a.createElement("div",{className:"error-notice"},e),te=({content:e,highlight:t})=>n.a.createElement("div",{className:"row no-select",title:e},n.a.createElement("div",{className:"row-wrapper"},n.a.createElement(Z.a,{className:"label",text:e,highlight:t})));function se(e,t,s){return s?e.filter(function(e,t){switch(e){case R.c.CONTAINS:return e=>String(e).includes(t);case R.c.REGEX:const e=t.replace(/\\[^\\]]/g,"\\\\"),s=new RegExp(e);return e=>s.test(String(e))}}(t,s)):e}const ae=e=>{const{regexErrorMessage:t,searchText:s,dataset:a,filterMode:i,dimension:r,limit:l}=e;if(t)return ee(t);const o=a.data;if(s&&0===o.length)return ee(`No results for "${s}"`);const c=se(o.slice(0,l).map(e=>e[r.name]),i,s);return n.a.createElement(n.a.Fragment,null,s&&n.a.createElement("div",{className:"matching-values-message"},"Matching Values"),c.map(e=>n.a.createElement(te,{content:String(e),highlight:s,key:String(e)})))};class ne extends n.a.Component{constructor(...e){super(...e),Object(l.a)(this,"context",void 0),Object(l.a)(this,"lastSearchText",void 0),Object(l.a)(this,"initialSearchText",()=>{const{essence:e,dimension:t}=this.props,s=e.filter.getClauseForDimension(t);return s&&s instanceof O.h&&s.action!==O.g.IN?s.values.first():""}),Object(l.a)(this,"state",{dataset:_.g,searchText:this.initialSearchText()}),Object(l.a)(this,"updateSearchText",e=>this.setState({searchText:e})),Object(l.a)(this,"queryFilter",(e,t)=>{const{stringFilterQuery:s}=this.context,{searchText:a}=this.state;return s(e,t).then(e=>this.lastSearchText!==a?null:Object(_.f)(e)).catch(e=>this.lastSearchText!==a?null:(Object(J.b)(e),Object(_.b)(e)))}),Object(l.a)(this,"debouncedQueryFilter",Object(H.h)(this.queryFilter,m.k)),Object(l.a)(this,"globalKeyDownListener",e=>{Object(h.c)(e)&&this.onOkClick()}),Object(l.a)(this,"onOkClick",()=>{if(!this.actionEnabled())return;const{saveClause:e,onClose:t}=this.props;e(this.constructClause()),t()}),Object(l.a)(this,"onCancelClick",()=>{this.props.onClose()})}loadRows(){this.regexErrorMessage()||(this.setState({dataset:_.g}),this.sendQueryFilter().then(e=>{e&&this.setState({dataset:e})}))}sendQueryFilter(){const{searchText:e}=this.state;return this.lastSearchText=e,this.debouncedQueryFilter(this.props.essence,this.constructClause())}regexErrorMessage(){const{filterMode:e}=this.props,{searchText:t}=this.state;return e===R.c.REGEX&&t&&function(e){try{new RegExp(e)}catch(e){return e.message}return null}(t)}UNSAFE_componentWillMount(){this.loadRows()}componentWillUnmount(){this.debouncedQueryFilter.cancel()}componentDidUpdate(e,t){this.state.searchText!==t.searchText&&this.loadRows()}constructClause(){const{dimension:e,filterMode:t}=this.props,{searchText:s}=this.state,{name:a}=e;switch(t){case R.c.CONTAINS:return new O.h({reference:a,values:k.f.of(s),action:O.g.CONTAINS});case R.c.REGEX:return new O.h({reference:a,values:k.f.of(s),action:O.g.MATCH})}}actionEnabled(){const{essence:{filter:e},dimension:t}=this.props;if(this.regexErrorMessage())return!1;const s=this.constructClause();if(!s.values.first())return!1;const a=e.getClauseForDimension(t);return!s.equals(a)}render(){const{filterMode:e,dimension:t}=this.props,{dataset:s,searchText:a}=this.state,i=Object(_.d)(s)&&s.dataset.data.length>100;return n.a.createElement(n.a.Fragment,null,n.a.createElement($.a,{keyDown:this.globalKeyDownListener}),n.a.createElement("div",{className:"search-box"},n.a.createElement(Y.a,{placeholder:"Search",focusOnMount:!0,value:a,onChange:this.updateSearchText})),n.a.createElement("div",{className:"preview-string-filter-menu"},n.a.createElement("div",{className:Object(h.b)("menu-table",i?"has-more":"no-more")},n.a.createElement("div",{className:"rows"},Object(_.d)(s)&&n.a.createElement(ae,{dimension:t,dataset:s.dataset,searchText:a,regexErrorMessage:this.regexErrorMessage(),limit:100,filterMode:e}),Object(_.c)(s)?n.a.createElement(F.a,{error:s.error}):null,Object(_.e)(s)?n.a.createElement(D.a,null):null)),n.a.createElement("div",{className:"ok-cancel-bar"},n.a.createElement(M.a,{type:"primary",title:m.m.ok,onClick:this.onOkClick,disabled:!this.actionEnabled()}),n.a.createElement(M.a,{type:"secondary",title:m.m.cancel,onClick:this.onCancelClick}))))}}function ie(e){e&&e.focus()}Object(l.a)(ne,"contextType",w.a);class re extends n.a.Component{constructor(...e){super(...e),Object(l.a)(this,"state",{value:""}),Object(l.a)(this,"values",()=>{const{value:e}=this.state;return Object(k.f)(e.split("\n").map(e=>e.trim()).filter(e=>e.length>0))}),Object(l.a)(this,"select",()=>{const{onClose:e,onSelect:t}=this.props,s=this.values();s.isEmpty()||(t(Object(k.f)(s)),e())}),Object(l.a)(this,"cancel",()=>this.props.onClose()),Object(l.a)(this,"saveValue",({target:{value:e}})=>this.setState({value:e}))}render(){const{value:e}=this.state,t=this.values().isEmpty();return n.a.createElement("div",null,n.a.createElement("textarea",{ref:ie,className:"paste-field",value:e,onChange:this.saveValue}),n.a.createElement("div",{className:"paste-actions"},n.a.createElement(M.a,{type:"primary",title:"Select",disabled:t,onClick:this.select}),n.a.createElement(M.a,{type:"secondary",title:"Cancel",onClick:this.cancel})))}}const le=e=>{const{value:t,selected:s,checkboxStyle:a,highlight:i,onRowSelect:r}=e,l=String(t);return n.a.createElement("div",{className:Object(h.b)("string-value",{selected:s}),title:l,onClick:e=>r(t,(e=>e.altKey||e.ctrlKey||e.metaKey)(e))},n.a.createElement("div",{className:"value-wrapper"},n.a.createElement(x.a,{type:a,selected:s}),n.a.createElement(Z.a,{className:"label",text:l,highlight:i})))};const oe=e=>{const{onRowSelect:t,filterMode:s,dataset:a,dimension:i,searchText:r,promotedValues:l,selectedValues:o}=e,c=a.data.map(e=>e[i.name]);var u,m;const h=function(e,t){if(!t)return e;const s=t.toLowerCase();return e.filter(e=>-1!==String(e).toLowerCase().indexOf(s))}((u=c,m=l,[...m,...u.filter(e=>!m.contains(e))]),r);if(r&&0===h.length)return n.a.createElement("div",{className:"no-string-values"},`No results for "${r}"`);const d=s===R.c.EXCLUDE?"cross":"check";return n.a.createElement(n.a.Fragment,null,h.map(e=>n.a.createElement(le,{key:String(e),value:e,onRowSelect:t,selected:o&&o.contains(e),checkboxStyle:d,highlight:r})))};function ce(e,t){return e.has(t)?e.remove(t):e.add(t)}class ue extends n.a.Component{constructor(...e){super(...e),Object(l.a)(this,"context",void 0),Object(l.a)(this,"lastSearchText",void 0),Object(l.a)(this,"state",{pasteModeEnabled:!1,dataset:_.g,selectedValues:this.initialSelection(),searchText:""}),Object(l.a)(this,"queryFilter",(e,t)=>{const{searchText:s}=this.state,{stringFilterQuery:a}=this.context;return a(e,t).then(e=>this.lastSearchText!==s?null:Object(_.f)(e)).catch(e=>this.lastSearchText!==s?null:(Object(J.b)(e),Object(_.b)(e)))}),Object(l.a)(this,"debouncedQueryFilter",Object(H.h)(this.queryFilter,m.k)),Object(l.a)(this,"globalKeyDownListener",e=>{!this.state.pasteModeEnabled&&Object(h.c)(e)&&this.onOkClick()}),Object(l.a)(this,"updateSearchText",e=>this.setState({searchText:e})),Object(l.a)(this,"onValueClick",(e,t)=>{const{selectedValues:s}=this.state;if(t){const t=s.contains(e)&&1===s.count();return this.setState({selectedValues:t?k.f.of():k.f.of(e)})}return this.setState({selectedValues:ce(s,e)})}),Object(l.a)(this,"onOkClick",()=>{if(!this.isFilterValid())return;const{saveClause:e,onClose:t}=this.props;e(this.constructClause()),t()}),Object(l.a)(this,"enablePasteMode",()=>this.setState({pasteModeEnabled:!0})),Object(l.a)(this,"disablePasteMode",()=>this.setState({pasteModeEnabled:!1})),Object(l.a)(this,"selectValues",e=>this.setState({selectedValues:e}))}loadRows(){this.setState({dataset:_.g}),this.sendQueryFilter().then(e=>{e&&this.setState({dataset:e})}).catch(e=>{this.setState({dataset:Object(_.b)(new Error("Unknown error"))})})}sendQueryFilter(){const{searchText:e}=this.state;return this.lastSearchText=e,this.debouncedQueryFilter(this.props.essence,this.constructSearchTextClause())}UNSAFE_componentWillMount(){this.loadRows()}initialSelection(){const{essence:{filter:e},dimension:t}=this.props,s=e.getClauseForDimension(t);if(!s)return Object(k.f)();if(!(s instanceof O.h))throw new Error("Expected string filter clause, got: "+s);return s.action===O.g.IN?s.values:Object(k.f)()}componentWillUnmount(){this.debouncedQueryFilter.cancel()}componentDidUpdate(e,t){this.state.searchText!==t.searchText&&this.loadRows()}constructClause(){const{dimension:e,filterMode:t}=this.props,{selectedValues:s}=this.state,{name:a}=e;return s.isEmpty()?null:new O.h({action:O.g.IN,reference:a,values:s,not:t===R.c.EXCLUDE})}constructSearchTextClause(){const{dimension:e}=this.props,{name:t}=e,{searchText:s}=this.state;return new O.h({action:O.g.CONTAINS,reference:t,values:k.f.of(s),ignoreCase:!0})}isFilterValid(){const{selectedValues:e}=this.state;if(e.isEmpty())return!1;const{essence:{filter:t},dimension:s}=this.props,a=this.constructClause(),n=t.getClauseForDimension(s);return a&&!a.equals(n)}renderSelectMode(){const{filterMode:e,onClose:t,dimension:a}=this.props,{dataset:r,selectedValues:l,searchText:o}=this.state;return n.a.createElement(n.a.Fragment,null,n.a.createElement("div",{className:"paste-icon",onClick:this.enablePasteMode,title:"Paste multiple values"},n.a.createElement(i.a,{svg:s(293)})),n.a.createElement("div",{className:"search-box"},n.a.createElement(Y.a,{placeholder:"Search",focusOnMount:!0,value:o,onChange:this.updateSearchText})),n.a.createElement("div",{className:Object(h.b)("selectable-string-filter-menu",e)},n.a.createElement("div",{className:"menu-table"},n.a.createElement("div",{className:"rows"},Object(_.d)(r)&&n.a.createElement(oe,{onRowSelect:this.onValueClick,dimension:a,dataset:r.dataset,searchText:o,selectedValues:l,promotedValues:this.initialSelection(),filterMode:e}),Object(_.c)(r)&&n.a.createElement(F.a,{error:r.error}),Object(_.e)(r)&&n.a.createElement(D.a,null))),n.a.createElement("div",{className:"ok-cancel-bar"},n.a.createElement(M.a,{type:"primary",title:m.m.ok,onClick:this.onOkClick,disabled:!this.isFilterValid()}),n.a.createElement(M.a,{type:"secondary",title:m.m.cancel,onClick:t}))))}renderImportMode(){return n.a.createElement(n.a.Fragment,null,n.a.createElement("div",{className:"paste-prompt"},"Paste values separated by newlines"),n.a.createElement("div",{className:"paste-form"},n.a.createElement(re,{onSelect:this.selectValues,onClose:this.disablePasteMode})))}render(){const{pasteModeEnabled:e}=this.state;return n.a.createElement(n.a.Fragment,null,n.a.createElement($.a,{keyDown:this.globalKeyDownListener}),e?this.renderImportMode():this.renderSelectMode())}}Object(l.a)(ue,"contextType",w.a);class me extends n.a.Component{constructor(...e){super(...e),Object(l.a)(this,"initialFilterMode",()=>{const{essence:{filter:e},dimension:t}=this.props;return e.getModeForDimension(t)||R.c.INCLUDE}),Object(l.a)(this,"state",{filterMode:this.initialFilterMode()}),Object(l.a)(this,"onSelectFilterOption",e=>this.setState({filterMode:e}))}getFilterOptions(){const{dimension:e}=this.props,t=e.kind;let s=I.getFilterOptions(R.c.INCLUDE,R.c.EXCLUDE);return"boolean"!==t&&(s=s.concat(I.getFilterOptions(R.c.REGEX,R.c.CONTAINS))),s}renderFilterControls(){const{dimension:e,saveClause:t,essence:s,timekeeper:a,onClose:i}=this.props,{filterMode:r}=this.state,l={dimension:e,essence:s,timekeeper:a,onClose:i,saveClause:t};switch(r){case R.c.EXCLUDE:case R.c.INCLUDE:const e=Object(W.a)(Object(W.a)({},l),{},{filterMode:r});return n.a.createElement(ue,e);case R.c.REGEX:case R.c.CONTAINS:const t=Object(W.a)(Object(W.a)({},l),{},{filterMode:r});return n.a.createElement(ne,Object.assign({key:r},t))}}render(){const{dimension:e,onClose:t,containerStage:s,openOn:a}=this.props,{filterMode:i}=this.state;return e?n.a.createElement(N.a,{className:"string-filter-menu",direction:"down",containerStage:s,stage:y.a.fromSize(300,410),openOn:a,onClose:t},n.a.createElement("div",{className:"string-filter-content"},n.a.createElement(I,{selectedOption:i,onSelectOption:this.onSelectFilterOption,filterOptions:this.getFilterOptions()}),this.renderFilterControls())):null}}var he=s(529),de=s(11),pe=s(54),ge=s(38),fe=s(2),be=s(34);class ve extends n.a.Component{constructor(...e){super(...e),Object(l.a)(this,"state",{dateString:"",timeString:""}),Object(l.a)(this,"dateChange",e=>{const t=Object(be.n)(e.target.value);this.setState({dateString:t}),Object(be.q)(t)&&this.changeDate(t,this.state.timeString)}),Object(l.a)(this,"timeChange",e=>{const t=Object(be.o)(e.target.value);this.setState({timeString:t}),Object(be.r)(t)&&this.changeDate(this.state.dateString,t)})}componentDidMount(){const{time:e,timezone:t}=this.props;this.updateStateFromTime(e,t)}UNSAFE_componentWillReceiveProps(e){const{time:t,timezone:s}=e;this.updateStateFromTime(t,s)}updateStateFromTime(e,t){e&&(isNaN(e.valueOf())?this.setState({dateString:""}):this.setState({dateString:Object(be.d)(e,t),timeString:Object(be.f)(e,t)}))}changeDate(e,t){const{timezone:s,onChange:a}=this.props,n=Object(be.a)(e,t,s);n&&n.isValid()&&a(n.toDate())}render(){const{hide:e,label:t}=this.props,{dateString:s,timeString:a}=this.state,i=e?"":s,r=e?"":a;return n.a.createElement("div",{className:"date-range-input"},n.a.createElement("div",{className:"label"},t),n.a.createElement("input",{placeholder:"YYYY-MM-DD",className:"date-field",value:i,onChange:this.dateChange}),n.a.createElement("input",{placeholder:"HH:MM",className:"time-field",value:r,onChange:this.timeChange}))}}function Se(e,t,s){const a=function(e,t,s){const a=[],n=Object(be.m)(e,t),i=n.clone().add(1,"month");let r=[],l=n.clone().startOf("day");for(;l.isBefore(i);)l.day()===s.weekStart&&r.length>0&&(a.push(r),r=[]),r.push(l.toDate()),l=l.add(1,"day");r.length>0&&a.push(r);return a}(e,t,s),n=a[0],i=a[a.length-1],r=a.slice(1,-1);return[Oe(n,t),...r,Ee(i,t)]}function Ee(e,t){const s=e[e.length-1],a=7-e.length;return[...e,...je(s,a,t)]}function Oe(e,t){return[...Ce(e[0],7-e.length,t),...e]}function Ce(e,t,s){return Object(H.n)(0,t).map(a=>de.day.shift(e,s,-t+a))}function je(e,t,s){return Object(H.n)(0,t).map(t=>de.day.shift(e,s,t+1))}class ke extends n.a.Component{constructor(...e){super(...e),Object(l.a)(this,"state",{activeMonthStartDate:de.month.floor(this.props.startTime||new Date,this.props.timezone),hoverTimeRange:null,selectionSet:!0}),Object(l.a)(this,"goToPreviousMonth",()=>this.navigateToMonth(-1)),Object(l.a)(this,"goToNextMonth",()=>this.navigateToMonth(1)),Object(l.a)(this,"onCalendarMouseLeave",()=>{this.setState({hoverTimeRange:null})})}navigateToMonth(e){const{timezone:t}=this.props,{activeMonthStartDate:s}=this.state,a=de.month.shift(s,t,e);this.setState({activeMonthStartDate:a})}calculateHoverTimeRange(e){const{startTime:t,endTime:s}=this.props;let a=null;if(t&&!s){let s=t,n=e;e<t&&(s=e,n=t),a=new fe.TimeRange({start:s,end:n,bounds:"[]"})}this.setState({hoverTimeRange:a})}selectNewRange(e,t){const{onStartChange:s,onEndChange:a,timezone:n}=this.props;s(e),t&&(t=de.day.shift(t,n,1)),a(t)}selectDay(e){const{startTime:t}=this.props,{selectionSet:s}=this.state;if(s)this.setState({hoverTimeRange:null,selectionSet:!1}),this.selectNewRange(e,null);else{const s=e<t;Object(be.b)(e,t)?this.selectNewRange(t,t):s?this.selectNewRange(e,t):this.selectNewRange(t,e),this.setState({selectionSet:!0})}}getIsSelectable(e){const{hoverTimeRange:t,selectionSet:s}=this.state;return t&&t.contains(e)&&!s}renderDays(e,t){const{startTime:s,endTime:a,maxTime:i,timezone:r}=this.props,l=de.day.floor(s,r),o=a&&de.day.shift(a,r,-1),c=de.month.shift(t,r,1);return e.map((e,u)=>n.a.createElement("div",{className:"week",key:u}," ",e.map((e,u)=>{const m=e<t,d=e>=c,p=e>i,g=l<=e&&e<a,f=Object(be.b)(e,s),b=Object(be.b)(e,o),v=Object(h.b)("day","value",{past:m,future:d,"beyond-max-range":p,selectable:this.getIsSelectable(e),selected:g,"selected-edge":f||b});return n.a.createElement("div",{className:v,key:u,onClick:this.selectDay.bind(this,e),onMouseEnter:this.calculateHoverTimeRange.bind(this,e)},Object(be.l)(e,r))})))}renderCalendar(e){const{timezone:t,locale:s}=this.props,a=Se(e,t,s);return this.renderDays(a,e)}renderCalendarNav(e){const{timezone:t}=this.props;return n.a.createElement("div",{className:"calendar-nav"},n.a.createElement("div",{className:"caret left",onClick:this.goToPreviousMonth},n.a.createElement(i.a,{svg:s(291)})),Object(be.k)(e,t),n.a.createElement("div",{className:"caret right",onClick:this.goToNextMonth},n.a.createElement(i.a,{svg:s(292)})))}render(){const{locale:e,startTime:t,endTime:s,timezone:a,onStartChange:i,onEndChange:r}=this.props,{activeMonthStartDate:l,selectionSet:o}=this.state;if(!l)return null;const c=Object(H.g)(e.shortDays,e.weekStart);return n.a.createElement("div",{className:"date-range-picker"},n.a.createElement("div",null,n.a.createElement(ve,{label:"Start",type:"start",time:t,timezone:a,onChange:i}),n.a.createElement(ve,{label:"End",type:"end",time:s,timezone:a,onChange:r,hide:!o})),n.a.createElement("div",{className:"calendar",onMouseLeave:this.onCalendarMouseLeave},this.renderCalendarNav(l),n.a.createElement("div",{className:"week"},c.map((e,t)=>n.a.createElement("div",{className:"day label",key:e+t},n.a.createElement("span",{className:"space"}),e))),this.renderCalendar(l)))}}var ye=s(497),we=s(110);function Ne({shift:e,time:t,timezone:s}){if(null===t||!t.start||!t.end)return null;const a=function(e){try{return de.Duration.fromJS(e)}catch(e){return null}}(e);if(null===a)return null;const n=t.shift(a,s);return Object(be.i)(n,s)}function Me(e){return[{name:"Off",identity:null},...e.timeShiftDurations.map(e=>({name:Object(we.e)(e.toJS()),identity:e.toJS()}))]}const xe=e=>{const{onShiftChange:t,dimension:s,shift:a}=e,i=Ne(e);return n.a.createElement(n.a.Fragment,null,n.a.createElement(ye.a,{title:m.m.timeShift,presets:Me(s),selected:a,onChange:t,errorMessage:Object(ge.b)(a)?null:m.m.invalidDurationFormat,placeholder:m.m.timeShiftExamples}),i?n.a.createElement("div",{className:"preview"},i):null)};class De extends n.a.Component{constructor(...e){super(...e),Object(l.a)(this,"initialState",()=>{const{essence:e,timekeeper:t,dimension:{name:s}}=this.props,a=e.timeShift.toJS(),n=e.getEffectiveFilter(t).clauseForReference(s);if(n&&n instanceof O.c&&!n.values.isEmpty()){const{start:e,end:t}=n.values.get(0);return{start:e,end:t,shift:a}}return{start:null,end:null,shift:a}}),Object(l.a)(this,"onStartChange",e=>this.setState({start:e})),Object(l.a)(this,"onEndChange",e=>this.setState({end:e})),Object(l.a)(this,"setTimeShift",e=>this.setState({shift:e})),Object(l.a)(this,"state",this.initialState()),Object(l.a)(this,"onOkClick",()=>{if(!this.validate())return;const{saveClause:e,clicker:t,onClose:s}=this.props;e(this.constructFixedClause()),t.changeComparisonShift(this.constructTimeShift()),s()})}createDateRange(){const{start:e,end:t}=this.state;if(!e)return null;const s=this.props.essence.timezone,a=t||de.day.shift(e,s,1);return e>=a?null:new pe.a({start:e,end:a})}constructFixedClause(){const{dimension:{name:e}}=this.props,t=k.a.of(this.createDateRange());return new O.c({reference:e,values:t})}constructTimeShift(){return ge.a.fromJS(this.state.shift)}doesTimeShiftOverlap(){const e=this.constructTimeShift();if(e.isEmpty())return!1;const{essence:{timezone:t}}=this.props,s=this.createDateRange(),a=e.valueOf(),n=s.shift(a,t);return s.intersects(n)}validateOverlap(){return this.isTimeShiftValid()&&this.areDatesValid()&&this.doesTimeShiftOverlap()?m.m.overlappingPeriods:null}isTimeShiftValid(){return Object(ge.b)(this.state.shift)}areDatesValid(){return null!==this.createDateRange()}isFormValid(){return this.areDatesValid()&&this.isTimeShiftValid()&&!this.doesTimeShiftOverlap()}isFilterDifferent(){const{essence:{filter:e,timeShift:t},dimension:s}=this.props,a=this.constructTimeShift(),n=e.getClauseForDimension(s),i=this.constructFixedClause();return!n.equals(i)||!t.equals(a)}validate(){return this.isFormValid()&&this.isFilterDifferent()}render(){const{locale:e,essence:{timezone:t,dataCube:s},timekeeper:a,dimension:i,onClose:r}=this.props;if(!i)return null;const{shift:l,start:c,end:u}=this.state,h=this.validateOverlap();return n.a.createElement("div",null,n.a.createElement(ke,{locale:e,startTime:c,endTime:u,maxTime:Object(o.f)(s,a),timezone:t,onStartChange:this.onStartChange,onEndChange:this.onEndChange}),n.a.createElement("div",{className:"cont"},n.a.createElement(xe,{dimension:i,shift:l,time:this.createDateRange(),onShiftChange:this.setTimeShift,timezone:t}),h&&n.a.createElement("div",{className:"overlap-error-message"},h)),n.a.createElement("div",{className:"ok-cancel-bar"},n.a.createElement(M.a,{type:"primary",onClick:this.onOkClick,disabled:!this.validate(),title:m.m.ok}),n.a.createElement(M.a,{type:"secondary",onClick:r,title:m.m.cancel})))}}var Fe=s(131);class Te extends n.a.Component{constructor(...e){super(...e),Object(l.a)(this,"setFilter",(e,t)=>this.setState({filterDuration:t,filterPeriod:e})),Object(l.a)(this,"setTimeShift",e=>this.setState({timeShift:e})),Object(l.a)(this,"state",function(e,t){const s=e.filter.getClauseForDimension(t),a=e.timeShift.toJS();if(s instanceof O.f){const{duration:e,period:t}=s;return{timeShift:a,filterDuration:e.toJS(),filterPeriod:t}}return{filterPeriod:null,filterDuration:null,timeShift:a}}(this.props.essence,this.props.dimension)),Object(l.a)(this,"saveTimeFilter",()=>{if(!this.validate())return;const{clicker:e,saveClause:t,onClose:s}=this.props;t(this.constructRelativeClause()),e.changeComparisonShift(this.constructTimeShift()),s()})}constructTimeShift(){return ge.a.fromJS(this.state.timeShift)}constructRelativeClause(){const{dimension:{name:e}}=this.props,{filterPeriod:t,filterDuration:s}=this.state;if(!Object(Fe.b)(s))return null;const a=de.Duration.fromJS(s);return new O.f({period:t,duration:a,reference:e})}doesTimeShiftOverlap(){const e=this.constructTimeShift();if(e.isEmpty())return!1;const t=e.valueOf();return de.Duration.fromJS(this.state.filterDuration).getCanonicalLength()>t.getCanonicalLength()}isTimeShiftValid(){return Object(ge.b)(this.state.timeShift)}isDurationValid(){return Object(Fe.b)(this.state.filterDuration)}validateOverlap(){return this.isTimeShiftValid()&&this.isDurationValid()&&this.doesTimeShiftOverlap()?m.m.overlappingPeriods:null}isFormValid(){const{filterPeriod:e}=this.state;return e&&this.isDurationValid()&&this.isTimeShiftValid()&&!this.doesTimeShiftOverlap()}isFilterDifferent(){const{essence:{filter:e,timeShift:t},dimension:s}=this.props,a=this.constructTimeShift(),n=e.getClauseForDimension(s),i=this.constructRelativeClause();return!n.equals(i)||!t.equals(a)}validate(){return this.isFormValid()&&this.isFilterDifferent()}renderLatestPresets(){const{dimension:e}=this.props,{filterDuration:t,filterPeriod:s}=this.state,a=e.latestPeriodDurations.map(e=>({name:Object(we.e)(e.toJS()),identity:e.toJS()})),i=s===O.i.LATEST;return n.a.createElement(ye.a,{title:m.m.latest,presets:a,errorMessage:i&&!Object(Fe.b)(t)&&m.m.invalidDurationFormat,selected:i?t:void 0,onChange:e=>this.setFilter(O.i.LATEST,e),placeholder:m.m.durationsExamples})}renderButtonGroup(e,t){const{filterDuration:s,filterPeriod:a}=this.state,i=t===a,r=Object(we.d)(t).map(({duration:e,name:a})=>({title:a,key:a,isSelected:i&&s===e,onClick:()=>this.setFilter(t,e)}));return n.a.createElement(he.a,{title:e,groupMembers:r})}getFilterRange(){const e=this.constructRelativeClause();if(!e)return null;const{essence:t,timekeeper:s}=this.props;return t.evaluateSelection(e,s).values.get(0)}render(){const{essence:e,dimension:t}=this.props;if(!t)return null;const{timeShift:s}=this.state,{timezone:a}=e,i=this.getFilterRange(),r=i?Object(be.i)(i,a):m.m.noFilter,l=this.validateOverlap();return n.a.createElement("div",{className:"cont"},Object(o.i)(e.dataCube,t.expression)&&this.renderLatestPresets(),this.renderButtonGroup(m.m.current,O.i.CURRENT),this.renderButtonGroup(m.m.previous,O.i.PREVIOUS),n.a.createElement("div",{className:"preview preview--with-spacing"},r),n.a.createElement(xe,{dimension:t,shift:s,time:i,timezone:e.timezone,onShiftChange:this.setTimeShift}),l&&n.a.createElement("div",{className:"overlap-error-message"},l),n.a.createElement("div",{className:"ok-cancel-bar"},n.a.createElement(M.a,{type:"primary",onClick:this.saveTimeFilter,disabled:!this.validate(),title:m.m.ok}),n.a.createElement(M.a,{type:"secondary",onClick:this.props.onClose,title:m.m.cancel})))}}function Re(e){return e===Pe.RELATIVE?m.m.relative:m.m.fixed}const Le=e=>{const{selectedTab:t,onTabSelect:s}=e,a=[Pe.RELATIVE,Pe.FIXED].map(e=>({isSelected:t===e,title:Re(e),key:e,onClick:()=>s(e)}));return n.a.createElement(he.a,{groupMembers:a})};var Pe;!function(e){e.RELATIVE="relative",e.FIXED="fixed"}(Pe||(Pe={}));class Ie extends n.a.Component{constructor(...e){var t;super(...e),Object(l.a)(this,"state",{tab:(t=this.props.essence,t.timeFilter()instanceof O.f?Pe.RELATIVE:Pe.FIXED)}),Object(l.a)(this,"selectTab",e=>this.setState({tab:e}))}render(){const{essence:e,saveClause:t,timekeeper:s,clicker:a,dimension:i,onClose:r,containerStage:l,locale:o,openOn:c}=this.props;if(!i)return null;const{tab:u}=this.state,m=y.a.fromSize(250,410),h=u===Pe.RELATIVE,d={saveClause:t,essence:e,dimension:i,timekeeper:s,onClose:r,clicker:a,locale:o};return n.a.createElement(N.a,{className:"time-filter-menu",direction:"down",containerStage:l,stage:m,openOn:c,onClose:r},n.a.createElement(Le,{selectedTab:u,onTabSelect:this.selectTab}),h?n.a.createElement(Te,d):n.a.createElement(De,d))}}const Ve=["dimension"],ze=e=>{let{dimension:t}=e,s=Object(j.a)(e,Ve);if(!t)return null;switch(t.kind){case"time":return n.a.createElement(Ie,Object.assign({dimension:t},s));case"boolean":return n.a.createElement(T,Object.assign({dimension:t},s));case"number":return n.a.createElement(X,Object.assign({dimension:t},s));default:return n.a.createElement(me,Object.assign({dimension:t},s))}};var qe=s(491),Ae=s(272),Ue=s(255);function Be(e,t,s){const{title:a,values:n}=Object(C.e)(e,t,s.timezone);return`${a} ${n} ${Object(Ue.a)(e,s)||""}`}const Qe=e=>{const{clause:t,open:a,dimension:r,style:l,removeClause:o,saveClause:c,openFilterMenu:u,closeFilterMenu:m,dragStart:d,stage:p,essence:g,locale:f,timekeeper:b,clicker:v}=e,S=t&&!Object(O.k)(t)&&t.not;return n.a.createElement(qe.a,null,({ref:e,setRef:E})=>n.a.createElement(n.a.Fragment,null,n.a.createElement("div",{className:Object(h.b)("tile dimension",{selected:a,excluded:S,included:!S}),draggable:!0,ref:E,onClick:()=>u(t),onDragStart:e=>d(r,t,e),style:l,title:Be(r,t,g)},n.a.createElement(Ae.a,{dimension:r,clause:t,essence:g}),o&&n.a.createElement("div",{className:"remove",onClick:()=>o(t)},n.a.createElement(i.a,{svg:s(136)}))),a&&e&&n.a.createElement(ze,{containerStage:p,essence:g,timekeeper:b,locale:f,clicker:v,saveClause:c,openOn:e,dimension:r,onClose:m})))},Ge=e=>{const{closeItem:t,saveClause:s,essence:a,timekeeper:i,locale:r,clicker:l,stage:o,dimension:c,style:u}=e;return n.a.createElement(qe.a,null,({ref:e,setRef:m})=>n.a.createElement("div",{className:"tile dimension selected included",ref:m,style:u},n.a.createElement("div",{className:"reading"},c.title),e&&n.a.createElement(ze,{essence:a,timekeeper:i,locale:r,clicker:l,saveClause:s,openOn:e,dimension:c,containerStage:o,onClose:t})))},Ke=e=>{const{menuStage:t,maxItems:s,essence:a,clicker:i,timekeeper:r,locale:l,removeFilter:o,openedFilterMenu:u,openFilterMenu:m,closeFilterMenu:d,dragStart:g,partialFilter:f,removePartialFilter:b,overflowOpen:v,closeOverflowMenu:O,openOverflowMenu:C}=e,j=a.filter.clauses.toArray(),k=a.dataCube.dimensions;function y(e){i.changeFilter(a.filter.setClause(e))}const w=function(e){if(!f)return e;const{dimension:s,position:o}=f,c=n.a.createElement(Ge,{key:"partial-filter-tile",dimension:s,essence:a,timekeeper:r,locale:l,clicker:i,saveClause:e=>function(e,t){const{filter:s}=a,n=t.isInsert()?s.insertByIndex(t.insert,e):s.replaceByIndex(t.replace,e);i.changeFilter(n)}(e,f.position),stage:t,closeItem:b});return S(e,o.getIndex(),c)}(j.map(e=>{const s=Object(c.d)(k,e.reference),h=s.name===a.getTimeDimension().name;return n.a.createElement(Qe,{key:e.reference,stage:t,essence:a,timekeeper:r,clicker:i,locale:l,clause:e,open:e.equals(u),dimension:s,removeClause:h?void 0:o,saveClause:y,openFilterMenu:m,closeFilterMenu:d,dragStart:g})})),N=w.slice(0,s).map((e,t)=>n.a.cloneElement(e,{style:Object(h.o)(t*p.a,0)})),M=w.slice(s);if(M.length<=0)return n.a.createElement(n.a.Fragment,null,N);const x=j.slice(s).some(e=>e.equals(u)),D=M.some(e=>e.type===Ge),F=v||x||D,T=n.a.createElement(E.a,{key:"overflow-menu",className:"dimension",x:N.length*p.a,items:M,open:F,openOverflowMenu:C,closeOverflowMenu:O});return n.a.createElement(n.a.Fragment,null,[...N,T])};class Xe extends n.a.Component{constructor(...e){super(...e),Object(l.a)(this,"context",void 0),Object(l.a)(this,"state",{}),Object(l.a)(this,"items",n.a.createRef()),Object(l.a)(this,"openFilterMenu",e=>this.setState({openedClause:e})),Object(l.a)(this,"closeFilterMenu",()=>this.setState({openedClause:null})),Object(l.a)(this,"openOverflowMenu",()=>this.setState({overflowOpen:!0})),Object(l.a)(this,"closeOverflowMenu",()=>this.setState({overflowOpen:!1})),Object(l.a)(this,"dragStart",(e,t,s)=>{const a=e.title,n=s.dataTransfer;n.effectAllowed="all",Object(h.m)(n,"text/plain",a),d.a.setDragFilter(t),Object(h.n)(n,a),this.closeOverflowMenu()}),Object(l.a)(this,"dragEnter",e=>{this.canDrop()&&(e.preventDefault(),this.setState({dragPosition:this.calculateDragPosition(e)}))}),Object(l.a)(this,"dragOver",e=>{if(!this.canDrop())return;e.preventDefault();const t=this.calculateDragPosition(e);t.equals(this.state.dragPosition)||this.setState({dragPosition:t})}),Object(l.a)(this,"dragLeave",()=>{this.canDrop()&&this.setState({dragPosition:null})}),Object(l.a)(this,"drop",e=>{if(!this.canDrop())return;e.preventDefault(),this.setState({dragPosition:null});const t=this.calculateDragPosition(e);switch(d.a.dragging.type){case d.b.DIMENSION:this.dropDimension(d.a.draggingDimension(),t);break;case d.b.FILTER:this.dropFilter(d.a.draggingFilter(),t);break;case d.b.SPLIT:this.dropSplit(d.a.draggingSplit(),t)}}),Object(l.a)(this,"appendFilter",e=>{const{essence:t}=this.context,{addPartialFilter:s}=this.props;s(e,u.a.insertAt(t.filter.length()))}),Object(l.a)(this,"removeFilter",e=>{const{essence:t,clicker:s}=this.context;s.changeFilter(t.filter.removeClause(e.reference)),this.closeOverflowMenu()})}maxItems(){const{essence:{filter:e}}=this.context,{menuStage:t}=this.props;return t&&Object(p.b)(t.width,e.length())}canDrop(){const{essence:{filter:e}}=this.context;switch(d.a.dragging.type){case d.b.DIMENSION:return!e.getClauseForDimension(d.a.draggingDimension());case d.b.SPLIT:return!e.clauseForReference(d.a.draggingSplit().reference);case d.b.FILTER:return!0;case d.b.MEASURE:case d.b.SERIES:case d.b.NONE:return!1}}calculateDragPosition(e){const{essence:t}=this.context,s=t.filter.length(),a=this.items.current.getBoundingClientRect(),n=Object(h.f)(e)-a.left,i=u.a.calculateFromOffset(n,s,m.d,m.c);return i.replace===this.maxItems()?u.a.insertAt(i.replace):i}dropSplit(e,t){const{essence:{dataCube:{dimensions:s}}}=this.context,a=Object(c.d)(s,e.reference);this.dropDimension(a,t)}dropDimension(e,t){const{essence:{filter:s,dataCube:a}}=this.context,{addPartialFilter:n}=this.props;let i=!1;if(t.isReplace()){const e=s.clauses.get(t.replace);if(i=e&&e.reference===Object(o.h)(a),i)return}n(e,t)}dropFilter(e,t){const{clicker:s,essence:{filter:a}}=this.context,n=t.isReplace()?a.replaceByIndex(t.replace,e):a.insertByIndex(t.insert,e);a.equals(n)||s.changeFilter(n)}render(){const{dragPosition:e,openedClause:t,overflowOpen:s}=this.state,{menuStage:a,timekeeper:i,locale:r,partialFilter:l,removePartialFilter:o}=this.props,{essence:c,clicker:u}=this.context;return n.a.createElement("div",{className:"tile-row filter-tile-row",onDragEnter:this.dragEnter},n.a.createElement("div",{className:"title"},m.m.filter),n.a.createElement("div",{className:"items",ref:this.items},n.a.createElement(Ke,{menuStage:a,maxItems:this.maxItems(),essence:c,clicker:u,timekeeper:i,locale:r,removeFilter:this.removeFilter,openFilterMenu:this.openFilterMenu,closeFilterMenu:this.closeFilterMenu,dragStart:this.dragStart,removePartialFilter:o,partialFilter:l,overflowOpen:s,closeOverflowMenu:this.closeOverflowMenu,openedFilterMenu:t,openOverflowMenu:this.openOverflowMenu})),n.a.createElement(v,{menuStage:a,essence:c,appendFilter:this.appendFilter}),n.a.createElement(f.a,{dragOver:this.dragOver,dragLeave:this.dragLeave,drop:this.drop,dragPosition:e}))}}Object(l.a)(Xe,"contextType",g.a);var We=s(55),_e=s(522);class He extends n.a.Component{onResolutionClick(e){const{clicker:t}=this.props,{adjustment:{splits:s,series:a}}=e;null!=a&&t.changeSeriesList(a),null!=s&&t.changeSplits(s,We.b.KeepAlways)}render(){const{essence:e}=this.props,{visResolve:t}=e;if(!t.isManual())return null;const s=t.resolutions.map((e,t)=>n.a.createElement("li",{className:"resolution-item",key:t,onClick:this.onResolutionClick.bind(this,e)},e.description));return n.a.createElement(_e.a,{title:t.message},n.a.createElement("ul",{className:"manual-fallback"},s))}}var Je=s(31),Ye=s(94),$e=s(161),Ze=s(16);const et=e=>{const{appendMeasureSeries:t,menuStage:s,essence:{dataCube:a,series:i}}=e,r=Object(Ze.a)(a.measures).filter(e=>!i.hasMeasure(e)).map(e=>({key:e.name,label:e.title,value:e}));return n.a.createElement(b.a,{containerStage:s,onSelect:t,tiles:r})};var tt=s(93),st=s(111),at=s(65),nt=s(28),it=s(59),rt=s(192),lt=s(32);function ot(e,t){switch(e.type){case lt.e.DEFAULT:return t;case lt.e.EXACT:return lt.h;case lt.e.PERCENT:return lt.j;case lt.e.CUSTOM:return e.value}}const ct=({format:e,measure:t,formatChange:s})=>{const a=t.format,i=Object(H.d)({name:"Default",identity:a},a!==lt.h&&{name:"Exact",identity:lt.h},{name:"Percent",identity:lt.j});return n.a.createElement(n.a.Fragment,null,n.a.createElement(ye.a,{presets:i,title:m.m.format,selected:ot(e,a),placeholder:"Custom format e.g. "+lt.i,onChange:function(e){s(function(e,t){switch(e){case t:return lt.a;case lt.h:return lt.b;case lt.j:return lt.c;default:return Object(lt.f)(e)}}(e,a))}}),e.type===lt.e.CUSTOM&&n.a.createElement("div",{className:"format-hint"},"You can use custom numbro format to present measure values. Please refer to the ",n.a.createElement("a",{target:"_blank",className:"documentation-link",href:"https://numbrojs.com/old-format.html"},"numbro documentation")),n.a.createElement("div",{className:"preview"},n.a.createElement("span",{className:"value"},23667.25431," → "),n.a.createElement("span",{className:"formatted"},Object(lt.k)(e,t)(23667.25431))))},ut=[{id:nt.a.ADD,label:"Add"},{id:nt.a.SUBTRACT,label:"Subtract"},{id:nt.a.MULTIPLY,label:"Multiply"},{id:nt.a.DIVIDE,label:"Divide"}],mt=e=>e.label,ht=e=>e.title,dt=e=>e?e.title:"Select measure";const pt=e=>{const{measure:t,measures:s,initialSeries:a,series:i,seriesList:r,onChange:l}=e;function o(e){l(e,function({expression:e}){return e instanceof tt.a&&Object(V.o)(e.reference)}(e))}const c=r.removeSeries(a).getSeriesWithKey(i.key()),u=i.expression,m=ut.find(e=>e.id===u.operation),h=Object(Ze.e)(s,u.reference),d=Object(H.r)(s.byName).filter(e=>e.name!==t.name&&!Object(it.c)(e));return n.a.createElement(n.a.Fragment,null,n.a.createElement("div",{className:"operation-select__title"},"Select operation"),n.a.createElement(L.a,{className:"operation-select",items:ut,renderItem:mt,equal:(e,t)=>e.id===t.id,selectedItem:m,onSelect:function({id:e}){o(i.setIn(["expression","operation"],e))}}),n.a.createElement("div",{className:"operand-select__title"},"Select measure"),n.a.createElement(L.a,{className:"operand-select",items:d,renderItem:ht,renderSelectedItem:dt,equal:(e,t)=>e.name===t.name,selectedItem:h,onSelect:function({name:e}){o(i.setIn(["expression","reference"],e))}}),c&&n.a.createElement("div",{className:"arithmetic-operation-warning"},'"',function(e,t,s){return new rt.a(e,t,s).title()}(c,t,s),'" is already defined'),n.a.createElement(ct,{measure:t,format:i.format,formatChange:function(e){o(i.set("format",e))}}))},gt=({measure:e,series:t,onChange:s})=>n.a.createElement(n.a.Fragment,null,n.a.createElement(ct,{measure:e,format:t.format,formatChange:function(e){s(t.set("format",e),!0)}})),ft=[{id:nt.a.PERCENT_OF_PARENT,label:"Percent of parent"},{id:nt.a.PERCENT_OF_TOTAL,label:"Percent of total"}];const bt=e=>e.label,vt=({series:e,seriesList:t,measure:s,onChange:a})=>{const i=t.getExpressionSeriesFor(s.name).filter(t=>!t.equals(e)).filter(e=>e.expression instanceof st.a).map(e=>e.expression.operation).toSet();function r(e){a(e,function(e){return e.expression instanceof st.a}(e))}return n.a.createElement(n.a.Fragment,null,n.a.createElement(L.a,{className:"percent-operation-picker",items:ft.filter(({id:e})=>!i.has(e)),renderItem:bt,renderSelectedItem:bt,equal:(e,t)=>e.id===t.id,selectedItem:e.expression&&ft.find(t=>t.id===e.expression.operation),onSelect:function({id:t}){var s;r(e.set("expression",(s=t,new st.a({operation:s}))))}}),n.a.createElement(ct,{measure:s,format:e.format,formatChange:function(t){r(e.set("format",t))}}))};var St=s(536);function Et(e){const t=parseFloat(e);return isNaN(t)?0:t}function Ot(e){return e.toString()}const Ct=e=>n.a.createElement(St.a,Object.assign({},e,{parseCustomValue:Et,formatCustomValue:Ot})),jt=[{identity:50,name:"50"},{identity:75,name:"75"},{identity:90,name:"90"},{identity:95,name:"95"},{identity:99,name:"99"}],kt=({seriesList:e,initialSeries:t,measure:s,series:a,onChange:i})=>{const r=e.removeSeries(t);function l(e){return e.percentile<=0||e.percentile>=100